Browse Source
Update `OnlyOnceLoggingDenyMeterFilter` to directly implement the maximum number of allowable tag values. With this change in place we can remove calls to `MeterFilter.maximumAllowableTags`. This also allows `MeterRegistryPostProcessor` to have a stronger signal about the filters that it should also apply to the `AutoConfiguredCompositeMeterRegistry` since it can now do a standard `instanceof` check. Fixes gh-47285pull/48100/head
13 changed files with 209 additions and 46 deletions
@ -0,0 +1,80 @@
@@ -0,0 +1,80 @@
|
||||
/* |
||||
* Copyright 2012-present the original author or authors. |
||||
* |
||||
* 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 |
||||
* |
||||
* https://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 org.springframework.boot.actuate.autoconfigure.metrics; |
||||
|
||||
import java.util.Collections; |
||||
|
||||
import io.micrometer.core.instrument.Meter; |
||||
import io.micrometer.core.instrument.Meter.Type; |
||||
import io.micrometer.core.instrument.MeterRegistry; |
||||
import io.micrometer.core.instrument.config.MeterFilterReply; |
||||
import io.micrometer.core.instrument.simple.SimpleMeterRegistry; |
||||
import org.assertj.core.api.InstanceOfAssertFactories; |
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link OnlyOnceLoggingDenyMeterFilter}. |
||||
* |
||||
* @author Phillip Webb |
||||
*/ |
||||
class OnlyOnceLoggingDenyMeterFilterTests { |
||||
|
||||
@Test |
||||
@SuppressWarnings("removal") |
||||
void applyWithMssageOnly() { |
||||
OnlyOnceLoggingDenyMeterFilter filter = new OnlyOnceLoggingDenyMeterFilter(() -> "Test"); |
||||
assertThat(filter.accept(meterId("test", "k", "v"))).isEqualTo(MeterFilterReply.DENY); |
||||
} |
||||
|
||||
@Test |
||||
void applyWhenNameDoesNotHavePrefixReturnsNeutral() { |
||||
OnlyOnceLoggingDenyMeterFilter filter = new OnlyOnceLoggingDenyMeterFilter("test", "k", 1); |
||||
assertThat(filter.accept(meterId("tset", "k", "v"))).isEqualTo(MeterFilterReply.NEUTRAL); |
||||
assertThat(filter).extracting("observedTagValues").asInstanceOf(InstanceOfAssertFactories.COLLECTION).isEmpty(); |
||||
} |
||||
|
||||
@Test |
||||
void applyWhenNameHasPrefixButNoTagKeyReturnsNeutral() { |
||||
OnlyOnceLoggingDenyMeterFilter filter = new OnlyOnceLoggingDenyMeterFilter("test", "k", 1); |
||||
assertThat(filter.accept(meterId("test", "k", "v"))).isEqualTo(MeterFilterReply.NEUTRAL); |
||||
assertThat(filter).extracting("observedTagValues") |
||||
.asInstanceOf(InstanceOfAssertFactories.COLLECTION) |
||||
.containsExactly("v"); |
||||
} |
||||
|
||||
@Test |
||||
void applyWhenNameHasPrefixAndTagKeyReturnsNeutralUntilLimit() { |
||||
OnlyOnceLoggingDenyMeterFilter filter = new OnlyOnceLoggingDenyMeterFilter("test", "k", 1); |
||||
assertThat(filter.accept(meterId("test", "k", "v1"))).isEqualTo(MeterFilterReply.NEUTRAL); |
||||
assertThat(filter.accept(meterId("test", "k", "v2"))).isEqualTo(MeterFilterReply.DENY); |
||||
assertThat(filter.accept(meterId("test", "k", "v3"))).isEqualTo(MeterFilterReply.DENY); |
||||
assertThat(filter).extracting("observedTagValues") |
||||
.asInstanceOf(InstanceOfAssertFactories.COLLECTION) |
||||
.containsExactly("v1"); |
||||
} |
||||
|
||||
private Meter.Id meterId(String name, String tagKey, String tagValue) { |
||||
MeterRegistry registry = new SimpleMeterRegistry(); |
||||
Meter meter = Meter.builder(name, Type.COUNTER, Collections.emptyList()) |
||||
.tag(tagKey, tagValue) |
||||
.register(registry); |
||||
return meter.getId(); |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue