UNPKG

@resonatehq/opentelemetry

Version:

OpenTelemetry integration for Resonate SDK in TypeScript. Provides tracing and observability for durable executions and workflows.

57 lines (56 loc) 1.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OpenTelemetrySpan = exports.OpenTelemetryTracer = void 0; const api_1 = require("@opentelemetry/api"); class OpenTelemetryTracer { constructor(tracerOrName, version) { if (typeof tracerOrName === "string") { // name + optional version this.t = api_1.trace.getTracer(tracerOrName, version); } else { // existing Tracer instance this.t = tracerOrName; } } startSpan(id, startTime) { const span = this.t.startSpan(id, { startTime: startTime }); const ctx = api_1.trace.setSpan(api_1.context.active(), span); return new OpenTelemetrySpan(this.t, ctx, span); } decode(headers) { const ctx = api_1.propagation.extract(api_1.context.active(), headers); return new OpenTelemetrySpan(this.t, ctx); } } exports.OpenTelemetryTracer = OpenTelemetryTracer; class OpenTelemetrySpan { constructor(t, c, s) { this.t = t; this.c = c; this.s = s; } startSpan(id, startTime) { const span = this.t.startSpan(id, { startTime: startTime }, this.c); const ctx = api_1.trace.setSpan(this.c, span); return new OpenTelemetrySpan(this.t, ctx, span); } encode() { const headers = {}; api_1.propagation.inject(this.c, headers); return headers; } setAttribute(key, value) { this.s?.setAttribute(key, value); } setStatus(success, message) { this.s?.setStatus({ code: success ? api_1.SpanStatusCode.OK : api_1.SpanStatusCode.ERROR, message, }); } end(endTime) { this.s?.end(endTime); } } exports.OpenTelemetrySpan = OpenTelemetrySpan;