Skip to content

Commit 3e94d78

Browse files
use TimeUnit for timed.unit
1 parent 95e92db commit 3e94d78

File tree

6 files changed

+76
-17
lines changed

6 files changed

+76
-17
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ replay_pid*
6060

6161
# add this so that it can be easy to switch to the annotation class for coding.
6262
# it would be removed before being merged to main
63+
instrumentation/opentelemetry-instrumentation-annotations-1.16/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/instrumentationannotations/annotations/
6364
instrumentation/opentelemetry-instrumentation-annotation-counted/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/counted/annotations/
6465
instrumentation/opentelemetry-instrumentation-annotation-timed/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/timed/annotations/
6566

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,36 @@
1-
Comparing source compatibility of opentelemetry-instrumentation-annotations-2.5.0-SNAPSHOT.jar against opentelemetry-instrumentation-annotations-2.4.0.jar
2-
No changes.
1+
Comparing source compatibility of against
2+
+++ NEW ANNOTATION: PUBLIC(+) ABSTRACT(+) io.opentelemetry.instrumentation.annotations.Counted (not serializable)
3+
+++ CLASS FILE FORMAT VERSION: 52.0 <- n.a.
4+
+++ NEW INTERFACE: java.lang.annotation.Annotation
5+
+++ NEW SUPERCLASS: java.lang.Object
6+
+++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.lang.String[] additionalAttributes()
7+
+++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.lang.String description()
8+
+++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.lang.String returnValueAttribute()
9+
+++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.lang.String unit()
10+
+++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.lang.String value()
11+
+++ NEW ANNOTATION: java.lang.annotation.Target
12+
+++ NEW ELEMENT: value=java.lang.annotation.ElementType.METHOD,java.lang.annotation.ElementType.CONSTRUCTOR (+)
13+
+++ NEW ANNOTATION: java.lang.annotation.Retention
14+
+++ NEW ELEMENT: value=java.lang.annotation.RetentionPolicy.RUNTIME (+)
15+
+++ NEW ANNOTATION: PUBLIC(+) ABSTRACT(+) io.opentelemetry.instrumentation.annotations.MetricAttribute (not serializable)
16+
+++ CLASS FILE FORMAT VERSION: 52.0 <- n.a.
17+
+++ NEW INTERFACE: java.lang.annotation.Annotation
18+
+++ NEW SUPERCLASS: java.lang.Object
19+
+++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.lang.String value()
20+
+++ NEW ANNOTATION: java.lang.annotation.Target
21+
+++ NEW ELEMENT: value=java.lang.annotation.ElementType.PARAMETER (+)
22+
+++ NEW ANNOTATION: java.lang.annotation.Retention
23+
+++ NEW ELEMENT: value=java.lang.annotation.RetentionPolicy.RUNTIME (+)
24+
+++ NEW ANNOTATION: PUBLIC(+) ABSTRACT(+) io.opentelemetry.instrumentation.annotations.Timed (not serializable)
25+
+++ CLASS FILE FORMAT VERSION: 52.0 <- n.a.
26+
+++ NEW INTERFACE: java.lang.annotation.Annotation
27+
+++ NEW SUPERCLASS: java.lang.Object
28+
+++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.lang.String[] additionalAttributes()
29+
+++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.lang.String description()
30+
+++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.lang.String returnValueAttribute()
31+
+++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.util.concurrent.TimeUnit unit()
32+
+++ NEW METHOD: PUBLIC(+) ABSTRACT(+) java.lang.String value()
33+
+++ NEW ANNOTATION: java.lang.annotation.Target
34+
+++ NEW ELEMENT: value=java.lang.annotation.ElementType.METHOD,java.lang.annotation.ElementType.CONSTRUCTOR (+)
35+
+++ NEW ANNOTATION: java.lang.annotation.Retention
36+
+++ NEW ELEMENT: value=java.lang.annotation.RetentionPolicy.RUNTIME (+)

instrumentation-annotations/src/main/java/io/opentelemetry/instrumentation/annotations/Timed.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.lang.annotation.Retention;
1010
import java.lang.annotation.RetentionPolicy;
1111
import java.lang.annotation.Target;
12+
import java.util.concurrent.TimeUnit;
1213

1314
/**
1415
* This annotation creates a {@link io.opentelemetry.api.metrics.LongHistogram Histogram} instrument
@@ -56,9 +57,9 @@
5657
/**
5758
* The unit for the instrument.
5859
*
59-
* <p>Default is seconds.
60+
* <p>Default is milliseconds.
6061
*/
61-
String unit() default "s";
62+
TimeUnit unit() default TimeUnit.MILLISECONDS;
6263

6364
/**
6465
* List of key-value pairs to supply additional attributes.

instrumentation/opentelemetry-instrumentation-annotation-timed/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/timed/TimedSingletons.java

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import java.lang.reflect.Parameter;
1818
import java.util.concurrent.ConcurrentHashMap;
1919
import java.util.concurrent.ConcurrentMap;
20+
import java.util.concurrent.TimeUnit;
2021

2122
public final class TimedSingletons {
2223

@@ -71,9 +72,10 @@ public static void recordHistogram(Method method, long startNanoTime) {
7172
Timed timedAnnotation = method.getAnnotation(Timed.class);
7273
AttributesBuilder attributesBuilder = Attributes.builder();
7374
extractAdditionAttributes(timedAnnotation.additionalAttributes(), attributesBuilder);
75+
TimeUnit unit = extractTimeUnit(timedAnnotation);
7476
long nanoDelta = System.nanoTime() - startNanoTime;
75-
double durationSec = ((double) nanoDelta) / 1000_000_000;
76-
getHistogram(timedAnnotation).record(durationSec, attributesBuilder.build());
77+
double duration = unit.convert(nanoDelta, TimeUnit.NANOSECONDS);
78+
getHistogram(timedAnnotation).record(duration, attributesBuilder.build());
7779
}
7880

7981
private static DoubleHistogram getHistogram(Timed timedAnnotation) {
@@ -88,11 +90,12 @@ private static DoubleHistogram getHistogram(Timed timedAnnotation) {
8890
if (TIMED_DEFAULT_NAME.equals(metricName)) {
8991
doubleHistogram = METER.histogramBuilder(metricName).build();
9092
} else {
93+
String unitStr = extractUnitStr(timedAnnotation);
9194
doubleHistogram =
9295
METER
9396
.histogramBuilder(metricName)
9497
.setDescription(timedAnnotation.description())
95-
.setUnit(timedAnnotation.unit())
98+
.setUnit(unitStr)
9699
.build();
97100
}
98101
HISTOGRAMS.put(metricName, doubleHistogram);
@@ -102,5 +105,25 @@ private static DoubleHistogram getHistogram(Timed timedAnnotation) {
102105
return HISTOGRAMS.get(metricName);
103106
}
104107

108+
private static TimeUnit extractTimeUnit(Timed timedAnnotation) {
109+
if (null == timedAnnotation.unit()) {
110+
return TimeUnit.MILLISECONDS;
111+
}
112+
return timedAnnotation.unit();
113+
}
114+
115+
private static String extractUnitStr(Timed timedAnnotation) {
116+
switch (timedAnnotation.unit()) {
117+
case NANOSECONDS:
118+
return "ns";
119+
case MICROSECONDS:
120+
return "µs";
121+
case SECONDS:
122+
return "s";
123+
default:
124+
return "ms";
125+
}
126+
}
127+
105128
private TimedSingletons() {}
106129
}

instrumentation/opentelemetry-instrumentation-annotation-timed/javaagent/src/test/java/io/opentelemetry/test/annotations/timed/TimedExample.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package io.opentelemetry.test.annotations.timed;
77

88
import io.opentelemetry.instrumentation.annotations.Timed;
9+
import java.util.concurrent.TimeUnit;
910

1011
public class TimedExample {
1112
public static final String ANOTHER_NAME_HISTOGRAM = "another.name.duration";
@@ -21,14 +22,14 @@ public void exampleWithAnotherName() {}
2122
@Timed(description = METRIC_DESCRIPTION)
2223
public void exampleWithDescriptionAndDefaultValue() {}
2324

24-
@Timed(unit = METRIC_UNIT)
25-
public void exampleWithUnitAndDefaultValue() {}
25+
@Timed(unit = TimeUnit.MICROSECONDS)
26+
public void exampleWithUnitUSAndDefaultValue() {}
2627

2728
@Timed(value = "example.with.description.duration", description = METRIC_DESCRIPTION)
2829
public void exampleWithDescription() {}
2930

30-
@Timed(value = "example.with.unit.duration", unit = METRIC_UNIT)
31-
public void exampleWithUnit() {}
31+
@Timed(value = "example.with.unit.duration", unit = TimeUnit.SECONDS)
32+
public void exampleWithUnitS() {}
3233

3334
@Timed(additionalAttributes = {"key1", "value1", "key2", "value2"})
3435
public void exampleWithAdditionalAttributes1() {}

instrumentation/opentelemetry-instrumentation-annotation-timed/javaagent/src/test/java/io/opentelemetry/test/annotations/timed/TimedInstrumentationTest.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import static io.opentelemetry.test.annotations.timed.TimedExample.ANOTHER_NAME_HISTOGRAM;
99
import static io.opentelemetry.test.annotations.timed.TimedExample.METRIC_DESCRIPTION;
10-
import static io.opentelemetry.test.annotations.timed.TimedExample.METRIC_UNIT;
1110
import static org.assertj.core.api.Assertions.assertThat;
1211

1312
import io.opentelemetry.api.common.AttributeKey;
@@ -49,8 +48,8 @@ void testExampleWithDescriptionAndDefaultValue() {
4948
}
5049

5150
@Test
52-
void testExampleWithUnitAndDefaultValue() {
53-
new TimedExample().exampleWithUnitAndDefaultValue();
51+
void testExampleWithUnitUSAndDefaultValue() {
52+
new TimedExample().exampleWithUnitUSAndDefaultValue();
5453
testing.waitAndAssertMetrics(
5554
TIMED_INSTRUMENTATION_NAME, metric -> metric.hasName(TIMED_DEFAULT_NAME).hasUnit(""));
5655
}
@@ -65,11 +64,11 @@ void testExampleWithDescription() {
6564
}
6665

6766
@Test
68-
void testExampleWithUnit() {
69-
new TimedExample().exampleWithUnit();
67+
void testExampleWithUnitS() {
68+
new TimedExample().exampleWithUnitS();
7069
testing.waitAndAssertMetrics(
7170
TIMED_INSTRUMENTATION_NAME,
72-
metric -> metric.hasName("example.with.unit.duration").hasUnit(METRIC_UNIT));
71+
metric -> metric.hasName("example.with.unit.duration").hasUnit("s"));
7372
}
7473

7574
@Test

0 commit comments

Comments
 (0)