Skip to content

feat(otel): add OpenTelemetry database semantic conventions#8961

Draft
khanayan123 wants to merge 14 commits into
masterfrom
ayan.khan/otel-db-semantics
Draft

feat(otel): add OpenTelemetry database semantic conventions#8961
khanayan123 wants to merge 14 commits into
masterfrom
ayan.khan/otel-db-semantics

Conversation

@khanayan123

Copy link
Copy Markdown
Collaborator

Summary

Extends the opt-in DD_TRACE_OTEL_SEMANTICS_ENABLED flag (HTTP today, #8933) to SQL database spans, so they emit OpenTelemetry database semantic-convention attribute names instead of the Datadog ones. When enabled, only the OTel set is emitted (Datadog names replaced, not added alongside).

Spec: https://opentelemetry.io/docs/specs/semconv/db/database-spans/

Stacked on #8933 (ayan.khan/otel-http-semantics) — this PR shows only the DB diff. Rebase onto the HTTP work once it merges.

Attribute mapping (Datadog → OTel)

Datadog OTel Notes
db.type db.system.name mapped to the stable value (e.g. postgrespostgresql)
db.name / db.instance db.namespace
out.host server.address
network.destination.port (metric) server.port (metric) kept numeric so OTLP serializes it as intValue
(derived from query) db.operation.name leading SQL keyword (single-statement)
(derived from query) db.collection.name primary table (single-collection; omitted when ambiguous)
span resource (query) db.query.text

Datadog-only attributes without an OTel equivalent (db.user, db.pid) are preserved.

Implementation

  • New packages/dd-trace/src/plugins/util/db-otel-semantics.js with applyDatabaseOtelSemantics(formattedSpan), mirroring http-otel-semantics.js.
  • Hooked in span_processor.js next to the HTTP rename, under the same flag — export-only (the span keeps Datadog names through its lifetime, so peer.service and trace stats are unaffected) and central, so it covers every SQL integration (pg, mysql, mysql2, mariadb, tedious, …) and reaches both the agent and OTLP exporters. No-op for non-SQL spans (gated on the Datadog db.type tag).

Verification

  • Unit tests: db-otel-semantics.spec.js (8 cases) — rename, db.system.name value mapping, operation/collection parsing, mutual exclusion, no-op for non-DB spans. eslint clean.
  • End-to-end (real agent + postgres, msgpack v0.4): validated against system-tests OTEL_SEMANTICS_DB (feat(otel): system-tests for DB (postgres) OpenTelemetry semantic conventions system-tests#7166). Against this branch, all 7 DB semantic-convention tests pass — the postgres SQL span emits:
    db.system.name=postgresql  db.namespace=system_tests_dbname  db.operation.name=SELECT
    db.collection.name=demo  db.query.text=...  server.address=postgres  server.port=5433 (int)
    
    with the legacy db.type/db.name/out.host/network.destination.port all absent. (On dd-trace-js master those same tests xfail, confirming this PR is what enables them.)

Notable

  • db.system.name is the stable spec name (the experimental name was db.system); the value is mapped to the stable identifier (postgresql, mysql, mariadb, microsoft.sql_server, oracle.db).

Follow-ups (out of scope)

  • db.query.text sanitization (literals → ?) for non-parameterized queries — currently the (agent-obfuscated) query text; the spec recommends tracer-side sanitization.
  • db.response.status_code on failed queries; non-SQL stores (mongodb) which use a different attribute set.

🤖 Generated with Claude Code

khanayan123 and others added 14 commits June 15, 2026 22:33
Opt-in DD_TRACE_OTEL_SEMANTICS_ENABLED (default false). When enabled, HTTP client and server spans emit OpenTelemetry HTTP semantic-convention attribute names instead of the Datadog ones (replacement, not additive).

Client: http.request.method, url.full, server.address, server.port, http.response.status_code (+ error.type on 4xx). Server: http.request.method, url.path, url.scheme, url.query, server.address, server.port, http.response.status_code, http.route, user_agent.original, client.address, network.peer.address (+ error.type on error responses).

Branches at the shared chokepoints (datadog-plugin-http client + web.js server util) via a new http-otel-semantics helper, mirroring dd-trace-dotnet#8791 and dd-trace-java#11652.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…erage, all HTTP integrations)

Follow-up to the adversarial review of the initial change:

- Drop the global span_format.js change; stringify http.response.status_code at the source (client.js, web.js) so only OTel-mode spans are affected.

- web.js: skip OTel error.type when an exception is present (don't clobber the exception-derived error.type); gate the OTel client-ip hasTag behind the flag.

- decomposeServerUrl: omit server.address for Host-less requests; strip IPv6 brackets.

- inferred_proxy, http2 client, undici (native path), next: branch HTTP tags on the flag so all HTTP client/server integrations are consistent (ws stays out of scope: websocket spans are not HTTP request spans).

- appsec: emit client.address (not http.client_ip) in OTel mode so it is not additive on top of web.js's client.address.

- Tests: web.spec OTel branch coverage (query/obfuscation, client.address, status, 5xx error.type, exception no-clobber, endpoint-omit); http client 4xx error.type; http2 client+server OTel; appsec client.address; helper boundaries (IPv6, Host-less, malformed+query). Drop the tautological constant test; refresh url.js comment.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Closes the codecov/patch gap: the inferred-proxy test covers createInferredProxySpan's OTel block plus web.js's inferred-proxy status line; the undici test covers the native diagnostics-channel OTel path. Verified locally (undici 1 version fails an unrelated old-undici-vs-Node-20 beforeEach, same as the existing undici test).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the per-integration OTel branches with a single flag-gated transform (applyHttpOtelSemantics) invoked from span_format at serialization. The span keeps Datadog tag names throughout its lifetime, so peer.service, AppSec, and trace stats are unaffected; only the serialized output is renamed.

Covers every HTTP integration (http/https, http2, undici, fetch, next, all web.js-based servers, inferred-proxy) and ws upgrade spans for free, plus any future HTTP integration, with no per-plugin code. ws/wss schemes are remapped to http/https.

Reverts the per-integration branches in http/http2/undici/next/inferred_proxy/appsec and the web.js rename branches. web.js still sets network.peer.address (OTel-gated) since the socket isn't available at serialization.

Tests: applyHttpOtelSemantics unit suite + span_format gated-transform test + web.js network.peer.address; existing http/http2/undici/inferred integration OTel tests pass unchanged (they assert serialized output).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…THER, url redaction, client port)

From the cross-tracer comparison vs dd-trace-dotnet#8791 and dd-trace-java#11652, in applyHttpOtelSemantics:

- Method normalization: verbs outside the known set (RFC 9110 + PATCH + QUERY) become http.request.method=_OTHER with the raw value on http.request.method_original (spec-required; matches java).

- Client url.full credential redaction: user:pass@ -> REDACTED:REDACTED@, user@ -> REDACTED@ (spec-mandatory; matches java; no-op when absent).

- Client server.port falls back to the scheme default (443/https, 80/http) when no explicit port, since server.port is required for client spans (matches java).

Span/resource-name rename (GET /route -> GET) is intentionally NOT changed — a genuine cross-tracer split (java renames, dotnet does not); left as a product decision.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…onv spec

Per https://opentelemetry.io/docs/specs/semconv/http/http-spans/:

- Span name uses the literal "HTTP" for unknown methods (the spec forbids the raw verb / URL path there). Known-method names stay {method} {route} / {method}, which already matched the spec — no broad rename.

- error.type follows the client/server split: client spans on status >= 400 (4xx and 5xx), server spans on 5xx only (4xx MUST be left unset); still no-clobber on an exception-derived type. Adds the previously-missing client-5xx case and marks such spans errored.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Zach Montoya <zach.montoya@datadoghq.com>
Two OTel HTTP semconv fixes from PR review:

- http.response.status_code is typed `int` by the spec, but it was emitted as a
  meta string, which the OTLP exporter serializes as stringValue. Write the
  parsed status into metrics instead (serialized as intValue), mirroring how
  server.port is handled; error.type stays the string status.

- Client url.full dropped the query (the http/http2/undici plugins strip it when
  building http.url). url.full must be the absolute URL including the query, so
  the client plugins now retain it — obfuscated via the configured query-string
  obfuscation — when OTel semantics are enabled. The URL filter still uses the
  query-stripped form, and non-OTel http.url is unchanged. getQsObfuscator moved
  from web.js to url.js (shared, memoized) to compile the obfuscator client-side.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…anFormat

The serialization-time transform mutated the formatted span that SpanProcessor
also hands to span stats, so SpanAggKey (span_stats.js) read deleted/renamed
Datadog keys (http.status_code, http.method, http.endpoint) and aggregated HTTP
stats with status 0, empty method, and missing endpoint when
DD_TRACE_OTEL_SEMANTICS_ENABLED and stats were both enabled.

Move applyHttpOtelSemantics out of spanFormat into SpanProcessor.process, after
stats.onSpanFinished and before export, so stats see the Datadog tag names and
only the exported payload carries the OTel names.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Rebuild the formatted span's meta/metrics as fresh objects that omit the
  renamed Datadog HTTP keys, instead of deleting them in place. A single
  `delete` demotes the formatted span to V8 dictionary mode; the rebuild keeps
  fast properties — ~40% faster on the transform (~390ns -> ~240ns per HTTP
  span, reproduced via microbenchmark) and it cannot leak a renamed key as
  `undefined` on the OTLP export path.
- redactUrlCredentials: redact userinfo up to the LAST '@' in the authority,
  not the first, so `user:p@ss@host` no longer leaks `@ss`.
- Guard the http.response.status_code metric with Number.isFinite so a
  non-numeric status cannot emit a NaN metric.
- Drop 11 unused constant exports (only network.peer.address and the two
  functions cross the module boundary).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The fetch plugin passes a WHATWG URL object as the client options, where the
query lives in `options.search` while `options.pathname` is path-only — so
`options.path || options.pathname` dropped the query and url.full lost it under
DD_TRACE_OTEL_SEMANTICS_ENABLED (unlike http/http2/undici, whose query rides in
the raw path). Fold `options.search` in when `options.path` is absent, in the
shared http client, so url.full keeps the (obfuscated) query for every client.
Adds a fetch OTel integration test covering it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… guard

Closes the patch-coverage gaps on the changed lines: getQsObfuscator's
boolean / empty / ".*" / invalid-regex / non-string branches plus its compiled
cache, and the Number.isFinite guard that skips a non-numeric
http.response.status_code metric.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Extend DD_TRACE_OTEL_SEMANTICS_ENABLED (HTTP today) to SQL database spans, applied
centrally in span_processor alongside the HTTP rename so it covers every SQL integration
(pg, mysql, mysql2, mariadb, tedious, ...) and reaches both the agent and OTLP exporters.

New packages/dd-trace/src/plugins/util/db-otel-semantics.js renames, per
https://opentelemetry.io/docs/specs/semconv/db/database-spans/:
  db.type   -> db.system.name  (mapped to the stable value, e.g. postgres -> postgresql)
  db.name / db.instance -> db.namespace
  out.host  -> server.address
  network.destination.port (metric) -> server.port (metric, kept numeric for OTLP int typing)
and derives db.operation.name + db.collection.name from the query, and db.query.text from the
span resource. Datadog-only attributes without an OTel equivalent (db.user, db.pid) are kept;
the renamed Datadog names are dropped (mutually exclusive), matching the HTTP behaviour.

The rename is export-only — the span keeps Datadog names through its lifetime, so peer.service
and trace stats are unaffected.

Unit tests in db-otel-semantics.spec.js (8 cases). eslint clean.
@dd-octo-sts

dd-octo-sts Bot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Overall package size

Self size: 6.27 MB
Deduped: 7.33 MB
No deduping: 7.33 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | import-in-the-middle | 3.1.0 | 101.28 kB | 840.46 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | dc-polyfill | 0.1.11 | 25.74 kB | 25.74 kB |

🤖 This report was automatically generated by heaviest-objects-in-the-universe

@datadog-prod-us1-4

datadog-prod-us1-4 Bot commented Jun 17, 2026

Copy link
Copy Markdown

Pipelines  Tests

Fix all issues with BitsAI

⚠️ Warnings

🚦 3 Pipeline jobs failed

All Green | all-green   View in Datadog   GitHub Actions

🧪 1 Test failed

nosql injection detection in mongodb - whole feature with express &gt;=4.3.0 &lt;5 (4.22.2) with mongodb &gt;=6 (7.2.0) &#34;before all&#34; hook in &#34;with mongodb &gt;=6 (7.2.0)&#34; from with mongodb &gt;=6 (7.2.0)   View in Datadog
undefined is not a function

TypeError: undefined is not a function
    at &lt;static_initializer&gt; (versions/node_modules/mongodb/node_modules/bson/lib/bson.cjs:2609:58)
    at Object.&lt;anonymous&gt; (versions/node_modules/mongodb/node_modules/bson/lib/bson.cjs:2597:24)
    at Module._compile (node:internal/modules/cjs/loader:1364:14)
    at Module.&lt;anonymous&gt; (packages/datadog-instrumentations/src/helpers/rewriter/loader.js:2:510)
    at Module.&lt;anonymous&gt; (packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js:6:929)
    at Module.&lt;anonymous&gt; (packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js:6:929)
    at Module.&lt;anonymous&gt; (packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js:6:929)
...

AppSec | AppSec / mongodb-core   View in Datadog   GitHub Actions

Test Optimization | integration-playwright (oldest, node-oldest, playwright-reporting)   View in Datadog   GitHub Actions

ℹ️ Info

No other issues found (see more)

❄️ No new flaky tests detected

Useful? React with 👍 / 👎

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 57db962 | Docs | Datadog PR Page | Give us feedback!

@pr-commenter

pr-commenter Bot commented Jun 17, 2026

Copy link
Copy Markdown

Benchmarks

Benchmark execution time: 2026-06-17 17:18:30

Comparing candidate commit 57db962 in PR branch ayan.khan/otel-db-semantics with baseline commit 07ad9d3 in branch ayan.khan/otel-http-semantics.

📊 Benchmarking dashboard

Found 0 performance improvements and 0 performance regressions! Performance is the same for 1935 metrics, 15 unstable metrics.

Explanation

This is an A/B test comparing a candidate commit's performance against that of a baseline commit. Performance changes are noted in the tables below as:

  • 🟩 = significantly better candidate vs. baseline
  • 🟥 = significantly worse candidate vs. baseline

We compute a confidence interval (CI) over the relative difference of means between metrics from the candidate and baseline commits, considering the baseline as the reference.

If the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD), the change is considered significant.

Feel free to reach out to #apm-benchmarking-platform on Slack if you have any questions.

More details about the CI and significant changes

You can imagine this CI as a range of values that is likely to contain the true difference of means between the candidate and baseline commits.

CIs of the difference of means are often centered around 0%, because often changes are not that big:

---------------------------------(------|---^--------)-------------------------------->
                              -0.6%    0%  0.3%     +1.2%
                                 |          |        |
         lower bound of the CI --'          |        |
sample mean (center of the CI) -------------'        |
         upper bound of the CI ----------------------'

As described above, a change is considered significant if the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD).

For instance, for an execution time metric, this confidence interval indicates a significantly worse performance:

----------------------------------------|---------|---(---------^---------)---------->
                                       0%        1%  1.3%      2.2%      3.1%
                                                  |   |         |         |
       significant impact threshold --------------'   |         |         |
                      lower bound of CI --------------'         |         |
       sample mean (center of the CI) --------------------------'         |
                      upper bound of CI ----------------------------------'

Unstable benchmarks

These benchmarks have a confidence interval too wide to call a change; treat them as noise rather than signal.

scenario:appsec-appsec-enabled-24

  • unstable execution_time [-150.150ms; +158.555ms] or [-5.780%; +6.103%]

scenario:appsec-appsec-enabled-26

  • unstable execution_time [-167.529ms; +172.799ms] or [-6.755%; +6.967%]

scenario:appsec-control-20

  • unstable execution_time [-110.842ms; +139.900ms] or [-6.482%; +8.181%]

scenario:appsec-control-24

  • unstable execution_time [-92683.558µs; +93483.025µs] or [-7.707%; +7.774%]

scenario:appsec-control-26

  • unstable execution_time [-94908.400µs; +95900.800µs] or [-8.034%; +8.118%]

scenario:dogstatsd-with-tags-20

  • unstable cpu_user_time [+17.009ms; +630.430ms] or [+0.352%; +13.054%]
  • unstable execution_time [+16.344ms; +630.561ms] or [+0.333%; +12.859%]

scenario:plugin-graphql-long-with-depth-and-collapse-off-24

  • unstable cpu_user_time [-352.462ms; +270.396ms] or [-7.546%; +5.789%]
  • unstable execution_time [-375.579ms; +287.338ms] or [-7.538%; +5.767%]
  • unstable max_rss_usage [-35.709MB; +31.368MB] or [-6.253%; +5.493%]

scenario:plugin-graphql-long-with-depth-off-20

  • unstable max_rss_usage [-7.277MB; +11.834MB] or [-5.156%; +8.385%]

scenario:plugin-graphql-long-with-depth-off-26

  • unstable max_rss_usage [-13.032MB; +22.600MB] or [-7.950%; +13.788%]

scenario:plugin-graphql-long-with-depth-on-max-20

  • unstable max_rss_usage [-4.914MB; +12.676MB] or [-3.065%; +7.906%]

scenario:spans-finish-later-26

  • unstable max_rss_usage [-13.289MB; +18.052MB] or [-7.481%; +10.163%]

scenario:test-optimization-large-suite-20

  • unstable max_rss_usage [-4138.793KB; +4178.126KB] or [-5.256%; +5.306%]

@codecov

codecov Bot commented Jun 17, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 91.65%. Comparing base (68ed9ce) to head (57db962).
⚠️ Report is 20 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #8961      +/-   ##
==========================================
- Coverage   93.06%   91.65%   -1.41%     
==========================================
  Files         877      878       +1     
  Lines       50253    50438     +185     
  Branches     9865     9564     -301     
==========================================
- Hits        46770    46231     -539     
- Misses       3483     4207     +724     
Flag Coverage Δ
aiguard-integration-active ?
aiguard-integration-latest 41.15% <28.70%> (-0.18%) ⬇️
aiguard-integration-maintenance 41.36% <28.70%> (-0.18%) ⬇️
aiguard-macos 34.39% <19.02%> (-0.27%) ⬇️
aiguard-ubuntu 34.53% <19.02%> (-0.27%) ⬇️
aiguard-windows 34.21% <19.02%> (-0.27%) ⬇️
apm-capabilities-tracing-macos 48.15% <96.74%> (+0.28%) ⬆️
apm-capabilities-tracing-ubuntu-active 48.15% <96.74%> (+0.28%) ⬆️
apm-capabilities-tracing-ubuntu-latest 48.15% <96.74%> (+0.28%) ⬆️
apm-capabilities-tracing-ubuntu-oldest 48.38% <96.74%> (+0.46%) ⬆️
apm-capabilities-tracing-windows 47.90% <96.74%> (+0.04%) ⬆️
apm-integrations-aerospike-18-gte.5.2.0 32.83% <19.02%> (-0.26%) ⬇️
apm-integrations-aerospike-20-gte.5.5.0 32.85% <19.02%> (-0.26%) ⬇️
apm-integrations-aerospike-22-gte.5.12.1 32.86% <19.02%> (-0.26%) ⬇️
apm-integrations-aerospike-22-gte.6.0.0 32.86% <19.02%> (-0.26%) ⬇️
apm-integrations-aerospike-eol- 32.76% <19.02%> (-0.26%) ⬇️
apm-integrations-child-process 33.76% <19.02%> (-0.27%) ⬇️
apm-integrations-confluentinc-kafka-javascript-18 39.76% <19.02%> (-0.34%) ⬇️
apm-integrations-confluentinc-kafka-javascript-20 ?
apm-integrations-confluentinc-kafka-javascript-22 39.78% <19.02%> (-0.34%) ⬇️
apm-integrations-confluentinc-kafka-javascript-24 39.67% <19.02%> (-0.34%) ⬇️
apm-integrations-couchbase-18 33.01% <19.02%> (-0.09%) ⬇️
apm-integrations-couchbase-eol 32.89% <19.02%> (-0.24%) ⬇️
apm-integrations-dns 32.78% <19.02%> (-0.26%) ⬇️
apm-integrations-elasticsearch 33.84% <26.51%> (-0.21%) ⬇️
apm-integrations-http-latest 41.55% <71.77%> (+0.32%) ⬆️
apm-integrations-http-maintenance 41.64% <71.77%> (+0.31%) ⬆️
apm-integrations-http-oldest 41.56% <71.77%> (+0.32%) ⬆️
apm-integrations-http2 38.73% <70.19%> (?)
apm-integrations-kafkajs-latest 39.80% <19.02%> (-0.30%) ⬇️
apm-integrations-kafkajs-oldest 39.94% <19.02%> (-0.25%) ⬇️
apm-integrations-net 33.46% <19.02%> (-0.27%) ⬇️
apm-integrations-next-11.1.4 36.64% <ø> (ø)
apm-integrations-next-12.3.7 36.64% <ø> (ø)
apm-integrations-next-13.0.0 28.89% <17.70%> (-0.17%) ⬇️
apm-integrations-next-13.2.0 28.85% <17.70%> (-0.21%) ⬇️
apm-integrations-next-13.5.11 29.03% <17.92%> (-0.16%) ⬇️
apm-integrations-next-14.0.0 ?
apm-integrations-next-14.2.35 28.92% <17.70%> (-0.21%) ⬇️
apm-integrations-next-14.2.6 28.96% <17.70%> (-0.17%) ⬇️
apm-integrations-next-14.2.7 28.92% <17.70%> (-0.21%) ⬇️
apm-integrations-next-15.0.0 28.92% <17.70%> (-0.21%) ⬇️
apm-integrations-next-15.4.0 29.00% <17.92%> (-0.20%) ⬇️
apm-integrations-next-latest 29.03% <17.92%> (-0.20%) ⬇️
apm-integrations-oracledb 33.71% <26.31%> (-0.22%) ⬇️
apm-integrations-prisma-18-gte.6.16.0.and.lt.7.0.0 34.54% <19.02%> (-0.28%) ⬇️
apm-integrations-prisma-latest-all 34.00% <25.35%> (-0.22%) ⬇️
apm-integrations-restify 34.90% <25.83%> (-0.23%) ⬇️
apm-integrations-sharedb 32.19% <19.02%> (-0.25%) ⬇️
apm-integrations-tedious 33.13% <26.31%> (-0.21%) ⬇️
appsec-express 50.70% <29.71%> (-0.32%) ⬇️
appsec-fastify 47.44% <29.71%> (-0.30%) ⬇️
appsec-graphql 47.52% <28.70%> (-0.27%) ⬇️
appsec-integration-active 36.01% <25.94%> (-0.08%) ⬇️
appsec-integration-latest 36.01% <25.94%> (-0.08%) ⬇️
appsec-integration-maintenance 36.07% <25.94%> (-0.08%) ⬇️
appsec-integration-oldest 36.07% <25.94%> (-0.08%) ⬇️
appsec-kafka 40.00% <19.02%> (-0.30%) ⬇️
appsec-ldapjs 39.58% <26.79%> (-0.25%) ⬇️
appsec-lodash 39.50% <25.83%> (-0.25%) ⬇️
appsec-macos 56.81% <29.71%> (-0.47%) ⬇️
appsec-mongodb-core ?
appsec-mongoose 44.51% <29.66%> (-0.28%) ⬇️
appsec-mysql 46.74% <29.66%> (-0.32%) ⬇️
appsec-next-latest-11.1.4 27.18% <17.70%> (-0.17%) ⬇️
appsec-next-latest-12.3.7 27.20% <15.17%> (-0.50%) ⬇️
appsec-next-latest-13.0.0 28.95% <17.70%> (-0.21%) ⬇️
appsec-next-latest-13.2.0 28.97% <17.70%> (-0.21%) ⬇️
appsec-next-latest-13.5.11 29.07% <17.92%> (-0.20%) ⬇️
appsec-next-latest-14.0.0 28.99% <17.70%> (-0.21%) ⬇️
appsec-next-latest-14.2.35 28.99% <17.70%> (-0.21%) ⬇️
appsec-next-latest-14.2.6 28.99% <17.70%> (?)
appsec-next-latest-14.2.7 28.99% <17.70%> (-0.21%) ⬇️
appsec-next-latest-15.0.0 ?
appsec-next-latest-latest 29.03% <17.70%> (-0.21%) ⬇️
appsec-next-oldest-11.1.4 27.23% <17.70%> (-0.18%) ⬇️
appsec-next-oldest-12.3.7 29.00% <17.70%> (-0.21%) ⬇️
appsec-next-oldest-13.0.0 29.00% <17.70%> (-0.21%) ⬇️
appsec-next-oldest-13.2.0 29.27% <17.70%> (-0.21%) ⬇️
appsec-next-oldest-13.5.11 29.37% <17.92%> (-0.21%) ⬇️
appsec-next-oldest-14.0.0 ?
appsec-next-oldest-14.2.35 29.30% <17.70%> (-0.21%) ⬇️
appsec-next-oldest-14.2.6 29.30% <17.70%> (-0.21%) ⬇️
appsec-next-oldest-14.2.7 29.30% <17.70%> (-0.21%) ⬇️
appsec-next-oldest-15.0.0 29.30% <17.70%> (-0.21%) ⬇️
appsec-next-oldest-latest 27.40% <15.17%> (-0.51%) ⬇️
appsec-node-serialize 38.82% <25.83%> (-0.24%) ⬇️
appsec-passport 42.41% <29.66%> (-0.27%) ⬇️
appsec-postgres 46.47% <29.66%> (-0.28%) ⬇️
appsec-sourcing 38.25% <29.66%> (-0.22%) ⬇️
appsec-stripe 40.25% <26.79%> (-0.28%) ⬇️
appsec-template 39.05% <26.79%> (-0.25%) ⬇️
appsec-ubuntu 56.92% <29.71%> (-0.38%) ⬇️
appsec-windows 56.73% <29.71%> (-0.31%) ⬇️
debugger-ubuntu-active 43.28% <25.94%> (-0.23%) ⬇️
debugger-ubuntu-latest 43.28% <25.94%> (-0.23%) ⬇️
debugger-ubuntu-maintenance 43.40% <25.94%> (-0.24%) ⬇️
debugger-ubuntu-oldest 43.70% <25.94%> (-0.24%) ⬇️
instrumentations-instrumentation-ai 45.33% <ø> (ø)
instrumentations-instrumentation-aws-sdk 44.93% <ø> (ø)
instrumentations-instrumentation-bluebird 27.30% <17.56%> (-0.20%) ⬇️
instrumentations-instrumentation-body-parser 35.40% <26.79%> (-0.23%) ⬇️
instrumentations-instrumentation-child_process 33.14% <19.02%> (-0.27%) ⬇️
instrumentations-instrumentation-cookie-parser 29.22% <24.88%> (-0.17%) ⬇️
instrumentations-instrumentation-couchbase-18 46.02% <ø> (ø)
instrumentations-instrumentation-couchbase-eol ?
instrumentations-instrumentation-crypto 27.35% <17.56%> (-0.20%) ⬇️
instrumentations-instrumentation-express 29.42% <24.88%> (-0.18%) ⬇️
instrumentations-instrumentation-express-mongo-sanitize 29.33% <24.88%> (-0.18%) ⬇️
instrumentations-instrumentation-express-multi-version 41.47% <ø> (ø)
instrumentations-instrumentation-express-session 35.18% <26.79%> (-0.23%) ⬇️
instrumentations-instrumentation-fastify 47.86% <ø> (ø)
instrumentations-instrumentation-fetch 44.76% <ø> (ø)
instrumentations-instrumentation-fs 27.07% <17.56%> (-0.20%) ⬇️
instrumentations-instrumentation-generic-pool 26.96% <8.33%> (-0.07%) ⬇️
instrumentations-instrumentation-hono 28.54% <25.00%> (-0.16%) ⬇️
instrumentations-instrumentation-http 37.74% <28.70%> (-0.24%) ⬇️
instrumentations-instrumentation-http-client-options 37.34% <28.70%> (-0.24%) ⬇️
instrumentations-instrumentation-kafkajs 48.94% <ø> (ø)
instrumentations-instrumentation-knex 27.29% <17.56%> (-0.20%) ⬇️
instrumentations-instrumentation-light-my-request 35.04% <26.88%> (-0.22%) ⬇️
instrumentations-instrumentation-mongoose 28.43% <24.88%> (-0.16%) ⬇️
instrumentations-instrumentation-multer 35.08% <25.83%> (-0.23%) ⬇️
instrumentations-instrumentation-mysql2 33.18% <19.02%> (-0.26%) ⬇️
instrumentations-instrumentation-openai-lifecycle 46.00% <ø> (ø)
instrumentations-instrumentation-otel-sdk-trace 24.95% <17.00%> (-0.33%) ⬇️
instrumentations-instrumentation-passport 38.93% <26.79%> (-0.26%) ⬇️
instrumentations-instrumentation-passport-http 38.63% <25.83%> (-0.25%) ⬇️
instrumentations-instrumentation-passport-local 39.08% <25.83%> (-0.26%) ⬇️
instrumentations-instrumentation-pg 32.91% <19.02%> (-0.26%) ⬇️
instrumentations-instrumentation-promise 27.25% <17.56%> (-0.20%) ⬇️
instrumentations-instrumentation-promise-js 27.26% <17.56%> (-0.20%) ⬇️
instrumentations-instrumentation-q 27.28% <17.56%> (-0.20%) ⬇️
instrumentations-instrumentation-router 43.07% <ø> (ø)
instrumentations-instrumentation-stripe 27.81% <24.88%> (-0.16%) ⬇️
instrumentations-instrumentation-url 27.19% <17.56%> (-0.20%) ⬇️
instrumentations-instrumentation-when 27.26% <17.56%> (-0.20%) ⬇️
instrumentations-instrumentation-zlib 27.23% <17.56%> (-0.20%) ⬇️
instrumentations-integration-esbuild-0.16.12-active ?
instrumentations-integration-esbuild-0.16.12-latest ?
instrumentations-integration-esbuild-0.16.12-maintenance ?
instrumentations-integration-esbuild-0.16.12-oldest ?
instrumentations-integration-esbuild-latest-active ?
instrumentations-integration-esbuild-latest-latest ?
instrumentations-integration-esbuild-latest-maintenance ?
instrumentations-integration-esbuild-latest-oldest ?
llmobs-ai 34.91% <19.13%> (-0.24%) ⬇️
llmobs-anthropic ?
llmobs-bedrock 35.83% <25.47%> (-0.22%) ⬇️
llmobs-google-genai 35.58% <26.31%> (-0.23%) ⬇️
llmobs-langchain 34.64% <26.41%> (-0.19%) ⬇️
llmobs-openai-latest ?
llmobs-openai-oldest ?
llmobs-sdk-active 43.12% <19.02%> (-0.39%) ⬇️
llmobs-sdk-latest 43.12% <19.02%> (-0.39%) ⬇️
llmobs-sdk-maintenance 43.22% <19.02%> (-0.39%) ⬇️
llmobs-sdk-oldest 43.21% <19.02%> (-0.39%) ⬇️
llmobs-vertex-ai 35.35% <26.31%> (-0.24%) ⬇️
openfeature-macos 37.21% <25.83%> (-0.18%) ⬇️
openfeature-ubuntu 37.35% <25.83%> (-0.18%) ⬇️
openfeature-unit-active 49.95% <ø> (ø)
openfeature-unit-latest 49.95% <ø> (ø)
openfeature-unit-maintenance 50.32% <ø> (ø)
openfeature-unit-oldest 50.32% <ø> (ø)
openfeature-windows 37.04% <25.83%> (-0.18%) ⬇️
platform-core 45.98% <ø> (ø)
platform-esbuild 46.62% <ø> (ø)
platform-instrumentations-misc 29.22% <23.92%> (-0.10%) ⬇️
platform-integration-active 46.87% <69.81%> (+0.22%) ⬆️
platform-integration-latest 46.92% <69.81%> (?)
platform-integration-maintenance 47.02% <69.81%> (+0.27%) ⬆️
platform-integration-oldest 47.17% <69.81%> (+0.27%) ⬆️
platform-shimmer 47.05% <ø> (ø)
platform-unit-guardrails 44.04% <ø> (ø)
platform-webpack 18.11% <17.70%> (+<0.01%) ⬆️
plugins-aws-durable-execution-sdk-js 32.63% <26.41%> (-0.18%) ⬇️
plugins-axios 35.19% <28.30%> (-0.14%) ⬇️
plugins-azure-cosmos ?
plugins-azure-event-hubs 34.45% <19.02%> (-0.21%) ⬇️
plugins-azure-service-bus ?
plugins-body-parser 36.15% <25.83%> (-0.17%) ⬇️
plugins-bullmq 39.15% <19.02%> (-0.34%) ⬇️
plugins-cassandra 33.34% <26.31%> (-0.22%) ⬇️
plugins-cookie 40.62% <ø> (ø)
plugins-cookie-parser 40.45% <ø> (ø)
plugins-crypto 42.36% <ø> (ø)
plugins-dd-trace-api 33.01% <19.02%> (-0.26%) ⬇️
plugins-express-mongo-sanitize 40.51% <ø> (ø)
plugins-express-session 40.37% <ø> (ø)
plugins-fastify 37.46% <26.88%> (-0.25%) ⬇️
plugins-fetch 34.25% <57.41%> (+0.27%) ⬆️
plugins-fs 33.42% <19.02%> (-0.27%) ⬇️
plugins-generic-pool 39.94% <ø> (ø)
plugins-google-cloud-pubsub 41.08% <26.88%> (-0.29%) ⬇️
plugins-grpc 36.22% <26.41%> (-0.24%) ⬇️
plugins-handlebars 40.51% <ø> (ø)
plugins-hapi 35.30% <26.79%> (-0.24%) ⬇️
plugins-hono 35.64% <26.88%> (-0.23%) ⬇️
plugins-ioredis 33.98% <19.02%> (-0.27%) ⬇️
plugins-jest 26.98% <8.33%> (-0.13%) ⬇️
plugins-knex 39.98% <ø> (ø)
plugins-langgraph 32.05% <19.02%> (-0.24%) ⬇️
plugins-ldapjs 38.96% <ø> (ø)
plugins-light-my-request 40.08% <ø> (ø)
plugins-limitd-client ?
plugins-lodash 40.12% <ø> (ø)
plugins-mariadb 34.80% <19.02%> (-0.28%) ⬇️
plugins-memcached 33.37% <19.02%> (-0.26%) ⬇️
plugins-microgateway-core 34.42% <26.79%> (-0.23%) ⬇️
plugins-modelcontextprotocol-sdk 32.00% <19.02%> (-0.25%) ⬇️
plugins-moleculer ?
plugins-mongodb 35.44% <26.31%> (-0.24%) ⬇️
plugins-mongodb-core 35.09% <19.02%> (-0.28%) ⬇️
plugins-mongoose 34.20% <26.31%> (-0.06%) ⬇️
plugins-multer 40.42% <ø> (ø)
plugins-mysql 34.28% <19.02%> (-0.28%) ⬇️
plugins-mysql2 34.62% <19.02%> (-0.28%) ⬇️
plugins-nats 35.98% <19.02%> (-0.30%) ⬇️
plugins-node-serialize 40.65% <ø> (ø)
plugins-opensearch 33.28% <26.31%> (-0.22%) ⬇️
plugins-passport-http 40.24% <ø> (ø)
plugins-pino 29.51% <17.56%> (-0.23%) ⬇️
plugins-postgres 34.33% <19.02%> (-0.27%) ⬇️
plugins-process 42.36% <ø> (ø)
plugins-pug 40.62% <ø> (ø)
plugins-redis 33.89% <19.02%> (-0.27%) ⬇️
plugins-router 37.87% <29.66%> (-0.08%) ⬇️
plugins-sequelize 39.90% <ø> (ø)
plugins-test-and-upstream-amqp10 33.51% <19.02%> (-0.27%) ⬇️
plugins-test-and-upstream-amqplib 38.63% <19.02%> (-0.33%) ⬇️
plugins-test-and-upstream-apollo 34.51% <26.31%> (-0.21%) ⬇️
plugins-test-and-upstream-avsc 33.39% <19.02%> (-0.27%) ⬇️
plugins-test-and-upstream-bunyan 28.93% <17.56%> (-0.03%) ⬇️
plugins-test-and-upstream-connect 35.97% <26.79%> (-0.25%) ⬇️
plugins-test-and-upstream-graphql 35.68% <19.02%> (-0.29%) ⬇️
plugins-test-and-upstream-koa 35.48% <26.79%> (-0.24%) ⬇️
plugins-test-and-upstream-protobufjs 33.63% <19.02%> (-0.27%) ⬇️
plugins-test-and-upstream-rhea 38.76% <19.02%> (-0.33%) ⬇️
plugins-undici 34.68% <57.20%> (+0.20%) ⬆️
plugins-url 42.36% <ø> (ø)
plugins-valkey 33.32% <19.02%> (-0.26%) ⬇️
plugins-vm 42.36% <ø> (ø)
plugins-winston 29.41% <24.88%> (-0.18%) ⬇️
plugins-ws 36.75% <26.31%> (-0.26%) ⬇️
profiling-macos 42.80% <25.83%> (-0.30%) ⬇️
profiling-ubuntu ?
profiling-windows ?
serverless-aws-sdk-latest-aws-sdk 32.85% <29.24%> (-0.15%) ⬇️
serverless-aws-sdk-latest-bedrockruntime 31.71% <25.47%> (-0.18%) ⬇️
serverless-aws-sdk-latest-client 36.32% <ø> (ø)
serverless-aws-sdk-latest-dynamodb 33.67% <26.41%> (-0.14%) ⬇️
serverless-aws-sdk-latest-eventbridge 26.76% <23.92%> (-0.13%) ⬇️
serverless-aws-sdk-latest-kinesis 36.84% <26.41%> (-0.23%) ⬇️
serverless-aws-sdk-latest-lambda 34.13% <26.41%> (-0.20%) ⬇️
serverless-aws-sdk-latest-s3 32.06% <26.41%> (-0.18%) ⬇️
serverless-aws-sdk-latest-serverless-peer-service 38.95% <29.24%> (-0.27%) ⬇️
serverless-aws-sdk-latest-sns 37.85% <26.41%> (-0.24%) ⬇️
serverless-aws-sdk-latest-sqs 37.47% <26.41%> (-0.24%) ⬇️
serverless-aws-sdk-latest-stepfunctions 32.72% <26.41%> (-0.19%) ⬇️
serverless-aws-sdk-latest-util 46.39% <ø> (ø)
serverless-aws-sdk-oldest-aws-sdk 32.95% <29.24%> (-0.16%) ⬇️
serverless-aws-sdk-oldest-bedrockruntime 31.81% <25.47%> (-0.18%) ⬇️
serverless-aws-sdk-oldest-client 36.88% <ø> (ø)
serverless-aws-sdk-oldest-dynamodb 33.77% <26.41%> (-0.20%) ⬇️
serverless-aws-sdk-oldest-eventbridge ?
serverless-aws-sdk-oldest-kinesis 37.01% <26.41%> (-0.24%) ⬇️
serverless-aws-sdk-oldest-lambda ?
serverless-aws-sdk-oldest-s3 ?
serverless-aws-sdk-oldest-serverless-peer-service 39.04% <29.24%> (-0.27%) ⬇️
serverless-aws-sdk-oldest-sns 37.95% <26.41%> (-0.25%) ⬇️
serverless-aws-sdk-oldest-sqs 37.55% <26.41%> (-0.24%) ⬇️
serverless-aws-sdk-oldest-stepfunctions 32.82% <26.41%> (-0.19%) ⬇️
serverless-aws-sdk-oldest-util 47.13% <ø> (ø)
serverless-azure-durable-functions 36.61% <28.77%> (+0.01%) ⬆️
serverless-azure-functions-eventhubs 38.05% <26.04%> (-0.19%) ⬇️
serverless-azure-functions-servicebus 38.11% <26.04%> (-0.19%) ⬇️
serverless-lambda 33.97% <18.50%> (-0.36%) ⬇️
test-optimization-cucumber-latest-7.0.0 49.64% <28.22%> (-0.28%) ⬇️
test-optimization-cucumber-latest-latest 52.35% <28.22%> (-0.14%) ⬇️
test-optimization-cucumber-oldest-7.0.0 49.72% <28.22%> (-0.17%) ⬇️
test-optimization-cypress-latest-12.0.0-commonJS 48.96% <25.35%> (-0.24%) ⬇️
test-optimization-cypress-latest-12.0.0-esm 47.63% <25.35%> (-1.49%) ⬇️
test-optimization-cypress-latest-14.5.4-commonJS 47.35% <25.35%> (-1.63%) ⬇️
test-optimization-cypress-latest-14.5.4-esm 48.84% <25.35%> (+1.71%) ⬆️
test-optimization-cypress-latest-latest-commonJS 48.92% <25.35%> (-0.61%) ⬇️
test-optimization-cypress-latest-latest-esm 49.32% <25.35%> (-0.21%) ⬇️
test-optimization-cypress-oldest-12.0.0-commonJS 49.04% <25.35%> (+1.57%) ⬆️
test-optimization-cypress-oldest-12.0.0-esm 49.07% <25.35%> (+1.07%) ⬆️
test-optimization-cypress-oldest-14.5.4-commonJS 48.89% <25.35%> (-0.24%) ⬇️
test-optimization-cypress-oldest-14.5.4-esm 47.60% <25.35%> (-0.22%) ⬇️
test-optimization-jest-latest-latest 55.05% <28.22%> (-0.24%) ⬇️
test-optimization-jest-latest-oldest 48.70% <25.35%> (-5.45%) ⬇️
test-optimization-jest-oldest-latest 55.10% <28.22%> (-0.24%) ⬇️
test-optimization-jest-oldest-oldest 53.99% <28.22%> (+1.71%) ⬆️
test-optimization-mocha-latest-latest 53.30% <28.22%> (-0.23%) ⬇️
test-optimization-mocha-latest-oldest 50.87% <28.22%> (-0.21%) ⬇️
test-optimization-mocha-oldest-latest 53.41% <28.22%> (-0.23%) ⬇️
test-optimization-mocha-oldest-oldest 50.86% <28.22%> (-0.21%) ⬇️
test-optimization-playwright-latest-latest-playwright-active-test-span 43.92% <25.47%> (-0.04%) ⬇️
test-optimization-playwright-latest-latest-playwright-atr 42.63% <25.47%> (-0.13%) ⬇️
test-optimization-playwright-latest-latest-playwright-efd 43.07% <25.47%> (-0.15%) ⬇️
test-optimization-playwright-latest-latest-playwright-final-status ?
test-optimization-playwright-latest-latest-playwright-impacted-tests 42.60% <25.47%> (-0.24%) ⬇️
test-optimization-playwright-latest-latest-playwright-reporting 42.67% <25.47%> (-0.15%) ⬇️
test-optimization-playwright-latest-latest-playwright-test-management 44.25% <25.47%> (-0.38%) ⬇️
test-optimization-playwright-latest-oldest-playwright-active-test-span 43.76% <25.35%> (-0.02%) ⬇️
test-optimization-playwright-latest-oldest-playwright-atr 42.70% <25.35%> (-0.13%) ⬇️
test-optimization-playwright-latest-oldest-playwright-efd 42.99% <25.35%> (-0.15%) ⬇️
test-optimization-playwright-latest-oldest-playwright-final-status 43.06% <25.35%> (?)
test-optimization-playwright-latest-oldest-playwright-impacted-tests 42.52% <25.35%> (?)
test-optimization-playwright-latest-oldest-playwright-reporting ?
test-optimization-playwright-latest-oldest-playwright-test-management 44.20% <25.35%> (-0.16%) ⬇️
test-optimization-playwright-oldest-latest-playwright-active-test-span 44.00% <25.47%> (?)
test-optimization-playwright-oldest-latest-playwright-atr 42.71% <25.47%> (?)
test-optimization-playwright-oldest-latest-playwright-efd 43.12% <25.47%> (-0.15%) ⬇️
test-optimization-playwright-oldest-latest-playwright-final-status 43.21% <25.47%> (-0.15%) ⬇️
test-optimization-playwright-oldest-latest-playwright-impacted-tests 42.68% <25.47%> (-0.24%) ⬇️
test-optimization-playwright-oldest-latest-playwright-reporting 42.72% <25.47%> (-0.15%) ⬇️
test-optimization-playwright-oldest-latest-playwright-test-management 44.33% <25.47%> (-0.17%) ⬇️
test-optimization-playwright-oldest-oldest-playwright-active-test-span 43.84% <25.35%> (-0.02%) ⬇️
test-optimization-playwright-oldest-oldest-playwright-atr 42.79% <25.35%> (-0.13%) ⬇️
test-optimization-playwright-oldest-oldest-playwright-efd 43.05% <25.35%> (-0.16%) ⬇️
test-optimization-playwright-oldest-oldest-playwright-final-status ?
test-optimization-playwright-oldest-oldest-playwright-impacted-tests 42.60% <25.35%> (-0.24%) ⬇️
test-optimization-playwright-oldest-oldest-playwright-reporting ?
test-optimization-playwright-oldest-oldest-playwright-test-management 44.29% <25.35%> (-0.12%) ⬇️
test-optimization-selenium-latest 45.00% <28.22%> (-0.13%) ⬇️
test-optimization-selenium-oldest 44.57% <28.22%> (-0.13%) ⬇️
test-optimization-testopt-active 48.08% <28.30%> (-0.08%) ⬇️
test-optimization-testopt-latest 48.08% <28.30%> (-0.08%) ⬇️
test-optimization-testopt-maintenance 48.06% <28.30%> (-0.08%) ⬇️
test-optimization-testopt-oldest 49.14% <28.30%> (-0.13%) ⬇️
test-optimization-vitest-latest 50.55% <28.30%> (-0.17%) ⬇️
test-optimization-vitest-oldest 47.15% <28.30%> (-0.57%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Base automatically changed from ayan.khan/otel-http-semantics to master June 22, 2026 17:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant