Compare commits
5 Commits
263c170627
...
4c87af124f
Author | SHA1 | Date |
---|---|---|
|
4c87af124f | |
|
20d3fd1fe5 | |
|
414f0a6c95 | |
|
ea95a7df84 | |
|
617d7f17c8 |
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
'@hono/zod-openapi': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Run validators before route middleware.
|
|
@ -1,5 +1,11 @@
|
||||||
# @hono/otel
|
# @hono/otel
|
||||||
|
|
||||||
|
## 0.2.0
|
||||||
|
|
||||||
|
### Minor Changes
|
||||||
|
|
||||||
|
- [#1151](https://github.com/honojs/middleware/pull/1151) [`414f0a6c9502de4135d50a4f80698a8d2f09a81d`](https://github.com/honojs/middleware/commit/414f0a6c9502de4135d50a4f80698a8d2f09a81d) Thanks [@nrdobie](https://github.com/nrdobie)! - Added support for W3C Trace Context format
|
||||||
|
|
||||||
## 0.1.1
|
## 0.1.1
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@hono/otel",
|
"name": "@hono/otel",
|
||||||
"version": "0.1.1",
|
"version": "0.2.0",
|
||||||
"description": "OpenTelemetry middleware for Hono",
|
"description": "OpenTelemetry middleware for Hono",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"module": "dist/index.js",
|
"module": "dist/index.js",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import type { TracerProvider } from '@opentelemetry/api'
|
import type { TracerProvider } from '@opentelemetry/api'
|
||||||
import { SpanKind, SpanStatusCode, trace } from '@opentelemetry/api'
|
import { SpanKind, SpanStatusCode, trace, context, propagation } from '@opentelemetry/api'
|
||||||
import {
|
import {
|
||||||
ATTR_HTTP_REQUEST_HEADER,
|
ATTR_HTTP_REQUEST_HEADER,
|
||||||
ATTR_HTTP_REQUEST_METHOD,
|
ATTR_HTTP_REQUEST_METHOD,
|
||||||
|
@ -42,6 +42,12 @@ export const otel = <E extends Env = any, P extends string = any, I extends Inpu
|
||||||
const tracerProvider = options.tracerProvider ?? trace.getTracerProvider()
|
const tracerProvider = options.tracerProvider ?? trace.getTracerProvider()
|
||||||
const tracer = tracerProvider.getTracer(PACKAGE_NAME, PACKAGE_VERSION)
|
const tracer = tracerProvider.getTracer(PACKAGE_NAME, PACKAGE_VERSION)
|
||||||
return createMiddleware<E, P, I>(async (c, next) => {
|
return createMiddleware<E, P, I>(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
|
const routePath = c.req.routePath
|
||||||
await tracer.startActiveSpan(
|
await tracer.startActiveSpan(
|
||||||
`${c.req.method} ${c.req.routePath}`,
|
`${c.req.method} ${c.req.routePath}`,
|
||||||
|
@ -53,6 +59,7 @@ export const otel = <E extends Env = any, P extends string = any, I extends Inpu
|
||||||
[ATTR_HTTP_ROUTE]: routePath,
|
[ATTR_HTTP_ROUTE]: routePath,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
activeContext,
|
||||||
async (span) => {
|
async (span) => {
|
||||||
for (const [name, value] of Object.entries(c.req.header())) {
|
for (const [name, value] of Object.entries(c.req.header())) {
|
||||||
span.setAttribute(ATTR_HTTP_REQUEST_HEADER(name), value)
|
span.setAttribute(ATTR_HTTP_REQUEST_HEADER(name), value)
|
||||||
|
|
|
@ -546,8 +546,8 @@ export class OpenAPIHono<
|
||||||
this.on(
|
this.on(
|
||||||
[route.method],
|
[route.method],
|
||||||
route.path.replaceAll(/\/{(.+?)}/g, '/:$1'),
|
route.path.replaceAll(/\/{(.+?)}/g, '/:$1'),
|
||||||
...middleware,
|
|
||||||
...validators,
|
...validators,
|
||||||
|
...middleware,
|
||||||
handler
|
handler
|
||||||
)
|
)
|
||||||
return this
|
return this
|
||||||
|
|
Loading…
Reference in New Issue