Skip to content

Commit

Permalink
parseInt if string and fallback to default if unable to parse & tests
Browse files Browse the repository at this point in the history
  • Loading branch information
tbavelier committed Aug 23, 2024
1 parent 76f0a04 commit 34f18af
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/main/java/org/datadog/jmxfetch/Instance.java
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,13 @@ public Instance(
Object maxReturnedMetrics = this.instanceMap.get("max_returned_metrics");
if (maxReturnedMetrics == null) {
this.maxReturnedMetrics = MAX_RETURNED_METRICS;
} else if (maxReturnedMetrics instanceof String) {
try {
this.maxReturnedMetrics = Integer.parseInt((String) maxReturnedMetrics);
} catch (NumberFormatException e) {
log.warn("Cannot convert max_returned_metrics to integer in your instance configuration. Defaulting to '{}'.", MAX_RETURNED_METRICS);
this.maxReturnedMetrics = MAX_RETURNED_METRICS;
}
} else {
this.maxReturnedMetrics = (Integer) maxReturnedMetrics;
}
Expand Down
25 changes: 25 additions & 0 deletions src/test/java/org/datadog/jmxfetch/TestInstance.java
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,31 @@ public void testBaselineDefaultHostname() throws Exception {
}
}

@Test
public void testParsableMaxReturnedMetrics() throws Exception {
SimpleTestJavaApp testApp = new SimpleTestJavaApp();
// Populate testApp with a lot of metrics (>350) !
testApp.populateHashMap(400);
// Exposing a few metrics through JMX
registerMBean(testApp, "org.datadog.jmxfetch.test:type=ParsableMaxReturnedMetricsTest");
initApplication("jmx_parsable_max_returned_metrics_string.yaml");
run();

List<Map<String, Object>> metrics = getMetrics();
assertEquals(429, metrics.size());
}

@Test
public void testNonParsableMaxReturnedMetrics() throws Exception {
registerMBean(new SimpleTestJavaApp(), "org.datadog.jmxfetch.test:type=NonParsableMaxReturnedMetricsTest");
initApplication("jmx_non_parsable_max_returned_metrics_string.yaml");
run();

// Despite non parsable max_returned_metrics, metrics should still be collected.
List<Map<String, Object>> metrics = getMetrics();
assertEquals(29, metrics.size());
}

// assertServiceTags is used by testServiceTagGlobal and testServiceTagInstanceOverride
private void assertServiceTag(List<String> tagList, List<String> services) throws Exception {
for (String service: services) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
init_config:

instances:
- process_name_regex: .*surefire.*
name: jmx_test_instance
max_returned_metrics: "foo"
conf:
- include:
domain: org.datadog.jmxfetch.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
init_config:

instances:
- process_name_regex: .*surefire.*
name: jmx_test_instance
max_returned_metrics: "500"
conf:
- include:
domain: org.datadog.jmxfetch.test

0 comments on commit 34f18af

Please sign in to comment.