@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
JavaScript
;
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;