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; package io.opentelemetry.instrumentation.runtimemetrics.java17.internal;
import java.time.Duration; 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 * This class is internal and is hence not for public use. Its APIs are unstable and can change at
* any time. * any time.
*/ */
public final class DurationUtil { 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. */ /** Returns the duration as seconds, with fractional part included. */
public static double toSeconds(Duration duration) { public static double toSeconds(Duration duration) {
@ -20,5 +22,9 @@ public final class DurationUtil {
return epochSecs + duration.getNano() / NANOS_PER_SECOND; return epochSecs + duration.getNano() / NANOS_PER_SECOND;
} }
public static double millisToSeconds(long milliseconds) {
return milliseconds / MILLIS_PER_SECOND;
}
private DurationUtil() {} private DurationUtil() {}
} }

View File

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

View File

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

View File

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

View File

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