Polish 'Support Per-meter configuration for OtlpMetricsProperties'
See gh-45203
This commit is contained in:
@@ -58,11 +58,6 @@ public class OtlpMetricsProperties extends StepRegistryProperties {
|
||||
*/
|
||||
private HistogramFlavor histogramFlavor = HistogramFlavor.EXPLICIT_BUCKET_HISTOGRAM;
|
||||
|
||||
/**
|
||||
* Per meter histogram type to be preferred when histogram publishing is enabled.
|
||||
*/
|
||||
private Map<String, HistogramFlavor> histogramFlavorPerMeter = new LinkedHashMap<>();
|
||||
|
||||
/**
|
||||
* Max scale to use for exponential histograms, if configured.
|
||||
*/
|
||||
@@ -74,17 +69,16 @@ public class OtlpMetricsProperties extends StepRegistryProperties {
|
||||
*/
|
||||
private int maxBucketCount = 160;
|
||||
|
||||
/**
|
||||
* Per meter number of max buckets used for exponential histograms, if configured.
|
||||
* This has no effect on explicit bucket histograms.
|
||||
*/
|
||||
private Map<String, Integer> maxBucketsPerMeter = new LinkedHashMap<>();
|
||||
|
||||
/**
|
||||
* Time unit for exported metrics.
|
||||
*/
|
||||
private TimeUnit baseTimeUnit = TimeUnit.MILLISECONDS;
|
||||
|
||||
/**
|
||||
* Per-meter properties that can be used to override defaults.
|
||||
*/
|
||||
private Map<String, Meter> meter = new LinkedHashMap<>();
|
||||
|
||||
public String getUrl() {
|
||||
return this.url;
|
||||
}
|
||||
@@ -117,14 +111,6 @@ public class OtlpMetricsProperties extends StepRegistryProperties {
|
||||
this.histogramFlavor = histogramFlavor;
|
||||
}
|
||||
|
||||
public Map<String, HistogramFlavor> getHistogramFlavorPerMeter() {
|
||||
return this.histogramFlavorPerMeter;
|
||||
}
|
||||
|
||||
public void setHistogramFlavorPerMeter(Map<String, HistogramFlavor> histogramFlavorPerMeter) {
|
||||
this.histogramFlavorPerMeter = histogramFlavorPerMeter;
|
||||
}
|
||||
|
||||
public int getMaxScale() {
|
||||
return this.maxScale;
|
||||
}
|
||||
@@ -141,14 +127,6 @@ public class OtlpMetricsProperties extends StepRegistryProperties {
|
||||
this.maxBucketCount = maxBucketCount;
|
||||
}
|
||||
|
||||
public Map<String, Integer> getMaxBucketsPerMeter() {
|
||||
return this.maxBucketsPerMeter;
|
||||
}
|
||||
|
||||
public void setMaxBucketsPerMeter(Map<String, Integer> maxBucketsPerMeter) {
|
||||
this.maxBucketsPerMeter = maxBucketsPerMeter;
|
||||
}
|
||||
|
||||
public TimeUnit getBaseTimeUnit() {
|
||||
return this.baseTimeUnit;
|
||||
}
|
||||
@@ -157,4 +135,42 @@ public class OtlpMetricsProperties extends StepRegistryProperties {
|
||||
this.baseTimeUnit = baseTimeUnit;
|
||||
}
|
||||
|
||||
public Map<String, Meter> getMeter() {
|
||||
return this.meter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Per-meter settings.
|
||||
*/
|
||||
public static class Meter {
|
||||
|
||||
/**
|
||||
* Maximum number of buckets to be used for exponential histograms, if configured.
|
||||
* This has no effect on explicit bucket histograms.
|
||||
*/
|
||||
private Integer maxBucketCount;
|
||||
|
||||
/**
|
||||
* Histogram type when histogram publishing is enabled.
|
||||
*/
|
||||
private HistogramFlavor histogramFlavor;
|
||||
|
||||
public Integer getMaxBucketCount() {
|
||||
return this.maxBucketCount;
|
||||
}
|
||||
|
||||
public void setMaxBucketCount(Integer maxBucketCount) {
|
||||
this.maxBucketCount = maxBucketCount;
|
||||
}
|
||||
|
||||
public HistogramFlavor getHistogramFlavor() {
|
||||
return this.histogramFlavor;
|
||||
}
|
||||
|
||||
public void setHistogramFlavor(HistogramFlavor histogramFlavor) {
|
||||
this.histogramFlavor = histogramFlavor;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -20,15 +20,18 @@ import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.Function;
|
||||
|
||||
import io.micrometer.registry.otlp.AggregationTemporality;
|
||||
import io.micrometer.registry.otlp.HistogramFlavor;
|
||||
import io.micrometer.registry.otlp.OtlpConfig;
|
||||
|
||||
import org.springframework.boot.actuate.autoconfigure.metrics.export.otlp.OtlpMetricsProperties.Meter;
|
||||
import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.StepRegistryPropertiesConfigAdapter;
|
||||
import org.springframework.boot.actuate.autoconfigure.opentelemetry.OpenTelemetryProperties;
|
||||
import org.springframework.boot.actuate.autoconfigure.opentelemetry.OpenTelemetryResourceAttributes;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
/**
|
||||
* Adapter to convert {@link OtlpMetricsProperties} to an {@link OtlpConfig}.
|
||||
@@ -90,12 +93,12 @@ class OtlpMetricsPropertiesConfigAdapter extends StepRegistryPropertiesConfigAda
|
||||
|
||||
@Override
|
||||
public Map<String, HistogramFlavor> histogramFlavorPerMeter() {
|
||||
return get(OtlpMetricsProperties::getHistogramFlavorPerMeter, OtlpConfig.super::histogramFlavorPerMeter);
|
||||
return get(perMeter(Meter::getHistogramFlavor), OtlpConfig.super::histogramFlavorPerMeter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Integer> maxBucketsPerMeter() {
|
||||
return get(OtlpMetricsProperties::getMaxBucketsPerMeter, OtlpConfig.super::maxBucketsPerMeter);
|
||||
return get(perMeter(Meter::getMaxBucketCount), OtlpConfig.super::maxBucketsPerMeter);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -113,4 +116,21 @@ class OtlpMetricsPropertiesConfigAdapter extends StepRegistryPropertiesConfigAda
|
||||
return get(OtlpMetricsProperties::getBaseTimeUnit, OtlpConfig.super::baseTimeUnit);
|
||||
}
|
||||
|
||||
private <V> Function<OtlpMetricsProperties, Map<String, V>> perMeter(Function<Meter, V> getter) {
|
||||
return (properties) -> {
|
||||
if (CollectionUtils.isEmpty(properties.getMeter())) {
|
||||
return null;
|
||||
}
|
||||
Map<String, V> perMeter = new LinkedHashMap<>();
|
||||
properties.getMeter().forEach((key, meterProperties) -> {
|
||||
V value = getter.apply(meterProperties);
|
||||
if (value != null) {
|
||||
perMeter.put(key, value);
|
||||
}
|
||||
});
|
||||
return (!perMeter.isEmpty()) ? perMeter : null;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.boot.actuate.autoconfigure.metrics.export.otlp.OtlpMetricsExportAutoConfiguration.PropertiesOtlpMetricsConnectionDetails;
|
||||
import org.springframework.boot.actuate.autoconfigure.metrics.export.otlp.OtlpMetricsProperties.Meter;
|
||||
import org.springframework.boot.actuate.autoconfigure.opentelemetry.OpenTelemetryProperties;
|
||||
import org.springframework.mock.env.MockEnvironment;
|
||||
|
||||
@@ -117,8 +118,9 @@ class OtlpMetricsPropertiesConfigAdapterTests {
|
||||
|
||||
@Test
|
||||
void whenPropertiesHistogramFlavorPerMeterIsSetAdapterHistogramFlavorPerMeterReturnsIt() {
|
||||
this.properties
|
||||
.setHistogramFlavorPerMeter(Map.of("my.histograms", HistogramFlavor.BASE2_EXPONENTIAL_BUCKET_HISTOGRAM));
|
||||
Meter meterProperties = new Meter();
|
||||
meterProperties.setHistogramFlavor(HistogramFlavor.BASE2_EXPONENTIAL_BUCKET_HISTOGRAM);
|
||||
this.properties.getMeter().put("my.histograms", meterProperties);
|
||||
assertThat(createAdapter().histogramFlavorPerMeter()).containsEntry("my.histograms",
|
||||
HistogramFlavor.BASE2_EXPONENTIAL_BUCKET_HISTOGRAM);
|
||||
}
|
||||
@@ -152,7 +154,9 @@ class OtlpMetricsPropertiesConfigAdapterTests {
|
||||
|
||||
@Test
|
||||
void whenPropertiesMaxBucketsPerMeterIsSetAdapterMaxBucketsPerMeterReturnsIt() {
|
||||
this.properties.setMaxBucketsPerMeter(Map.of("my.histograms", 111));
|
||||
Meter meterProperties = new Meter();
|
||||
meterProperties.setMaxBucketCount(111);
|
||||
this.properties.getMeter().put("my.histograms", meterProperties);
|
||||
assertThat(createAdapter().maxBucketsPerMeter()).containsEntry("my.histograms", 111);
|
||||
}
|
||||
|
||||
|
||||
@@ -37,11 +37,10 @@ class OtlpMetricsPropertiesTests extends StepRegistryPropertiesTests {
|
||||
assertStepRegistryDefaultValues(properties, config);
|
||||
assertThat(properties.getAggregationTemporality()).isSameAs(config.aggregationTemporality());
|
||||
assertThat(properties.getHistogramFlavor()).isSameAs(config.histogramFlavor());
|
||||
assertThat(properties.getHistogramFlavorPerMeter()).isEqualTo(config.histogramFlavorPerMeter());
|
||||
assertThat(properties.getMaxScale()).isEqualTo(config.maxScale());
|
||||
assertThat(properties.getMaxBucketCount()).isEqualTo(config.maxBucketCount());
|
||||
assertThat(properties.getMaxBucketsPerMeter()).isEqualTo(config.maxBucketsPerMeter());
|
||||
assertThat(properties.getBaseTimeUnit()).isSameAs(config.baseTimeUnit());
|
||||
assertThat(properties.getMeter()).isEmpty();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1548,7 +1548,7 @@ bom {
|
||||
releaseNotes("https://github.com/apache/maven-war-plugin/releases/tag/maven-war-plugin-{version}")
|
||||
}
|
||||
}
|
||||
library("Micrometer", "1.15.0-RC1") {
|
||||
library("Micrometer", "1.15.0-SNAPSHOT") {
|
||||
considerSnapshots()
|
||||
group("io.micrometer") {
|
||||
modules = [
|
||||
|
||||
Reference in New Issue
Block a user