From 32fd44ebf29ee293f92d4e3af3dd557f9d9f91d3 Mon Sep 17 00:00:00 2001 From: SylvainJuge <763082+SylvainJuge@users.noreply.github.com> Date: Fri, 13 Sep 2024 16:32:12 +0200 Subject: [PATCH] jmx allow boolean and enum for metric attributes (#12231) --- .../jmx/engine/BeanAttributeExtractor.java | 6 ++++ .../jmx/engine/MetricAttributeExtractor.java | 4 +-- .../jmx/engine/AttributeExtractorTest.java | 34 +++++++++++++++++++ 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/instrumentation/jmx-metrics/library/src/main/java/io/opentelemetry/instrumentation/jmx/engine/BeanAttributeExtractor.java b/instrumentation/jmx-metrics/library/src/main/java/io/opentelemetry/instrumentation/jmx/engine/BeanAttributeExtractor.java index 1581dc23ae..5f1e6b0883 100644 --- a/instrumentation/jmx-metrics/library/src/main/java/io/opentelemetry/instrumentation/jmx/engine/BeanAttributeExtractor.java +++ b/instrumentation/jmx-metrics/library/src/main/java/io/opentelemetry/instrumentation/jmx/engine/BeanAttributeExtractor.java @@ -272,6 +272,12 @@ public class BeanAttributeExtractor implements MetricAttributeExtractor { if (value instanceof String) { return (String) value; } + if (value instanceof Boolean) { + return value.toString(); + } + if (value instanceof Enum) { + return ((Enum) value).name(); + } return null; } } diff --git a/instrumentation/jmx-metrics/library/src/main/java/io/opentelemetry/instrumentation/jmx/engine/MetricAttributeExtractor.java b/instrumentation/jmx-metrics/library/src/main/java/io/opentelemetry/instrumentation/jmx/engine/MetricAttributeExtractor.java index 61c9bc03c2..fd89263c5c 100644 --- a/instrumentation/jmx-metrics/library/src/main/java/io/opentelemetry/instrumentation/jmx/engine/MetricAttributeExtractor.java +++ b/instrumentation/jmx-metrics/library/src/main/java/io/opentelemetry/instrumentation/jmx/engine/MetricAttributeExtractor.java @@ -28,9 +28,7 @@ public interface MetricAttributeExtractor { String extractValue(@Nullable MBeanServer server, @Nullable ObjectName objectName); static MetricAttributeExtractor fromConstant(String constantValue) { - return (a, b) -> { - return constantValue; - }; + return (a, b) -> constantValue; } static MetricAttributeExtractor fromObjectNameParameter(String parameterKey) { diff --git a/instrumentation/jmx-metrics/library/src/test/java/io/opentelemetry/instrumentation/jmx/engine/AttributeExtractorTest.java b/instrumentation/jmx-metrics/library/src/test/java/io/opentelemetry/instrumentation/jmx/engine/AttributeExtractorTest.java index 487f4d3bc1..542d8d1603 100644 --- a/instrumentation/jmx-metrics/library/src/test/java/io/opentelemetry/instrumentation/jmx/engine/AttributeExtractorTest.java +++ b/instrumentation/jmx-metrics/library/src/test/java/io/opentelemetry/instrumentation/jmx/engine/AttributeExtractorTest.java @@ -34,6 +34,10 @@ class AttributeExtractorTest { double getDoubleAttribute(); String getStringAttribute(); + + boolean getBooleanAttribute(); + + Enum getEnumAttribute(); } private static class Test1 implements Test1MBean { @@ -71,6 +75,20 @@ class AttributeExtractorTest { public String getStringAttribute() { return ""; } + + @Override + public boolean getBooleanAttribute() { + return true; + } + + @Override + public Enum getEnumAttribute() { + return DummyEnum.ENUM_VALUE; + } + + private enum DummyEnum { + ENUM_VALUE + } } private static final String DOMAIN = "otel.jmx.test"; @@ -202,4 +220,20 @@ class AttributeExtractorTest { AttributeInfo info = extractor.getAttributeInfo(theServer, objectName); assertThat(info == null).isTrue(); } + + @Test + void testBooleanAttribute() throws Exception { + BeanAttributeExtractor extractor = BeanAttributeExtractor.fromName("BooleanAttribute"); + AttributeInfo info = extractor.getAttributeInfo(theServer, objectName); + assertThat(info).isNull(); + assertThat(extractor.extractValue(theServer, objectName)).isEqualTo("true"); + } + + @Test + void testEnumAttribute() throws Exception { + BeanAttributeExtractor extractor = BeanAttributeExtractor.fromName("EnumAttribute"); + AttributeInfo info = extractor.getAttributeInfo(theServer, objectName); + assertThat(info).isNull(); + assertThat(extractor.extractValue(theServer, objectName)).isEqualTo("ENUM_VALUE"); + } }