From 0d4ed29ed757c30b46d4be905ef632c790e06b7c Mon Sep 17 00:00:00 2001 From: bluestix Date: Tue, 5 Apr 2016 15:05:13 -0700 Subject: [PATCH 1/2] Code cleanup to get rid of warnings --- pom.xml | 4 +- .../org/datadog/jmxfetch/Configuration.java | 1 - .../java/org/datadog/jmxfetch/Connection.java | 1 - .../java/org/datadog/jmxfetch/Filter.java | 3 +- .../java/org/datadog/jmxfetch/Status.java | 2 +- .../converter/ExitWatcherConverter.java | 3 +- .../jmxfetch/converter/ReporterConverter.java | 3 +- .../jmxfetch/converter/StatusConverter.java | 3 +- .../datadog/jmxfetch/reporter/Reporter.java | 11 ++- .../jmxfetch/reporter/ReporterFactory.java | 3 +- .../jmxfetch/reporter/StatsdReporter.java | 7 +- .../validator/Log4JLevelValidator.java | 6 +- .../java/org/datadog/jmxfetch/TestApp.java | 67 +++++++++---------- .../java/org/datadog/jmxfetch/TestCommon.java | 34 +++++----- .../datadog/jmxfetch/TestConfiguration.java | 8 ++- .../jmxfetch/TestParsingJCommander.java | 19 +++--- .../datadog/jmxfetch/TestServiceChecks.java | 14 ++-- 17 files changed, 96 insertions(+), 93 deletions(-) diff --git a/pom.xml b/pom.xml index 840763598..6e3aba0d3 100644 --- a/pom.xml +++ b/pom.xml @@ -1,4 +1,6 @@ - + 4.0.0 datadog diff --git a/src/main/java/org/datadog/jmxfetch/Configuration.java b/src/main/java/org/datadog/jmxfetch/Configuration.java index 053bc40c0..3e42559ea 100644 --- a/src/main/java/org/datadog/jmxfetch/Configuration.java +++ b/src/main/java/org/datadog/jmxfetch/Configuration.java @@ -1,7 +1,6 @@ package org.datadog.jmxfetch; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; diff --git a/src/main/java/org/datadog/jmxfetch/Connection.java b/src/main/java/org/datadog/jmxfetch/Connection.java index bfab57be1..1eb5f349a 100644 --- a/src/main/java/org/datadog/jmxfetch/Connection.java +++ b/src/main/java/org/datadog/jmxfetch/Connection.java @@ -19,7 +19,6 @@ import javax.management.MBeanAttributeInfo; import javax.management.MBeanException; import javax.management.MBeanServerConnection; -import javax.management.ObjectInstance; import javax.management.ObjectName; import javax.management.ReflectionException; import javax.management.remote.JMXConnector; diff --git a/src/main/java/org/datadog/jmxfetch/Filter.java b/src/main/java/org/datadog/jmxfetch/Filter.java index 01970140f..bf14d9df2 100644 --- a/src/main/java/org/datadog/jmxfetch/Filter.java +++ b/src/main/java/org/datadog/jmxfetch/Filter.java @@ -1,9 +1,8 @@ package org.datadog.jmxfetch; -import java.util.HashMap; import java.util.ArrayList; +import java.util.HashMap; import java.util.Set; -import java.lang.ClassCastException; import java.util.regex.Pattern; diff --git a/src/main/java/org/datadog/jmxfetch/Status.java b/src/main/java/org/datadog/jmxfetch/Status.java index 268814f7a..ee5e4c9da 100644 --- a/src/main/java/org/datadog/jmxfetch/Status.java +++ b/src/main/java/org/datadog/jmxfetch/Status.java @@ -4,9 +4,9 @@ import java.util.HashMap; import java.util.LinkedList; +import org.apache.commons.io.FileUtils; import org.apache.log4j.Logger; import org.yaml.snakeyaml.Yaml; -import org.apache.commons.io.FileUtils; public class Status { diff --git a/src/main/java/org/datadog/jmxfetch/converter/ExitWatcherConverter.java b/src/main/java/org/datadog/jmxfetch/converter/ExitWatcherConverter.java index 9d22372ad..071e2c1c6 100644 --- a/src/main/java/org/datadog/jmxfetch/converter/ExitWatcherConverter.java +++ b/src/main/java/org/datadog/jmxfetch/converter/ExitWatcherConverter.java @@ -1,8 +1,9 @@ package org.datadog.jmxfetch.converter; -import com.beust.jcommander.IStringConverter; import org.datadog.jmxfetch.ExitWatcher; +import com.beust.jcommander.IStringConverter; + public class ExitWatcherConverter implements IStringConverter { public ExitWatcher convert(String value) { diff --git a/src/main/java/org/datadog/jmxfetch/converter/ReporterConverter.java b/src/main/java/org/datadog/jmxfetch/converter/ReporterConverter.java index 3d81a7ae7..052da617b 100644 --- a/src/main/java/org/datadog/jmxfetch/converter/ReporterConverter.java +++ b/src/main/java/org/datadog/jmxfetch/converter/ReporterConverter.java @@ -1,9 +1,10 @@ package org.datadog.jmxfetch.converter; -import com.beust.jcommander.IStringConverter; import org.datadog.jmxfetch.reporter.Reporter; import org.datadog.jmxfetch.reporter.ReporterFactory; +import com.beust.jcommander.IStringConverter; + public class ReporterConverter implements IStringConverter { public Reporter convert(String value) { diff --git a/src/main/java/org/datadog/jmxfetch/converter/StatusConverter.java b/src/main/java/org/datadog/jmxfetch/converter/StatusConverter.java index 9201d366b..16a144595 100644 --- a/src/main/java/org/datadog/jmxfetch/converter/StatusConverter.java +++ b/src/main/java/org/datadog/jmxfetch/converter/StatusConverter.java @@ -1,8 +1,9 @@ package org.datadog.jmxfetch.converter; -import com.beust.jcommander.IStringConverter; import org.datadog.jmxfetch.Status; +import com.beust.jcommander.IStringConverter; + public class StatusConverter implements IStringConverter { public Status convert(String value) { diff --git a/src/main/java/org/datadog/jmxfetch/reporter/Reporter.java b/src/main/java/org/datadog/jmxfetch/reporter/Reporter.java index e99f92bcc..a438eea6b 100644 --- a/src/main/java/org/datadog/jmxfetch/reporter/Reporter.java +++ b/src/main/java/org/datadog/jmxfetch/reporter/Reporter.java @@ -1,15 +1,14 @@ package org.datadog.jmxfetch.reporter; +import java.util.Arrays; +import java.util.HashMap; +import java.util.LinkedList; + +import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.datadog.jmxfetch.App; import org.datadog.jmxfetch.Instance; import org.datadog.jmxfetch.JMXAttribute; -import org.apache.commons.lang.StringUtils; - -import java.util.Arrays; -import java.util.HashMap; -import java.lang.Integer; -import java.util.LinkedList; public abstract class Reporter { diff --git a/src/main/java/org/datadog/jmxfetch/reporter/ReporterFactory.java b/src/main/java/org/datadog/jmxfetch/reporter/ReporterFactory.java index 5d628ce37..9e2d5c2dc 100644 --- a/src/main/java/org/datadog/jmxfetch/reporter/ReporterFactory.java +++ b/src/main/java/org/datadog/jmxfetch/reporter/ReporterFactory.java @@ -1,8 +1,9 @@ package org.datadog.jmxfetch.reporter; -import com.google.common.base.Joiner; import java.util.Arrays; +import com.google.common.base.Joiner; + public class ReporterFactory { public static Reporter getReporter(String type) { diff --git a/src/main/java/org/datadog/jmxfetch/reporter/StatsdReporter.java b/src/main/java/org/datadog/jmxfetch/reporter/StatsdReporter.java index 320d64a73..10f41681d 100644 --- a/src/main/java/org/datadog/jmxfetch/reporter/StatsdReporter.java +++ b/src/main/java/org/datadog/jmxfetch/reporter/StatsdReporter.java @@ -1,12 +1,13 @@ package org.datadog.jmxfetch.reporter; -import com.timgroup.statsd.NonBlockingStatsDClient; -import com.timgroup.statsd.StatsDClient; -import com.timgroup.statsd.ServiceCheck; import org.datadog.jmxfetch.Instance; import org.datadog.jmxfetch.JMXAttribute; import org.datadog.jmxfetch.Status; +import com.timgroup.statsd.NonBlockingStatsDClient; +import com.timgroup.statsd.ServiceCheck; +import com.timgroup.statsd.StatsDClient; + public class StatsdReporter extends Reporter { private StatsDClient statsDClient; diff --git a/src/main/java/org/datadog/jmxfetch/validator/Log4JLevelValidator.java b/src/main/java/org/datadog/jmxfetch/validator/Log4JLevelValidator.java index 54ae0af62..3130f0bc4 100644 --- a/src/main/java/org/datadog/jmxfetch/validator/Log4JLevelValidator.java +++ b/src/main/java/org/datadog/jmxfetch/validator/Log4JLevelValidator.java @@ -1,12 +1,12 @@ package org.datadog.jmxfetch.validator; +import java.util.Arrays; +import java.util.List; + import com.beust.jcommander.IParameterValidator; import com.beust.jcommander.ParameterException; import com.google.common.base.Joiner; -import java.util.Arrays; -import java.util.List; - public class Log4JLevelValidator implements IParameterValidator { public static final List LOG4J_LEVELS = Arrays.asList("ALL", "DEBUG", "ERROR", "FATAL", "INFO", "OFF", "TRACE", "LEVEL", "WARN"); diff --git a/src/test/java/org/datadog/jmxfetch/TestApp.java b/src/test/java/org/datadog/jmxfetch/TestApp.java index 4ad1646dc..000387878 100644 --- a/src/test/java/org/datadog/jmxfetch/TestApp.java +++ b/src/test/java/org/datadog/jmxfetch/TestApp.java @@ -1,22 +1,18 @@ package org.datadog.jmxfetch; -import org.datadog.jmxfetch.reporter.ConsoleReporter; -import org.junit.BeforeClass; -import org.junit.Test; - -import javax.management.MBeanServer; -import javax.management.ObjectName; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import java.io.File; -import java.lang.management.ManagementFactory; -import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; +import java.util.List; import java.util.Set; -import static org.junit.Assert.*; +import org.junit.Test; public class TestApp extends TestCommon { @@ -77,25 +73,24 @@ public void testCassandraBean() throws Exception { assertEquals(28, metrics.size()); // Assert compliancy with CASSANDRA-4009 - ArrayList tags = new ArrayList() {{ - add("type:ColumnFamily"); - add("keyspace:MyKeySpace"); - add("ColumnFamily:MyColumnFamily"); - add("jmx_domain:org.apache.cassandra.metrics"); - add("instance:jmx_first_instance"); - }}; + List tags = Arrays.asList( + "type:ColumnFamily", + "keyspace:MyKeySpace", + "ColumnFamily:MyColumnFamily", + "jmx_domain:org.apache.cassandra.metrics", + "instance:jmx_first_instance" + ); assertMetric("cassandra.pending_tasks.should_be100", tags, 5); // Default behavior - tags = new ArrayList() {{ - add("type:ColumnFamily"); - add("scope:MyColumnFamily"); - add("keyspace:MyKeySpace"); - add("jmx_domain:org.apache.cassandra.metrics"); - add("instance:jmx_second_instance"); - add("name:PendingTasks"); - }}; + tags = Arrays.asList( + "type:ColumnFamily", + "scope:MyColumnFamily", + "keyspace:MyKeySpace", + "jmx_domain:org.apache.cassandra.metrics", + "instance:jmx_second_instance", + "name:PendingTasks"); assertMetric("cassandra.metrics.should_be1000", tags, 6); } @@ -113,13 +108,12 @@ public void testCassandraDeprecatedBean() throws Exception { // 14 = 13 metrics from java.lang + 1 metric explicitly defined in the yaml config file assertEquals(14, metrics.size()); - ArrayList tags = new ArrayList() {{ - add("type:ColumnFamilies"); - add("keyspace:MyKeySpace"); - add("columnfamily:MyColumnFamily"); - add("jmx_domain:org.apache.cassandra.db"); - add("instance:jmx_test_instance"); - }}; + List tags = Arrays.asList( + "type:ColumnFamilies", + "keyspace:MyKeySpace", + "columnfamily:MyColumnFamily", + "jmx_domain:org.apache.cassandra.db", + "instance:jmx_test_instance"); assertMetric("cassandra.db.should_be100", tags, 5); } @@ -329,13 +323,12 @@ public void testApp() throws Exception { assertEquals(27, metrics.size()); // 27 = 13 metrics from java.lang + the 5 gauges we are explicitly collecting + the 9 gauges that is implicitly collected, see jmx.yaml in the test/resources folder // We test for the presence and the value of the metrics we want to collect - ArrayList commonTags = new ArrayList() {{ - add("instance:jmx_test_instance"); - add("env:stage"); - add("newTag:test"); - }}; + List commonTags = Arrays.asList( + "instance:jmx_test_instance", + "env:stage", + "newTag:test"); - assertMetric("this.is.100", 100.0, commonTags, new ArrayList() {{add("foo");add("gorch");add("bar:baz");}} , 8); + assertMetric("this.is.100", 100.0, commonTags, Arrays.asList("foo","gorch","bar:baz") , 8); assertMetric("jmx.org.datadog.jmxfetch.test.number_big", 1.2345678890123457E20, commonTags, 5); assertMetric("jmx.org.datadog.jmxfetch.test.long42424242",4.2424242E7, commonTags, 5); assertMetric("jmx.org.datadog.jmxfetch.test.int424242", 424242.0, commonTags, 5); diff --git a/src/test/java/org/datadog/jmxfetch/TestCommon.java b/src/test/java/org/datadog/jmxfetch/TestCommon.java index dc3665f9d..f6cbd7702 100644 --- a/src/test/java/org/datadog/jmxfetch/TestCommon.java +++ b/src/test/java/org/datadog/jmxfetch/TestCommon.java @@ -1,8 +1,8 @@ package org.datadog.jmxfetch; -import org.datadog.jmxfetch.reporter.ConsoleReporter; -import org.datadog.jmxfetch.reporter.Reporter; -import org.datadog.jmxfetch.util.CustomLogger; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import java.lang.management.ManagementFactory; import java.util.ArrayList; @@ -15,18 +15,20 @@ import javax.management.InstanceAlreadyExistsException; import javax.management.InstanceNotFoundException; -import javax.management.MalformedObjectNameException; import javax.management.MBeanRegistrationException; import javax.management.MBeanServer; +import javax.management.MalformedObjectNameException; import javax.management.NotCompliantMBeanException; import javax.management.ObjectName; + +import org.apache.log4j.Level; +import org.datadog.jmxfetch.reporter.ConsoleReporter; +import org.datadog.jmxfetch.reporter.Reporter; +import org.datadog.jmxfetch.util.CustomLogger; import org.junit.After; import org.junit.BeforeClass; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; + import com.beust.jcommander.JCommander; -import org.apache.log4j.Level; public class TestCommon { @@ -140,7 +142,7 @@ protected LinkedList> getServiceChecks(){ * * @return fail if the metric was not found */ - public void assertMetric(String name, Number value, Number lowerBound, Number upperBound, ArrayList commonTags, ArrayList additionalTags, int countTags){ + public void assertMetric(String name, Number value, Number lowerBound, Number upperBound, List commonTags, List additionalTags, int countTags){ List tags = new ArrayList(commonTags); tags.addAll(additionalTags); @@ -173,23 +175,23 @@ public void assertMetric(String name, Number value, Number lowerBound, Number up fail("Metric assertion failed (name: "+name+", value: "+value+", tags: "+tags+", #tags: "+countTags+")."); } - public void assertMetric(String name, Number value, ArrayList commonTags, ArrayList additionalTags, int countTags){ + public void assertMetric(String name, Number value, List commonTags, List additionalTags, int countTags){ assertMetric(name, value, -1, -1, commonTags, additionalTags, countTags); } - public void assertMetric(String name, Number lowerBound, Number upperBound, ArrayList commonTags, ArrayList additionalTags, int countTags){ + public void assertMetric(String name, Number lowerBound, Number upperBound, List commonTags, List additionalTags, int countTags){ assertMetric(name, -1, lowerBound, upperBound, commonTags, additionalTags, countTags); } - public void assertMetric(String name, Number value, ArrayList tags, int countTags){ + public void assertMetric(String name, Number value, List tags, int countTags){ assertMetric(name, value, tags, new ArrayList(), countTags); } - public void assertMetric(String name, Number lowerBound, Number upperBound, ArrayList tags, int countTags){ + public void assertMetric(String name, Number lowerBound, Number upperBound, List tags, int countTags){ assertMetric(name, lowerBound, upperBound, tags, new ArrayList(), countTags); } - public void assertMetric(String name, ArrayList tags, int countTags){ + public void assertMetric(String name, List tags, int countTags){ assertMetric(name, -1, tags, new ArrayList(), countTags); } @@ -204,8 +206,8 @@ public void assertCoverage(){ for (HashMap m: metrics) { String mName = (String) (m.get("name")); - Double mValue = (Double) (m.get("value")); - Set mTags = new HashSet(Arrays.asList((String[]) (m.get("tags")))); + //Double mValue = (Double) (m.get("value")); + //Set mTags = new HashSet(Arrays.asList((String[]) (m.get("tags")))); // Exclusion logic if (mName.startsWith("jvm.")) { diff --git a/src/test/java/org/datadog/jmxfetch/TestConfiguration.java b/src/test/java/org/datadog/jmxfetch/TestConfiguration.java index 96d80d59d..a8118e0a4 100644 --- a/src/test/java/org/datadog/jmxfetch/TestConfiguration.java +++ b/src/test/java/org/datadog/jmxfetch/TestConfiguration.java @@ -1,5 +1,8 @@ package org.datadog.jmxfetch; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -14,8 +17,6 @@ import org.junit.BeforeClass; import org.junit.Test; -import static org.junit.Assert.*; - public class TestConfiguration { static LinkedList configurations = new LinkedList(); @@ -48,6 +49,7 @@ public static void init() throws FileNotFoundException { * @throws IllegalArgumentException * @throws IllegalAccessException */ + @SuppressWarnings("unchecked") @Test public void testFiltersByDomain() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{ // Private method reflection @@ -74,6 +76,7 @@ public void testFiltersByDomain() throws NoSuchMethodException, SecurityExceptio * @throws IllegalArgumentException * @throws IllegalAccessException */ + @SuppressWarnings("unchecked") @Test public void testCommonBeanKeys() throws FileNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{ // Private method reflection @@ -107,6 +110,7 @@ public void testCommonBeanKeys() throws FileNotFoundException, NoSuchMethodExcep * @throws IllegalArgumentException * @throws IllegalAccessException */ + @SuppressWarnings("unchecked") @Test public void testCommonScope() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{ // Private method reflection diff --git a/src/test/java/org/datadog/jmxfetch/TestParsingJCommander.java b/src/test/java/org/datadog/jmxfetch/TestParsingJCommander.java index d6827ae01..b1e5095a2 100644 --- a/src/test/java/org/datadog/jmxfetch/TestParsingJCommander.java +++ b/src/test/java/org/datadog/jmxfetch/TestParsingJCommander.java @@ -1,18 +1,21 @@ package org.datadog.jmxfetch; -import com.beust.jcommander.JCommander; -import com.beust.jcommander.ParameterException; -import com.google.common.base.Joiner; +import static junit.framework.TestCase.fail; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.Arrays; +import java.util.List; + import org.datadog.jmxfetch.reporter.ConsoleReporter; import org.datadog.jmxfetch.reporter.StatsdReporter; import org.datadog.jmxfetch.validator.Log4JLevelValidator; import org.junit.Test; -import java.util.Arrays; -import java.util.List; - -import static junit.framework.TestCase.fail; -import static org.junit.Assert.*; +import com.beust.jcommander.JCommander; +import com.beust.jcommander.ParameterException; +import com.google.common.base.Joiner; public class TestParsingJCommander { diff --git a/src/test/java/org/datadog/jmxfetch/TestServiceChecks.java b/src/test/java/org/datadog/jmxfetch/TestServiceChecks.java index 0c34fc398..6b4e02750 100644 --- a/src/test/java/org/datadog/jmxfetch/TestServiceChecks.java +++ b/src/test/java/org/datadog/jmxfetch/TestServiceChecks.java @@ -1,18 +1,16 @@ package org.datadog.jmxfetch; -import org.datadog.jmxfetch.reporter.ConsoleReporter; -import org.datadog.jmxfetch.reporter.Reporter; -import org.junit.BeforeClass; -import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; -import javax.management.MBeanServer; -import javax.management.ObjectName; -import java.lang.management.ManagementFactory; import java.util.Arrays; import java.util.HashMap; import java.util.LinkedList; -import static org.junit.Assert.*; +import org.datadog.jmxfetch.reporter.Reporter; +import org.junit.Test; public class TestServiceChecks extends TestCommon { From 50df03877d9c7cb76f8a802ea4a455f5ceeba164 Mon Sep 17 00:00:00 2001 From: bluestix Date: Tue, 5 Apr 2016 15:26:05 -0700 Subject: [PATCH 2/2] Fix for issue #90. Beans with ':' in the name should work correctly now. --- src/main/java/org/datadog/jmxfetch/JMXAttribute.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/datadog/jmxfetch/JMXAttribute.java b/src/main/java/org/datadog/jmxfetch/JMXAttribute.java index 4ab4950b6..e65da5811 100644 --- a/src/main/java/org/datadog/jmxfetch/JMXAttribute.java +++ b/src/main/java/org/datadog/jmxfetch/JMXAttribute.java @@ -56,9 +56,10 @@ public abstract class JMXAttribute { // A bean name is formatted like that: org.apache.cassandra.db:type=Caches,keyspace=system,cache=HintsColumnFamilyKeyCache // i.e. : domain:bean_parameter1,bean_parameter2 - String[] splitBeanName = beanStringName.split(":"); - String domain = splitBeanName[0]; - String beanParameters = splitBeanName[1]; + //Note: some beans have a ':' in the name. Example: some.domain:name="some.bean.0.0.0.0:80.some-metric" + int splitPosition = beanStringName.indexOf(':'); + String domain = beanStringName.substring(0, splitPosition); + String beanParameters = beanStringName.substring(splitPosition+1); this.domain = domain; HashMap beanParametersHash = getBeanParametersHash(beanParameters);