Skip to content

Commit ca15c0a

Browse files
authored
[GenAI] Add support for io.opentelemetry.instrumentation:opentelemetry-spring-webflux-5.3:2.28.1-alpha using gpt-5.5 (#8646)
* Scaffold io.opentelemetry.instrumentation:opentelemetry-spring-webflux-5.3:2.28.1-alpha * Dynamic-access coverage for io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.HeaderUtil (1/1) * Native metadata for io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.HeaderUtil * Update generated library support for io.opentelemetry.instrumentation:opentelemetry-spring-webflux-5.3:2.28.1-alpha * Add support for io.opentelemetry.instrumentation:opentelemetry-spring-webflux-5.3:2.28.1-alpha
1 parent b09beb0 commit ca15c0a

10 files changed

Lines changed: 442 additions & 0 deletions

File tree

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
{
2+
"reflection": [
3+
{
4+
"condition": {
5+
"typeReached": "io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxClientTelemetryBuilder"
6+
},
7+
"type": "byte[][]"
8+
},
9+
{
10+
"condition": {
11+
"typeReached": "io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxClientTelemetryBuilder"
12+
},
13+
"type": "io.opentelemetry.api.incubator.metrics.ExtendedDefaultMeterProvider"
14+
},
15+
{
16+
"condition": {
17+
"typeReached": "io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxClientTelemetryBuilder"
18+
},
19+
"type": "io.opentelemetry.api.incubator.trace.ExtendedDefaultTracerProvider"
20+
},
21+
{
22+
"condition": {
23+
"typeReached": "io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxClientTelemetryBuilder"
24+
},
25+
"type": "io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor[]"
26+
},
27+
{
28+
"condition": {
29+
"typeReached": "io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxClientTelemetryBuilder"
30+
},
31+
"type": "io.opentelemetry.instrumentation.api.instrumenter.OperationListener[]"
32+
},
33+
{
34+
"condition": {
35+
"typeReached": "io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxClientTelemetryBuilder"
36+
},
37+
"type": "io.opentelemetry.instrumentation.api.internal.SpanKey[]"
38+
},
39+
{
40+
"condition": {
41+
"typeReached": "io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.WebClientTracingFilter$MonoWebClientTrace"
42+
},
43+
"type": "io.opentelemetry.instrumentation.api.semconv.http.HttpClientRequestResendCount"
44+
},
45+
{
46+
"condition": {
47+
"typeReached": "io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.WebClientTracingFilter$MonoWebClientTrace"
48+
},
49+
"type": "org.slf4j.Logger"
50+
},
51+
{
52+
"condition": {
53+
"typeReached": "io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.HeaderUtil"
54+
},
55+
"type": "org.springframework.http.HttpHeaders"
56+
},
57+
{
58+
"condition": {
59+
"typeReached": "io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.WebClientTracingFilter$MonoWebClientTrace"
60+
},
61+
"type": "org.springframework.http.codec.support.DefaultClientCodecConfigurer",
62+
"methods": [
63+
{
64+
"name": "<init>",
65+
"parameterTypes": []
66+
}
67+
]
68+
},
69+
{
70+
"condition": {
71+
"typeReached": "io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.StatusCodes"
72+
},
73+
"type": "org.springframework.web.reactive.function.client.ClientResponse"
74+
},
75+
{
76+
"condition": {
77+
"typeReached": "io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.WebClientTracingFilter$MonoWebClientTrace"
78+
},
79+
"type": "reactor.core.publisher.Operators$ScalarSubscription"
80+
}
81+
],
82+
"resources": [
83+
{
84+
"condition": {
85+
"typeReached": "io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxClientTelemetryBuilder"
86+
},
87+
"glob": "META-INF/io/opentelemetry/instrumentation/io.opentelemetry.spring-webflux-5.3.properties"
88+
},
89+
{
90+
"condition": {
91+
"typeReached": "io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxClientTelemetryBuilder"
92+
},
93+
"glob": "META-INF/services/io.opentelemetry.instrumentation.api.incubator.instrumenter.InstrumenterCustomizerProvider"
94+
}
95+
]
96+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
[
2+
{
3+
"latest" : true,
4+
"metadata-version" : "2.28.1-alpha",
5+
"source-code-url" : "https://repo.maven.apache.org/maven2/io/opentelemetry/instrumentation/opentelemetry-spring-webflux-5.3/$version$/opentelemetry-spring-webflux-5.3-$version$-sources.jar",
6+
"repository-url" : "https://github.com/open-telemetry/opentelemetry-java-instrumentation",
7+
"test-code-url" : "https://github.com/open-telemetry/opentelemetry-java-instrumentation/tree/v2.28.1/instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/test",
8+
"documentation-url" : "https://repo.maven.apache.org/maven2/io/opentelemetry/instrumentation/opentelemetry-spring-webflux-5.3/$version$/opentelemetry-spring-webflux-5.3-$version$-javadoc.jar",
9+
"description" : "This library provides OpenTelemetry instrumentation for Spring WebFlux 5.3 applications, including WebClient client spans and WebFilter-based server spans. It integrates with OpenTelemetry and Reactor context propagation so reactive HTTP requests can be traced across client and server code.",
10+
"tested-versions" : [
11+
"2.28.1-alpha"
12+
],
13+
"allowed-packages" : [
14+
"io.opentelemetry.instrumentation.spring.webflux.v5_3"
15+
]
16+
}
17+
]
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
{
2+
"add_new_library_support:2026-06-26": {
3+
"timestamp": "2026-06-26T14:50:52.245717Z",
4+
"library": "io.opentelemetry.instrumentation:opentelemetry-spring-webflux-5.3:2.28.1-alpha",
5+
"starting_commit": "5062d9810aa70f80eb8d3324ec5b9b03cc5a2f96",
6+
"ending_commit": "58030b872178ec18280df0d5bd077ae8f1b3690a",
7+
"strategy_name": "dynamic_access_main_sources_pi_gpt-5.5",
8+
"agent": "pi",
9+
"model": "oca/gpt-5.5",
10+
"status": "success",
11+
"stats": {
12+
"version": "2.28.1-alpha",
13+
"dynamicAccess": {
14+
"breakdown": {
15+
"reflection": {
16+
"coverageRatio": 1.0,
17+
"coveredCalls": 1,
18+
"totalCalls": 1
19+
}
20+
},
21+
"coverageRatio": 1.0,
22+
"coveredCalls": 1,
23+
"totalCalls": 1
24+
},
25+
"libraryCoverage": {
26+
"instruction": {
27+
"covered": 349,
28+
"missed": 784,
29+
"ratio": 0.308032,
30+
"total": 1133
31+
},
32+
"line": {
33+
"covered": 109,
34+
"missed": 238,
35+
"ratio": 0.314121,
36+
"total": 347
37+
},
38+
"method": {
39+
"covered": 37,
40+
"missed": 73,
41+
"ratio": 0.336364,
42+
"total": 110
43+
}
44+
}
45+
},
46+
"library_preparation_preflight": {
47+
"status": "completed",
48+
"action": "advisory_preparation",
49+
"issue_number": 8545,
50+
"issue_label": "library-new-request",
51+
"library": "io.opentelemetry.instrumentation:opentelemetry-spring-webflux-5.3:2.28.1-alpha",
52+
"summary": "The artifact's published dependencies are only OpenTelemetry/Reactor instrumentation APIs, while its documented and bytecode-level use requires a Spring WebFlux 5.3 application library on the test classpath.",
53+
"deterministic_setup": [
54+
{
55+
"kind": "dependency",
56+
"coordinate": "org.springframework:spring-webflux:5.3.39",
57+
"scope": "testImplementation",
58+
"reason": "The library instruments Spring WebFlux WebClient/WebFilter types but does not transitively bring Spring WebFlux; the upstream README says this artifact should already be present in the application."
59+
},
60+
{
61+
"kind": "dependency",
62+
"coordinate": "org.springframework:spring-test:5.3.39",
63+
"scope": "testImplementation",
64+
"reason": "Provides in-process mock reactive server request/exchange utilities so server WebFilter behavior can be exercised without a real server or Docker service."
65+
}
66+
],
67+
"agent_guidance": "No Docker image, environment variable, or system property is required. Prefer in-process WebClient filter and WebFilter coverage; do not require the OpenTelemetry Java agent.",
68+
"risks": [
69+
"Keep Spring dependencies on the 5.3.x line because this artifact is specifically the Spring WebFlux 5.3 instrumentation.",
70+
"Local Gradle and Native Image verification remain authoritative for whether additional test-only helpers are needed."
71+
],
72+
"applied_setup": [
73+
{
74+
"kind": "dependency",
75+
"coordinate": "org.springframework:spring-webflux:5.3.39",
76+
"result": "applied",
77+
"target": "tests/src/io.opentelemetry.instrumentation/opentelemetry-spring-webflux-5.3/2.28.1-alpha/build.gradle"
78+
},
79+
{
80+
"kind": "dependency",
81+
"coordinate": "org.springframework:spring-test:5.3.39",
82+
"result": "applied",
83+
"target": "tests/src/io.opentelemetry.instrumentation/opentelemetry-spring-webflux-5.3/2.28.1-alpha/build.gradle"
84+
}
85+
],
86+
"input_evidence": [
87+
{
88+
"name": "issue",
89+
"summary": "#8545 Support for io.opentelemetry.instrumentation:opentelemetry-spring-webflux-5.3:2.28.1-alpha; label=library-new-request; body_chars=39"
90+
},
91+
{
92+
"name": "existing_tests",
93+
"summary": "0 existing test file path(s) included"
94+
}
95+
],
96+
"model": "oca/gpt-5.5",
97+
"input_tokens_used": 80568,
98+
"output_tokens_used": 8442,
99+
"prompt_path": "library-preflight-prompt.txt",
100+
"raw_response_path": "library-preflight-response.txt",
101+
"session_log_path": "/home/vjovanov/c/forge/forge4/graalvm-reachability-metadata/forge/logs/io.opentelemetry.instrumentation:opentelemetry-spring-webflux-5.3:2.28.1-alpha/library-preparation-preflight/pi-generation-2026-06-26T14-34-55-917823Z.log"
102+
},
103+
"metrics": {
104+
"input_tokens_used": 176417,
105+
"cached_input_tokens_used": 1455616,
106+
"output_tokens_used": 15880,
107+
"iterations": 2,
108+
"cost_usd": 1.2042,
109+
"generated_loc": 88,
110+
"tested_library_loc": 109,
111+
"metadata_entries": 15,
112+
"code_coverage_percent": 31.41
113+
},
114+
"artifacts": {
115+
"test_file": "tests/src/io.opentelemetry.instrumentation/opentelemetry-spring-webflux-5.3/2.28.1-alpha/src/test/java/io_opentelemetry_instrumentation/opentelemetry_spring_webflux_5_3/HeaderUtilTest.java",
116+
"metadata_file": "metadata/io.opentelemetry.instrumentation/opentelemetry-spring-webflux-5.3/2.28.1-alpha/reachability-metadata.json"
117+
}
118+
}
119+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{
2+
"versions" : [ {
3+
"version" : "2.28.1-alpha",
4+
"dynamicAccess" : {
5+
"breakdown" : {
6+
"reflection" : {
7+
"coverageRatio" : 1.0,
8+
"coveredCalls" : 1,
9+
"totalCalls" : 1
10+
}
11+
},
12+
"coverageRatio" : 1.0,
13+
"coveredCalls" : 1,
14+
"totalCalls" : 1
15+
},
16+
"libraryCoverage" : {
17+
"instruction" : {
18+
"covered" : 349,
19+
"missed" : 784,
20+
"ratio" : 0.308032,
21+
"total" : 1133
22+
},
23+
"line" : {
24+
"covered" : 109,
25+
"missed" : 238,
26+
"ratio" : 0.314121,
27+
"total" : 347
28+
},
29+
"method" : {
30+
"covered" : 37,
31+
"missed" : 73,
32+
"ratio" : 0.336364,
33+
"total" : 110
34+
}
35+
}
36+
} ]
37+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
gradlew.bat
2+
gradlew
3+
gradle/
4+
build/
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
* Copyright and related rights waived via CC0
3+
*
4+
* You should have received a copy of the CC0 legalcode along with this
5+
* work. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
6+
*/
7+
plugins {
8+
id "org.graalvm.internal.tck"
9+
}
10+
11+
String libraryVersion = tck.testedLibraryVersion.get()
12+
13+
dependencies {
14+
testImplementation "io.opentelemetry.instrumentation:opentelemetry-spring-webflux-5.3:$libraryVersion"
15+
testImplementation 'org.assertj:assertj-core:3.22.0'
16+
testImplementation "org.springframework:spring-webflux:5.3.39"
17+
testImplementation "org.springframework:spring-test:5.3.39"
18+
}
19+
20+
graalvmNative {
21+
agent {
22+
defaultMode = "conditional"
23+
modes {
24+
conditional {
25+
userCodeFilterPath = "user-code-filter.json"
26+
}
27+
}
28+
}
29+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Optional explicit tested library coordinates (format: group:artifact:version).
2+
# If omitted, fallback resolution in org.graalvm.internal.tck.gradle still uses
3+
# environment variable GVM_TCK_LC and then this property.
4+
library.coordinates = io.opentelemetry.instrumentation:opentelemetry-spring-webflux-5.3:2.28.1-alpha
5+
library.version = 2.28.1-alpha
6+
metadata.dir = io.opentelemetry.instrumentation/opentelemetry-spring-webflux-5.3/2.28.1-alpha/
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* Copyright and related rights waived via CC0
3+
*
4+
* You should have received a copy of the CC0 legalcode along with this
5+
* work. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
6+
*/
7+
pluginManagement {
8+
def tckPath = Objects.requireNonNullElse(
9+
System.getenv("GVM_TCK_TCKDIR"),
10+
"../../../../tck-build-logic"
11+
)
12+
includeBuild(tckPath)
13+
repositories { mavenLocal(); gradlePluginPortal() }
14+
}
15+
16+
plugins {
17+
id "org.graalvm.internal.tck-settings" version "1.0.0-SNAPSHOT"
18+
}
19+
20+
rootProject.name = 'io.opentelemetry.instrumentation.opentelemetry-spring-webflux-5.3_tests'

0 commit comments

Comments
 (0)