Skip to content

Commit 34e74b8

Browse files
jack-bergzeitlingertrask
authored
Instrument new GlobalOpenTelemetry methods introduced in 1.57 (#15620)
Co-authored-by: Gregor Zeitlinger <[email protected]> Co-authored-by: Trask Stalnaker <[email protected]>
1 parent 524158b commit 34e74b8

File tree

10 files changed

+168
-0
lines changed

10 files changed

+168
-0
lines changed

.fossa.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -838,6 +838,9 @@ targets:
838838
- type: gradle
839839
path: ./
840840
target: ':instrumentation:opentelemetry-api:opentelemetry-api-1.56:javaagent'
841+
- type: gradle
842+
path: ./
843+
target: ':instrumentation:opentelemetry-api:opentelemetry-api-1.57:javaagent'
841844
- type: gradle
842845
path: ./
843846
target: ':instrumentation:pekko:pekko-actor-1.0:javaagent'

docs/instrumentation-list.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12071,6 +12071,10 @@ internal:
1207112071
source_path: instrumentation/opentelemetry-api/opentelemetry-api-1.56
1207212072
scope:
1207312073
name: io.opentelemetry.opentelemetry-api-1.56
12074+
- name: opentelemetry-api-1.57
12075+
source_path: instrumentation/opentelemetry-api/opentelemetry-api-1.57
12076+
scope:
12077+
name: io.opentelemetry.opentelemetry-api-1.57
1207412078
- name: opentelemetry-instrumentation-api
1207512079
source_path: instrumentation/opentelemetry-instrumentation-api
1207612080
scope:
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
plugins {
2+
id("otel.javaagent-instrumentation")
3+
}
4+
5+
dependencies {
6+
compileOnly(project(":opentelemetry-api-shaded-for-instrumenting", configuration = "v1_57"))
7+
}
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_57;
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 OpenTelemetryApInstrumentationModule extends InstrumentationModule
20+
implements ExperimentalInstrumentationModule {
21+
public OpenTelemetryApInstrumentationModule() {
22+
super("opentelemetry-api", "opentelemetry-api-1.57");
23+
}
24+
25+
@Override
26+
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
27+
return hasClassesNamed("application.io.opentelemetry.api.GlobalOpenTelemetry");
28+
}
29+
30+
@Override
31+
public List<TypeInstrumentation> typeInstrumentations() {
32+
return singletonList(new OpenTelemetryInstrumentation());
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,63 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_57;
7+
8+
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
9+
import static net.bytebuddy.matcher.ElementMatchers.isStatic;
10+
import static net.bytebuddy.matcher.ElementMatchers.named;
11+
import static net.bytebuddy.matcher.ElementMatchers.returns;
12+
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
13+
14+
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
15+
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
16+
import net.bytebuddy.asm.Advice;
17+
import net.bytebuddy.asm.Advice.AssignReturned;
18+
import net.bytebuddy.description.type.TypeDescription;
19+
import net.bytebuddy.matcher.ElementMatcher;
20+
21+
public class OpenTelemetryInstrumentation implements TypeInstrumentation {
22+
23+
@Override
24+
public ElementMatcher<TypeDescription> typeMatcher() {
25+
return named("application.io.opentelemetry.api.GlobalOpenTelemetry");
26+
}
27+
28+
@Override
29+
public void transform(TypeTransformer transformer) {
30+
transformer.applyAdviceToMethod(
31+
isMethod()
32+
.and(isStatic())
33+
.and(named("isSet"))
34+
.and(takesArguments(0))
35+
.and(returns(boolean.class)),
36+
OpenTelemetryInstrumentation.class.getName() + "$IsSetAdvice");
37+
transformer.applyAdviceToMethod(
38+
isMethod()
39+
.and(isStatic())
40+
.and(named("getOrNoop"))
41+
.and(takesArguments(0))
42+
.and(returns(named("application.io.opentelemetry.api.OpenTelemetry"))),
43+
OpenTelemetryInstrumentation.class.getName() + "$GetOrNoopAdvice");
44+
}
45+
46+
@SuppressWarnings("unused")
47+
public static class IsSetAdvice {
48+
@AssignReturned.ToReturned
49+
@Advice.OnMethodExit
50+
public static boolean methodExit() {
51+
return true;
52+
}
53+
}
54+
55+
@SuppressWarnings("unused")
56+
public static class GetOrNoopAdvice {
57+
@AssignReturned.ToReturned
58+
@Advice.OnMethodExit
59+
public static application.io.opentelemetry.api.OpenTelemetry methodExit() {
60+
return application.io.opentelemetry.api.GlobalOpenTelemetry.get();
61+
}
62+
}
63+
}
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_57;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
import io.opentelemetry.api.GlobalOpenTelemetry;
11+
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
12+
import org.junit.jupiter.api.Test;
13+
import org.junit.jupiter.api.extension.RegisterExtension;
14+
15+
class GlobalOpenTelemetryTest {
16+
@RegisterExtension
17+
static final AgentInstrumentationExtension testing = AgentInstrumentationExtension.create();
18+
19+
@Test
20+
void isSet() {
21+
assertThat(GlobalOpenTelemetry.isSet()).isTrue();
22+
}
23+
24+
@Test
25+
void getOrNoop() {
26+
assertThat(GlobalOpenTelemetry.getOrNoop()).isEqualTo(GlobalOpenTelemetry.get());
27+
}
28+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
classification: internal

javaagent/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ dependencies {
9191
baseJavaagentLibs(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.50:javaagent"))
9292
baseJavaagentLibs(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.52:javaagent"))
9393
baseJavaagentLibs(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.56:javaagent"))
94+
baseJavaagentLibs(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.57:javaagent"))
9495
baseJavaagentLibs(project(":instrumentation:opentelemetry-instrumentation-api:javaagent"))
9596
baseJavaagentLibs(project(":instrumentation:opentelemetry-instrumentation-annotations-1.16:javaagent"))
9697
baseJavaagentLibs(project(":instrumentation:executors:javaagent"))

opentelemetry-api-shaded-for-instrumenting/build.gradle.kts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,13 @@ val v1_56Deps by configurations.creating {
100100
exclude("io.opentelemetry", "opentelemetry-bom")
101101
exclude("io.opentelemetry", "opentelemetry-bom-alpha")
102102
}
103+
val v1_57Deps by configurations.creating {
104+
isCanBeResolved = true
105+
isCanBeConsumed = false
106+
// exclude the bom added by dependencyManagement
107+
exclude("io.opentelemetry", "opentelemetry-bom")
108+
exclude("io.opentelemetry", "opentelemetry-bom-alpha")
109+
}
103110
// configuration for publishing the shadowed artifact
104111
val v1_10 by configurations.creating {
105112
isCanBeConsumed = true
@@ -153,6 +160,10 @@ val v1_56 by configurations.creating {
153160
isCanBeConsumed = true
154161
isCanBeResolved = false
155162
}
163+
val v1_57 by configurations.creating {
164+
isCanBeConsumed = true
165+
isCanBeResolved = false
166+
}
156167

157168
dependencies {
158169
latestDeps("io.opentelemetry:opentelemetry-api")
@@ -239,6 +250,11 @@ dependencies {
239250
strictly("1.56.0-alpha")
240251
}
241252
}
253+
v1_57Deps("io.opentelemetry:$it") {
254+
version {
255+
strictly("1.57.0-alpha")
256+
}
257+
}
242258
}
243259
}
244260

@@ -306,6 +322,10 @@ tasks {
306322
configurations = listOf(v1_56Deps)
307323
archiveClassifier.set("v1_56")
308324
}
325+
val v1_57Shadow by registering(ShadowJar::class) {
326+
configurations = listOf(v1_57Deps)
327+
archiveClassifier.set("v1_57")
328+
}
309329

310330
artifacts {
311331
add(v1_10.name, v1_10Shadow)
@@ -321,5 +341,6 @@ tasks {
321341
add(v1_50.name, v1_50Shadow)
322342
add(v1_52.name, v1_52Shadow)
323343
add(v1_56.name, v1_56Shadow)
344+
add(v1_57.name, v1_57Shadow)
324345
}
325346
}

settings.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,7 @@ include(":instrumentation:opentelemetry-api:opentelemetry-api-1.47:javaagent")
505505
include(":instrumentation:opentelemetry-api:opentelemetry-api-1.50:javaagent")
506506
include(":instrumentation:opentelemetry-api:opentelemetry-api-1.52:javaagent")
507507
include(":instrumentation:opentelemetry-api:opentelemetry-api-1.56:javaagent")
508+
include(":instrumentation:opentelemetry-api:opentelemetry-api-1.57:javaagent")
508509
include(":instrumentation:opentelemetry-extension-annotations-1.0:javaagent")
509510
include(":instrumentation:opentelemetry-extension-kotlin-1.0:javaagent")
510511
include(":instrumentation:opentelemetry-instrumentation-annotations-1.16:javaagent")

0 commit comments

Comments
 (0)