Skip to content

Commit 877d0bd

Browse files
committed
add bridging for 1.47 api
1 parent 84ecfa5 commit 877d0bd

File tree

20 files changed

+639
-84
lines changed

20 files changed

+639
-84
lines changed

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

+17-4
Original file line numberDiff line numberDiff line change
@@ -120,11 +120,18 @@ private static ApplicationMeterFactory getMeterFactory(String className) {
120120
}
121121

122122
private static ApplicationLoggerFactory getLoggerFactory() {
123-
// this class is defined in opentelemetry-api-1.42
123+
// this class is defined in opentelemetry-api-1.47
124124
ApplicationLoggerFactory loggerFactory =
125125
getLoggerFactory(
126-
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.incubator.logs.ApplicationLoggerFactory142Incubator");
126+
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_47.incubator.logs.ApplicationLoggerFactory147Incubator");
127127
if (loggerFactory == null) {
128+
// this class is defined in opentelemetry-api-1.42
129+
loggerFactory =
130+
getLoggerFactory(
131+
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.incubator.logs.ApplicationLoggerFactory142Incubator");
132+
}
133+
if (loggerFactory == null) {
134+
// this class is defined in opentelemetry-api-1.42
128135
loggerFactory =
129136
getLoggerFactory(
130137
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.logs.ApplicationLoggerFactory142");
@@ -147,10 +154,16 @@ private static ApplicationLoggerFactory getLoggerFactory(String className) {
147154
}
148155

149156
private static ApplicationTracerFactory getTracerFactory() {
150-
// this class is defined in opentelemetry-api-1.40
157+
// this class is defined in opentelemetry-api-1.47
151158
ApplicationTracerFactory tracerFactory =
152159
getTracerFactory(
153-
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.trace.ApplicationTracerFactory140Incubator");
160+
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_47.incubator.trace.ApplicationTracerFactory147Incubator");
161+
if (tracerFactory == null) {
162+
// this class is defined in opentelemetry-api-1.40
163+
tracerFactory =
164+
getTracerFactory(
165+
"io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.trace.ApplicationTracerFactory140Incubator");
166+
}
154167
if (tracerFactory == null) {
155168
tracerFactory = new ApplicationTracerFactory127();
156169
}

instrumentation/opentelemetry-api/opentelemetry-api-1.40/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_40/incubator/OpenTelemetryApiIncubatorInstrumentationModule.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,11 @@ public OpenTelemetryApiIncubatorInstrumentationModule() {
2424

2525
@Override
2626
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
27+
// EventLogger was removed in 1.47, including it here prevents the instrumentation from applying
28+
// to 1.47
2729
return hasClassesNamed(
28-
"application.io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogram");
30+
"application.io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogram",
31+
"io.opentelemetry.api.incubator.events.EventLogger");
2932
}
3033

3134
@Override

instrumentation/opentelemetry-api/opentelemetry-api-1.40/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_40/incubator/trace/ApplicationSpanBuilder140Incubator.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@
2727
import java.util.function.BiConsumer;
2828
import javax.annotation.Nullable;
2929

30-
final class ApplicationSpanBuilder140Incubator extends ApplicationSpanBuilder
30+
public final class ApplicationSpanBuilder140Incubator extends ApplicationSpanBuilder
3131
implements ExtendedSpanBuilder {
3232

3333
private final io.opentelemetry.api.incubator.trace.ExtendedSpanBuilder agentBuilder;
3434

35-
ApplicationSpanBuilder140Incubator(io.opentelemetry.api.trace.SpanBuilder agentBuilder) {
35+
public ApplicationSpanBuilder140Incubator(io.opentelemetry.api.trace.SpanBuilder agentBuilder) {
3636
super(agentBuilder);
3737
this.agentBuilder = (io.opentelemetry.api.incubator.trace.ExtendedSpanBuilder) agentBuilder;
3838
}

instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/incubator/OpenTelemetryApiIncubatorInstrumentationModule.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@ public OpenTelemetryApiIncubatorInstrumentationModule() {
2424

2525
@Override
2626
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
27-
return hasClassesNamed("application.io.opentelemetry.api.incubator.logs.ExtendedLogger");
27+
// EventLogger was removed in 1.47, including it here prevents the instrumentation from applying
28+
// to 1.47
29+
return hasClassesNamed(
30+
"application.io.opentelemetry.api.incubator.logs.ExtendedLogger",
31+
"io.opentelemetry.api.incubator.events.EventLogger");
2832
}
2933

3034
@Override

instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/incubator/logs/ApplicationLogRecordBuilder142.java

-74
This file was deleted.

instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/incubator/logs/ApplicationLogger142Incubator.java

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import application.io.opentelemetry.api.logs.LogRecordBuilder;
99
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_40.incubator.logs.ApplicationLogger140Incubator;
10+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.logs.ApplicationLogRecordBuilder142;
1011

1112
class ApplicationLogger142Incubator extends ApplicationLogger140Incubator {
1213

instrumentation/opentelemetry-api/opentelemetry-api-1.42/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_42/logs/ApplicationLogRecordBuilder142.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@
1313
import java.util.ArrayList;
1414
import java.util.List;
1515

16-
class ApplicationLogRecordBuilder142 extends ApplicationLogRecordBuilder
16+
public class ApplicationLogRecordBuilder142 extends ApplicationLogRecordBuilder
1717
implements LogRecordBuilder {
1818

1919
private final io.opentelemetry.api.logs.LogRecordBuilder agentLogRecordBuilder;
2020

21-
ApplicationLogRecordBuilder142(io.opentelemetry.api.logs.LogRecordBuilder agentLogRecordBuilder) {
21+
public ApplicationLogRecordBuilder142(
22+
io.opentelemetry.api.logs.LogRecordBuilder agentLogRecordBuilder) {
2223
super(agentLogRecordBuilder);
2324
this.agentLogRecordBuilder = agentLogRecordBuilder;
2425
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
plugins {
2+
id("otel.javaagent-instrumentation")
3+
}
4+
5+
dependencies {
6+
compileOnly(project(":opentelemetry-api-shaded-for-instrumenting", configuration = "v1_47"))
7+
compileOnly("io.opentelemetry:opentelemetry-api-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+
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.31:javaagent"))
15+
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.32:javaagent"))
16+
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.37:javaagent"))
17+
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.38:javaagent"))
18+
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.40:javaagent"))
19+
implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.42:javaagent"))
20+
21+
testImplementation("io.opentelemetry:opentelemetry-api-incubator")
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_47.incubator;
7+
8+
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
9+
import static java.util.Collections.singletonList;
10+
11+
import com.google.auto.service.AutoService;
12+
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
13+
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
14+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
15+
import java.util.List;
16+
import net.bytebuddy.matcher.ElementMatcher;
17+
18+
@AutoService(InstrumentationModule.class)
19+
public class OpenTelemetryApiIncubatorInstrumentationModule extends InstrumentationModule
20+
implements ExperimentalInstrumentationModule {
21+
public OpenTelemetryApiIncubatorInstrumentationModule() {
22+
super("opentelemetry-api", "opentelemetry-api-1.47", "opentelemetry-api-incubator-1.47");
23+
}
24+
25+
@Override
26+
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
27+
return hasClassesNamed("application.io.opentelemetry.api.incubator.logs.ExtendedLogger");
28+
}
29+
30+
@Override
31+
public List<TypeInstrumentation> typeInstrumentations() {
32+
return singletonList(new OpenTelemetryIncubatorInstrumentation());
33+
}
34+
35+
@Override
36+
public String getModuleGroup() {
37+
return "opentelemetry-api-bridge";
38+
}
39+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_47.incubator;
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_40.incubator.metrics.ApplicationMeterFactory140Incubator;
14+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_47.incubator.logs.ApplicationLoggerFactory147Incubator;
15+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_47.incubator.trace.ApplicationTracerFactory147Incubator;
16+
import net.bytebuddy.asm.Advice;
17+
import net.bytebuddy.description.type.TypeDescription;
18+
import net.bytebuddy.matcher.ElementMatcher;
19+
20+
public class OpenTelemetryIncubatorInstrumentation implements TypeInstrumentation {
21+
22+
@Override
23+
public ElementMatcher<TypeDescription> typeMatcher() {
24+
return named("application.io.opentelemetry.api.GlobalOpenTelemetry");
25+
}
26+
27+
@Override
28+
public void transform(TypeTransformer transformer) {
29+
transformer.applyAdviceToMethod(
30+
none(), OpenTelemetryIncubatorInstrumentation.class.getName() + "$InitAdvice");
31+
}
32+
33+
@SuppressWarnings({"ReturnValueIgnored", "unused"})
34+
public static class InitAdvice {
35+
@Advice.OnMethodEnter
36+
public static void init() {
37+
// the sole purpose of this advice is to ensure that ApplicationLoggerFactory147Incubator is
38+
// recognized as helper class and injected into class loader
39+
ApplicationLoggerFactory147Incubator.class.getName();
40+
// 1.40 instrumentation does not apply on 1.47, we include only the metrics part here
41+
ApplicationMeterFactory140Incubator.class.getName();
42+
ApplicationTracerFactory147Incubator.class.getName();
43+
}
44+
}
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_47.incubator.logs;
7+
8+
import application.io.opentelemetry.api.incubator.logs.ExtendedLogRecordBuilder;
9+
import io.opentelemetry.api.logs.LogRecordBuilder;
10+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_42.logs.ApplicationLogRecordBuilder142;
11+
12+
public class ApplicationLogRecordBuilder147Incubator extends ApplicationLogRecordBuilder142
13+
implements ExtendedLogRecordBuilder {
14+
15+
private final io.opentelemetry.api.logs.LogRecordBuilder agentLogRecordBuilder;
16+
17+
ApplicationLogRecordBuilder147Incubator(LogRecordBuilder agentLogRecordBuilder) {
18+
super(agentLogRecordBuilder);
19+
this.agentLogRecordBuilder = agentLogRecordBuilder;
20+
}
21+
22+
@Override
23+
public ExtendedLogRecordBuilder setEventName(String eventName) {
24+
((io.opentelemetry.api.incubator.logs.ExtendedLogRecordBuilder) agentLogRecordBuilder)
25+
.setEventName(eventName);
26+
return this;
27+
}
28+
}
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_47.incubator.logs;
7+
8+
import application.io.opentelemetry.api.incubator.logs.ExtendedLogRecordBuilder;
9+
import application.io.opentelemetry.api.incubator.logs.ExtendedLogger;
10+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLogger;
11+
12+
class ApplicationLogger147Incubator extends ApplicationLogger implements ExtendedLogger {
13+
14+
private final io.opentelemetry.api.logs.Logger agentLogger;
15+
16+
ApplicationLogger147Incubator(io.opentelemetry.api.logs.Logger agentLogger) {
17+
super(agentLogger);
18+
this.agentLogger = agentLogger;
19+
}
20+
21+
@Override
22+
public boolean isEnabled() {
23+
return ((io.opentelemetry.api.incubator.logs.ExtendedLogger) agentLogger).isEnabled();
24+
}
25+
26+
@Override
27+
public ExtendedLogRecordBuilder logRecordBuilder() {
28+
return new ApplicationLogRecordBuilder147Incubator(agentLogger.logRecordBuilder());
29+
}
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_47.incubator.logs;
7+
8+
import io.opentelemetry.api.logs.Logger;
9+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLogger;
10+
import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_27.logs.ApplicationLoggerFactory;
11+
12+
// this class is used from opentelemetry-api-1.27.0 via reflection
13+
public class ApplicationLoggerFactory147Incubator implements ApplicationLoggerFactory {
14+
15+
@Override
16+
public ApplicationLogger newLogger(Logger agentLogger) {
17+
return new ApplicationLogger147Incubator(agentLogger);
18+
}
19+
}

0 commit comments

Comments
 (0)