diff --git a/app/lib/.server/otel.ts b/app/lib/.server/otel.ts index e7dcd82f..52eab7e4 100644 --- a/app/lib/.server/otel.ts +++ b/app/lib/.server/otel.ts @@ -1,11 +1,13 @@ import { Resource } from '@opentelemetry/resources'; -import { ATTR_SERVICE_NAME } from '@opentelemetry/semantic-conventions'; +import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions'; import { WebTracerProvider } from '@opentelemetry/sdk-trace-web'; import { ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base'; import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; import { ZoneContextManager } from '@opentelemetry/context-zone'; import { SpanStatusCode, type Attributes, context, trace } from '@opentelemetry/api'; +let otelInitialized = false; + function initializeOpenTelemetry() { const honeycombApiKey = process.env.HONEYCOMB_API_KEY; const honeycombDataset = process.env.HONEYCOMB_DATASET; @@ -27,6 +29,7 @@ function initializeOpenTelemetry() { const resource = new Resource({ [ATTR_SERVICE_NAME]: 'nut.server', + [ATTR_SERVICE_VERSION]: `${__APP_VERSION}; ${__COMMIT_HASH}`, }); const provider = new WebTracerProvider({ @@ -38,6 +41,8 @@ function initializeOpenTelemetry() { contextManager: new ZoneContextManager(), }); + otelInitialized = true; + return provider.getTracer('nut-server'); } @@ -66,6 +71,10 @@ export function wrapWithSpan( fn: (...args: Args) => Promise, ): (...args: Args) => Promise { return async (...args: Args) => { + if (!otelInitialized) { + console.warn("OpenTelemetry not initialized, skipping span creation"); + } + return tracer.startActiveSpan(opts.name, async (span) => { if (opts.attrs) { span.setAttributes(opts.attrs);