Skip to content

feat(node): Extract Sentry-specific node-fetch instrumentation - #15231

Merged
lforst merged 11 commits into
developfrom
fn/node-fetch-custom
Feb 12, 2025
Merged

feat(node): Extract Sentry-specific node-fetch instrumentation#15231
lforst merged 11 commits into
developfrom
fn/node-fetch-custom

Conversation

@mydea

@mydeamydea commented Jan 30, 2025

Copy link
Copy Markdown
Member

This PR basically mirrors what we did here: #13763

to ensure that the UndiciInstrumentation from fetch can be safely removed.

With this change, if spans: false is configured and/or skipOpenTelemetrySetup: true, no core otel instrumentations will be added anymore at all. This should also make it easier when in a follow up step we make this completely optional, allowing us to drop all instrumentation dependencies for these cases.

While doing this I noticed that we should probably also adjust our custom http instrumentation to inject sentry-trace as well, to fully decouple this. I'll check this out separately...

Closes#15212

Possible extension in the future: Also capture fetch request bodies. (We already do not do this today, but may add this at some point...)

@mydea
mydea requested review from Lms24 and lforstJanuary 30, 2025 09:31
@mydeamydea self-assigned this Jan 30, 2025
@mydea
mydeaforce-pushed the fn/node-fetch-custom branch from 3ab670c to 4c6e295CompareJanuary 30, 2025 09:34
@github-actions

github-actionsBot commented Jan 30, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser22.95 KB--
@sentry/browser - with treeshaking flags22.73 KB--
@sentry/browser (incl. Tracing)35.88 KB--
@sentry/browser (incl. Tracing, Replay)72.88 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.38 KB--
@sentry/browser (incl. Tracing, Replay with Canvas)77.13 KB--
@sentry/browser (incl. Tracing, Replay, Feedback)89.9 KB--
@sentry/browser (incl. Feedback)39.9 KB--
@sentry/browser (incl. sendFeedback)27.57 KB--
@sentry/browser (incl. FeedbackAsync)32.37 KB--
@sentry/react24.78 KB--
@sentry/react (incl. Tracing)37.78 KB--
@sentry/vue27.14 KB--
@sentry/vue (incl. Tracing)37.59 KB--
@sentry/svelte22.99 KB--
CDN Bundle24.17 KB--
CDN Bundle (incl. Tracing)35.92 KB--
CDN Bundle (incl. Tracing, Replay)70.75 KB--
CDN Bundle (incl. Tracing, Replay, Feedback)75.91 KB--
CDN Bundle - uncompressed70.64 KB--
CDN Bundle (incl. Tracing) - uncompressed106.73 KB--
CDN Bundle (incl. Tracing, Replay) - uncompressed217.95 KB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed230.51 KB--
@sentry/nextjs (client)38.75 KB--
@sentry/sveltekit (client)36.32 KB--
@sentry/node156.93 KB+0.39%+610 B 🔺
@sentry/node - without tracing97.9 KB+0.61%+603 B 🔺
@sentry/aws-serverless107.34 KB+0.49%+532 B 🔺

View base workflow run

Comment on lines +133 to +175
if (Array.isArray(request.headers)) {
const requestHeaders = request.headers;
Object.entries(addedHeaders)
.filter(([k]) => {
// If the header already exists, we do not want to set it again
return !requestHeaders.includes(k);
})
.forEach(keyValuePair => requestHeaders.push(...keyValuePair));
} else {
const requestHeaders = request.headers;
request.headers += Object.entries(addedHeaders)
.filter(([k]) => {
// If the header already exists, we do not want to set it again
return !requestHeaders.includes(`${k}:`);
})
.map(([k, v]) => `${k}: ${v}\r\n`)
.join('');
}
}

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.

m: same concern about the baggage header as in #15233 (comment)

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.

yeah, I'll pull this in from the other PR after merging that!

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.

updated it!

Comment threadpackages/node/src/integrations/node-fetch/SentryNodeFetchInstrumentation.ts Outdated
mydea added a commit that referenced this pull request Jan 31, 2025
Related to #15231, I
noticed that we today would not propagate traces in outgoing http
requests if:
1. The user configures `httpIntegration({ spans: false })`
2. ..._or_ the user has a custom OTEL setup
3. _and_ the user does not add their own `HttpInstrumentation`
Admittedly and edge case. More importantly, though, by actually adding
distributed tracing information here, we are unblocked from potentially
stopping to ship the http-instrumentation to users that do not need
spans (and/or have a custom otel setup).
---------
Co-authored-by: Lukas Stracke <lukas.stracke@sentry.io>
@mydea
mydeaforce-pushed the fn/node-fetch-custom branch from 653a5d8 to 07e8184CompareJanuary 31, 2025 10:21
@mydea
mydea requested a review from Lms24February 3, 2025 11:58
@lforst
lforst removed their request for review February 7, 2025 12:06
@lforstlforst assigned lforst and mydea and unassigned mydeaFeb 7, 2025
@lforst
lforst enabled auto-merge (squash) February 12, 2025 10:23
@lforst
lforst merged commit 7c8f0cd into developFeb 12, 2025
@lforst
lforst deleted the fn/node-fetch-custom branch February 12, 2025 10:30
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.

Extract node-fetch non-span functionality into standalone instrumentation

3 participants

@mydea@lforst@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
feat(node): Extract Sentry-specific node-fetch instrumentation by mydea · Pull Request #15231 · getsentry/sentry-javascript · GitHub
Skip to content

feat(node): Extract Sentry-specific node-fetch instrumentation - #15231

Merged
lforst merged 11 commits into
developfrom
fn/node-fetch-custom
Feb 12, 2025
Merged

feat(node): Extract Sentry-specific node-fetch instrumentation#15231
lforst merged 11 commits into
developfrom
fn/node-fetch-custom

Conversation

@mydea

@mydeamydea commented Jan 30, 2025

Copy link
Copy Markdown
Member

This PR basically mirrors what we did here: #13763

to ensure that the UndiciInstrumentation from fetch can be safely removed.

With this change, if spans: false is configured and/or skipOpenTelemetrySetup: true, no core otel instrumentations will be added anymore at all. This should also make it easier when in a follow up step we make this completely optional, allowing us to drop all instrumentation dependencies for these cases.

While doing this I noticed that we should probably also adjust our custom http instrumentation to inject sentry-trace as well, to fully decouple this. I'll check this out separately...

Closes#15212

Possible extension in the future: Also capture fetch request bodies. (We already do not do this today, but may add this at some point...)

@mydea
mydea requested review from Lms24 and lforstJanuary 30, 2025 09:31
@mydeamydea self-assigned this Jan 30, 2025
@mydea
mydeaforce-pushed the fn/node-fetch-custom branch from 3ab670c to 4c6e295CompareJanuary 30, 2025 09:34
@github-actions

github-actionsBot commented Jan 30, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser22.95 KB--
@sentry/browser - with treeshaking flags22.73 KB--
@sentry/browser (incl. Tracing)35.88 KB--
@sentry/browser (incl. Tracing, Replay)72.88 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.38 KB--
@sentry/browser (incl. Tracing, Replay with Canvas)77.13 KB--
@sentry/browser (incl. Tracing, Replay, Feedback)89.9 KB--
@sentry/browser (incl. Feedback)39.9 KB--
@sentry/browser (incl. sendFeedback)27.57 KB--
@sentry/browser (incl. FeedbackAsync)32.37 KB--
@sentry/react24.78 KB--
@sentry/react (incl. Tracing)37.78 KB--
@sentry/vue27.14 KB--
@sentry/vue (incl. Tracing)37.59 KB--
@sentry/svelte22.99 KB--
CDN Bundle24.17 KB--
CDN Bundle (incl. Tracing)35.92 KB--
CDN Bundle (incl. Tracing, Replay)70.75 KB--
CDN Bundle (incl. Tracing, Replay, Feedback)75.91 KB--
CDN Bundle - uncompressed70.64 KB--
CDN Bundle (incl. Tracing) - uncompressed106.73 KB--
CDN Bundle (incl. Tracing, Replay) - uncompressed217.95 KB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed230.51 KB--
@sentry/nextjs (client)38.75 KB--
@sentry/sveltekit (client)36.32 KB--
@sentry/node156.93 KB+0.39%+610 B 🔺
@sentry/node - without tracing97.9 KB+0.61%+603 B 🔺
@sentry/aws-serverless107.34 KB+0.49%+532 B 🔺

View base workflow run

Comment on lines +133 to +175
if (Array.isArray(request.headers)) {
const requestHeaders = request.headers;
Object.entries(addedHeaders)
.filter(([k]) => {
// If the header already exists, we do not want to set it again
return !requestHeaders.includes(k);
})
.forEach(keyValuePair => requestHeaders.push(...keyValuePair));
} else {
const requestHeaders = request.headers;
request.headers += Object.entries(addedHeaders)
.filter(([k]) => {
// If the header already exists, we do not want to set it again
return !requestHeaders.includes(`${k}:`);
})
.map(([k, v]) => `${k}: ${v}\r\n`)
.join('');
}
}

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.

m: same concern about the baggage header as in #15233 (comment)

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.

yeah, I'll pull this in from the other PR after merging that!

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.

updated it!

Comment threadpackages/node/src/integrations/node-fetch/SentryNodeFetchInstrumentation.ts Outdated
mydea added a commit that referenced this pull request Jan 31, 2025
Related to #15231, I
noticed that we today would not propagate traces in outgoing http
requests if:
1. The user configures `httpIntegration({ spans: false })`
2. ..._or_ the user has a custom OTEL setup
3. _and_ the user does not add their own `HttpInstrumentation`
Admittedly and edge case. More importantly, though, by actually adding
distributed tracing information here, we are unblocked from potentially
stopping to ship the http-instrumentation to users that do not need
spans (and/or have a custom otel setup).
---------
Co-authored-by: Lukas Stracke <lukas.stracke@sentry.io>
@mydea
mydeaforce-pushed the fn/node-fetch-custom branch from 653a5d8 to 07e8184CompareJanuary 31, 2025 10:21
@mydea
mydea requested a review from Lms24February 3, 2025 11:58
@lforst
lforst removed their request for review February 7, 2025 12:06
@lforstlforst assigned lforst and mydea and unassigned mydeaFeb 7, 2025
@lforst
lforst enabled auto-merge (squash) February 12, 2025 10:23
@lforst
lforst merged commit 7c8f0cd into developFeb 12, 2025
@lforst
lforst deleted the fn/node-fetch-custom branch February 12, 2025 10:30
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.

Extract node-fetch non-span functionality into standalone instrumentation

3 participants

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

feat(node): Extract Sentry-specific node-fetch instrumentation - #15231

Merged
lforst merged 11 commits into
developfrom
fn/node-fetch-custom
Feb 12, 2025
Merged

feat(node): Extract Sentry-specific node-fetch instrumentation#15231
lforst merged 11 commits into
developfrom
fn/node-fetch-custom

Conversation

@mydea

@mydeamydea commented Jan 30, 2025

Copy link
Copy Markdown
Member

This PR basically mirrors what we did here: #13763

to ensure that the UndiciInstrumentation from fetch can be safely removed.

With this change, if spans: false is configured and/or skipOpenTelemetrySetup: true, no core otel instrumentations will be added anymore at all. This should also make it easier when in a follow up step we make this completely optional, allowing us to drop all instrumentation dependencies for these cases.

While doing this I noticed that we should probably also adjust our custom http instrumentation to inject sentry-trace as well, to fully decouple this. I'll check this out separately...

Closes#15212

Possible extension in the future: Also capture fetch request bodies. (We already do not do this today, but may add this at some point...)

@mydea
mydea requested review from Lms24 and lforstJanuary 30, 2025 09:31
@mydeamydea self-assigned this Jan 30, 2025
@mydea
mydeaforce-pushed the fn/node-fetch-custom branch from 3ab670c to 4c6e295CompareJanuary 30, 2025 09:34
@github-actions

github-actionsBot commented Jan 30, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser22.95 KB--
@sentry/browser - with treeshaking flags22.73 KB--
@sentry/browser (incl. Tracing)35.88 KB--
@sentry/browser (incl. Tracing, Replay)72.88 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.38 KB--
@sentry/browser (incl. Tracing, Replay with Canvas)77.13 KB--
@sentry/browser (incl. Tracing, Replay, Feedback)89.9 KB--
@sentry/browser (incl. Feedback)39.9 KB--
@sentry/browser (incl. sendFeedback)27.57 KB--
@sentry/browser (incl. FeedbackAsync)32.37 KB--
@sentry/react24.78 KB--
@sentry/react (incl. Tracing)37.78 KB--
@sentry/vue27.14 KB--
@sentry/vue (incl. Tracing)37.59 KB--
@sentry/svelte22.99 KB--
CDN Bundle24.17 KB--
CDN Bundle (incl. Tracing)35.92 KB--
CDN Bundle (incl. Tracing, Replay)70.75 KB--
CDN Bundle (incl. Tracing, Replay, Feedback)75.91 KB--
CDN Bundle - uncompressed70.64 KB--
CDN Bundle (incl. Tracing) - uncompressed106.73 KB--
CDN Bundle (incl. Tracing, Replay) - uncompressed217.95 KB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed230.51 KB--
@sentry/nextjs (client)38.75 KB--
@sentry/sveltekit (client)36.32 KB--
@sentry/node156.93 KB+0.39%+610 B 🔺
@sentry/node - without tracing97.9 KB+0.61%+603 B 🔺
@sentry/aws-serverless107.34 KB+0.49%+532 B 🔺

View base workflow run

Comment on lines +133 to +175
if (Array.isArray(request.headers)) {
const requestHeaders = request.headers;
Object.entries(addedHeaders)
.filter(([k]) => {
// If the header already exists, we do not want to set it again
return !requestHeaders.includes(k);
})
.forEach(keyValuePair => requestHeaders.push(...keyValuePair));
} else {
const requestHeaders = request.headers;
request.headers += Object.entries(addedHeaders)
.filter(([k]) => {
// If the header already exists, we do not want to set it again
return !requestHeaders.includes(`${k}:`);
})
.map(([k, v]) => `${k}: ${v}\r\n`)
.join('');
}
}

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.

m: same concern about the baggage header as in #15233 (comment)

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.

yeah, I'll pull this in from the other PR after merging that!

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.

updated it!

Comment threadpackages/node/src/integrations/node-fetch/SentryNodeFetchInstrumentation.ts Outdated
mydea added a commit that referenced this pull request Jan 31, 2025
Related to #15231, I
noticed that we today would not propagate traces in outgoing http
requests if:
1. The user configures `httpIntegration({ spans: false })`
2. ..._or_ the user has a custom OTEL setup
3. _and_ the user does not add their own `HttpInstrumentation`
Admittedly and edge case. More importantly, though, by actually adding
distributed tracing information here, we are unblocked from potentially
stopping to ship the http-instrumentation to users that do not need
spans (and/or have a custom otel setup).
---------
Co-authored-by: Lukas Stracke <lukas.stracke@sentry.io>
@mydea
mydeaforce-pushed the fn/node-fetch-custom branch from 653a5d8 to 07e8184CompareJanuary 31, 2025 10:21
@mydea
mydea requested a review from Lms24February 3, 2025 11:58
@lforst
lforst removed their request for review February 7, 2025 12:06
@lforstlforst assigned lforst and mydea and unassigned mydeaFeb 7, 2025
@lforst
lforst enabled auto-merge (squash) February 12, 2025 10:23
@lforst
lforst merged commit 7c8f0cd into developFeb 12, 2025
@lforst
lforst deleted the fn/node-fetch-custom branch February 12, 2025 10:30
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.

Extract node-fetch non-span functionality into standalone instrumentation

3 participants

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

feat(node): Extract Sentry-specific node-fetch instrumentation - #15231

Merged
lforst merged 11 commits into
developfrom
fn/node-fetch-custom
Feb 12, 2025
Merged

feat(node): Extract Sentry-specific node-fetch instrumentation#15231
lforst merged 11 commits into
developfrom
fn/node-fetch-custom

Conversation

@mydea

@mydeamydea commented Jan 30, 2025

Copy link
Copy Markdown
Member

This PR basically mirrors what we did here: #13763

to ensure that the UndiciInstrumentation from fetch can be safely removed.

With this change, if spans: false is configured and/or skipOpenTelemetrySetup: true, no core otel instrumentations will be added anymore at all. This should also make it easier when in a follow up step we make this completely optional, allowing us to drop all instrumentation dependencies for these cases.

While doing this I noticed that we should probably also adjust our custom http instrumentation to inject sentry-trace as well, to fully decouple this. I'll check this out separately...

Closes#15212

Possible extension in the future: Also capture fetch request bodies. (We already do not do this today, but may add this at some point...)

@mydea
mydea requested review from Lms24 and lforstJanuary 30, 2025 09:31
@mydeamydea self-assigned this Jan 30, 2025
@mydea
mydeaforce-pushed the fn/node-fetch-custom branch from 3ab670c to 4c6e295CompareJanuary 30, 2025 09:34
@github-actions

github-actionsBot commented Jan 30, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser22.95 KB--
@sentry/browser - with treeshaking flags22.73 KB--
@sentry/browser (incl. Tracing)35.88 KB--
@sentry/browser (incl. Tracing, Replay)72.88 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.38 KB--
@sentry/browser (incl. Tracing, Replay with Canvas)77.13 KB--
@sentry/browser (incl. Tracing, Replay, Feedback)89.9 KB--
@sentry/browser (incl. Feedback)39.9 KB--
@sentry/browser (incl. sendFeedback)27.57 KB--
@sentry/browser (incl. FeedbackAsync)32.37 KB--
@sentry/react24.78 KB--
@sentry/react (incl. Tracing)37.78 KB--
@sentry/vue27.14 KB--
@sentry/vue (incl. Tracing)37.59 KB--
@sentry/svelte22.99 KB--
CDN Bundle24.17 KB--
CDN Bundle (incl. Tracing)35.92 KB--
CDN Bundle (incl. Tracing, Replay)70.75 KB--
CDN Bundle (incl. Tracing, Replay, Feedback)75.91 KB--
CDN Bundle - uncompressed70.64 KB--
CDN Bundle (incl. Tracing) - uncompressed106.73 KB--
CDN Bundle (incl. Tracing, Replay) - uncompressed217.95 KB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed230.51 KB--
@sentry/nextjs (client)38.75 KB--
@sentry/sveltekit (client)36.32 KB--
@sentry/node156.93 KB+0.39%+610 B 🔺
@sentry/node - without tracing97.9 KB+0.61%+603 B 🔺
@sentry/aws-serverless107.34 KB+0.49%+532 B 🔺

View base workflow run

Comment on lines +133 to +175
if (Array.isArray(request.headers)) {
const requestHeaders = request.headers;
Object.entries(addedHeaders)
.filter(([k]) => {
// If the header already exists, we do not want to set it again
return !requestHeaders.includes(k);
})
.forEach(keyValuePair => requestHeaders.push(...keyValuePair));
} else {
const requestHeaders = request.headers;
request.headers += Object.entries(addedHeaders)
.filter(([k]) => {
// If the header already exists, we do not want to set it again
return !requestHeaders.includes(`${k}:`);
})
.map(([k, v]) => `${k}: ${v}\r\n`)
.join('');
}
}

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.

m: same concern about the baggage header as in #15233 (comment)

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.

yeah, I'll pull this in from the other PR after merging that!

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.

updated it!

Comment threadpackages/node/src/integrations/node-fetch/SentryNodeFetchInstrumentation.ts Outdated
mydea added a commit that referenced this pull request Jan 31, 2025
Related to #15231, I
noticed that we today would not propagate traces in outgoing http
requests if:
1. The user configures `httpIntegration({ spans: false })`
2. ..._or_ the user has a custom OTEL setup
3. _and_ the user does not add their own `HttpInstrumentation`
Admittedly and edge case. More importantly, though, by actually adding
distributed tracing information here, we are unblocked from potentially
stopping to ship the http-instrumentation to users that do not need
spans (and/or have a custom otel setup).
---------
Co-authored-by: Lukas Stracke <lukas.stracke@sentry.io>
@mydea
mydeaforce-pushed the fn/node-fetch-custom branch from 653a5d8 to 07e8184CompareJanuary 31, 2025 10:21
@mydea
mydea requested a review from Lms24February 3, 2025 11:58
@lforst
lforst removed their request for review February 7, 2025 12:06
@lforstlforst assigned lforst and mydea and unassigned mydeaFeb 7, 2025
@lforst
lforst enabled auto-merge (squash) February 12, 2025 10:23
@lforst
lforst merged commit 7c8f0cd into developFeb 12, 2025
@lforst
lforst deleted the fn/node-fetch-custom branch February 12, 2025 10:30
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.

Extract node-fetch non-span functionality into standalone instrumentation

3 participants

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

feat(node): Extract Sentry-specific node-fetch instrumentation - #15231

Merged
lforst merged 11 commits into
developfrom
fn/node-fetch-custom
Feb 12, 2025
Merged

feat(node): Extract Sentry-specific node-fetch instrumentation#15231
lforst merged 11 commits into
developfrom
fn/node-fetch-custom

Conversation

@mydea

@mydeamydea commented Jan 30, 2025

Copy link
Copy Markdown
Member

This PR basically mirrors what we did here: #13763

to ensure that the UndiciInstrumentation from fetch can be safely removed.

With this change, if spans: false is configured and/or skipOpenTelemetrySetup: true, no core otel instrumentations will be added anymore at all. This should also make it easier when in a follow up step we make this completely optional, allowing us to drop all instrumentation dependencies for these cases.

While doing this I noticed that we should probably also adjust our custom http instrumentation to inject sentry-trace as well, to fully decouple this. I'll check this out separately...

Closes#15212

Possible extension in the future: Also capture fetch request bodies. (We already do not do this today, but may add this at some point...)

@mydea
mydea requested review from Lms24 and lforstJanuary 30, 2025 09:31
@mydeamydea self-assigned this Jan 30, 2025
@mydea
mydeaforce-pushed the fn/node-fetch-custom branch from 3ab670c to 4c6e295CompareJanuary 30, 2025 09:34
@github-actions

github-actionsBot commented Jan 30, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser22.95 KB--
@sentry/browser - with treeshaking flags22.73 KB--
@sentry/browser (incl. Tracing)35.88 KB--
@sentry/browser (incl. Tracing, Replay)72.88 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.38 KB--
@sentry/browser (incl. Tracing, Replay with Canvas)77.13 KB--
@sentry/browser (incl. Tracing, Replay, Feedback)89.9 KB--
@sentry/browser (incl. Feedback)39.9 KB--
@sentry/browser (incl. sendFeedback)27.57 KB--
@sentry/browser (incl. FeedbackAsync)32.37 KB--
@sentry/react24.78 KB--
@sentry/react (incl. Tracing)37.78 KB--
@sentry/vue27.14 KB--
@sentry/vue (incl. Tracing)37.59 KB--
@sentry/svelte22.99 KB--
CDN Bundle24.17 KB--
CDN Bundle (incl. Tracing)35.92 KB--
CDN Bundle (incl. Tracing, Replay)70.75 KB--
CDN Bundle (incl. Tracing, Replay, Feedback)75.91 KB--
CDN Bundle - uncompressed70.64 KB--
CDN Bundle (incl. Tracing) - uncompressed106.73 KB--
CDN Bundle (incl. Tracing, Replay) - uncompressed217.95 KB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed230.51 KB--
@sentry/nextjs (client)38.75 KB--
@sentry/sveltekit (client)36.32 KB--
@sentry/node156.93 KB+0.39%+610 B 🔺
@sentry/node - without tracing97.9 KB+0.61%+603 B 🔺
@sentry/aws-serverless107.34 KB+0.49%+532 B 🔺

View base workflow run

Comment on lines +133 to +175
if (Array.isArray(request.headers)) {
const requestHeaders = request.headers;
Object.entries(addedHeaders)
.filter(([k]) => {
// If the header already exists, we do not want to set it again
return !requestHeaders.includes(k);
})
.forEach(keyValuePair => requestHeaders.push(...keyValuePair));
} else {
const requestHeaders = request.headers;
request.headers += Object.entries(addedHeaders)
.filter(([k]) => {
// If the header already exists, we do not want to set it again
return !requestHeaders.includes(`${k}:`);
})
.map(([k, v]) => `${k}: ${v}\r\n`)
.join('');
}
}

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.

m: same concern about the baggage header as in #15233 (comment)

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.

yeah, I'll pull this in from the other PR after merging that!

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.

updated it!

Comment threadpackages/node/src/integrations/node-fetch/SentryNodeFetchInstrumentation.ts Outdated
mydea added a commit that referenced this pull request Jan 31, 2025
Related to #15231, I
noticed that we today would not propagate traces in outgoing http
requests if:
1. The user configures `httpIntegration({ spans: false })`
2. ..._or_ the user has a custom OTEL setup
3. _and_ the user does not add their own `HttpInstrumentation`
Admittedly and edge case. More importantly, though, by actually adding
distributed tracing information here, we are unblocked from potentially
stopping to ship the http-instrumentation to users that do not need
spans (and/or have a custom otel setup).
---------
Co-authored-by: Lukas Stracke <lukas.stracke@sentry.io>
@mydea
mydeaforce-pushed the fn/node-fetch-custom branch from 653a5d8 to 07e8184CompareJanuary 31, 2025 10:21
@mydea
mydea requested a review from Lms24February 3, 2025 11:58
@lforst
lforst removed their request for review February 7, 2025 12:06
@lforstlforst assigned lforst and mydea and unassigned mydeaFeb 7, 2025
@lforst
lforst enabled auto-merge (squash) February 12, 2025 10:23
@lforst
lforst merged commit 7c8f0cd into developFeb 12, 2025
@lforst
lforst deleted the fn/node-fetch-custom branch February 12, 2025 10:30
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.

Extract node-fetch non-span functionality into standalone instrumentation

3 participants

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

feat(node): Extract Sentry-specific node-fetch instrumentation - #15231

Merged
lforst merged 11 commits into
developfrom
fn/node-fetch-custom
Feb 12, 2025
Merged

feat(node): Extract Sentry-specific node-fetch instrumentation#15231
lforst merged 11 commits into
developfrom
fn/node-fetch-custom

Conversation

@mydea

@mydeamydea commented Jan 30, 2025

Copy link
Copy Markdown
Member

This PR basically mirrors what we did here: #13763

to ensure that the UndiciInstrumentation from fetch can be safely removed.

With this change, if spans: false is configured and/or skipOpenTelemetrySetup: true, no core otel instrumentations will be added anymore at all. This should also make it easier when in a follow up step we make this completely optional, allowing us to drop all instrumentation dependencies for these cases.

While doing this I noticed that we should probably also adjust our custom http instrumentation to inject sentry-trace as well, to fully decouple this. I'll check this out separately...

Closes#15212

Possible extension in the future: Also capture fetch request bodies. (We already do not do this today, but may add this at some point...)

@mydea
mydea requested review from Lms24 and lforstJanuary 30, 2025 09:31
@mydeamydea self-assigned this Jan 30, 2025
@mydea
mydeaforce-pushed the fn/node-fetch-custom branch from 3ab670c to 4c6e295CompareJanuary 30, 2025 09:34
@github-actions

github-actionsBot commented Jan 30, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser22.95 KB--
@sentry/browser - with treeshaking flags22.73 KB--
@sentry/browser (incl. Tracing)35.88 KB--
@sentry/browser (incl. Tracing, Replay)72.88 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.38 KB--
@sentry/browser (incl. Tracing, Replay with Canvas)77.13 KB--
@sentry/browser (incl. Tracing, Replay, Feedback)89.9 KB--
@sentry/browser (incl. Feedback)39.9 KB--
@sentry/browser (incl. sendFeedback)27.57 KB--
@sentry/browser (incl. FeedbackAsync)32.37 KB--
@sentry/react24.78 KB--
@sentry/react (incl. Tracing)37.78 KB--
@sentry/vue27.14 KB--
@sentry/vue (incl. Tracing)37.59 KB--
@sentry/svelte22.99 KB--
CDN Bundle24.17 KB--
CDN Bundle (incl. Tracing)35.92 KB--
CDN Bundle (incl. Tracing, Replay)70.75 KB--
CDN Bundle (incl. Tracing, Replay, Feedback)75.91 KB--
CDN Bundle - uncompressed70.64 KB--
CDN Bundle (incl. Tracing) - uncompressed106.73 KB--
CDN Bundle (incl. Tracing, Replay) - uncompressed217.95 KB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed230.51 KB--
@sentry/nextjs (client)38.75 KB--
@sentry/sveltekit (client)36.32 KB--
@sentry/node156.93 KB+0.39%+610 B 🔺
@sentry/node - without tracing97.9 KB+0.61%+603 B 🔺
@sentry/aws-serverless107.34 KB+0.49%+532 B 🔺

View base workflow run

Comment on lines +133 to +175
if (Array.isArray(request.headers)) {
const requestHeaders = request.headers;
Object.entries(addedHeaders)
.filter(([k]) => {
// If the header already exists, we do not want to set it again
return !requestHeaders.includes(k);
})
.forEach(keyValuePair => requestHeaders.push(...keyValuePair));
} else {
const requestHeaders = request.headers;
request.headers += Object.entries(addedHeaders)
.filter(([k]) => {
// If the header already exists, we do not want to set it again
return !requestHeaders.includes(`${k}:`);
})
.map(([k, v]) => `${k}: ${v}\r\n`)
.join('');
}
}

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.

m: same concern about the baggage header as in #15233 (comment)

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.

yeah, I'll pull this in from the other PR after merging that!

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.

updated it!

Comment threadpackages/node/src/integrations/node-fetch/SentryNodeFetchInstrumentation.ts Outdated
mydea added a commit that referenced this pull request Jan 31, 2025
Related to #15231, I
noticed that we today would not propagate traces in outgoing http
requests if:
1. The user configures `httpIntegration({ spans: false })`
2. ..._or_ the user has a custom OTEL setup
3. _and_ the user does not add their own `HttpInstrumentation`
Admittedly and edge case. More importantly, though, by actually adding
distributed tracing information here, we are unblocked from potentially
stopping to ship the http-instrumentation to users that do not need
spans (and/or have a custom otel setup).
---------
Co-authored-by: Lukas Stracke <lukas.stracke@sentry.io>
@mydea
mydeaforce-pushed the fn/node-fetch-custom branch from 653a5d8 to 07e8184CompareJanuary 31, 2025 10:21
@mydea
mydea requested a review from Lms24February 3, 2025 11:58
@lforst
lforst removed their request for review February 7, 2025 12:06
@lforstlforst assigned lforst and mydea and unassigned mydeaFeb 7, 2025
@lforst
lforst enabled auto-merge (squash) February 12, 2025 10:23
@lforst
lforst merged commit 7c8f0cd into developFeb 12, 2025
@lforst
lforst deleted the fn/node-fetch-custom branch February 12, 2025 10:30
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.

Extract node-fetch non-span functionality into standalone instrumentation

3 participants

@mydea@lforst@Lms24
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); feat(node): Extract Sentry-specific node-fetch instrumentation by mydea · Pull Request #15231 · getsentry/sentry-javascript · GitHub
Skip to content

feat(node): Extract Sentry-specific node-fetch instrumentation - #15231

Merged
lforst merged 11 commits into
developfrom
fn/node-fetch-custom
Feb 12, 2025
Merged

feat(node): Extract Sentry-specific node-fetch instrumentation#15231
lforst merged 11 commits into
developfrom
fn/node-fetch-custom

Conversation

@mydea

@mydeamydea commented Jan 30, 2025

Copy link
Copy Markdown
Member

This PR basically mirrors what we did here: #13763

to ensure that the UndiciInstrumentation from fetch can be safely removed.

With this change, if spans: false is configured and/or skipOpenTelemetrySetup: true, no core otel instrumentations will be added anymore at all. This should also make it easier when in a follow up step we make this completely optional, allowing us to drop all instrumentation dependencies for these cases.

While doing this I noticed that we should probably also adjust our custom http instrumentation to inject sentry-trace as well, to fully decouple this. I'll check this out separately...

Closes#15212

Possible extension in the future: Also capture fetch request bodies. (We already do not do this today, but may add this at some point...)

@mydea
mydea requested review from Lms24 and lforstJanuary 30, 2025 09:31
@mydeamydea self-assigned this Jan 30, 2025
@mydea
mydeaforce-pushed the fn/node-fetch-custom branch from 3ab670c to 4c6e295CompareJanuary 30, 2025 09:34
@github-actions

github-actionsBot commented Jan 30, 2025

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
@sentry/browser22.95 KB--
@sentry/browser - with treeshaking flags22.73 KB--
@sentry/browser (incl. Tracing)35.88 KB--
@sentry/browser (incl. Tracing, Replay)72.88 KB--
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags66.38 KB--
@sentry/browser (incl. Tracing, Replay with Canvas)77.13 KB--
@sentry/browser (incl. Tracing, Replay, Feedback)89.9 KB--
@sentry/browser (incl. Feedback)39.9 KB--
@sentry/browser (incl. sendFeedback)27.57 KB--
@sentry/browser (incl. FeedbackAsync)32.37 KB--
@sentry/react24.78 KB--
@sentry/react (incl. Tracing)37.78 KB--
@sentry/vue27.14 KB--
@sentry/vue (incl. Tracing)37.59 KB--
@sentry/svelte22.99 KB--
CDN Bundle24.17 KB--
CDN Bundle (incl. Tracing)35.92 KB--
CDN Bundle (incl. Tracing, Replay)70.75 KB--
CDN Bundle (incl. Tracing, Replay, Feedback)75.91 KB--
CDN Bundle - uncompressed70.64 KB--
CDN Bundle (incl. Tracing) - uncompressed106.73 KB--
CDN Bundle (incl. Tracing, Replay) - uncompressed217.95 KB--
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed230.51 KB--
@sentry/nextjs (client)38.75 KB--
@sentry/sveltekit (client)36.32 KB--
@sentry/node156.93 KB+0.39%+610 B 🔺
@sentry/node - without tracing97.9 KB+0.61%+603 B 🔺
@sentry/aws-serverless107.34 KB+0.49%+532 B 🔺

View base workflow run

Comment on lines +133 to +175
if (Array.isArray(request.headers)) {
const requestHeaders = request.headers;
Object.entries(addedHeaders)
.filter(([k]) => {
// If the header already exists, we do not want to set it again
return !requestHeaders.includes(k);
})
.forEach(keyValuePair => requestHeaders.push(...keyValuePair));
} else {
const requestHeaders = request.headers;
request.headers += Object.entries(addedHeaders)
.filter(([k]) => {
// If the header already exists, we do not want to set it again
return !requestHeaders.includes(`${k}:`);
})
.map(([k, v]) => `${k}: ${v}\r\n`)
.join('');
}
}

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.

m: same concern about the baggage header as in #15233 (comment)

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.

yeah, I'll pull this in from the other PR after merging that!

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.

updated it!

Comment threadpackages/node/src/integrations/node-fetch/SentryNodeFetchInstrumentation.ts Outdated
mydea added a commit that referenced this pull request Jan 31, 2025
Related to #15231, I
noticed that we today would not propagate traces in outgoing http
requests if:
1. The user configures `httpIntegration({ spans: false })`
2. ..._or_ the user has a custom OTEL setup
3. _and_ the user does not add their own `HttpInstrumentation`
Admittedly and edge case. More importantly, though, by actually adding
distributed tracing information here, we are unblocked from potentially
stopping to ship the http-instrumentation to users that do not need
spans (and/or have a custom otel setup).
---------
Co-authored-by: Lukas Stracke <lukas.stracke@sentry.io>
@mydea
mydeaforce-pushed the fn/node-fetch-custom branch from 653a5d8 to 07e8184CompareJanuary 31, 2025 10:21
@mydea
mydea requested a review from Lms24February 3, 2025 11:58
@lforst
lforst removed their request for review February 7, 2025 12:06
@lforstlforst assigned lforst and mydea and unassigned mydeaFeb 7, 2025
@lforst
lforst enabled auto-merge (squash) February 12, 2025 10:23
@lforst
lforst merged commit 7c8f0cd into developFeb 12, 2025
@lforst
lforst deleted the fn/node-fetch-custom branch February 12, 2025 10:30
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.

Extract node-fetch non-span functionality into standalone instrumentation

3 participants

@mydea@lforst@Lms24