diff --git a/collector/src/main/java/io/prometheus/jmx/JmxScraper.java b/collector/src/main/java/io/prometheus/jmx/JmxScraper.java index ec3adbc0..89451356 100644 --- a/collector/src/main/java/io/prometheus/jmx/JmxScraper.java +++ b/collector/src/main/java/io/prometheus/jmx/JmxScraper.java @@ -190,7 +190,11 @@ private void processBeanValue( Object value) { if (value == null) { logScrape(domain + beanProperties + attrName, "null"); - } else if (value instanceof Number || value instanceof String || value instanceof Boolean) { + } else if (value instanceof Number || value instanceof String || value instanceof Boolean || value instanceof java.util.Date) { + if (value instanceof java.util.Date) { + attrType = "java.lang.Double"; + value = ((java.util.Date) value).getTime() / 1000.0; + } logScrape(domain + beanProperties + attrName, value.toString()); this.receiver.recordBean( domain, diff --git a/collector/src/test/java/io/prometheus/jmx/CamelMBean.java b/collector/src/test/java/io/prometheus/jmx/CamelMBean.java new file mode 100644 index 00000000..103b5e51 --- /dev/null +++ b/collector/src/test/java/io/prometheus/jmx/CamelMBean.java @@ -0,0 +1,26 @@ +package io.prometheus.jmx; + +import javax.management.MBeanServer; +import javax.management.ObjectName; +import java.util.Date; + +public interface CamelMBean { + double EXPECTED_SECONDS = 1.573285945111E9; + + Date getLastExchangeFailureTimestamp(); +} + +class Camel implements CamelMBean { + public static void registerBean(MBeanServer mbs) + throws javax.management.JMException { + ObjectName mbeanName = new ObjectName( + "org.apache.camel:context=my-camel-context,type=routes,name=\"my-route-name\""); + Camel mbean = new Camel(); + mbs.registerMBean(mbean, mbeanName); + } + + @Override + public Date getLastExchangeFailureTimestamp() { + return new Date((long)(EXPECTED_SECONDS * 1000)); + } +} diff --git a/collector/src/test/java/io/prometheus/jmx/JmxCollectorTest.java b/collector/src/test/java/io/prometheus/jmx/JmxCollectorTest.java index dc35734f..05334e9a 100644 --- a/collector/src/test/java/io/prometheus/jmx/JmxCollectorTest.java +++ b/collector/src/test/java/io/prometheus/jmx/JmxCollectorTest.java @@ -31,6 +31,7 @@ public static void OneTimeSetUp() throws Exception { TomcatServlet.registerBean(mbs); Bool.registerBean(mbs); + Camel.registerBean(mbs); } @Before @@ -252,4 +253,20 @@ public void testDelayedStartReady() throws Exception { Thread.sleep(2000); assertEquals(1.0, registry.getSampleValue("boolean_Test_True", new String[]{}, new String[]{}), .001); } + + @Test + public void testCamelLastExchangFailureTimestamp() throws Exception{ + String rulePattern = + "\n---\nrules:\n- pattern: 'org.apache.camel<>LastExchangeFailureTimestamp'\n" + + " name: org.apache.camel.LastExchangeFailureTimestamp\n" + + " help: Exchanges Last Failure Timestamps\n" + + " type: UNTYPED\n" + + " labels:\n" + + " context: \"$1\"\n" + + " route: \"$2\"\n" + + " type: routes"; + JmxCollector jc = new JmxCollector(rulePattern).register(registry); + Double actual = registry.getSampleValue("org_apache_camel_LastExchangeFailureTimestamp", new String[]{"context", "route", "type"}, new String[]{"my-camel-context", "my-route-name", "routes"}); + assertEquals(Camel.EXPECTED_SECONDS, actual, 0); + } }