fix(node): Pass inferred name & attributes to tracesSampler - #12945

Merged
mydea merged 2 commits into
developfrom
fn/sampler-name
Jul 18, 2024
Merged

fix(node): Pass inferred name & attributes to tracesSampler#12945
mydea merged 2 commits into
developfrom
fn/sampler-name

Conversation

@mydea

Copy link
Copy Markdown
Member

Previously, we passed the span name directly to the tracesSampler as-is. However, this is not ideal because this does not match the name we actually send to sentry later, making this confusing. The reason is that we infer the name from the attributes for some types of spans, but we do that at export-time.

This PR adjust this so that we send the inferred name & attributes to the tracesSampler. This works reasonably enough. However, there is a big caveat: This still only has access to the initial attributes that a span has at creation time. This means that we'll never have e.g. the http.route correctly there, because all http.server spans originate from the http instrumentation where they do not have a route yet, and then more specific instrumentation (e.g. express or fastify) add the http.route to that span later. So the name will never be parametrized, for example, for http.server spans, which is not ideal (as it will still not match the final span exactly) but should still be better than what we had so far (where the name would always just be e.g. GET).

Fixes#12944

@github-actions

github-actionsBot commented Jul 17, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser22.3 KB (0%)
@sentry/browser (incl. Tracing)33.69 KB (0%)
@sentry/browser (incl. Tracing, Replay)69.77 KB (0%)
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags63.08 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas)74.17 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback)86.49 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback, metrics)88.36 KB (0%)
@sentry/browser (incl. metrics)26.59 KB (0%)
@sentry/browser (incl. Feedback)38.98 KB (0%)
@sentry/browser (incl. sendFeedback)26.93 KB (0%)
@sentry/browser (incl. FeedbackAsync)31.54 KB (0%)
@sentry/react25.06 KB (0%)
@sentry/react (incl. Tracing)36.75 KB (0%)
@sentry/vue26.41 KB (0%)
@sentry/vue (incl. Tracing)35.57 KB (0%)
@sentry/svelte22.44 KB (0%)
CDN Bundle23.52 KB (0%)
CDN Bundle (incl. Tracing)35.47 KB (0%)
CDN Bundle (incl. Tracing, Replay)69.87 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback)75.14 KB (0%)
CDN Bundle - uncompressed69 KB (0%)
CDN Bundle (incl. Tracing) - uncompressed104.93 KB (0%)
CDN Bundle (incl. Tracing, Replay) - uncompressed216.71 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.43 KB (0%)
@sentry/nextjs (client)36.61 KB (0%)
@sentry/sveltekit (client)34.34 KB (0%)
@sentry/node111.29 KB (+0.01% 🔺)
@sentry/node - without tracing88.71 KB (-0.03% 🔽)
@sentry/aws-serverless97.88 KB (+0.02% 🔺)

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even if we can't get the final parameterized name in time, I think this is an improvement to what we had before so 👍

const spanOptions = getSpanOptions(options);

return tracer.startActiveSpan(name, spanOptions, ctx, span => {
_applySentryAttributesToSpan(span, options);

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I noticed that this was actually also not ideal, we just added the op attribute after the span was started, which means this was not sent to the sampler. Also, this is overall unnecessary, we can just add the attribute right away!

@mydea
mydea merged commit ac6e2f1 into developJul 18, 2024
@mydea
mydea deleted the fn/sampler-name branch July 18, 2024 13:42
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

tracesSampler "name" property missing route name with Fastify integration

2 participants

@mydea@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(node): Pass inferred name & attributes to tracesSampler - #12945

Merged
mydea merged 2 commits into
developfrom
fn/sampler-name
Jul 18, 2024
Merged

fix(node): Pass inferred name & attributes to tracesSampler#12945
mydea merged 2 commits into
developfrom
fn/sampler-name

Conversation

@mydea

Copy link
Copy Markdown
Member

Previously, we passed the span name directly to the tracesSampler as-is. However, this is not ideal because this does not match the name we actually send to sentry later, making this confusing. The reason is that we infer the name from the attributes for some types of spans, but we do that at export-time.

This PR adjust this so that we send the inferred name & attributes to the tracesSampler. This works reasonably enough. However, there is a big caveat: This still only has access to the initial attributes that a span has at creation time. This means that we'll never have e.g. the http.route correctly there, because all http.server spans originate from the http instrumentation where they do not have a route yet, and then more specific instrumentation (e.g. express or fastify) add the http.route to that span later. So the name will never be parametrized, for example, for http.server spans, which is not ideal (as it will still not match the final span exactly) but should still be better than what we had so far (where the name would always just be e.g. GET).

Fixes#12944

@github-actions

github-actionsBot commented Jul 17, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser22.3 KB (0%)
@sentry/browser (incl. Tracing)33.69 KB (0%)
@sentry/browser (incl. Tracing, Replay)69.77 KB (0%)
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags63.08 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas)74.17 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback)86.49 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback, metrics)88.36 KB (0%)
@sentry/browser (incl. metrics)26.59 KB (0%)
@sentry/browser (incl. Feedback)38.98 KB (0%)
@sentry/browser (incl. sendFeedback)26.93 KB (0%)
@sentry/browser (incl. FeedbackAsync)31.54 KB (0%)
@sentry/react25.06 KB (0%)
@sentry/react (incl. Tracing)36.75 KB (0%)
@sentry/vue26.41 KB (0%)
@sentry/vue (incl. Tracing)35.57 KB (0%)
@sentry/svelte22.44 KB (0%)
CDN Bundle23.52 KB (0%)
CDN Bundle (incl. Tracing)35.47 KB (0%)
CDN Bundle (incl. Tracing, Replay)69.87 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback)75.14 KB (0%)
CDN Bundle - uncompressed69 KB (0%)
CDN Bundle (incl. Tracing) - uncompressed104.93 KB (0%)
CDN Bundle (incl. Tracing, Replay) - uncompressed216.71 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.43 KB (0%)
@sentry/nextjs (client)36.61 KB (0%)
@sentry/sveltekit (client)34.34 KB (0%)
@sentry/node111.29 KB (+0.01% 🔺)
@sentry/node - without tracing88.71 KB (-0.03% 🔽)
@sentry/aws-serverless97.88 KB (+0.02% 🔺)

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even if we can't get the final parameterized name in time, I think this is an improvement to what we had before so 👍

const spanOptions = getSpanOptions(options);

return tracer.startActiveSpan(name, spanOptions, ctx, span => {
_applySentryAttributesToSpan(span, options);

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I noticed that this was actually also not ideal, we just added the op attribute after the span was started, which means this was not sent to the sampler. Also, this is overall unnecessary, we can just add the attribute right away!

@mydea
mydea merged commit ac6e2f1 into developJul 18, 2024
@mydea
mydea deleted the fn/sampler-name branch July 18, 2024 13:42
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

tracesSampler "name" property missing route name with Fastify integration

2 participants

@mydea@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(node): Pass inferred name & attributes to tracesSampler - #12945

Merged
mydea merged 2 commits into
developfrom
fn/sampler-name
Jul 18, 2024
Merged

fix(node): Pass inferred name & attributes to tracesSampler#12945
mydea merged 2 commits into
developfrom
fn/sampler-name

Conversation

@mydea

Copy link
Copy Markdown
Member

Previously, we passed the span name directly to the tracesSampler as-is. However, this is not ideal because this does not match the name we actually send to sentry later, making this confusing. The reason is that we infer the name from the attributes for some types of spans, but we do that at export-time.

This PR adjust this so that we send the inferred name & attributes to the tracesSampler. This works reasonably enough. However, there is a big caveat: This still only has access to the initial attributes that a span has at creation time. This means that we'll never have e.g. the http.route correctly there, because all http.server spans originate from the http instrumentation where they do not have a route yet, and then more specific instrumentation (e.g. express or fastify) add the http.route to that span later. So the name will never be parametrized, for example, for http.server spans, which is not ideal (as it will still not match the final span exactly) but should still be better than what we had so far (where the name would always just be e.g. GET).

Fixes#12944

@github-actions

github-actionsBot commented Jul 17, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser22.3 KB (0%)
@sentry/browser (incl. Tracing)33.69 KB (0%)
@sentry/browser (incl. Tracing, Replay)69.77 KB (0%)
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags63.08 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas)74.17 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback)86.49 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback, metrics)88.36 KB (0%)
@sentry/browser (incl. metrics)26.59 KB (0%)
@sentry/browser (incl. Feedback)38.98 KB (0%)
@sentry/browser (incl. sendFeedback)26.93 KB (0%)
@sentry/browser (incl. FeedbackAsync)31.54 KB (0%)
@sentry/react25.06 KB (0%)
@sentry/react (incl. Tracing)36.75 KB (0%)
@sentry/vue26.41 KB (0%)
@sentry/vue (incl. Tracing)35.57 KB (0%)
@sentry/svelte22.44 KB (0%)
CDN Bundle23.52 KB (0%)
CDN Bundle (incl. Tracing)35.47 KB (0%)
CDN Bundle (incl. Tracing, Replay)69.87 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback)75.14 KB (0%)
CDN Bundle - uncompressed69 KB (0%)
CDN Bundle (incl. Tracing) - uncompressed104.93 KB (0%)
CDN Bundle (incl. Tracing, Replay) - uncompressed216.71 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.43 KB (0%)
@sentry/nextjs (client)36.61 KB (0%)
@sentry/sveltekit (client)34.34 KB (0%)
@sentry/node111.29 KB (+0.01% 🔺)
@sentry/node - without tracing88.71 KB (-0.03% 🔽)
@sentry/aws-serverless97.88 KB (+0.02% 🔺)

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even if we can't get the final parameterized name in time, I think this is an improvement to what we had before so 👍

const spanOptions = getSpanOptions(options);

return tracer.startActiveSpan(name, spanOptions, ctx, span => {
_applySentryAttributesToSpan(span, options);

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I noticed that this was actually also not ideal, we just added the op attribute after the span was started, which means this was not sent to the sampler. Also, this is overall unnecessary, we can just add the attribute right away!

@mydea
mydea merged commit ac6e2f1 into developJul 18, 2024
@mydea
mydea deleted the fn/sampler-name branch July 18, 2024 13:42
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

tracesSampler "name" property missing route name with Fastify integration

2 participants

@mydea@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(node): Pass inferred name & attributes to tracesSampler - #12945

Merged
mydea merged 2 commits into
developfrom
fn/sampler-name
Jul 18, 2024
Merged

fix(node): Pass inferred name & attributes to tracesSampler#12945
mydea merged 2 commits into
developfrom
fn/sampler-name

Conversation

@mydea

Copy link
Copy Markdown
Member

Previously, we passed the span name directly to the tracesSampler as-is. However, this is not ideal because this does not match the name we actually send to sentry later, making this confusing. The reason is that we infer the name from the attributes for some types of spans, but we do that at export-time.

This PR adjust this so that we send the inferred name & attributes to the tracesSampler. This works reasonably enough. However, there is a big caveat: This still only has access to the initial attributes that a span has at creation time. This means that we'll never have e.g. the http.route correctly there, because all http.server spans originate from the http instrumentation where they do not have a route yet, and then more specific instrumentation (e.g. express or fastify) add the http.route to that span later. So the name will never be parametrized, for example, for http.server spans, which is not ideal (as it will still not match the final span exactly) but should still be better than what we had so far (where the name would always just be e.g. GET).

Fixes#12944

@github-actions

github-actionsBot commented Jul 17, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser22.3 KB (0%)
@sentry/browser (incl. Tracing)33.69 KB (0%)
@sentry/browser (incl. Tracing, Replay)69.77 KB (0%)
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags63.08 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas)74.17 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback)86.49 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback, metrics)88.36 KB (0%)
@sentry/browser (incl. metrics)26.59 KB (0%)
@sentry/browser (incl. Feedback)38.98 KB (0%)
@sentry/browser (incl. sendFeedback)26.93 KB (0%)
@sentry/browser (incl. FeedbackAsync)31.54 KB (0%)
@sentry/react25.06 KB (0%)
@sentry/react (incl. Tracing)36.75 KB (0%)
@sentry/vue26.41 KB (0%)
@sentry/vue (incl. Tracing)35.57 KB (0%)
@sentry/svelte22.44 KB (0%)
CDN Bundle23.52 KB (0%)
CDN Bundle (incl. Tracing)35.47 KB (0%)
CDN Bundle (incl. Tracing, Replay)69.87 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback)75.14 KB (0%)
CDN Bundle - uncompressed69 KB (0%)
CDN Bundle (incl. Tracing) - uncompressed104.93 KB (0%)
CDN Bundle (incl. Tracing, Replay) - uncompressed216.71 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.43 KB (0%)
@sentry/nextjs (client)36.61 KB (0%)
@sentry/sveltekit (client)34.34 KB (0%)
@sentry/node111.29 KB (+0.01% 🔺)
@sentry/node - without tracing88.71 KB (-0.03% 🔽)
@sentry/aws-serverless97.88 KB (+0.02% 🔺)

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even if we can't get the final parameterized name in time, I think this is an improvement to what we had before so 👍

const spanOptions = getSpanOptions(options);

return tracer.startActiveSpan(name, spanOptions, ctx, span => {
_applySentryAttributesToSpan(span, options);

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I noticed that this was actually also not ideal, we just added the op attribute after the span was started, which means this was not sent to the sampler. Also, this is overall unnecessary, we can just add the attribute right away!

@mydea
mydea merged commit ac6e2f1 into developJul 18, 2024
@mydea
mydea deleted the fn/sampler-name branch July 18, 2024 13:42
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

tracesSampler "name" property missing route name with Fastify integration

2 participants

@mydea@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(node): Pass inferred name & attributes to tracesSampler - #12945

Merged
mydea merged 2 commits into
developfrom
fn/sampler-name
Jul 18, 2024
Merged

fix(node): Pass inferred name & attributes to tracesSampler#12945
mydea merged 2 commits into
developfrom
fn/sampler-name

Conversation

@mydea

Copy link
Copy Markdown
Member

Previously, we passed the span name directly to the tracesSampler as-is. However, this is not ideal because this does not match the name we actually send to sentry later, making this confusing. The reason is that we infer the name from the attributes for some types of spans, but we do that at export-time.

This PR adjust this so that we send the inferred name & attributes to the tracesSampler. This works reasonably enough. However, there is a big caveat: This still only has access to the initial attributes that a span has at creation time. This means that we'll never have e.g. the http.route correctly there, because all http.server spans originate from the http instrumentation where they do not have a route yet, and then more specific instrumentation (e.g. express or fastify) add the http.route to that span later. So the name will never be parametrized, for example, for http.server spans, which is not ideal (as it will still not match the final span exactly) but should still be better than what we had so far (where the name would always just be e.g. GET).

Fixes#12944

@github-actions

github-actionsBot commented Jul 17, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser22.3 KB (0%)
@sentry/browser (incl. Tracing)33.69 KB (0%)
@sentry/browser (incl. Tracing, Replay)69.77 KB (0%)
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags63.08 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas)74.17 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback)86.49 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback, metrics)88.36 KB (0%)
@sentry/browser (incl. metrics)26.59 KB (0%)
@sentry/browser (incl. Feedback)38.98 KB (0%)
@sentry/browser (incl. sendFeedback)26.93 KB (0%)
@sentry/browser (incl. FeedbackAsync)31.54 KB (0%)
@sentry/react25.06 KB (0%)
@sentry/react (incl. Tracing)36.75 KB (0%)
@sentry/vue26.41 KB (0%)
@sentry/vue (incl. Tracing)35.57 KB (0%)
@sentry/svelte22.44 KB (0%)
CDN Bundle23.52 KB (0%)
CDN Bundle (incl. Tracing)35.47 KB (0%)
CDN Bundle (incl. Tracing, Replay)69.87 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback)75.14 KB (0%)
CDN Bundle - uncompressed69 KB (0%)
CDN Bundle (incl. Tracing) - uncompressed104.93 KB (0%)
CDN Bundle (incl. Tracing, Replay) - uncompressed216.71 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.43 KB (0%)
@sentry/nextjs (client)36.61 KB (0%)
@sentry/sveltekit (client)34.34 KB (0%)
@sentry/node111.29 KB (+0.01% 🔺)
@sentry/node - without tracing88.71 KB (-0.03% 🔽)
@sentry/aws-serverless97.88 KB (+0.02% 🔺)

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even if we can't get the final parameterized name in time, I think this is an improvement to what we had before so 👍

const spanOptions = getSpanOptions(options);

return tracer.startActiveSpan(name, spanOptions, ctx, span => {
_applySentryAttributesToSpan(span, options);

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I noticed that this was actually also not ideal, we just added the op attribute after the span was started, which means this was not sent to the sampler. Also, this is overall unnecessary, we can just add the attribute right away!

@mydea
mydea merged commit ac6e2f1 into developJul 18, 2024
@mydea
mydea deleted the fn/sampler-name branch July 18, 2024 13:42
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

tracesSampler "name" property missing route name with Fastify integration

2 participants

@mydea@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(node): Pass inferred name & attributes to tracesSampler - #12945

Merged
mydea merged 2 commits into
developfrom
fn/sampler-name
Jul 18, 2024
Merged

fix(node): Pass inferred name & attributes to tracesSampler#12945
mydea merged 2 commits into
developfrom
fn/sampler-name

Conversation

@mydea

Copy link
Copy Markdown
Member

Previously, we passed the span name directly to the tracesSampler as-is. However, this is not ideal because this does not match the name we actually send to sentry later, making this confusing. The reason is that we infer the name from the attributes for some types of spans, but we do that at export-time.

This PR adjust this so that we send the inferred name & attributes to the tracesSampler. This works reasonably enough. However, there is a big caveat: This still only has access to the initial attributes that a span has at creation time. This means that we'll never have e.g. the http.route correctly there, because all http.server spans originate from the http instrumentation where they do not have a route yet, and then more specific instrumentation (e.g. express or fastify) add the http.route to that span later. So the name will never be parametrized, for example, for http.server spans, which is not ideal (as it will still not match the final span exactly) but should still be better than what we had so far (where the name would always just be e.g. GET).

Fixes#12944

@github-actions

github-actionsBot commented Jul 17, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser22.3 KB (0%)
@sentry/browser (incl. Tracing)33.69 KB (0%)
@sentry/browser (incl. Tracing, Replay)69.77 KB (0%)
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags63.08 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas)74.17 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback)86.49 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback, metrics)88.36 KB (0%)
@sentry/browser (incl. metrics)26.59 KB (0%)
@sentry/browser (incl. Feedback)38.98 KB (0%)
@sentry/browser (incl. sendFeedback)26.93 KB (0%)
@sentry/browser (incl. FeedbackAsync)31.54 KB (0%)
@sentry/react25.06 KB (0%)
@sentry/react (incl. Tracing)36.75 KB (0%)
@sentry/vue26.41 KB (0%)
@sentry/vue (incl. Tracing)35.57 KB (0%)
@sentry/svelte22.44 KB (0%)
CDN Bundle23.52 KB (0%)
CDN Bundle (incl. Tracing)35.47 KB (0%)
CDN Bundle (incl. Tracing, Replay)69.87 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback)75.14 KB (0%)
CDN Bundle - uncompressed69 KB (0%)
CDN Bundle (incl. Tracing) - uncompressed104.93 KB (0%)
CDN Bundle (incl. Tracing, Replay) - uncompressed216.71 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.43 KB (0%)
@sentry/nextjs (client)36.61 KB (0%)
@sentry/sveltekit (client)34.34 KB (0%)
@sentry/node111.29 KB (+0.01% 🔺)
@sentry/node - without tracing88.71 KB (-0.03% 🔽)
@sentry/aws-serverless97.88 KB (+0.02% 🔺)

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even if we can't get the final parameterized name in time, I think this is an improvement to what we had before so 👍

const spanOptions = getSpanOptions(options);

return tracer.startActiveSpan(name, spanOptions, ctx, span => {
_applySentryAttributesToSpan(span, options);

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I noticed that this was actually also not ideal, we just added the op attribute after the span was started, which means this was not sent to the sampler. Also, this is overall unnecessary, we can just add the attribute right away!

@mydea
mydea merged commit ac6e2f1 into developJul 18, 2024
@mydea
mydea deleted the fn/sampler-name branch July 18, 2024 13:42
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

tracesSampler "name" property missing route name with Fastify integration

2 participants

@mydea@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(node): Pass inferred name & attributes to tracesSampler - #12945

Merged
mydea merged 2 commits into
developfrom
fn/sampler-name
Jul 18, 2024
Merged

fix(node): Pass inferred name & attributes to tracesSampler#12945
mydea merged 2 commits into
developfrom
fn/sampler-name

Conversation

@mydea

Copy link
Copy Markdown
Member

Previously, we passed the span name directly to the tracesSampler as-is. However, this is not ideal because this does not match the name we actually send to sentry later, making this confusing. The reason is that we infer the name from the attributes for some types of spans, but we do that at export-time.

This PR adjust this so that we send the inferred name & attributes to the tracesSampler. This works reasonably enough. However, there is a big caveat: This still only has access to the initial attributes that a span has at creation time. This means that we'll never have e.g. the http.route correctly there, because all http.server spans originate from the http instrumentation where they do not have a route yet, and then more specific instrumentation (e.g. express or fastify) add the http.route to that span later. So the name will never be parametrized, for example, for http.server spans, which is not ideal (as it will still not match the final span exactly) but should still be better than what we had so far (where the name would always just be e.g. GET).

Fixes#12944

@github-actions

github-actionsBot commented Jul 17, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser22.3 KB (0%)
@sentry/browser (incl. Tracing)33.69 KB (0%)
@sentry/browser (incl. Tracing, Replay)69.77 KB (0%)
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags63.08 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas)74.17 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback)86.49 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback, metrics)88.36 KB (0%)
@sentry/browser (incl. metrics)26.59 KB (0%)
@sentry/browser (incl. Feedback)38.98 KB (0%)
@sentry/browser (incl. sendFeedback)26.93 KB (0%)
@sentry/browser (incl. FeedbackAsync)31.54 KB (0%)
@sentry/react25.06 KB (0%)
@sentry/react (incl. Tracing)36.75 KB (0%)
@sentry/vue26.41 KB (0%)
@sentry/vue (incl. Tracing)35.57 KB (0%)
@sentry/svelte22.44 KB (0%)
CDN Bundle23.52 KB (0%)
CDN Bundle (incl. Tracing)35.47 KB (0%)
CDN Bundle (incl. Tracing, Replay)69.87 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback)75.14 KB (0%)
CDN Bundle - uncompressed69 KB (0%)
CDN Bundle (incl. Tracing) - uncompressed104.93 KB (0%)
CDN Bundle (incl. Tracing, Replay) - uncompressed216.71 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.43 KB (0%)
@sentry/nextjs (client)36.61 KB (0%)
@sentry/sveltekit (client)34.34 KB (0%)
@sentry/node111.29 KB (+0.01% 🔺)
@sentry/node - without tracing88.71 KB (-0.03% 🔽)
@sentry/aws-serverless97.88 KB (+0.02% 🔺)

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even if we can't get the final parameterized name in time, I think this is an improvement to what we had before so 👍

const spanOptions = getSpanOptions(options);

return tracer.startActiveSpan(name, spanOptions, ctx, span => {
_applySentryAttributesToSpan(span, options);

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I noticed that this was actually also not ideal, we just added the op attribute after the span was started, which means this was not sent to the sampler. Also, this is overall unnecessary, we can just add the attribute right away!

@mydea
mydea merged commit ac6e2f1 into developJul 18, 2024
@mydea
mydea deleted the fn/sampler-name branch July 18, 2024 13:42
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

tracesSampler "name" property missing route name with Fastify integration

2 participants

@mydea@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(node): Pass inferred name & attributes to tracesSampler - #12945

Merged
mydea merged 2 commits into
developfrom
fn/sampler-name
Jul 18, 2024
Merged

fix(node): Pass inferred name & attributes to tracesSampler#12945
mydea merged 2 commits into
developfrom
fn/sampler-name

Conversation

@mydea

Copy link
Copy Markdown
Member

Previously, we passed the span name directly to the tracesSampler as-is. However, this is not ideal because this does not match the name we actually send to sentry later, making this confusing. The reason is that we infer the name from the attributes for some types of spans, but we do that at export-time.

This PR adjust this so that we send the inferred name & attributes to the tracesSampler. This works reasonably enough. However, there is a big caveat: This still only has access to the initial attributes that a span has at creation time. This means that we'll never have e.g. the http.route correctly there, because all http.server spans originate from the http instrumentation where they do not have a route yet, and then more specific instrumentation (e.g. express or fastify) add the http.route to that span later. So the name will never be parametrized, for example, for http.server spans, which is not ideal (as it will still not match the final span exactly) but should still be better than what we had so far (where the name would always just be e.g. GET).

Fixes#12944

@github-actions

github-actionsBot commented Jul 17, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
@sentry/browser22.3 KB (0%)
@sentry/browser (incl. Tracing)33.69 KB (0%)
@sentry/browser (incl. Tracing, Replay)69.77 KB (0%)
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags63.08 KB (0%)
@sentry/browser (incl. Tracing, Replay with Canvas)74.17 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback)86.49 KB (0%)
@sentry/browser (incl. Tracing, Replay, Feedback, metrics)88.36 KB (0%)
@sentry/browser (incl. metrics)26.59 KB (0%)
@sentry/browser (incl. Feedback)38.98 KB (0%)
@sentry/browser (incl. sendFeedback)26.93 KB (0%)
@sentry/browser (incl. FeedbackAsync)31.54 KB (0%)
@sentry/react25.06 KB (0%)
@sentry/react (incl. Tracing)36.75 KB (0%)
@sentry/vue26.41 KB (0%)
@sentry/vue (incl. Tracing)35.57 KB (0%)
@sentry/svelte22.44 KB (0%)
CDN Bundle23.52 KB (0%)
CDN Bundle (incl. Tracing)35.47 KB (0%)
CDN Bundle (incl. Tracing, Replay)69.87 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback)75.14 KB (0%)
CDN Bundle - uncompressed69 KB (0%)
CDN Bundle (incl. Tracing) - uncompressed104.93 KB (0%)
CDN Bundle (incl. Tracing, Replay) - uncompressed216.71 KB (0%)
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed229.43 KB (0%)
@sentry/nextjs (client)36.61 KB (0%)
@sentry/sveltekit (client)34.34 KB (0%)
@sentry/node111.29 KB (+0.01% 🔺)
@sentry/node - without tracing88.71 KB (-0.03% 🔽)
@sentry/aws-serverless97.88 KB (+0.02% 🔺)

@Lms24Lms24 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even if we can't get the final parameterized name in time, I think this is an improvement to what we had before so 👍

const spanOptions = getSpanOptions(options);

return tracer.startActiveSpan(name, spanOptions, ctx, span => {
_applySentryAttributesToSpan(span, options);

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I noticed that this was actually also not ideal, we just added the op attribute after the span was started, which means this was not sent to the sampler. Also, this is overall unnecessary, we can just add the attribute right away!

@mydea
mydea merged commit ac6e2f1 into developJul 18, 2024
@mydea
mydea deleted the fn/sampler-name branch July 18, 2024 13:42
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

tracesSampler "name" property missing route name with Fastify integration

2 participants

@mydea@Lms24