Skip to content

Commit 9fb5b3f

Browse files
authored
Bridge incubator metrics apis (#9884)
1 parent 7400025 commit 9fb5b3f

File tree

29 files changed

+1074
-20
lines changed

29 files changed

+1074
-20
lines changed

instrumentation/opentelemetry-api/opentelemetry-api-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/trace/Bridging.java

+12
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import application.io.opentelemetry.api.trace.StatusCode;
1616
import application.io.opentelemetry.api.trace.TraceState;
1717
import application.io.opentelemetry.api.trace.TraceStateBuilder;
18+
import java.util.ArrayList;
19+
import java.util.List;
1820
import java.util.logging.Logger;
1921

2022
/**
@@ -143,6 +145,16 @@ public static io.opentelemetry.api.common.AttributeKey toAgent(AttributeKey appl
143145
return null;
144146
}
145147

148+
public static List<io.opentelemetry.api.common.AttributeKey<?>> toAgent(
149+
List<AttributeKey<?>> attributeKeys) {
150+
List<io.opentelemetry.api.common.AttributeKey<?>> result =
151+
new ArrayList<>(attributeKeys.size());
152+
for (AttributeKey<?> attributeKey : attributeKeys) {
153+
result.add(toAgent(attributeKey));
154+
}
155+
return result;
156+
}
157+
146158
public static io.opentelemetry.api.trace.StatusCode toAgent(StatusCode applicationStatus) {
147159
io.opentelemetry.api.trace.StatusCode agentCanonicalCode;
148160
try {

instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationDoubleCounterBuilder.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@
1212
import com.google.errorprone.annotations.CanIgnoreReturnValue;
1313
import java.util.function.Consumer;
1414

15-
final class ApplicationDoubleCounterBuilder implements DoubleCounterBuilder {
15+
public class ApplicationDoubleCounterBuilder implements DoubleCounterBuilder {
1616

1717
private final io.opentelemetry.api.metrics.DoubleCounterBuilder agentBuilder;
1818

19-
ApplicationDoubleCounterBuilder(io.opentelemetry.api.metrics.DoubleCounterBuilder agentBuilder) {
19+
protected ApplicationDoubleCounterBuilder(
20+
io.opentelemetry.api.metrics.DoubleCounterBuilder agentBuilder) {
2021
this.agentBuilder = agentBuilder;
2122
}
2223

instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationDoubleGaugeBuilder.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@
1212
import com.google.errorprone.annotations.CanIgnoreReturnValue;
1313
import java.util.function.Consumer;
1414

15-
final class ApplicationDoubleGaugeBuilder implements DoubleGaugeBuilder {
15+
public class ApplicationDoubleGaugeBuilder implements DoubleGaugeBuilder {
1616

1717
private final io.opentelemetry.api.metrics.DoubleGaugeBuilder agentBuilder;
1818

19-
ApplicationDoubleGaugeBuilder(io.opentelemetry.api.metrics.DoubleGaugeBuilder agentBuilder) {
19+
protected ApplicationDoubleGaugeBuilder(
20+
io.opentelemetry.api.metrics.DoubleGaugeBuilder agentBuilder) {
2021
this.agentBuilder = agentBuilder;
2122
}
2223

instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationDoubleHistogramBuilder.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010
import application.io.opentelemetry.api.metrics.LongHistogramBuilder;
1111
import com.google.errorprone.annotations.CanIgnoreReturnValue;
1212

13-
final class ApplicationDoubleHistogramBuilder implements DoubleHistogramBuilder {
13+
public class ApplicationDoubleHistogramBuilder implements DoubleHistogramBuilder {
1414

1515
private final io.opentelemetry.api.metrics.DoubleHistogramBuilder agentBuilder;
1616

17-
ApplicationDoubleHistogramBuilder(
17+
protected ApplicationDoubleHistogramBuilder(
1818
io.opentelemetry.api.metrics.DoubleHistogramBuilder agentBuilder) {
1919
this.agentBuilder = agentBuilder;
2020
}

instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationDoubleUpDownCounterBuilder.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@
1212
import com.google.errorprone.annotations.CanIgnoreReturnValue;
1313
import java.util.function.Consumer;
1414

15-
final class ApplicationDoubleUpDownCounterBuilder implements DoubleUpDownCounterBuilder {
15+
public class ApplicationDoubleUpDownCounterBuilder implements DoubleUpDownCounterBuilder {
1616

1717
private final io.opentelemetry.api.metrics.DoubleUpDownCounterBuilder agentBuilder;
1818

19-
ApplicationDoubleUpDownCounterBuilder(
19+
protected ApplicationDoubleUpDownCounterBuilder(
2020
io.opentelemetry.api.metrics.DoubleUpDownCounterBuilder agentBuilder) {
2121
this.agentBuilder = agentBuilder;
2222
}

instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationLongCounterBuilder.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@
1313
import com.google.errorprone.annotations.CanIgnoreReturnValue;
1414
import java.util.function.Consumer;
1515

16-
final class ApplicationLongCounterBuilder implements LongCounterBuilder {
16+
public class ApplicationLongCounterBuilder implements LongCounterBuilder {
1717

1818
private final io.opentelemetry.api.metrics.LongCounterBuilder agentBuilder;
1919

20-
ApplicationLongCounterBuilder(io.opentelemetry.api.metrics.LongCounterBuilder agentBuilder) {
20+
protected ApplicationLongCounterBuilder(
21+
io.opentelemetry.api.metrics.LongCounterBuilder agentBuilder) {
2122
this.agentBuilder = agentBuilder;
2223
}
2324

instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationLongGaugeBuilder.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@
1111
import com.google.errorprone.annotations.CanIgnoreReturnValue;
1212
import java.util.function.Consumer;
1313

14-
final class ApplicationLongGaugeBuilder implements LongGaugeBuilder {
14+
public class ApplicationLongGaugeBuilder implements LongGaugeBuilder {
1515

1616
private final io.opentelemetry.api.metrics.LongGaugeBuilder agentBuilder;
1717

18-
ApplicationLongGaugeBuilder(io.opentelemetry.api.metrics.LongGaugeBuilder agentBuilder) {
18+
protected ApplicationLongGaugeBuilder(
19+
io.opentelemetry.api.metrics.LongGaugeBuilder agentBuilder) {
1920
this.agentBuilder = agentBuilder;
2021
}
2122

instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationLongHistogramBuilder.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@
99
import application.io.opentelemetry.api.metrics.LongHistogramBuilder;
1010
import com.google.errorprone.annotations.CanIgnoreReturnValue;
1111

12-
final class ApplicationLongHistogramBuilder implements LongHistogramBuilder {
12+
public class ApplicationLongHistogramBuilder implements LongHistogramBuilder {
1313

1414
private final io.opentelemetry.api.metrics.LongHistogramBuilder agentBuilder;
1515

16-
ApplicationLongHistogramBuilder(io.opentelemetry.api.metrics.LongHistogramBuilder agentBuilder) {
16+
protected ApplicationLongHistogramBuilder(
17+
io.opentelemetry.api.metrics.LongHistogramBuilder agentBuilder) {
1718
this.agentBuilder = agentBuilder;
1819
}
1920

instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/ApplicationLongUpDownCounterBuilder.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
import com.google.errorprone.annotations.CanIgnoreReturnValue;
1414
import java.util.function.Consumer;
1515

16-
final class ApplicationLongUpDownCounterBuilder implements LongUpDownCounterBuilder {
16+
public class ApplicationLongUpDownCounterBuilder implements LongUpDownCounterBuilder {
1717

1818
private final io.opentelemetry.api.metrics.LongUpDownCounterBuilder agentBuilder;
1919

20-
ApplicationLongUpDownCounterBuilder(
20+
protected ApplicationLongUpDownCounterBuilder(
2121
io.opentelemetry.api.metrics.LongUpDownCounterBuilder agentBuilder) {
2222
this.agentBuilder = agentBuilder;
2323
}

instrumentation/opentelemetry-api/opentelemetry-api-1.15/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_15/metrics/ApplicationMeter115.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationMeter;
1111
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ObservableMeasurementWrapper;
1212

13-
class ApplicationMeter115 extends ApplicationMeter {
13+
public class ApplicationMeter115 extends ApplicationMeter {
1414

1515
private final io.opentelemetry.api.metrics.Meter agentMeter;
1616

17-
ApplicationMeter115(io.opentelemetry.api.metrics.Meter agentMeter) {
17+
protected ApplicationMeter115(io.opentelemetry.api.metrics.Meter agentMeter) {
1818
super(agentMeter);
1919
this.agentMeter = agentMeter;
2020
}

instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/ApplicationOpenTelemetry127.java

+19-2
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@
1111
import application.io.opentelemetry.api.trace.TracerProvider;
1212
import application.io.opentelemetry.context.propagation.ContextPropagators;
1313
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.context.propagation.ApplicationContextPropagators;
14+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationMeterFactory;
1415
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationMeterProvider;
1516
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_15.metrics.ApplicationMeterFactory115;
1617
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLoggerProvider;
1718
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_4.trace.ApplicationTracerProvider14;
19+
import java.lang.reflect.InvocationTargetException;
1820

1921
public final class ApplicationOpenTelemetry127 implements OpenTelemetry {
2022

@@ -36,8 +38,7 @@ private ApplicationOpenTelemetry127() {
3638
applicationContextPropagators =
3739
new ApplicationContextPropagators(agentOpenTelemetry.getPropagators());
3840
applicationMeterProvider =
39-
new ApplicationMeterProvider(
40-
new ApplicationMeterFactory115(), agentOpenTelemetry.getMeterProvider());
41+
new ApplicationMeterProvider(getMeterFactory(), agentOpenTelemetry.getMeterProvider());
4142
applicationLoggerProvider = new ApplicationLoggerProvider(agentOpenTelemetry.getLogsBridge());
4243
}
4344

@@ -60,4 +61,20 @@ public LoggerProvider getLogsBridge() {
6061
public ContextPropagators getPropagators() {
6162
return applicationContextPropagators;
6263
}
64+
65+
private static ApplicationMeterFactory getMeterFactory() {
66+
try {
67+
// this class is defined in opentelemetry-api-1.31
68+
Class<?> clazz =
69+
Class.forName(
70+
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_31.metrics.ApplicationMeterFactory131");
71+
return (ApplicationMeterFactory) clazz.getConstructor().newInstance();
72+
} catch (ClassNotFoundException
73+
| NoSuchMethodException
74+
| InstantiationException
75+
| IllegalAccessException
76+
| InvocationTargetException exception) {
77+
return new ApplicationMeterFactory115();
78+
}
79+
}
6380
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
plugins {
2+
id("otel.javaagent-instrumentation")
3+
}
4+
5+
dependencies {
6+
compileOnly(project(":opentelemetry-api-shaded-for-instrumenting", configuration = "v1_31"))
7+
compileOnly("io.opentelemetry:opentelemetry-extension-incubator")
8+
9+
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.0:javaagent"))
10+
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.4:javaagent"))
11+
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.10:javaagent"))
12+
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.15:javaagent"))
13+
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.27:javaagent"))
14+
15+
testImplementation("io.opentelemetry:opentelemetry-extension-incubator")
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_31;
7+
8+
import static java.util.Collections.singletonList;
9+
10+
import com.google.auto.service.AutoService;
11+
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
12+
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
13+
import java.util.List;
14+
15+
@AutoService(InstrumentationModule.class)
16+
public class OpenTelemetryApiInstrumentationModule extends InstrumentationModule {
17+
public OpenTelemetryApiInstrumentationModule() {
18+
super("opentelemetry-api", "opentelemetry-api-1.31");
19+
}
20+
21+
@Override
22+
public boolean isIndyModule() {
23+
return false;
24+
}
25+
26+
@Override
27+
public List<TypeInstrumentation> typeInstrumentations() {
28+
return singletonList(new OpenTelemetryInstrumentation());
29+
}
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_31;
7+
8+
import static net.bytebuddy.matcher.ElementMatchers.named;
9+
import static net.bytebuddy.matcher.ElementMatchers.none;
10+
11+
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
12+
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
13+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_31.metrics.ApplicationMeterFactory131;
14+
import net.bytebuddy.asm.Advice;
15+
import net.bytebuddy.description.type.TypeDescription;
16+
import net.bytebuddy.matcher.ElementMatcher;
17+
18+
public class OpenTelemetryInstrumentation implements TypeInstrumentation {
19+
20+
@Override
21+
public ElementMatcher<TypeDescription> typeMatcher() {
22+
return named("application.io.opentelemetry.api.GlobalOpenTelemetry");
23+
}
24+
25+
@Override
26+
public void transform(TypeTransformer transformer) {
27+
transformer.applyAdviceToMethod(
28+
none(), OpenTelemetryInstrumentation.class.getName() + "$InitAdvice");
29+
}
30+
31+
@SuppressWarnings({"ReturnValueIgnored", "unused"})
32+
public static class InitAdvice {
33+
@Advice.OnMethodEnter
34+
public static void init() {
35+
// the sole purpose of this advice is to ensure that ApplicationMeterFactory131 is recognized
36+
// as helper class and injected into class loader
37+
ApplicationMeterFactory131.class.getName();
38+
}
39+
}
40+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_31.metrics;
7+
8+
import application.io.opentelemetry.api.common.AttributeKey;
9+
import application.io.opentelemetry.extension.incubator.metrics.ExtendedDoubleCounterBuilder;
10+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
11+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleCounterBuilder;
12+
import java.util.List;
13+
14+
final class ApplicationDoubleCounterBuilder131 extends ApplicationDoubleCounterBuilder
15+
implements ExtendedDoubleCounterBuilder {
16+
17+
private final io.opentelemetry.api.metrics.DoubleCounterBuilder agentBuilder;
18+
19+
ApplicationDoubleCounterBuilder131(
20+
io.opentelemetry.api.metrics.DoubleCounterBuilder agentBuilder) {
21+
super(agentBuilder);
22+
this.agentBuilder = agentBuilder;
23+
}
24+
25+
@Override
26+
public ExtendedDoubleCounterBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
27+
((io.opentelemetry.extension.incubator.metrics.ExtendedDoubleCounterBuilder) agentBuilder)
28+
.setAttributesAdvice(Bridging.toAgent(attributes));
29+
return this;
30+
}
31+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_31.metrics;
7+
8+
import application.io.opentelemetry.api.common.AttributeKey;
9+
import application.io.opentelemetry.api.common.Attributes;
10+
import application.io.opentelemetry.api.metrics.LongGaugeBuilder;
11+
import application.io.opentelemetry.extension.incubator.metrics.DoubleGauge;
12+
import application.io.opentelemetry.extension.incubator.metrics.ExtendedDoubleGaugeBuilder;
13+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
14+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleGaugeBuilder;
15+
import java.util.List;
16+
17+
final class ApplicationDoubleGaugeBuilder131 extends ApplicationDoubleGaugeBuilder
18+
implements ExtendedDoubleGaugeBuilder {
19+
20+
private final io.opentelemetry.api.metrics.DoubleGaugeBuilder agentBuilder;
21+
22+
ApplicationDoubleGaugeBuilder131(io.opentelemetry.api.metrics.DoubleGaugeBuilder agentBuilder) {
23+
super(agentBuilder);
24+
this.agentBuilder = agentBuilder;
25+
}
26+
27+
@Override
28+
public LongGaugeBuilder ofLongs() {
29+
return new ApplicationLongGaugeBuilder131(agentBuilder.ofLongs());
30+
}
31+
32+
@Override
33+
public DoubleGauge build() {
34+
io.opentelemetry.extension.incubator.metrics.DoubleGauge agentDoubleGauge =
35+
((io.opentelemetry.extension.incubator.metrics.ExtendedDoubleGaugeBuilder) agentBuilder)
36+
.build();
37+
return new DoubleGauge() {
38+
39+
@Override
40+
public void set(double value) {
41+
agentDoubleGauge.set(value);
42+
}
43+
44+
@Override
45+
public void set(double value, Attributes attributes) {
46+
agentDoubleGauge.set(value, Bridging.toAgent(attributes));
47+
}
48+
};
49+
}
50+
51+
@Override
52+
public ExtendedDoubleGaugeBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
53+
((io.opentelemetry.extension.incubator.metrics.ExtendedDoubleGaugeBuilder) agentBuilder)
54+
.setAttributesAdvice(Bridging.toAgent(attributes));
55+
return this;
56+
}
57+
}

0 commit comments

Comments
 (0)