Skip to content

Commit a3a5725

Browse files
authored
Add instrumentation for graphql 20 that does not use deprecated methods (#10779)
1 parent 9db9661 commit a3a5725

File tree

37 files changed

+656
-163
lines changed

37 files changed

+656
-163
lines changed

conventions/src/main/kotlin/io.opentelemetry.instrumentation.base.gradle.kts

+15-7
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,25 @@ extra["testLatestDeps"] = testLatestDeps
3434
abstract class TestLatestDepsRule : ComponentMetadataRule {
3535
override fun execute(context: ComponentMetadataContext) {
3636
val version = context.details.id.version
37-
if (version.contains("-alpha", true) ||
38-
version.contains("-beta", true) ||
39-
version.contains("-rc", true) ||
40-
version.contains("-m", true) || // e.g. spring milestones are published to grails repo
41-
version.contains(".alpha", true) || // e.g. netty
42-
version.contains(".beta", true) || // e.g. hibernate
43-
version.contains(".cr", true) // e.g. hibernate
37+
if (version.contains("-alpha", true)
38+
|| version.contains("-beta", true)
39+
|| version.contains("-rc", true)
40+
|| version.contains("-m", true) // e.g. spring milestones are published to grails repo
41+
|| version.contains(".alpha", true) // e.g. netty
42+
|| version.contains(".beta", true) // e.g. hibernate
43+
|| version.contains(".cr", true) // e.g. hibernate
44+
|| version.endsWith("-nf-execution") // graphql
45+
|| GIT_SHA_PATTERN.matches(version) // graphql
46+
|| DATETIME_PATTERN.matches(version) // graphql
4447
) {
4548
context.details.status = "milestone"
4649
}
4750
}
51+
52+
companion object {
53+
private val GIT_SHA_PATTERN = Regex("^.*-[0-9a-f]{7,}$")
54+
private val DATETIME_PATTERN = Regex("^\\d{4}-\\d{2}-\\d{2}T\\d{2}-\\d{2}-\\d{2}.*$")
55+
}
4856
}
4957

5058
configurations {

docs/supported-libraries.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ These are the supported libraries and frameworks:
6464
| [Geode Client](https://geode.apache.org/) | 1.4+ | N/A | [Database Client Spans] |
6565
| [Google HTTP Client](https://github.com/googleapis/google-http-java-client) | 1.19+ | N/A | [HTTP Client Spans], [HTTP Client Metrics] |
6666
| [Grails](https://grails.org/) | 3.0+ | N/A | Provides `http.route` [2], Controller Spans [3] |
67-
| [GraphQL Java](https://www.graphql-java.com/) | 12.0+ | [opentelemetry-graphql-java-12.0](../instrumentation/graphql-java-12.0/library) | [GraphQL Server Spans] |
67+
| [GraphQL Java](https://www.graphql-java.com/) | 12.0+ | [opentelemetry-graphql-java-12.0](../instrumentation/graphql-java/graphql-java-12.0/library),<br>[opentelemetry-graphql-java-20.0](../instrumentation/graphql-java/graphql-java-20.0/library) | [GraphQL Server Spans] |
6868
| [gRPC](https://github.com/grpc/grpc-java) | 1.6+ | [opentelemetry-grpc-1.6](../instrumentation/grpc-1.6/library) | [RPC Client Spans], [RPC Client Metrics], [RPC Server Spans], [RPC Server Metrics] |
6969
| [Guava ListenableFuture](https://guava.dev/releases/snapshot/api/docs/com/google/common/util/concurrent/ListenableFuture.html) | 10.0+ | [opentelemetry-guava-10.0](../instrumentation/guava-10.0/library) | Context propagation |
7070
| [GWT](http://www.gwtproject.org/) | 2.0+ | N/A | [RPC Server Spans] |
@@ -76,7 +76,7 @@ These are the supported libraries and frameworks:
7676
| [Java Executors](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html) | Java 8+ | N/A | Context propagation |
7777
| [Java Http Client](https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/package-summary.html) | Java 11+ | [opentelemetry-java-http-client](../instrumentation/java-http-client/library) | [HTTP Client Spans], [HTTP Client Metrics] |
7878
| [java.util.logging](https://docs.oracle.com/javase/8/docs/api/java/util/logging/package-summary.html) | Java 8+ | N/A | none |
79-
| [Java Platform](https://docs.oracle.com/javase/8/docs/api/java/lang/management/ManagementFactory.html) | Java 8+ | [opentelemetry-runtime-telemetry-java8](../instrumentation/runtime-telemetry/runtime-telemetry-java8/library),[opentelemetry-runtime-telemetry-java17](../instrumentation/runtime-telemetry/runtime-telemetry-java17/library),<br>[opentelemetry-resources](../instrumentation/resources/library) | [JVM Runtime Metrics] |
79+
| [Java Platform](https://docs.oracle.com/javase/8/docs/api/java/lang/management/ManagementFactory.html) | Java 8+ | [opentelemetry-runtime-telemetry-java8](../instrumentation/runtime-telemetry/runtime-telemetry-java8/library),<br>[opentelemetry-runtime-telemetry-java17](../instrumentation/runtime-telemetry/runtime-telemetry-java17/library),<br>[opentelemetry-resources](../instrumentation/resources/library) | [JVM Runtime Metrics] |
8080
| [JAX-RS](https://javaee.github.io/javaee-spec/javadocs/javax/ws/rs/package-summary.html) | 0.5+ | N/A | Provides `http.route` [2], Controller Spans [3] |
8181
| [JAX-RS Client](https://javaee.github.io/javaee-spec/javadocs/javax/ws/rs/client/package-summary.html) | 1.1+ | N/A | [HTTP Client Spans], [HTTP Client Metrics] |
8282
| [JAX-WS](https://jakarta.ee/specifications/xml-web-services/2.3/apidocs/javax/xml/ws/package-summary.html) | 2.0+ (not including 3.x yet) | N/A | Provides `http.route` [2], Controller Spans [3] |

instrumentation/graphql-java-12.0/javaagent/build.gradle.kts

-21
This file was deleted.

instrumentation/graphql-java-12.0/library/src/main/java/io/opentelemetry/instrumentation/graphql/v12_0/GraphQLTelemetry.java

-65
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
plugins {
2+
id("otel.javaagent-instrumentation")
3+
}
4+
5+
muzzle {
6+
pass {
7+
group.set("com.graphql-java")
8+
module.set("graphql-java")
9+
versions.set("[12,20)")
10+
skip("230521-nf-execution")
11+
assertInverse.set(true)
12+
}
13+
}
14+
15+
dependencies {
16+
implementation(project(":instrumentation:graphql-java:graphql-java-12.0:library"))
17+
implementation(project(":instrumentation:graphql-java:graphql-java-common:library"))
18+
19+
library("com.graphql-java:graphql-java:12.0")
20+
21+
testInstrumentation(project(":instrumentation:graphql-java:graphql-java-20.0:javaagent"))
22+
23+
testImplementation(project(":instrumentation:graphql-java:graphql-java-common:testing"))
24+
25+
latestDepTestLibrary("com.graphql-java:graphql-java:19.+")
26+
}
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import net.bytebuddy.description.type.TypeDescription;
1818
import net.bytebuddy.matcher.ElementMatcher;
1919

20-
public class GraphqlInstrumentation implements TypeInstrumentation {
20+
class GraphqlInstrumentation implements TypeInstrumentation {
2121

2222
@Override
2323
public ElementMatcher<TypeDescription> typeMatcher() {
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,15 @@
55

66
package io.opentelemetry.javaagent.instrumentation.graphql.v12_0;
77

8+
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
9+
import static net.bytebuddy.matcher.ElementMatchers.not;
10+
811
import com.google.auto.service.AutoService;
912
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1013
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1114
import java.util.Collections;
1215
import java.util.List;
16+
import net.bytebuddy.matcher.ElementMatcher;
1317

1418
@SuppressWarnings("unused")
1519
@AutoService(InstrumentationModule.class)
@@ -19,6 +23,13 @@ public GraphqlInstrumentationModule() {
1923
super("graphql-java", "graphql-java-12.0");
2024
}
2125

26+
@Override
27+
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
28+
// added in 20.0
29+
return not(
30+
hasClassesNamed("graphql.execution.instrumentation.SimplePerformantInstrumentation"));
31+
}
32+
2233
@Override
2334
public List<TypeInstrumentation> typeInstrumentations() {
2435
return Collections.singletonList(new GraphqlInstrumentation());
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.graphql.v12_0;
7+
8+
import graphql.execution.instrumentation.Instrumentation;
9+
import io.opentelemetry.api.GlobalOpenTelemetry;
10+
import io.opentelemetry.instrumentation.graphql.internal.InstrumentationUtil;
11+
import io.opentelemetry.instrumentation.graphql.v12_0.GraphQLTelemetry;
12+
import io.opentelemetry.javaagent.bootstrap.internal.InstrumentationConfig;
13+
14+
public final class GraphqlSingletons {
15+
16+
private static final boolean QUERY_SANITIZATION_ENABLED =
17+
InstrumentationConfig.get()
18+
.getBoolean("otel.instrumentation.graphql.query-sanitizer.enabled", true);
19+
20+
private static final GraphQLTelemetry TELEMETRY =
21+
GraphQLTelemetry.builder(GlobalOpenTelemetry.get())
22+
.setSanitizeQuery(QUERY_SANITIZATION_ENABLED)
23+
.build();
24+
25+
private GraphqlSingletons() {}
26+
27+
public static Instrumentation addInstrumentation(Instrumentation instrumentation) {
28+
Instrumentation ourInstrumentation = TELEMETRY.newInstrumentation();
29+
return InstrumentationUtil.addInstrumentation(instrumentation, ourInstrumentation);
30+
}
31+
}

instrumentation/graphql-java-12.0/library/README.md renamed to instrumentation/graphql-java/graphql-java-12.0/library/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Library Instrumentation for GraphQL Java version 12.0 and higher
1+
# Library Instrumentation for GraphQL Java version 12.0 to 20.0
22

33
Provides OpenTelemetry instrumentation for [GraphQL Java](https://www.graphql-java.com/).
44

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
plugins {
2+
id("otel.library-instrumentation")
3+
}
4+
5+
dependencies {
6+
library("com.graphql-java:graphql-java:12.0")
7+
implementation(project(":instrumentation:graphql-java:graphql-java-common:library"))
8+
9+
testImplementation(project(":instrumentation:graphql-java:graphql-java-common:testing"))
10+
11+
latestDepTestLibrary("com.graphql-java:graphql-java:19.+")
12+
}

0 commit comments

Comments
 (0)