UNPKG

otel-tools

Version:
69 lines 2.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.traceMethod = exports.TraceMethod = void 0; var api_1 = require("@opentelemetry/api"); function TraceMethod(options) { var tracer = options.tracer; return function traceMethodDecorator(target, propertyKey, descriptor) { var _a, _b; var originalMethod = descriptor.value; var spanName = (_a = options.spanName) !== null && _a !== void 0 ? _a : [(_b = target === null || target === void 0 ? void 0 : target.constructor) === null || _b === void 0 ? void 0 : _b.name, String(propertyKey)].join('.'); descriptor.value = traceMethod({ tracer: tracer, spanName: spanName }, originalMethod); Object.defineProperty(descriptor.value, 'name', { value: propertyKey }); }; } exports.TraceMethod = TraceMethod; function traceMethod(options, fn) { var _a; var tracer = options.tracer; var spanName = (_a = options.spanName) !== null && _a !== void 0 ? _a : fn.name; if (!spanName) { throw new Error('Specify spanName for anonymous function!'); } var decoratedMethod = function () { var _this = this; var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return tracer.startActiveSpan(spanName, function (span) { try { var returnValue = fn.apply(_this, args); if (typeof returnValue.then === 'function') { return returnValue .then(function (resolvedValue) { span.setStatus({ code: api_1.SpanStatusCode.OK }); return resolvedValue; }) .catch(function (error) { span.recordException(error); span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: error.message, }); throw error; }) .finally(function () { return span.end(); }); } else { span.setStatus({ code: api_1.SpanStatusCode.OK }); span.end(); return returnValue; } } catch (error) { span.recordException(error); span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: error.message, }); span.end(); throw error; } }); }; Object.defineProperty(decoratedMethod, 'name', { value: fn.name }); return decoratedMethod; } exports.traceMethod = traceMethod; //# sourceMappingURL=decorator.js.map