From ae6e94856d0fbd8c97993488e2f970d65ff0e330 Mon Sep 17 00:00:00 2001 From: Nick Dobie Date: Wed, 7 May 2025 00:36:21 -0500 Subject: [PATCH 1/2] feat(otel): Added support for W3C Trace Context format --- .changeset/salty-bags-shop.md | 5 +++++ packages/otel/src/index.ts | 11 +++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 .changeset/salty-bags-shop.md diff --git a/.changeset/salty-bags-shop.md b/.changeset/salty-bags-shop.md new file mode 100644 index 00000000..dee41796 --- /dev/null +++ b/.changeset/salty-bags-shop.md @@ -0,0 +1,5 @@ +--- +'@hono/otel': minor +--- + +Added support for W3C Trace Context format diff --git a/packages/otel/src/index.ts b/packages/otel/src/index.ts index 06c382d5..fb34457a 100644 --- a/packages/otel/src/index.ts +++ b/packages/otel/src/index.ts @@ -1,5 +1,5 @@ import type { TracerProvider } from '@opentelemetry/api' -import { SpanKind, SpanStatusCode, trace } from '@opentelemetry/api' +import { SpanKind, SpanStatusCode, trace, context, propagation } from '@opentelemetry/api' import { ATTR_HTTP_REQUEST_HEADER, ATTR_HTTP_REQUEST_METHOD, @@ -8,7 +8,7 @@ import { ATTR_URL_FULL, ATTR_HTTP_ROUTE, } from '@opentelemetry/semantic-conventions' -import type { Env, Input } from 'hono' +import type { Env, HonoRequest, Input } from 'hono' import { createMiddleware } from 'hono/factory' import metadata from '../package.json' with { type: 'json' } @@ -42,6 +42,12 @@ export const otel = (async (c, next) => { + // Handle propagation of trace context from a request using the W3C Trace Context format + let activeContext = context.active() + if (c.req.header('traceparent')) { + activeContext = propagation.extract(context.active(), c.req.header()) + } + const routePath = c.req.routePath await tracer.startActiveSpan( `${c.req.method} ${c.req.routePath}`, @@ -53,6 +59,7 @@ export const otel = { for (const [name, value] of Object.entries(c.req.header())) { span.setAttribute(ATTR_HTTP_REQUEST_HEADER(name), value) From 19d55ea2d3921c5d4240bfcfebce4d22e2fffbe1 Mon Sep 17 00:00:00 2001 From: Nicholas Dobie Date: Wed, 7 May 2025 09:56:23 -0500 Subject: [PATCH 2/2] removed unneeded HonoRequest --- packages/otel/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/otel/src/index.ts b/packages/otel/src/index.ts index fb34457a..064e64be 100644 --- a/packages/otel/src/index.ts +++ b/packages/otel/src/index.ts @@ -8,7 +8,7 @@ import { ATTR_URL_FULL, ATTR_HTTP_ROUTE, } from '@opentelemetry/semantic-conventions' -import type { Env, HonoRequest, Input } from 'hono' +import type { Env, Input } from 'hono' import { createMiddleware } from 'hono/factory' import metadata from '../package.json' with { type: 'json' }