diff --git a/micrometer-core/src/main/java/io/micrometer/core/instrument/config/PropertyMeterFilter.java b/micrometer-core/src/main/java/io/micrometer/core/instrument/config/PropertyMeterFilter.java deleted file mode 100644 index f811039435..0000000000 --- a/micrometer-core/src/main/java/io/micrometer/core/instrument/config/PropertyMeterFilter.java +++ /dev/null @@ -1,120 +0,0 @@ -/** - * Copyright 2017 Pivotal Software, Inc. - *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.micrometer.core.instrument.config; - -import io.micrometer.core.instrument.Meter; -import io.micrometer.core.instrument.histogram.HistogramConfig; -import io.micrometer.core.lang.Nullable; - -import java.time.Duration; - -/** - * A meter filter built from a set of properties. - * - * @author Clint Checketts - * @author Jon Schneider - */ -public abstract class PropertyMeterFilter implements MeterFilter { - @Nullable - public abstract V get(String k, Class vClass); - - @Nullable - protected V getMostSpecific(String k, String suffix, Class vClass) { - V v = get(k.isEmpty() ? suffix : k + "." + suffix, vClass); - if (v != null) - return v; - else if (k.isEmpty()) { - return null; - } - - int lastSep = k.lastIndexOf('.'); - if (lastSep == -1) - return getMostSpecific("", suffix, vClass); - - return getMostSpecific(k.substring(0, lastSep), suffix, vClass); - } - - @Override - public MeterFilterReply accept(Meter.Id id) { - Boolean enabled = getMostSpecific(id.getName(), "enabled", Boolean.class); - if (enabled == null) - return MeterFilterReply.NEUTRAL; - return enabled ? MeterFilterReply.ACCEPT : MeterFilterReply.DENY; - } - - @Override - public HistogramConfig configure(Meter.Id id, HistogramConfig histogramConfig) { - if (!id.getType().equals(Meter.Type.Timer) && !id.getType().equals(Meter.Type.DistributionSummary)) - return histogramConfig; - - HistogramConfig.Builder builder = HistogramConfig.builder(); - - Boolean percentileHistogram = getMostSpecific(id.getName(), "percentileHistogram", Boolean.class); - if (percentileHistogram != null) - builder.percentilesHistogram(percentileHistogram); - - double[] percentiles = getMostSpecific(id.getName(), "percentiles", double[].class); - if (percentiles != null) - builder.percentiles(percentiles); - - Integer histogramBufferLength = getMostSpecific(id.getName(), "histogramBufferLength", Integer.class); - if (histogramBufferLength != null) { - builder.histogramBufferLength(histogramBufferLength); - } - - Duration histogramExpiry = getMostSpecific(id.getName(), "histogramExpiry", Duration.class); - if (histogramExpiry != null) { - builder.histogramExpiry(histogramExpiry); - } - - if (id.getType().equals(Meter.Type.Timer)) { - Duration max = getMostSpecific(id.getName(), "maximumExpectedValue", Duration.class); - if (max != null) { - builder.maximumExpectedValue(max.toNanos()); - } - - Duration min = getMostSpecific(id.getName(), "minimumExpectedValue", Duration.class); - if (min != null) { - builder.minimumExpectedValue(min.toNanos()); - } - - Duration[] sla = getMostSpecific(id.getName(), "sla", Duration[].class); - if (sla != null) { - long[] slaNanos = new long[sla.length]; - for (int i = 0; i < sla.length; i++) { - slaNanos[i] = sla[i].toNanos(); - } - builder.sla(slaNanos); - } - } else if (id.getType().equals(Meter.Type.DistributionSummary)) { - Long max = getMostSpecific(id.getName(), "maximumExpectedValue", Long.class); - if (max != null) { - builder.maximumExpectedValue(max); - } - - Long min = getMostSpecific(id.getName(), "minimumExpectedValue", Long.class); - if (min != null) { - builder.minimumExpectedValue(min); - } - - long[] sla = getMostSpecific(id.getName(), "sla", long[].class); - if (sla != null) - builder.sla(sla); - } - - return builder.build().merge(histogramConfig); - } -} diff --git a/micrometer-core/src/test/java/io/micrometer/core/instrument/config/PropertyMeterFilterTest.java b/micrometer-core/src/test/java/io/micrometer/core/instrument/config/PropertyMeterFilterTest.java deleted file mode 100644 index be1b494e51..0000000000 --- a/micrometer-core/src/test/java/io/micrometer/core/instrument/config/PropertyMeterFilterTest.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * Copyright 2017 Pivotal Software, Inc. - *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.micrometer.core.instrument.config; - -import io.micrometer.core.instrument.DistributionSummary; -import io.micrometer.core.instrument.Meter; -import io.micrometer.core.instrument.MeterRegistry; -import io.micrometer.core.instrument.MockClock; -import io.micrometer.core.instrument.histogram.HistogramConfig; -import io.micrometer.core.instrument.simple.SimpleConfig; -import io.micrometer.core.instrument.simple.SimpleMeterRegistry; -import io.micrometer.core.lang.Nullable; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import static java.util.Objects.requireNonNull; -import static org.assertj.core.api.Assertions.assertThat; - -class PropertyMeterFilterTest { - // In a real application, the `get` method would be bound to some property source and - // mapped to the appropriate type with some sort of type conversion service. - private PropertyMeterFilter filter = new PropertyMeterFilter() { - @SuppressWarnings("unchecked") - @Override - public V get(String k, Class vClass) { - if (k.equals("enabled")) - return (V) (Boolean) false; - if (k.equals("my.counter.enabled")) - return (V) (Boolean) false; - if (k.equals("my.timer.enabled")) - return (V) (Boolean) true; - if (k.equals("my.summary.enabled")) - return (V) (Boolean) true; - if (k.equals("my.summary.maximumExpectedValue")) - return (V) (Long) 100L; - return null; - } - }; - - @Nullable - private HistogramConfig histogramConfig; - - private MeterRegistry registry = new SimpleMeterRegistry(SimpleConfig.DEFAULT, new MockClock()) { - @Override - protected DistributionSummary newDistributionSummary(Meter.Id id, HistogramConfig conf) { - histogramConfig = conf; - return super.newDistributionSummary(id, conf); - } - }; - - @BeforeEach - void configureRegistry() { - registry.config().meterFilter(filter); - } - - @Test - void disable() { - registry.counter("my.counter"); - assertThat(registry.find("my.counter").counter()).isNull(); - } - - @Test - void enable() { - registry.timer("my.timer"); - registry.get("my.timer").timer(); - } - - @Test - void summaryHistogramConfig() { - registry.summary("my.summary"); - assertThat(requireNonNull(histogramConfig).getMaximumExpectedValue()).isEqualTo(100); - } -}