1 package org.kuali.common.deploy.monitoring.spring;
2
3 import org.kuali.common.deploy.DeployContext;
4 import org.kuali.common.deploy.Deployable;
5 import org.kuali.common.deploy.channel.spring.DefaultSecureChannelConfig;
6 import org.kuali.common.deploy.monitoring.AppDynamicsMonitoring;
7 import org.kuali.common.deploy.monitoring.MachineAgent;
8 import org.kuali.common.deploy.monitoring.Monitoring;
9 import org.kuali.common.deploy.monitoring.ServerAgent;
10 import org.kuali.common.deploy.spring.DefaultDeployContextConfig;
11 import org.kuali.common.util.secure.channel.SecureChannel;
12 import org.kuali.common.util.spring.PropertySourceUtils;
13 import org.kuali.common.util.spring.SpringUtils;
14 import org.kuali.common.util.spring.env.EnvironmentService;
15 import org.kuali.common.util.spring.service.SpringServiceConfig;
16 import org.springframework.beans.factory.annotation.Autowired;
17 import org.springframework.context.annotation.Bean;
18 import org.springframework.context.annotation.Configuration;
19 import org.springframework.context.annotation.Import;
20 import org.springframework.core.env.ConfigurableEnvironment;
21
22 @Configuration
23 @Import({ DefaultDeployContextConfig.class, SpringServiceConfig.class, DefaultSecureChannelConfig.class })
24 public class AppDynamicsConfig implements MonitoringConfig {
25
26 @Autowired
27 DeployContext context;
28
29 @Autowired
30 EnvironmentService env;
31
32 @Autowired
33 ConfigurableEnvironment configurableEnvironment;
34
35 @Autowired
36 SecureChannel channel;
37
38 @Override
39 @Bean
40 public Monitoring applicationMonitoring() {
41 boolean enabled = env.getBoolean("monitoring.enabled", false);
42 AppDynamicsMonitoring adm = new AppDynamicsMonitoring();
43 adm.setUser(env.getString("tomcat.user"));
44 adm.setGroup(env.getString("tomcat.group"));
45 adm.setChannel(channel);
46 adm.setMachineAgent(getMachineAgent());
47 adm.setServerAgent(getServerAgent());
48 adm.setEnabled(enabled);
49 adm.setFilterProperties(PropertySourceUtils.getAllEnumerableProperties(configurableEnvironment));
50 return adm;
51 }
52
53 protected Deployable getMachineAgentController() {
54 String local = env.getString("appdynamics.ma.controller.local");
55 String remote = env.getString("appdynamics.ma.controller");
56 return new Deployable.Builder(local, remote).filter(true).build();
57 }
58
59 protected Deployable getServerAgentController() {
60 String local = env.getString("appdynamics.sa.controller.local");
61 String remote = env.getString("appdynamics.sa.controller");
62 return new Deployable.Builder(local, remote).filter(true).build();
63 }
64
65 protected MachineAgent getMachineAgent() {
66 MachineAgent agent = new MachineAgent();
67 agent.setStartupCommand(env.getString("appdynamics.ma.cmd"));
68 agent.setBaseDir(env.getString("appdynamics.ma.base"));
69 agent.setTmpDir(env.getString("appdynamics.ma.tmp"));
70 agent.setLogsDir(env.getString("appdynamics.ma.logs"));
71 agent.setController(getMachineAgentController());
72 agent.setLogFile(env.getString("appdynamics.ma.logFile"));
73 agent.setStartupToken(env.getString("appdynamics.ma.logFile.startupToken"));
74 agent.setStartupTimeoutMillis(new Long(SpringUtils.getMillis(env, "appdynamics.ma.logFile.monitor.timeout", "5m")).intValue());
75 agent.setLogFileIntervalMillis(new Long(SpringUtils.getMillis(env, "appdynamics.ma.logFile.monitor.interval", "500ms")).intValue());
76 agent.setLogFileEncoding(env.getString("appdynamics.ma.logFile.encoding"));
77 return agent;
78 }
79
80 protected ServerAgent getServerAgent() {
81 String startupOptions = env.getString("appdynamics.sa.tomcat.java.options");
82 String baseDir = env.getString("appdynamics.sa.base");
83 String logsDir = env.getString("appdynamics.sa.logs");
84 Deployable controller = getServerAgentController();
85 return new ServerAgent(startupOptions, controller, baseDir, logsDir);
86 }
87
88 }