nestjs-otel
Version:
NestJS OpenTelemetry Library
45 lines • 1.79 kB
JavaScript
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
;