UNPKG

nestjs-otel

Version:
45 lines 1.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Span = void 0; const api_1 = require("@opentelemetry/api"); const opentelemetry_utils_1 = require("../../opentelemetry.utils"); const recordException = (span, error) => { span.recordException(error); span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: error.message }); }; function Span(name) { return (target, propertyKey, propertyDescriptor) => { const originalFunction = propertyDescriptor.value; const wrappedFunction = function PropertyDescriptor(...args) { const tracer = api_1.trace.getTracer('default'); const spanName = name || `${target.constructor.name}.${propertyKey}`; return tracer.startActiveSpan(spanName, span => { if (originalFunction.constructor.name === 'AsyncFunction') { return originalFunction .apply(this, args) .catch(error => { recordException(span, error); throw error; }) .finally(() => { span.end(); }); } try { return originalFunction.apply(this, args); } catch (error) { recordException(span, error); throw error; } finally { span.end(); } }); }; propertyDescriptor.value = wrappedFunction; (0, opentelemetry_utils_1.copyMetadataFromFunctionToFunction)(originalFunction, wrappedFunction); }; } exports.Span = Span; //# sourceMappingURL=span.js.map