Skip to content

Commit cbca3d0

Browse files
committed
ref(vue): Clarify Vue tracing
1 parent c9bd340 commit cbca3d0

File tree

1 file changed

+22
-16
lines changed

1 file changed

+22
-16
lines changed

packages/vue/src/tracing.ts

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ export const createTracingMixins = (options: Partial<TracingOptions> = {}): Mixi
7979
mixins[internalHook] = function (this: VueSentry) {
8080
const isRoot = this.$root === this;
8181

82+
// 1. Root span creation
8283
if (isRoot) {
8384
this.$_sentryRootSpan =
8485
this.$_sentryRootSpan ||
@@ -92,35 +93,39 @@ export const createTracingMixins = (options: Partial<TracingOptions> = {}): Mixi
9293
});
9394
}
9495

95-
// Skip components that we don't want to track to minimize the noise and give a more granular control to the user
96-
const name = formatComponentName(this, false);
96+
// 2. Component tracking filter
97+
const componentName = formatComponentName(this, false);
9798

98-
const shouldTrack = Array.isArray(options.trackComponents)
99-
? findTrackComponent(options.trackComponents, name)
100-
: options.trackComponents;
99+
const shouldTrack =
100+
isRoot || // We always want to track the root component
101+
(Array.isArray(options.trackComponents)
102+
? findTrackComponent(options.trackComponents, componentName)
103+
: options.trackComponents);
101104

102-
// We always want to track root component
103-
if (!isRoot && !shouldTrack) {
105+
if (!shouldTrack) {
104106
return;
105107
}
106108

107109
this.$_sentrySpans = this.$_sentrySpans || {};
108110

109-
// Start a new span if current hook is a 'before' hook.
110-
// Otherwise, retrieve the current span and finish it.
111-
if (internalHook == internalHooks[0]) {
112-
const activeSpan = this.$root?.$_sentryRootSpan || getActiveSpan();
111+
// 3. Span lifecycle management based on the hook type
112+
const isBeforeHook = internalHook === internalHooks[0];
113+
const activeSpan = this.$root?.$_sentryRootSpan || getActiveSpan();
114+
115+
if (isBeforeHook) {
116+
// Starting a new span in the "before" hook
113117
if (activeSpan) {
114-
// Cancel old span for this hook operation in case it didn't get cleaned up. We're not actually sure if it
115-
// will ever be the case that cleanup hooks re not called, but we had users report that spans didn't get
116-
// finished so we finish the span before starting a new one, just to be sure.
118+
// Cancel any existing span for this operation (safety measure)
119+
// We're actually not sure if it will ever be the case that cleanup hooks were not called.
120+
// However, we had users report that spans didn't get finished, so we finished the span before
121+
// starting a new one, just to be sure.
117122
const oldSpan = this.$_sentrySpans[operation];
118123
if (oldSpan) {
119124
oldSpan.end();
120125
}
121126

122127
this.$_sentrySpans[operation] = startInactiveSpan({
123-
name: `Vue ${name}`,
128+
name: `Vue ${componentName}`,
124129
op: `${VUE_OP}.${operation}`,
125130
attributes: {
126131
[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.vue',
@@ -134,9 +139,10 @@ export const createTracingMixins = (options: Partial<TracingOptions> = {}): Mixi
134139
const span = this.$_sentrySpans[operation];
135140
// The before hook did not start the tracking span, so the span was not added.
136141
// This is probably because it happened before there is an active transaction
137-
if (!span) return;
142+
if (!span) return; // Skip if no span was created in the "before" hook
138143
span.end();
139144

145+
// For any "after" hook, also schedule the root span to finish
140146
finishRootSpan(this, timestampInSeconds(), options.timeout || 2000);
141147
}
142148
};

0 commit comments

Comments
 (0)