Merge branch '2.4.x' into 2.5.x

Closes gh-28351
pull/28778/head
Phillip Webb 3 years ago
commit aeadb0ceb6

@ -86,11 +86,11 @@ public final class MeterValue {
* @return a {@link MeterValue} instance
*/
public static MeterValue valueOf(String value) {
Double number = safeParseDouble(value);
if (number != null) {
return new MeterValue(number);
Duration duration = safeParseDuration(value);
if (duration != null) {
return new MeterValue(duration);
}
return new MeterValue(DurationStyle.detectAndParse(value));
return new MeterValue(Double.valueOf(value));
}
/**
@ -103,11 +103,11 @@ public final class MeterValue {
return new MeterValue(value);
}
private static Double safeParseDouble(String value) {
private static Duration safeParseDuration(String value) {
try {
return Double.valueOf(value);
return DurationStyle.detectAndParse(value);
}
catch (NumberFormatException ex) {
catch (IllegalArgumentException ex) {
return null;
}
}

@ -277,21 +277,21 @@ public class MetricsProperties {
/**
* Specific service-level objective boundaries for meter IDs starting with the
* specified name. The longest match wins. Counters will be published for each
* specified boundary. Values can be specified as a long or as a Duration value
* specified boundary. Values can be specified as a double or as a Duration value
* (for timer meters, defaulting to ms if no unit specified).
*/
private final Map<String, ServiceLevelObjectiveBoundary[]> slo = new LinkedHashMap<>();
/**
* Minimum value that meter IDs starting with the specified name are expected to
* observe. The longest match wins. Values can be specified as a long or as a
* observe. The longest match wins. Values can be specified as a double or as a
* Duration value (for timer meters, defaulting to ms if no unit specified).
*/
private final Map<String, String> minimumExpectedValue = new LinkedHashMap<>();
/**
* Maximum value that meter IDs starting with the specified name are expected to
* observe. The longest match wins. Values can be specified as a long or as a
* observe. The longest match wins. Values can be specified as a double or as a
* Duration value (for timer meters, defaulting to ms if no unit specified).
*/
private final Map<String, String> maximumExpectedValue = new LinkedHashMap<>();

@ -1,5 +1,5 @@
/*
* Copyright 2012-2020 the original author or authors.
* Copyright 2012-2021 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.
@ -16,6 +16,8 @@
package org.springframework.boot.actuate.autoconfigure.metrics;
import java.time.Duration;
import io.micrometer.core.instrument.Meter.Type;
import org.junit.jupiter.api.Test;
@ -42,11 +44,17 @@ class ServiceLevelObjectiveBoundaryTests {
}
@Test
void getValueForTimerWhenFromDurationStringShouldReturnDurationNanos() {
void getValueForTimerWhenFromMillisecondDurationStringShouldReturnDurationNanos() {
ServiceLevelObjectiveBoundary slo = ServiceLevelObjectiveBoundary.valueOf("123ms");
assertThat(slo.getValue(Type.TIMER)).isEqualTo(123000000);
}
@Test
void getValueForTimerWhenFromDaysDurationStringShouldReturnDurationNanos() {
ServiceLevelObjectiveBoundary slo = ServiceLevelObjectiveBoundary.valueOf("1d");
assertThat(slo.getValue(Type.TIMER)).isEqualTo(Duration.ofDays(1).toNanos());
}
@Test
void getValueForDistributionSummaryWhenFromDoubleShouldReturnDoubleValue() {
ServiceLevelObjectiveBoundary slo = ServiceLevelObjectiveBoundary.valueOf(123.42);

Loading…
Cancel
Save