Skip to content

Commit fc7a10a

Browse files
authored
Merge pull request #13 from Appdynamics/2.1.0
2.1.0
2 parents 090d277 + 1f21179 commit fc7a10a

30 files changed

+471
-1593
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# AppDynamics Extensions SDK CHANGELOG
22

3+
## 2.1.0 - Apr 5, 2018
4+
1. Extracted Configuration and Context from the MonitorConfiguration and dissolved it.
5+
2. onConfigReload(File file) will now have access to configuration and context after the refactoring.
6+
37
## 2.0.4 - Mar 13, 2018
48
1. Implemented mutual SSL Authentication
59

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
<groupId>com.appdynamics</groupId>
2121
<artifactId>appd-exts-commons</artifactId>
22-
<version>2.0.4</version>
22+
<version>2.1.0</version>
2323
<packaging>jar</packaging>
2424
<name>extension-utils</name>
2525
<properties>

src/main/java/com/appdynamics/extensions/ABaseMonitor.java

Lines changed: 48 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@
1515

1616
package com.appdynamics.extensions;
1717

18-
import com.appdynamics.extensions.conf.MonitorConfiguration;
18+
import com.appdynamics.extensions.conf.MonitorContextConfiguration;
19+
import com.appdynamics.extensions.conf.MonitorContext;
20+
import com.appdynamics.extensions.file.FileWatchListener;
21+
import com.appdynamics.extensions.util.AssertUtils;
22+
import com.appdynamics.extensions.util.PathResolver;
1923
import com.singularity.ee.agent.systemagent.api.AManagedMonitor;
2024
import com.singularity.ee.agent.systemagent.api.TaskExecutionContext;
2125
import com.singularity.ee.agent.systemagent.api.TaskOutput;
@@ -35,7 +39,7 @@
3539
* <p>An {@code ABaseMonitor} is a wrapper on top of
3640
* {@link AManagedMonitor} to remove the boiler plate code of
3741
* creating a {@link AMonitorJob} and initializing the
38-
* {@link MonitorConfiguration}.
42+
* {@link MonitorContextConfiguration}.
3943
*
4044
* <p>The MA or SIM agent loads all the {@link AManagedMonitor}s
4145
* from their respective subdirectories in the monitors directory
@@ -87,11 +91,13 @@ public abstract class ABaseMonitor extends AManagedMonitor{
8791
*/
8892
protected String monitorName;
8993

94+
private File installDir;
95+
9096
/**
91-
* A configuration object that reads the monitor's config file
97+
* A contextConfiguration object that reads the monitor's config file
9298
* and initializes the different bits required by the monitor.
9399
*/
94-
protected MonitorConfiguration configuration;
100+
private MonitorContextConfiguration contextConfiguration;
95101

96102
/**
97103
* A runnable which does all the leg work for fetching the
@@ -104,21 +110,39 @@ public ABaseMonitor(){
104110
logger.info("Using {} Version [{}]",monitorName, getImplementationVersion());
105111
}
106112

107-
protected void initialize(Map<String, String> args) {
108-
if(configuration == null){
113+
protected void initialize(final Map<String, String> args) {
114+
if(contextConfiguration == null){
115+
installDir = getInstallDirectory();
109116
monitorJob = createMonitorJob();
110-
MonitorConfiguration conf = new MonitorConfiguration(monitorName,getDefaultMetricPrefix(), monitorJob);
111-
conf.setConfigYml(args.get("config-file"), new MonitorConfiguration.FileWatchListener() {
112-
@Override
113-
public void onFileChange(File file) {
114-
onConfigReload(file);
115-
}
116-
});
117-
initializeMoreStuff(args, conf);
118-
this.configuration = conf;
117+
contextConfiguration = createContextConfiguration();
118+
contextConfiguration.registerListener(args.get("config-file"), createYmlFileListener(args.get("config-file")));
119+
initializeMoreStuff(args);
119120
}
120121
}
121122

123+
private FileWatchListener createYmlFileListener(final String ymlFile) {
124+
FileWatchListener fileWatchListener = new FileWatchListener() {
125+
@Override
126+
public void onFileChange(File file) {
127+
contextConfiguration.setConfigYml(ymlFile);
128+
onConfigReload(file);
129+
}
130+
};
131+
return fileWatchListener;
132+
}
133+
134+
private File getInstallDirectory() {
135+
File installDir = PathResolver.resolveDirectory(AManagedMonitor.class);
136+
if(installDir == null){
137+
throw new RuntimeException("The install directory cannot be null");
138+
}
139+
return installDir;
140+
}
141+
142+
private MonitorContextConfiguration createContextConfiguration() {
143+
return new MonitorContextConfiguration(getMonitorName(), getDefaultMetricPrefix(), installDir, monitorJob);
144+
}
145+
122146
protected void onConfigReload(File file){};
123147

124148
protected AMonitorJob createMonitorJob() {
@@ -128,9 +152,9 @@ protected AMonitorJob createMonitorJob() {
128152
/**
129153
* A placeholder method which should be overridden if there are
130154
* custom objects to be initialized in the monitor.
131-
* @param conf
155+
* @param args
132156
*/
133-
protected void initializeMoreStuff(Map<String, String> args, MonitorConfiguration conf) {
157+
protected void initializeMoreStuff(Map<String, String> args) {
134158
;
135159
}
136160

@@ -154,8 +178,10 @@ public TaskOutput execute(Map<String, String> args, TaskExecutionContext taskExe
154178
}
155179

156180
protected void executeMonitor() {
157-
if(configuration.isEnabled()){
158-
if(configuration.isScheduledModeEnabled()){ //scheduled mode
181+
if(contextConfiguration.isEnabled()){
182+
MonitorContext context = contextConfiguration.getContext();
183+
AssertUtils.assertNotNull(context, "The context of the extension has not been initialised!!!! Please check your contextConfiguration");
184+
if(context.isScheduledModeEnabled()){ //scheduled mode
159185
logger.debug("Task scheduler is enabled, printing the metrics from the cache");
160186
monitorJob.printAllFromCache();
161187
}
@@ -175,8 +201,8 @@ protected static String getImplementationVersion() {
175201

176202
public abstract String getMonitorName();
177203

178-
public MonitorConfiguration getConfiguration(){
179-
return configuration;
204+
public MonitorContextConfiguration getContextConfiguration() {
205+
return contextConfiguration;
180206
}
181207

182208
protected abstract void doRun(TasksExecutionServiceProvider tasksExecutionServiceProvider);
@@ -186,4 +212,5 @@ public MonitorConfiguration getConfiguration(){
186212
protected void onComplete() {
187213
logger.info("Finished processing all tasks in the job for {}",getMonitorName());
188214
}
215+
189216
}

src/main/java/com/appdynamics/extensions/AMonitorJob.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public void run() {
4545
}
4646

4747
public void printAllFromCache() {
48-
ConcurrentMap<String, Metric> map = baseMonitor.configuration.getCachedMetrics();
48+
ConcurrentMap<String, Metric> map = baseMonitor.getContextConfiguration().getContext().getCachedMetrics();
4949
Set<String> keys;
5050
if (map != null && (keys = map.keySet()) != null) {
5151
for (String key : keys) {

src/main/java/com/appdynamics/extensions/MetricWriteHelper.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,15 @@ protected MetricWriteHelper() {
5454
public MetricWriteHelper(ABaseMonitor baseMonitor) {
5555
AssertUtils.assertNotNull(baseMonitor, "The ABaseMonitor instance cannot be null");
5656
this.baseMonitor = baseMonitor;
57-
derivedMetricsCalculator = baseMonitor.getConfiguration().createDerivedMetricsCalculator();
57+
derivedMetricsCalculator = baseMonitor.getContextConfiguration().getContext().createDerivedMetricsCalculator();
5858
}
5959

6060
public void printMetric(String metricPath, String metricValue, String aggregationType, String timeRollup, String clusterRollup) {
6161
if (validateStrings(metricPath, metricValue, timeRollup, clusterRollup) && isValidMetricValue(metricValue)) {
62-
if (baseMonitor.getConfiguration().isScheduledModeEnabled()) {
62+
if (baseMonitor.getContextConfiguration().getContext().isScheduledModeEnabled()) {
6363
Metric metric = new Metric(MetricPathUtils.getMetricName(metricPath), metricValue, metricPath, aggregationType, timeRollup, clusterRollup);
6464
logger.debug("Scheduled mode is enabled, caching the metric {}", metric);
65-
baseMonitor.getConfiguration().putInMetricCache(metricPath, metric);
65+
baseMonitor.getContextConfiguration().getContext().putInMetricCache(metricPath, metric);
6666
} else {
6767
MetricWriter metricWriter = getMetricWriter(metricPath, aggregationType, timeRollup, clusterRollup);
6868
metricWriter.printMetric(metricValue);
@@ -71,7 +71,7 @@ public void printMetric(String metricPath, String metricValue, String aggregatio
7171
}
7272
if (cacheMetrics) {
7373
Metric metric = new Metric(MetricPathUtils.getMetricName(metricPath), metricValue, metricPath, aggregationType, timeRollup, clusterRollup);
74-
baseMonitor.getConfiguration().putInMetricCache(metricPath, metric);
74+
baseMonitor.getContextConfiguration().getContext().putInMetricCache(metricPath, metric);
7575
}
7676
}
7777
addForDerivedMetricsCalculation(metricPath, metricValue);
@@ -117,10 +117,10 @@ public void printMetric(String metricPath, BigDecimal value, String metricType)
117117
}
118118

119119
public MetricWriter getMetricWriter(String metricPath, String aggregationType, String timeRollup, String clusterRollup) {
120-
MetricWriter writer = baseMonitor.getConfiguration().getFromWriterCache(metricPath);
120+
MetricWriter writer = baseMonitor.getContextConfiguration().getContext().getFromWriterCache(metricPath);
121121
if (writer == null) {
122122
writer = baseMonitor.getMetricWriter(metricPath, aggregationType, timeRollup, clusterRollup);
123-
baseMonitor.getConfiguration().putInWriterCache(metricPath, writer);
123+
baseMonitor.getContextConfiguration().getContext().putInWriterCache(metricPath, writer);
124124
}
125125
return writer;
126126
}
@@ -189,7 +189,7 @@ private String[] createMetricType(String metricType) {
189189
}
190190

191191
public Set<String> getMetricPaths() {
192-
ConcurrentMap<String, Metric> map = baseMonitor.configuration.getCachedMetrics();
192+
ConcurrentMap<String, Metric> map = baseMonitor.getContextConfiguration().getContext().getCachedMetrics();
193193
if(map != null){
194194
return map.keySet();
195195
}

src/main/java/com/appdynamics/extensions/MetricWriteHelperFactory.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@
1515

1616
package com.appdynamics.extensions;
1717

18-
import com.appdynamics.extensions.conf.MonitorConfiguration;
1918
import com.appdynamics.extensions.workbench.metric.WorkbenchMetricStore;
2019
import org.slf4j.Logger;
2120
import org.slf4j.LoggerFactory;
2221

22+
import static com.appdynamics.extensions.conf.MonitorContext.isWorkbenchMode;
23+
2324
/**
2425
* Created by abey.tom on 3/20/16.
2526
*/
@@ -28,7 +29,7 @@ public class MetricWriteHelperFactory {
2829

2930
public static MetricWriteHelper create(ABaseMonitor baseMonitor) {
3031
MetricWriteHelper helper;
31-
if (MonitorConfiguration.isWorkbenchMode()) {
32+
if (isWorkbenchMode()) {
3233
helper = WorkbenchMetricStore.getInstance();
3334
} else {
3435
helper = new MetricWriteHelper(baseMonitor);

src/main/java/com/appdynamics/extensions/TaskInputArgs.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,7 @@ public class TaskInputArgs {
3434
public static final String URI = "uri";
3535
public static final String PORT = "port";
3636
public static final String USE_SSL = "useSsl";
37-
public static final String DISABLE_SSL_CERT_VALIDATION = "disable-ssl-cert-validation";
3837
public static final String METRIC_PREFIX = "metric-prefix";
39-
public static final String TRUST_STORE_FILE = "trust-store-file";
40-
public static final String TRUST_STORE_PWD = "trust-store-password";
41-
public static final String SSL_VERIFY_HOSTNAME = "ssl-verify-hostname";
42-
public static final String PROXY_URI = "proxy-uri";
43-
public static final String PROXY_HOST = "proxy-host";
44-
public static final String PROXY_PORT = "proxy-port";
45-
public static final String PROXY_USER = "proxy-username";
46-
public static final String PROXY_PASSWORD = "proxy-password";
47-
public static final String PROXY_PASSWORD_ENCRYPTED = "proxy-password-encrypted";
48-
public static final String PROXY_USE_SSL = "proxy-use-ssl";
49-
public static final String PROXY_AUTH_TYPE = "proxy-auth-type";
5038
public static final String ENCRYPTION_KEY = "encryptionKey";
5139
public static final String SSL_PROTOCOL = "sslProtocols";
5240

src/main/java/com/appdynamics/extensions/TasksExecutionServiceProvider.java

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,9 @@
1515

1616
package com.appdynamics.extensions;
1717

18-
import com.appdynamics.extensions.conf.MonitorConfiguration;
19-
import org.apache.commons.httpclient.util.ExceptionUtil;
20-
import org.apache.http.util.ExceptionUtils;
2118
import org.slf4j.Logger;
2219
import org.slf4j.LoggerFactory;
2320

24-
import java.io.PrintWriter;
25-
import java.io.StringWriter;
2621
import java.util.concurrent.atomic.AtomicInteger;
2722

2823
/*
@@ -46,7 +41,7 @@ public TasksExecutionServiceProvider(ABaseMonitor aBaseMonitor, MetricWriteHelpe
4641

4742

4843
public void submit(final String name, final AMonitorTaskRunnable aServerTask){
49-
aBaseMonitor.getConfiguration().getExecutorService().submit(name,new Runnable() {
44+
aBaseMonitor.getContextConfiguration().getContext().getExecutorService().submit(name,new Runnable() {
5045
@Override
5146
public void run() {
5247
try{
@@ -73,8 +68,4 @@ private void onRunComplete(){
7368
public MetricWriteHelper getMetricWriteHelper() {
7469
return this.metricWriteHelper;
7570
}
76-
77-
public MonitorConfiguration getMonitorConfiguration(){
78-
return this.aBaseMonitor.configuration;
79-
}
8071
}

0 commit comments

Comments
 (0)