|
5 | 5 |
|
6 | 6 | package io.opentelemetry.javaagent.instrumentation.timed;
|
7 | 7 |
|
| 8 | +import static java.util.concurrent.TimeUnit.MICROSECONDS; |
| 9 | +import static java.util.concurrent.TimeUnit.NANOSECONDS; |
| 10 | +import static java.util.concurrent.TimeUnit.SECONDS; |
| 11 | + |
8 | 12 | import application.io.opentelemetry.instrumentation.annotations.MetricAttribute;
|
9 | 13 | import application.io.opentelemetry.instrumentation.annotations.Timed;
|
| 14 | +// import io.opentelemetry.javaagent.instrumentation.timed.annotations.Timed; |
| 15 | +// import io.opentelemetry.javaagent.instrumentation.timed.annotations.MetricAttribute; |
10 | 16 | import io.opentelemetry.api.GlobalOpenTelemetry;
|
11 | 17 | import io.opentelemetry.api.common.Attributes;
|
12 | 18 | import io.opentelemetry.api.common.AttributesBuilder;
|
|
19 | 25 | import java.util.concurrent.ConcurrentMap;
|
20 | 26 | import java.util.concurrent.TimeUnit;
|
21 | 27 |
|
22 |
| -public final class TimedSingletons { |
| 28 | +public final class TimedHelper { |
23 | 29 |
|
24 | 30 | private static final String INSTRUMENTATION_NAME =
|
25 | 31 | "io.opentelemetry.opentelemetry-instrumentation-annotation-timed";
|
@@ -58,24 +64,52 @@ private static void extractAdditionAttributes(
|
58 | 64 | }
|
59 | 65 |
|
60 | 66 | public static void recordHistogramWithAttributes(
|
61 |
| - MethodRequest methodRequest, long startNanoTime) { |
| 67 | + MethodRequest methodRequest, Throwable throwable, Object returnValue, long startNanoTime) { |
62 | 68 | Timed timedAnnotation = methodRequest.method().getAnnotation(Timed.class);
|
63 |
| - AttributesBuilder attributesBuilder = Attributes.builder(); |
| 69 | + AttributesBuilder attributesBuilder = |
| 70 | + getCommonAttributeBuilder(throwable, returnValue, timedAnnotation); |
| 71 | + double duration = getTransformedDuration(startNanoTime, timedAnnotation); |
64 | 72 | extractMetricAttributes(methodRequest, attributesBuilder);
|
65 |
| - extractAdditionAttributes(timedAnnotation.additionalAttributes(), attributesBuilder); |
66 |
| - long nanoTimeDelta = System.nanoTime() - startNanoTime; |
67 |
| - double duration = ((double) nanoTimeDelta) / 1000_000_000; |
68 | 73 | getHistogram(timedAnnotation).record(duration, attributesBuilder.build());
|
69 | 74 | }
|
70 | 75 |
|
71 |
| - public static void recordHistogram(Method method, long startNanoTime) { |
| 76 | + public static void recordHistogram( |
| 77 | + Method method, Throwable throwable, Object returnValue, long startNanoTime) { |
72 | 78 | Timed timedAnnotation = method.getAnnotation(Timed.class);
|
| 79 | + AttributesBuilder attributesBuilder = |
| 80 | + getCommonAttributeBuilder(throwable, returnValue, timedAnnotation); |
| 81 | + double duration = getTransformedDuration(startNanoTime, timedAnnotation); |
| 82 | + getHistogram(timedAnnotation).record(duration, attributesBuilder.build()); |
| 83 | + } |
| 84 | + |
| 85 | + private static AttributesBuilder getCommonAttributeBuilder( |
| 86 | + Throwable throwable, Object returnValue, Timed timedAnnotation) { |
73 | 87 | AttributesBuilder attributesBuilder = Attributes.builder();
|
74 | 88 | extractAdditionAttributes(timedAnnotation.additionalAttributes(), attributesBuilder);
|
| 89 | + extractReturnValue(timedAnnotation, returnValue, attributesBuilder); |
| 90 | + extractException(throwable, attributesBuilder); |
| 91 | + return attributesBuilder; |
| 92 | + } |
| 93 | + |
| 94 | + private static double getTransformedDuration(long startNanoTime, Timed timedAnnotation) { |
75 | 95 | TimeUnit unit = extractTimeUnit(timedAnnotation);
|
76 | 96 | long nanoDelta = System.nanoTime() - startNanoTime;
|
77 |
| - double duration = unit.convert(nanoDelta, TimeUnit.NANOSECONDS); |
78 |
| - getHistogram(timedAnnotation).record(duration, attributesBuilder.build()); |
| 97 | + double duration = unit.convert(nanoDelta, NANOSECONDS); |
| 98 | + return duration; |
| 99 | + } |
| 100 | + |
| 101 | + private static void extractException(Throwable throwable, AttributesBuilder attributesBuilder) { |
| 102 | + if (null != throwable) { |
| 103 | + attributesBuilder.put("exception", throwable.getClass().getName()); |
| 104 | + } |
| 105 | + } |
| 106 | + |
| 107 | + private static void extractReturnValue( |
| 108 | + Timed countedAnnotation, Object returnValue, AttributesBuilder attributesBuilder) { |
| 109 | + if (null != countedAnnotation.returnValueAttribute() |
| 110 | + && !countedAnnotation.returnValueAttribute().isEmpty()) { |
| 111 | + attributesBuilder.put(countedAnnotation.returnValueAttribute(), returnValue.toString()); |
| 112 | + } |
79 | 113 | }
|
80 | 114 |
|
81 | 115 | private static DoubleHistogram getHistogram(Timed timedAnnotation) {
|
@@ -125,5 +159,5 @@ private static String extractUnitStr(Timed timedAnnotation) {
|
125 | 159 | }
|
126 | 160 | }
|
127 | 161 |
|
128 |
| - private TimedSingletons() {} |
| 162 | + private TimedHelper() {} |
129 | 163 | }
|
0 commit comments