Convert gc duration metrics to seconds (#12244)

This commit is contained in:
Lauri Tulmin 2024-09-13 16:10:10 +03:00 committed by GitHub
parent 54c7b16625
commit 521109e29b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 22 additions and 11 deletions

View File

@ -6,13 +6,15 @@
package io.opentelemetry.instrumentation.runtimemetrics.java17.internal;
import java.time.Duration;
import java.util.concurrent.TimeUnit;
/**
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
* any time.
*/
public final class DurationUtil {
private static final double NANOS_PER_SECOND = 1e9;
private static final double NANOS_PER_SECOND = TimeUnit.SECONDS.toNanos(1);
private static final double MILLIS_PER_SECOND = TimeUnit.SECONDS.toMillis(1);
/** Returns the duration as seconds, with fractional part included. */
public static double toSeconds(Duration duration) {
@ -20,5 +22,9 @@ public final class DurationUtil {
return epochSecs + duration.getNano() / NANOS_PER_SECOND;
}
public static double millisToSeconds(long milliseconds) {
return milliseconds / MILLIS_PER_SECOND;
}
private DurationUtil() {}
}

View File

@ -10,6 +10,7 @@ import io.opentelemetry.api.metrics.DoubleHistogram;
import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.instrumentation.runtimemetrics.java17.JfrFeature;
import io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants;
import io.opentelemetry.instrumentation.runtimemetrics.java17.internal.DurationUtil;
import io.opentelemetry.instrumentation.runtimemetrics.java17.internal.RecordedEventHandler;
import java.time.Duration;
import java.util.Optional;
@ -40,7 +41,7 @@ public final class G1GarbageCollectionHandler implements RecordedEventHandler {
@Override
public void accept(RecordedEvent ev) {
histogram.record(ev.getDouble(Constants.DURATION), ATTR);
histogram.record(DurationUtil.millisToSeconds(ev.getLong(Constants.DURATION)), ATTR);
}
@Override

View File

@ -10,6 +10,7 @@ import io.opentelemetry.api.metrics.DoubleHistogram;
import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.instrumentation.runtimemetrics.java17.JfrFeature;
import io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants;
import io.opentelemetry.instrumentation.runtimemetrics.java17.internal.DurationUtil;
import io.opentelemetry.instrumentation.runtimemetrics.java17.internal.RecordedEventHandler;
import java.time.Duration;
import java.util.Optional;
@ -40,7 +41,7 @@ public final class OldGarbageCollectionHandler implements RecordedEventHandler {
@Override
public void accept(RecordedEvent ev) {
histogram.record(ev.getDouble(Constants.DURATION), attributes);
histogram.record(DurationUtil.millisToSeconds(ev.getLong(Constants.DURATION)), attributes);
}
@Override

View File

@ -10,6 +10,7 @@ import io.opentelemetry.api.metrics.DoubleHistogram;
import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.instrumentation.runtimemetrics.java17.JfrFeature;
import io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants;
import io.opentelemetry.instrumentation.runtimemetrics.java17.internal.DurationUtil;
import io.opentelemetry.instrumentation.runtimemetrics.java17.internal.RecordedEventHandler;
import java.time.Duration;
import java.util.Optional;
@ -41,7 +42,7 @@ public final class YoungGarbageCollectionHandler implements RecordedEventHandler
@Override
public void accept(RecordedEvent ev) {
histogram.record(ev.getDouble(Constants.DURATION), attributes);
histogram.record(DurationUtil.millisToSeconds(ev.getLong(Constants.DURATION)), attributes);
}
@Override

View File

@ -5,22 +5,24 @@
package io.opentelemetry.instrumentation.runtimemetrics.java17.internal;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.assertj.core.api.Assertions.assertThat;
import java.time.Duration;
import java.util.concurrent.TimeUnit;
import org.junit.jupiter.api.Test;
class DurationUtilTest {
@Test
void shouldConvertDurationToSeconds() {
// Given
void convertDurationToSeconds() {
Duration duration = Duration.ofSeconds(7, 144);
// When
double seconds = DurationUtil.toSeconds(duration);
assertThat(seconds).isEqualTo(7.000000144);
}
// Then
assertEquals(7.000000144, seconds);
@Test
void convertMillisSeconds() {
double seconds = DurationUtil.millisToSeconds(TimeUnit.SECONDS.toMillis(5));
assertThat(seconds).isEqualTo(5);
}
}