Skip to content

Commit ab79ad4

Browse files
authored
Update units of time based metrics from millis to seconds for Java17 … (#12084)
1 parent 936ce57 commit ab79ad4

File tree

13 files changed

+57
-35
lines changed

13 files changed

+57
-35
lines changed

instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/internal/Constants.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ private Constants() {}
1818
public static final String ONE = "1";
1919
public static final String HERTZ = "Hz";
2020
public static final String BYTES = "By";
21-
public static final String MILLISECONDS = "ms";
21+
public static final String SECONDS = "s";
2222
public static final String COMMITTED = "committed";
2323
public static final String RESERVED = "reserved";
2424
public static final String INITIAL_SIZE = "initialSize";

instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/internal/DurationUtil.java

+4-5
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,12 @@
1212
* any time.
1313
*/
1414
public final class DurationUtil {
15-
private static final double NANOS_PER_MILLI = 1e6;
15+
private static final double NANOS_PER_SECOND = 1e9;
1616

17-
/** Returns the duration as milliseconds, with fractional part included. */
18-
@SuppressWarnings("TimeUnitMismatch")
19-
public static double toMillis(Duration duration) {
17+
/** Returns the duration as seconds, with fractional part included. */
18+
public static double toSeconds(Duration duration) {
2019
double epochSecs = (double) duration.getSeconds();
21-
return epochSecs * 1000 + duration.getNano() / NANOS_PER_MILLI;
20+
return epochSecs + duration.getNano() / NANOS_PER_SECOND;
2221
}
2322

2423
private DurationUtil() {}

instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/internal/cpu/LongLockHandler.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public LongLockHandler(Meter meter, ThreadGrouper grouper) {
3535
meter
3636
.histogramBuilder(METRIC_NAME)
3737
.setDescription(METRIC_DESCRIPTION)
38-
.setUnit(Constants.MILLISECONDS)
38+
.setUnit(Constants.SECONDS)
3939
.build();
4040
}
4141

@@ -73,7 +73,7 @@ public PerThreadLongLockHandler(DoubleHistogram histogram, String threadName) {
7373
@Override
7474
public void accept(RecordedEvent recordedEvent) {
7575
if (recordedEvent.hasField(EVENT_THREAD)) {
76-
histogram.record(DurationUtil.toMillis(recordedEvent.getDuration()), attributes);
76+
histogram.record(DurationUtil.toSeconds(recordedEvent.getDuration()), attributes);
7777
}
7878
// What about the class name in MONITOR_CLASS ?
7979
// We can get a stack trace from the thread on the event

instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/internal/garbagecollection/G1GarbageCollectionHandler.java

+4-5
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
package io.opentelemetry.instrumentation.runtimemetrics.java17.internal.garbagecollection;
77

88
import io.opentelemetry.api.common.Attributes;
9-
import io.opentelemetry.api.metrics.LongHistogram;
9+
import io.opentelemetry.api.metrics.DoubleHistogram;
1010
import io.opentelemetry.api.metrics.Meter;
1111
import io.opentelemetry.instrumentation.runtimemetrics.java17.JfrFeature;
1212
import io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants;
@@ -27,21 +27,20 @@ public final class G1GarbageCollectionHandler implements RecordedEventHandler {
2727
"G1 Young Generation",
2828
Constants.ATTR_GC_ACTION,
2929
Constants.END_OF_MINOR_GC);
30-
private final LongHistogram histogram;
30+
private final DoubleHistogram histogram;
3131

3232
public G1GarbageCollectionHandler(Meter meter) {
3333
histogram =
3434
meter
3535
.histogramBuilder(Constants.METRIC_NAME_GC_DURATION)
3636
.setDescription(Constants.METRIC_DESCRIPTION_GC_DURATION)
37-
.setUnit(Constants.MILLISECONDS)
38-
.ofLongs()
37+
.setUnit(Constants.SECONDS)
3938
.build();
4039
}
4140

4241
@Override
4342
public void accept(RecordedEvent ev) {
44-
histogram.record(ev.getLong(Constants.DURATION), ATTR);
43+
histogram.record(ev.getDouble(Constants.DURATION), ATTR);
4544
}
4645

4746
@Override

instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/internal/garbagecollection/OldGarbageCollectionHandler.java

+4-5
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
package io.opentelemetry.instrumentation.runtimemetrics.java17.internal.garbagecollection;
77

88
import io.opentelemetry.api.common.Attributes;
9-
import io.opentelemetry.api.metrics.LongHistogram;
9+
import io.opentelemetry.api.metrics.DoubleHistogram;
1010
import io.opentelemetry.api.metrics.Meter;
1111
import io.opentelemetry.instrumentation.runtimemetrics.java17.JfrFeature;
1212
import io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants;
@@ -22,16 +22,15 @@
2222
public final class OldGarbageCollectionHandler implements RecordedEventHandler {
2323
private static final String EVENT_NAME = "jdk.OldGarbageCollection";
2424

25-
private final LongHistogram histogram;
25+
private final DoubleHistogram histogram;
2626
private final Attributes attributes;
2727

2828
public OldGarbageCollectionHandler(Meter meter, String gc) {
2929
histogram =
3030
meter
3131
.histogramBuilder(Constants.METRIC_NAME_GC_DURATION)
3232
.setDescription(Constants.METRIC_DESCRIPTION_GC_DURATION)
33-
.setUnit(Constants.MILLISECONDS)
34-
.ofLongs()
33+
.setUnit(Constants.SECONDS)
3534
.build();
3635
// Set the attribute's GC based on which GC is being used.
3736
attributes =
@@ -41,7 +40,7 @@ public OldGarbageCollectionHandler(Meter meter, String gc) {
4140

4241
@Override
4342
public void accept(RecordedEvent ev) {
44-
histogram.record(ev.getLong(Constants.DURATION), attributes);
43+
histogram.record(ev.getDouble(Constants.DURATION), attributes);
4544
}
4645

4746
@Override

instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/internal/garbagecollection/YoungGarbageCollectionHandler.java

+4-5
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
package io.opentelemetry.instrumentation.runtimemetrics.java17.internal.garbagecollection;
77

88
import io.opentelemetry.api.common.Attributes;
9-
import io.opentelemetry.api.metrics.LongHistogram;
9+
import io.opentelemetry.api.metrics.DoubleHistogram;
1010
import io.opentelemetry.api.metrics.Meter;
1111
import io.opentelemetry.instrumentation.runtimemetrics.java17.JfrFeature;
1212
import io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants;
@@ -22,16 +22,15 @@
2222
public final class YoungGarbageCollectionHandler implements RecordedEventHandler {
2323
private static final String EVENT_NAME = "jdk.YoungGarbageCollection";
2424

25-
private final LongHistogram histogram;
25+
private final DoubleHistogram histogram;
2626
private final Attributes attributes;
2727

2828
public YoungGarbageCollectionHandler(Meter meter, String gc) {
2929
histogram =
3030
meter
3131
.histogramBuilder(Constants.METRIC_NAME_GC_DURATION)
3232
.setDescription(Constants.METRIC_DESCRIPTION_GC_DURATION)
33-
.setUnit(Constants.MILLISECONDS)
34-
.ofLongs()
33+
.setUnit(Constants.SECONDS)
3534
.build();
3635
// Set the attribute's GC based on which GC is being used.
3736
// G1 young collection is already handled by G1GarbageCollectionHandler.
@@ -42,7 +41,7 @@ public YoungGarbageCollectionHandler(Meter meter, String gc) {
4241

4342
@Override
4443
public void accept(RecordedEvent ev) {
45-
histogram.record(ev.getLong(Constants.DURATION), attributes);
44+
histogram.record(ev.getDouble(Constants.DURATION), attributes);
4645
}
4746

4847
@Override

instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/internal/network/NetworkReadHandler.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public NetworkReadHandler(Meter meter, ThreadGrouper nameNormalizer) {
4040
meter
4141
.histogramBuilder(Constants.METRIC_NAME_NETWORK_DURATION)
4242
.setDescription(Constants.METRIC_DESCRIPTION_NETWORK_DURATION)
43-
.setUnit(Constants.MILLISECONDS)
43+
.setUnit(Constants.SECONDS)
4444
.build();
4545
}
4646

@@ -81,7 +81,7 @@ public PerThreadNetworkReadHandler(
8181
@Override
8282
public void accept(RecordedEvent ev) {
8383
bytesHistogram.record(ev.getLong(BYTES_READ), attributes);
84-
durationHistogram.record(DurationUtil.toMillis(ev.getDuration()), attributes);
84+
durationHistogram.record(DurationUtil.toSeconds(ev.getDuration()), attributes);
8585
}
8686
}
8787
}

instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/internal/network/NetworkWriteHandler.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public NetworkWriteHandler(Meter meter, ThreadGrouper nameNormalizer) {
5858
meter
5959
.histogramBuilder(Constants.METRIC_NAME_NETWORK_DURATION)
6060
.setDescription(Constants.METRIC_DESCRIPTION_NETWORK_DURATION)
61-
.setUnit(Constants.MILLISECONDS)
61+
.setUnit(Constants.SECONDS)
6262
.build();
6363
}
6464

@@ -99,7 +99,7 @@ private PerThreadNetworkWriteHandler(
9999
@Override
100100
public void accept(RecordedEvent ev) {
101101
bytesHistogram.record(ev.getLong(BYTES_WRITTEN), attributes);
102-
durationHistogram.record(DurationUtil.toMillis(ev.getDuration()), attributes);
102+
durationHistogram.record(DurationUtil.toSeconds(ev.getDuration()), attributes);
103103
}
104104
}
105105
}

instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/test/java/io/opentelemetry/instrumentation/runtimemetrics/java17/G1GcMemoryMetricTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import static io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants.METRIC_NAME_GC_DURATION;
2121
import static io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants.METRIC_NAME_MEMORY;
2222
import static io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants.METRIC_NAME_MEMORY_AFTER;
23-
import static io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants.MILLISECONDS;
23+
import static io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants.SECONDS;
2424
import static org.assertj.core.api.Assertions.assertThat;
2525

2626
import io.opentelemetry.api.common.Attributes;
@@ -88,7 +88,7 @@ void shouldHaveGcDurationMetrics() {
8888
metric ->
8989
metric
9090
.hasName(METRIC_NAME_GC_DURATION)
91-
.hasUnit(MILLISECONDS)
91+
.hasUnit(SECONDS)
9292
.hasDescription(METRIC_DESCRIPTION_GC_DURATION)
9393
.satisfies(
9494
data ->

instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/test/java/io/opentelemetry/instrumentation/runtimemetrics/java17/JfrCpuLockTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
package io.opentelemetry.instrumentation.runtimemetrics.java17;
77

8-
import static io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants.MILLISECONDS;
8+
import static io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants.SECONDS;
99
import static org.assertj.core.api.Assertions.assertThat;
1010

1111
import java.time.Duration;
@@ -51,7 +51,7 @@ void shouldHaveLockEvents() throws Exception {
5151
metric ->
5252
metric
5353
.hasName("jvm.cpu.longlock")
54-
.hasUnit(MILLISECONDS)
54+
.hasUnit(SECONDS)
5555
.hasHistogramSatisfying(histogram -> {}));
5656
}
5757
}

instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/test/java/io/opentelemetry/instrumentation/runtimemetrics/java17/PsGcMemoryMetricTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import static io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants.METRIC_NAME_MEMORY;
2424
import static io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants.METRIC_NAME_MEMORY_AFTER;
2525
import static io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants.METRIC_NAME_MEMORY_LIMIT;
26-
import static io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants.MILLISECONDS;
26+
import static io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants.SECONDS;
2727
import static org.assertj.core.api.Assertions.assertThat;
2828

2929
import io.opentelemetry.api.common.Attributes;
@@ -93,7 +93,7 @@ void shouldHaveGcDurationMetrics() {
9393
metric ->
9494
metric
9595
.hasName(METRIC_NAME_GC_DURATION)
96-
.hasUnit(MILLISECONDS)
96+
.hasUnit(SECONDS)
9797
.hasDescription(METRIC_DESCRIPTION_GC_DURATION)
9898
.satisfies(
9999
data ->

instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/test/java/io/opentelemetry/instrumentation/runtimemetrics/java17/SerialGcMemoryMetricTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import static io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants.END_OF_MINOR_GC;
1212
import static io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants.METRIC_DESCRIPTION_GC_DURATION;
1313
import static io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants.METRIC_NAME_GC_DURATION;
14-
import static io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants.MILLISECONDS;
14+
import static io.opentelemetry.instrumentation.runtimemetrics.java17.internal.Constants.SECONDS;
1515
import static org.assertj.core.api.Assertions.assertThat;
1616

1717
import io.opentelemetry.api.common.Attributes;
@@ -43,7 +43,7 @@ void shouldHaveGcDurationMetrics() {
4343
metric ->
4444
metric
4545
.hasName(METRIC_NAME_GC_DURATION)
46-
.hasUnit(MILLISECONDS)
46+
.hasUnit(SECONDS)
4747
.hasDescription(METRIC_DESCRIPTION_GC_DURATION)
4848
.satisfies(
4949
data ->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.runtimemetrics.java17.internal;
7+
8+
import static org.junit.jupiter.api.Assertions.assertEquals;
9+
10+
import java.time.Duration;
11+
import org.junit.jupiter.api.Test;
12+
13+
class DurationUtilTest {
14+
15+
@Test
16+
void shouldConvertDurationToSeconds() {
17+
// Given
18+
Duration duration = Duration.ofSeconds(7, 144);
19+
20+
// When
21+
double seconds = DurationUtil.toSeconds(duration);
22+
23+
// Then
24+
assertEquals(7.000000144, seconds);
25+
}
26+
}

0 commit comments

Comments
 (0)