autotel
Version:
Write Once, Observe Anywhere
45 lines (43 loc) • 1.76 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const require_config = require('./config.cjs');
const require_track = require('./track-Cb3Q4QmS.cjs');
let _opentelemetry_api = require("@opentelemetry/api");
//#region src/decorators.ts
function Trace(nameOrOptions, maybeOptions) {
const name = typeof nameOrOptions === "string" ? nameOrOptions : nameOrOptions?.name;
return function(originalMethod, context) {
const methodName = String(context.name);
const methodStr = originalMethod?.toString() || "";
if (!(originalMethod && (originalMethod.constructor?.name === "AsyncFunction" || methodStr.trim().startsWith("async ") || methodStr.includes("[native code]") && methodStr.includes("async") || /async\s+/.test(methodStr)))) return originalMethod;
const spanName = name || methodName;
return async function(...args) {
return require_config.getConfig().tracer.startActiveSpan(spanName, async (span) => {
try {
const ctx = require_track.createTraceContext(span);
const originalCtx = this.ctx;
try {
this.ctx = ctx;
const result = await originalMethod.apply(this, args);
span.setStatus({ code: _opentelemetry_api.SpanStatusCode.OK });
return result;
} finally {
if (originalCtx === void 0) delete this.ctx;
else this.ctx = originalCtx;
}
} catch (error) {
span.setStatus({
code: _opentelemetry_api.SpanStatusCode.ERROR,
message: error instanceof Error ? error.message : "Unknown error"
});
span.recordException(error instanceof Error ? error : new Error(String(error)));
throw error;
} finally {
span.end();
}
});
};
};
}
//#endregion
exports.Trace = Trace;
//# sourceMappingURL=decorators.cjs.map