jmx allow boolean and enum for metric attributes (#12231)

This commit is contained in:
SylvainJuge 2024-09-13 16:32:12 +02:00 committed by GitHub
parent 19ae57b4c7
commit 32fd44ebf2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 41 additions and 3 deletions

View File

@ -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;
}
}

View File

@ -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) {

View File

@ -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");
}
}