12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import { context, SpanStatusCode } from '../../';
- const defaultOnException = (e, span) => {
- span.recordException(e);
- span.setStatus({
- code: SpanStatusCode.ERROR,
- });
- };
- /**
- * return a new SugaredTracer created from the supplied one
- * @param tracer
- */
- export function wrapTracer(tracer) {
- return new SugaredTracer(tracer);
- }
- export class SugaredTracer {
- constructor(tracer) {
- this._tracer = tracer;
- this.startSpan = tracer.startSpan.bind(this._tracer);
- this.startActiveSpan = tracer.startActiveSpan.bind(this._tracer);
- }
- withActiveSpan(name, arg2, arg3, arg4) {
- const { opts, ctx, fn } = massageParams(arg2, arg3, arg4);
- return this._tracer.startActiveSpan(name, opts, ctx, (span) => handleFn(span, opts, fn));
- }
- withSpan(name, arg2, arg3, arg4) {
- const { opts, ctx, fn } = massageParams(arg2, arg3, arg4);
- const span = this._tracer.startSpan(name, opts, ctx);
- return handleFn(span, opts, fn);
- }
- }
- /**
- * Massages parameters of withSpan and withActiveSpan to allow signature overwrites
- * @param arg
- * @param arg2
- * @param arg3
- */
- function massageParams(arg, arg2, arg3) {
- let opts;
- let ctx;
- let fn;
- if (!arg2 && !arg3) {
- fn = arg;
- }
- else if (!arg3) {
- opts = arg;
- fn = arg2;
- }
- else {
- opts = arg;
- ctx = arg2;
- fn = arg3;
- }
- opts = opts !== null && opts !== void 0 ? opts : {};
- ctx = ctx !== null && ctx !== void 0 ? ctx : context.active();
- return { opts, ctx, fn };
- }
- /**
- * Executes fn, returns results and runs onException in the case of exception to allow overwriting of error handling
- * @param span
- * @param opts
- * @param fn
- */
- function handleFn(span, opts, fn) {
- var _a;
- const onException = (_a = opts.onException) !== null && _a !== void 0 ? _a : defaultOnException;
- const errorHandler = (e) => {
- onException(e, span);
- span.end();
- throw e;
- };
- try {
- const ret = fn(span);
- // if fn is an async function, attach a recordException and spanEnd callback to the promise
- if (typeof (ret === null || ret === void 0 ? void 0 : ret.then) === 'function') {
- return ret.then(val => {
- span.end();
- return val;
- }, errorHandler);
- }
- span.end();
- return ret;
- }
- catch (e) {
- // add throw to signal the compiler that this will throw in the inner scope
- throw errorHandler(e);
- }
- }
- //# sourceMappingURL=SugaredTracer.js.map
|