blob: 3892c895c347cc5ee326f2898527bb7d3d5aca33 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
import { isThenable } from '@sentry/utils';
import { getCurrentHub } from '../hub.js';
import { hasTracingEnabled } from '../utils/hasTracingEnabled.js';
/**
* Wraps a function with a transaction/span and finishes the span after the function is done.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*
* This function is meant to be used internally and may break at any time. Use at your own risk.
*
* @internal
* @private
*/
function trace(
context,
callback,
// eslint-disable-next-line @typescript-eslint/no-empty-function
onError = () => {},
) {
const ctx = { ...context };
// If a name is set and a description is not, set the description to the name.
if (ctx.name !== undefined && ctx.description === undefined) {
ctx.description = ctx.name;
}
const hub = getCurrentHub();
const scope = hub.getScope();
const parentSpan = scope.getSpan();
function getActiveSpan() {
if (!hasTracingEnabled()) {
return undefined;
}
return parentSpan ? parentSpan.startChild(ctx) : hub.startTransaction(ctx);
}
const activeSpan = getActiveSpan();
scope.setSpan(activeSpan);
function finishAndSetSpan() {
activeSpan && activeSpan.finish();
hub.getScope().setSpan(parentSpan);
}
let maybePromiseResult;
try {
maybePromiseResult = callback(activeSpan);
} catch (e) {
activeSpan && activeSpan.setStatus('internal_error');
onError(e);
finishAndSetSpan();
throw e;
}
if (isThenable(maybePromiseResult)) {
Promise.resolve(maybePromiseResult).then(
() => {
finishAndSetSpan();
},
e => {
activeSpan && activeSpan.setStatus('internal_error');
onError(e);
finishAndSetSpan();
},
);
} else {
finishAndSetSpan();
}
return maybePromiseResult;
}
export { trace };
//# sourceMappingURL=trace.js.map
|