nitro-opentelemetry
Version:
Opentelemetry module for the server framework nitro. Compatible with Nuxt.
26 lines (25 loc) • 865 B
JavaScript
import * as api from "@opentelemetry/api";
import { defineEventHandler } from "h3";
const context = api.context;
export function defineTracedEventHandler(handler) {
if (isEventHandler(handler)) {
return defineEventHandler((event) => {
return context.with(event.otel.ctx, handler, void 0, event);
});
} else if (isEventHandlerObject(handler)) {
const { handler: h, ...rest } = handler;
return defineEventHandler({
...rest,
handler: (event) => {
return context.with(event.otel.ctx, h, void 0, event);
}
});
}
throw new Error("Event handler must satisfy either EventHandler or EventHandlerObject from h3");
}
function isEventHandler(handler) {
return typeof handler === "function";
}
function isEventHandlerObject(handler) {
return typeof handler === "object" && typeof handler.handler === "function";
}