Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update fetch instrumentation to be runtime agnostic #4063

Merged
4 changes: 2 additions & 2 deletions CHANGELOG.md
Expand Up @@ -15,10 +15,10 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/

### :house: (Internal)

### :bug: (Bug Fix)
* chore: type reference on zone.js [#4257](https://github.com/open-telemetry/opentelemetry-js/pull/4257) @legendecas
* chore: no need for 'packages' in lerna.json [#4264](https://github.com/open-telemetry/opentelemetry-js/pull/4264) @trentm

### :bug: (Bug Fix)
* fix(sdk-trace): Allow fetch instrumentation to be used with native NodeJS fetch [#4063](https://github.com/open-telemetry/opentelemetry-js/pull/4063)
drewcorlin1 marked this conversation as resolved.
Show resolved Hide resolved

## 1.18.1

Expand Down
Expand Up @@ -132,7 +132,12 @@ export class FetchInstrumentation extends InstrumentationBase<
SemanticAttributes.HTTP_SCHEME,
parsedUrl.protocol.replace(':', '')
);
span.setAttribute(SemanticAttributes.HTTP_USER_AGENT, navigator.userAgent);
if (typeof navigator !== 'undefined') {
span.setAttribute(
SemanticAttributes.HTTP_USER_AGENT,
navigator.userAgent
);
}
}

/**
Expand Down
9 changes: 7 additions & 2 deletions packages/opentelemetry-sdk-trace-web/src/utils.ts
Expand Up @@ -131,6 +131,11 @@ export function sortResources(
});
}

/** Returns the origin if present (if in browser context). */
function getOrigin(): string | undefined {
return typeof location !== 'undefined' ? location.origin : undefined;
}

/**
* Get closest performance resource ignoring the resources that have been
* already used.
Expand Down Expand Up @@ -174,7 +179,7 @@ export function getResource(
}
const sorted = sortResources(filteredResources);

if (parsedSpanUrl.origin !== location.origin && sorted.length > 1) {
if (parsedSpanUrl.origin !== getOrigin() && sorted.length > 1) {
let corsPreFlightRequest: PerformanceResourceTiming | undefined = sorted[0];
let mainRequest: PerformanceResourceTiming = findMainRequest(
sorted,
Expand Down Expand Up @@ -438,7 +443,7 @@ export function shouldPropagateTraceHeaders(
}
const parsedSpanUrl = parseUrl(spanUrl);

if (parsedSpanUrl.origin === location.origin) {
if (parsedSpanUrl.origin === getOrigin()) {
return true;
} else {
return propagateTraceHeaderUrls.some(propagateTraceHeaderUrl =>
Expand Down