001 package org.kuali.common.deploy.monitoring.spring;
002
003 import org.kuali.common.deploy.DeployContext;
004 import org.kuali.common.deploy.Deployable;
005 import org.kuali.common.deploy.channel.spring.DefaultSecureChannelConfig;
006 import org.kuali.common.deploy.monitoring.AppDynamicsMonitoring;
007 import org.kuali.common.deploy.monitoring.MachineAgent;
008 import org.kuali.common.deploy.monitoring.Monitoring;
009 import org.kuali.common.deploy.monitoring.ServerAgent;
010 import org.kuali.common.deploy.spring.DefaultDeployContextConfig;
011 import org.kuali.common.util.secure.channel.SecureChannel;
012 import org.kuali.common.util.spring.PropertySourceUtils;
013 import org.kuali.common.util.spring.SpringUtils;
014 import org.kuali.common.util.spring.env.EnvironmentService;
015 import org.kuali.common.util.spring.service.SpringServiceConfig;
016 import org.springframework.beans.factory.annotation.Autowired;
017 import org.springframework.context.annotation.Bean;
018 import org.springframework.context.annotation.Configuration;
019 import org.springframework.context.annotation.Import;
020 import org.springframework.core.env.ConfigurableEnvironment;
021
022 @Configuration
023 @Import({ DefaultDeployContextConfig.class, SpringServiceConfig.class, DefaultSecureChannelConfig.class })
024 public class AppDynamicsConfig implements MonitoringConfig {
025
026 @Autowired
027 DeployContext context;
028
029 @Autowired
030 EnvironmentService env;
031
032 @Autowired
033 ConfigurableEnvironment configurableEnvironment;
034
035 @Autowired
036 SecureChannel channel;
037
038 @Override
039 @Bean
040 public Monitoring applicationMonitoring() {
041 boolean enabled = env.getBoolean("monitoring.enabled", false);
042 AppDynamicsMonitoring adm = new AppDynamicsMonitoring();
043 adm.setUser(env.getString("tomcat.user"));
044 adm.setGroup(env.getString("tomcat.group"));
045 adm.setChannel(channel);
046 adm.setMachineAgent(getMachineAgent());
047 adm.setServerAgent(getServerAgent());
048 adm.setEnabled(enabled);
049 adm.setFilterProperties(PropertySourceUtils.getAllEnumerableProperties(configurableEnvironment));
050 return adm;
051 }
052
053 protected Deployable getMachineAgentController() {
054 String local = env.getString("appdynamics.ma.controller.local");
055 String remote = env.getString("appdynamics.ma.controller");
056 return new Deployable.Builder(local, remote).filter(true).build();
057 }
058
059 protected Deployable getServerAgentController() {
060 String local = env.getString("appdynamics.sa.controller.local");
061 String remote = env.getString("appdynamics.sa.controller");
062 return new Deployable.Builder(local, remote).filter(true).build();
063 }
064
065 protected MachineAgent getMachineAgent() {
066 MachineAgent agent = new MachineAgent();
067 agent.setStartupCommand(env.getString("appdynamics.ma.cmd"));
068 agent.setBaseDir(env.getString("appdynamics.ma.base"));
069 agent.setTmpDir(env.getString("appdynamics.ma.tmp"));
070 agent.setLogsDir(env.getString("appdynamics.ma.logs"));
071 agent.setController(getMachineAgentController());
072 agent.setLogFile(env.getString("appdynamics.ma.logFile"));
073 agent.setStartupToken(env.getString("appdynamics.ma.logFile.startupToken"));
074 agent.setStartupTimeoutMillis(new Long(SpringUtils.getMillis(env, "appdynamics.ma.logFile.monitor.timeout", "5m")).intValue());
075 agent.setLogFileIntervalMillis(new Long(SpringUtils.getMillis(env, "appdynamics.ma.logFile.monitor.interval", "500ms")).intValue());
076 agent.setLogFileEncoding(env.getString("appdynamics.ma.logFile.encoding"));
077 return agent;
078 }
079
080 protected ServerAgent getServerAgent() {
081 String startupOptions = env.getString("appdynamics.sa.tomcat.java.options");
082 String baseDir = env.getString("appdynamics.sa.base");
083 String logsDir = env.getString("appdynamics.sa.logs");
084 Deployable controller = getServerAgentController();
085 return new ServerAgent(startupOptions, controller, baseDir, logsDir);
086 }
087
088 }