@opentelemetry/instrumentation-fetch 0.220.0 → 0.221.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -28
- package/build/esm/fetch.d.ts +0 -3
- package/build/esm/fetch.js +23 -62
- package/build/esm/fetch.js.map +1 -1
- package/build/esm/semconv.d.ts +0 -84
- package/build/esm/semconv.js +0 -84
- package/build/esm/semconv.js.map +1 -1
- package/build/esm/version.d.ts +1 -1
- package/build/esm/version.js +1 -1
- package/build/esm/version.js.map +1 -1
- package/build/esnext/fetch.d.ts +0 -3
- package/build/esnext/fetch.js +23 -62
- package/build/esnext/fetch.js.map +1 -1
- package/build/esnext/semconv.d.ts +0 -84
- package/build/esnext/semconv.js +0 -84
- package/build/esnext/semconv.js.map +1 -1
- package/build/esnext/version.d.ts +1 -1
- package/build/esnext/version.js +1 -1
- package/build/esnext/version.js.map +1 -1
- package/build/src/fetch.d.ts +0 -3
- package/build/src/fetch.js +21 -60
- package/build/src/fetch.js.map +1 -1
- package/build/src/semconv.d.ts +0 -84
- package/build/src/semconv.js +1 -85
- package/build/src/semconv.js.map +1 -1
- package/build/src/version.d.ts +1 -1
- package/build/src/version.js +1 -1
- package/build/src/version.js.map +1 -1
- package/package.json +14 -14
- package/build/esm/enums/AttributeNames.d.ts +0 -8
- package/build/esm/enums/AttributeNames.js +0 -13
- package/build/esm/enums/AttributeNames.js.map +0 -1
- package/build/esnext/enums/AttributeNames.d.ts +0 -8
- package/build/esnext/enums/AttributeNames.js +0 -13
- package/build/esnext/enums/AttributeNames.js.map +0 -1
- package/build/src/enums/AttributeNames.d.ts +0 -8
- package/build/src/enums/AttributeNames.js +0 -16
- package/build/src/enums/AttributeNames.js.map +0 -1
package/build/esnext/fetch.d.ts
CHANGED
|
@@ -28,8 +28,6 @@ export interface FetchInstrumentationConfig extends InstrumentationConfig {
|
|
|
28
28
|
ignoreNetworkEvents?: boolean;
|
|
29
29
|
/** Measure outgoing request size */
|
|
30
30
|
measureRequestSize?: boolean;
|
|
31
|
-
/** Select the HTTP semantic conventions version(s) used. */
|
|
32
|
-
semconvStabilityOptIn?: string;
|
|
33
31
|
}
|
|
34
32
|
/**
|
|
35
33
|
* This class represents a fetch plugin for auto instrumentation
|
|
@@ -40,7 +38,6 @@ export declare class FetchInstrumentation extends InstrumentationBase<FetchInstr
|
|
|
40
38
|
moduleName: string;
|
|
41
39
|
private _usedResources;
|
|
42
40
|
private _tasksCount;
|
|
43
|
-
private _semconvStability;
|
|
44
41
|
private _isEnabled;
|
|
45
42
|
private _isFetchPatched;
|
|
46
43
|
constructor(config?: FetchInstrumentationConfig);
|
package/build/esnext/fetch.js
CHANGED
|
@@ -3,11 +3,10 @@
|
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
5
|
import { context, propagation, SpanKind, SpanStatusCode, trace, } from '@opentelemetry/api';
|
|
6
|
-
import {
|
|
6
|
+
import { InstrumentationBase, safeExecuteInTheMiddle, } from '@opentelemetry/instrumentation';
|
|
7
7
|
import * as core from '@opentelemetry/core';
|
|
8
8
|
import * as web from '@opentelemetry/sdk-trace-web';
|
|
9
|
-
import {
|
|
10
|
-
import { ATTR_HTTP_STATUS_CODE, ATTR_HTTP_HOST, ATTR_HTTP_USER_AGENT, ATTR_HTTP_SCHEME, ATTR_HTTP_URL, ATTR_HTTP_METHOD, ATTR_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED, ATTR_HTTP_REQUEST_BODY_SIZE, } from './semconv';
|
|
9
|
+
import { ATTR_HTTP_REQUEST_BODY_SIZE } from './semconv';
|
|
11
10
|
import { ATTR_ERROR_TYPE, ATTR_HTTP_REQUEST_METHOD, ATTR_HTTP_REQUEST_METHOD_ORIGINAL, ATTR_HTTP_RESPONSE_STATUS_CODE, ATTR_SERVER_ADDRESS, ATTR_SERVER_PORT, ATTR_URL_FULL, } from '@opentelemetry/semantic-conventions';
|
|
12
11
|
import { getFetchBodyLength, normalizeHttpRequestMethod, serverPortFromUrl, } from './utils';
|
|
13
12
|
import { VERSION } from './version';
|
|
@@ -26,10 +25,8 @@ export class FetchInstrumentation extends InstrumentationBase {
|
|
|
26
25
|
moduleName = this.component;
|
|
27
26
|
_usedResources = new WeakSet();
|
|
28
27
|
_tasksCount = 0;
|
|
29
|
-
_semconvStability;
|
|
30
28
|
constructor(config = {}) {
|
|
31
29
|
super('@opentelemetry/instrumentation-fetch', VERSION, config);
|
|
32
|
-
this._semconvStability = semconvStabilityFromStr('http', config?.semconvStabilityOptIn);
|
|
33
30
|
}
|
|
34
31
|
init() { }
|
|
35
32
|
/**
|
|
@@ -41,8 +38,7 @@ export class FetchInstrumentation extends InstrumentationBase {
|
|
|
41
38
|
const childSpan = this.tracer.startSpan('CORS Preflight', {
|
|
42
39
|
startTime: corsPreFlightRequest[web.PerformanceTimingNames.FETCH_START],
|
|
43
40
|
}, trace.setSpan(context.active(), span));
|
|
44
|
-
|
|
45
|
-
web.addSpanNetworkEvents(childSpan, corsPreFlightRequest, this.getConfig().ignoreNetworkEvents, undefined, skipOldSemconvContentLengthAttrs);
|
|
41
|
+
web.addSpanNetworkEvents(childSpan, corsPreFlightRequest, this.getConfig().ignoreNetworkEvents, undefined, true);
|
|
46
42
|
childSpan.end(corsPreFlightRequest[web.PerformanceTimingNames.RESPONSE_END]);
|
|
47
43
|
}
|
|
48
44
|
/**
|
|
@@ -52,26 +48,13 @@ export class FetchInstrumentation extends InstrumentationBase {
|
|
|
52
48
|
*/
|
|
53
49
|
_addFinalSpanAttributes(span, response) {
|
|
54
50
|
const parsedUrl = web.parseUrl(response.url);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
span.setAttribute(
|
|
62
|
-
if (typeof navigator !== 'undefined') {
|
|
63
|
-
span.setAttribute(ATTR_HTTP_USER_AGENT, navigator.userAgent);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
if (this._semconvStability & SemconvStability.STABLE) {
|
|
67
|
-
span.setAttribute(ATTR_HTTP_RESPONSE_STATUS_CODE, response.status);
|
|
68
|
-
// TODO: Set server.{address,port} at span creation for sampling decisions
|
|
69
|
-
// (a "SHOULD" requirement in semconv).
|
|
70
|
-
span.setAttribute(ATTR_SERVER_ADDRESS, parsedUrl.hostname);
|
|
71
|
-
const serverPort = serverPortFromUrl(parsedUrl);
|
|
72
|
-
if (serverPort) {
|
|
73
|
-
span.setAttribute(ATTR_SERVER_PORT, serverPort);
|
|
74
|
-
}
|
|
51
|
+
span.setAttribute(ATTR_HTTP_RESPONSE_STATUS_CODE, response.status);
|
|
52
|
+
// TODO: Set server.{address,port} at span creation for sampling decisions
|
|
53
|
+
// (a "SHOULD" requirement in semconv).
|
|
54
|
+
span.setAttribute(ATTR_SERVER_ADDRESS, parsedUrl.hostname);
|
|
55
|
+
const serverPort = serverPortFromUrl(parsedUrl);
|
|
56
|
+
if (serverPort) {
|
|
57
|
+
span.setAttribute(ATTR_SERVER_PORT, serverPort);
|
|
75
58
|
}
|
|
76
59
|
}
|
|
77
60
|
/**
|
|
@@ -128,29 +111,15 @@ export class FetchInstrumentation extends InstrumentationBase {
|
|
|
128
111
|
this._diag.debug('ignoring span as url matches ignored url');
|
|
129
112
|
return;
|
|
130
113
|
}
|
|
131
|
-
let name = '';
|
|
132
114
|
const attributes = {};
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
attributes[
|
|
139
|
-
}
|
|
140
|
-
if (this._semconvStability & SemconvStability.STABLE) {
|
|
141
|
-
const origMethod = options.method;
|
|
142
|
-
const normMethod = normalizeHttpRequestMethod(options.method || 'GET');
|
|
143
|
-
if (!name) {
|
|
144
|
-
// The "old" span name wins if emitting both old and stable semconv
|
|
145
|
-
// ('http/dup').
|
|
146
|
-
name = normMethod;
|
|
147
|
-
}
|
|
148
|
-
attributes[ATTR_HTTP_REQUEST_METHOD] = normMethod;
|
|
149
|
-
if (normMethod !== origMethod) {
|
|
150
|
-
attributes[ATTR_HTTP_REQUEST_METHOD_ORIGINAL] = origMethod;
|
|
151
|
-
}
|
|
152
|
-
attributes[ATTR_URL_FULL] = url;
|
|
115
|
+
const origMethod = options.method;
|
|
116
|
+
const normMethod = normalizeHttpRequestMethod(options.method || 'GET');
|
|
117
|
+
const name = normMethod;
|
|
118
|
+
attributes[ATTR_HTTP_REQUEST_METHOD] = normMethod;
|
|
119
|
+
if (normMethod !== origMethod) {
|
|
120
|
+
attributes[ATTR_HTTP_REQUEST_METHOD_ORIGINAL] = origMethod;
|
|
153
121
|
}
|
|
122
|
+
attributes[ATTR_URL_FULL] = url;
|
|
154
123
|
return this.tracer.startSpan(name, {
|
|
155
124
|
kind: SpanKind.CLIENT,
|
|
156
125
|
attributes,
|
|
@@ -182,8 +151,7 @@ export class FetchInstrumentation extends InstrumentationBase {
|
|
|
182
151
|
this._addChildSpan(span, corsPreFlightRequest);
|
|
183
152
|
this._markResourceAsUsed(corsPreFlightRequest);
|
|
184
153
|
}
|
|
185
|
-
|
|
186
|
-
web.addSpanNetworkEvents(span, mainRequest, this.getConfig().ignoreNetworkEvents, undefined, skipOldSemconvContentLengthAttrs);
|
|
154
|
+
web.addSpanNetworkEvents(span, mainRequest, this.getConfig().ignoreNetworkEvents, undefined, true);
|
|
187
155
|
}
|
|
188
156
|
}
|
|
189
157
|
/**
|
|
@@ -205,12 +173,10 @@ export class FetchInstrumentation extends InstrumentationBase {
|
|
|
205
173
|
const endTime = core.millisToHrTime(Date.now());
|
|
206
174
|
const performanceEndTime = core.hrTime();
|
|
207
175
|
this._addFinalSpanAttributes(span, response);
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
span.setAttribute(ATTR_ERROR_TYPE, String(response.status));
|
|
213
|
-
}
|
|
176
|
+
// https://github.com/open-telemetry/semantic-conventions/blob/main/docs/http/http-spans.md#status
|
|
177
|
+
if (response.status >= 400) {
|
|
178
|
+
span.setStatus({ code: SpanStatusCode.ERROR });
|
|
179
|
+
span.setAttribute(ATTR_ERROR_TYPE, String(response.status));
|
|
214
180
|
}
|
|
215
181
|
setTimeout(() => {
|
|
216
182
|
spanData.observer?.disconnect();
|
|
@@ -255,12 +221,7 @@ export class FetchInstrumentation extends InstrumentationBase {
|
|
|
255
221
|
.then(bodyLength => {
|
|
256
222
|
if (!bodyLength)
|
|
257
223
|
return;
|
|
258
|
-
|
|
259
|
-
createdSpan.setAttribute(ATTR_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED, bodyLength);
|
|
260
|
-
}
|
|
261
|
-
if (plugin._semconvStability & SemconvStability.STABLE) {
|
|
262
|
-
createdSpan.setAttribute(ATTR_HTTP_REQUEST_BODY_SIZE, bodyLength);
|
|
263
|
-
}
|
|
224
|
+
createdSpan.setAttribute(ATTR_HTTP_REQUEST_BODY_SIZE, bodyLength);
|
|
264
225
|
})
|
|
265
226
|
.catch(error => {
|
|
266
227
|
plugin._diag.warn('getFetchBodyLength', error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/fetch.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n context,\n propagation,\n SpanKind,\n SpanStatusCode,\n trace,\n} from '@opentelemetry/api';\nimport type { Attributes, HrTime, Span } from '@opentelemetry/api';\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport {\n SemconvStability,\n semconvStabilityFromStr,\n InstrumentationBase,\n safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\nimport * as core from '@opentelemetry/core';\nimport * as web from '@opentelemetry/sdk-trace-web';\nimport { AttributeNames } from './enums/AttributeNames';\nimport {\n ATTR_HTTP_STATUS_CODE,\n ATTR_HTTP_HOST,\n ATTR_HTTP_USER_AGENT,\n ATTR_HTTP_SCHEME,\n ATTR_HTTP_URL,\n ATTR_HTTP_METHOD,\n ATTR_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED,\n ATTR_HTTP_REQUEST_BODY_SIZE,\n} from './semconv';\nimport {\n ATTR_ERROR_TYPE,\n ATTR_HTTP_REQUEST_METHOD,\n ATTR_HTTP_REQUEST_METHOD_ORIGINAL,\n ATTR_HTTP_RESPONSE_STATUS_CODE,\n ATTR_SERVER_ADDRESS,\n ATTR_SERVER_PORT,\n ATTR_URL_FULL,\n} from '@opentelemetry/semantic-conventions';\nimport type { FetchError, FetchResponse, SpanData } from './types';\nimport {\n getFetchBodyLength,\n normalizeHttpRequestMethod,\n serverPortFromUrl,\n} from './utils';\nimport { VERSION } from './version';\n\n// how long to wait for observer to collect information about resources\n// this is needed as event \"load\" is called before observer\n// hard to say how long it should really wait, seems like 300ms is\n// safe enough\nconst OBSERVER_WAIT_TIME_MS = 300;\n\nconst hasBrowserPerformanceAPI = typeof PerformanceObserver !== 'undefined';\n\nexport interface FetchCustomAttributeFunction {\n (\n span: Span,\n request: Request | RequestInit,\n result: Response | FetchError\n ): void;\n}\n\nexport interface FetchRequestHookFunction {\n (span: Span, request: Request | RequestInit): void;\n}\n\n/**\n * FetchPlugin Config\n */\nexport interface FetchInstrumentationConfig extends InstrumentationConfig {\n // the number of timing resources is limited, after the limit\n // (chrome 250, safari 150) the information is not collected anymore\n // the only way to prevent that is to regularly clean the resources\n // whenever it is possible, this is needed only when PerformanceObserver\n // is not available\n clearTimingResources?: boolean;\n // urls which should include trace headers when origin doesn't match\n propagateTraceHeaderCorsUrls?: web.PropagateTraceHeaderCorsUrls;\n /**\n * URLs that partially match any regex in ignoreUrls will not be traced.\n * In addition, URLs that are _exact matches_ of strings in ignoreUrls will\n * also not be traced.\n */\n ignoreUrls?: Array<string | RegExp>;\n /** Function for adding custom attributes on the span */\n applyCustomAttributesOnSpan?: FetchCustomAttributeFunction;\n /** Function for adding custom attributes or headers before the request is handled */\n requestHook?: FetchRequestHookFunction;\n // Ignore adding network events as span events\n ignoreNetworkEvents?: boolean;\n /** Measure outgoing request size */\n measureRequestSize?: boolean;\n /** Select the HTTP semantic conventions version(s) used. */\n semconvStabilityOptIn?: string;\n}\n\n/**\n * This class represents a fetch plugin for auto instrumentation\n */\nexport class FetchInstrumentation extends InstrumentationBase<FetchInstrumentationConfig> {\n readonly component: string = 'fetch';\n readonly version: string = VERSION;\n moduleName = this.component;\n private _usedResources = new WeakSet<PerformanceResourceTiming>();\n private _tasksCount = 0;\n\n private _semconvStability: SemconvStability;\n\n // Note: Intentionally *not* using `_enabled` as the field name to avoid\n // any possible confusion with the `_enabled` field used on the *Node.js*\n // InstrumentationBase class.\n // Also not initializing the fields to `false` because the base class\n // constructor already call `enable` modifying their values and it will\n // set the instrumentaitons in a bas state (enabled, patched but with flags set to false)\n declare private _isEnabled: boolean;\n declare private _isFetchPatched: boolean;\n\n constructor(config: FetchInstrumentationConfig = {}) {\n super('@opentelemetry/instrumentation-fetch', VERSION, config);\n this._semconvStability = semconvStabilityFromStr(\n 'http',\n config?.semconvStabilityOptIn\n );\n }\n\n init(): void {}\n\n /**\n * Add cors pre flight child span\n * @param span\n * @param corsPreFlightRequest\n */\n private _addChildSpan(\n span: Span,\n corsPreFlightRequest: PerformanceResourceTiming\n ): void {\n const childSpan = this.tracer.startSpan(\n 'CORS Preflight',\n {\n startTime: corsPreFlightRequest[web.PerformanceTimingNames.FETCH_START],\n },\n trace.setSpan(context.active(), span)\n );\n const skipOldSemconvContentLengthAttrs = !(\n this._semconvStability & SemconvStability.OLD\n );\n web.addSpanNetworkEvents(\n childSpan,\n corsPreFlightRequest,\n this.getConfig().ignoreNetworkEvents,\n undefined,\n skipOldSemconvContentLengthAttrs\n );\n childSpan.end(\n corsPreFlightRequest[web.PerformanceTimingNames.RESPONSE_END]\n );\n }\n\n /**\n * Adds more attributes to span just before ending it\n * @param span\n * @param response\n */\n private _addFinalSpanAttributes(span: Span, response: FetchResponse): void {\n const parsedUrl = web.parseUrl(response.url);\n\n if (this._semconvStability & SemconvStability.OLD) {\n span.setAttribute(ATTR_HTTP_STATUS_CODE, response.status);\n if (response.statusText != null) {\n span.setAttribute(AttributeNames.HTTP_STATUS_TEXT, response.statusText);\n }\n span.setAttribute(ATTR_HTTP_HOST, parsedUrl.host);\n span.setAttribute(ATTR_HTTP_SCHEME, parsedUrl.protocol.replace(':', ''));\n if (typeof navigator !== 'undefined') {\n span.setAttribute(ATTR_HTTP_USER_AGENT, navigator.userAgent);\n }\n }\n\n if (this._semconvStability & SemconvStability.STABLE) {\n span.setAttribute(ATTR_HTTP_RESPONSE_STATUS_CODE, response.status);\n // TODO: Set server.{address,port} at span creation for sampling decisions\n // (a \"SHOULD\" requirement in semconv).\n span.setAttribute(ATTR_SERVER_ADDRESS, parsedUrl.hostname);\n const serverPort = serverPortFromUrl(parsedUrl);\n if (serverPort) {\n span.setAttribute(ATTR_SERVER_PORT, serverPort);\n }\n }\n }\n\n /**\n * Add headers\n * @param options\n * @param spanUrl\n */\n private _addHeaders(options: Request | RequestInit, spanUrl: string): void {\n if (\n !web.shouldPropagateTraceHeaders(\n spanUrl,\n this.getConfig().propagateTraceHeaderCorsUrls\n )\n ) {\n const headers: Partial<Record<string, unknown>> = {};\n propagation.inject(context.active(), headers);\n if (Object.keys(headers).length > 0) {\n this._diag.debug('headers inject skipped due to CORS policy');\n }\n return;\n }\n\n if (options instanceof Request) {\n // This mutates `Request.headers` in-place, because it is read-only\n // (per https://developer.mozilla.org/en-US/docs/Web/API/Request/headers),\n // so we cannot (easily) replace it.\n propagation.inject(context.active(), options.headers, {\n set: (h, k, v) => h.set(k, typeof v === 'string' ? v : String(v)),\n });\n } else {\n // Otherwise, create a new Headers to avoid mutating the caller's\n // possibly re-used headers.\n const headers = new Headers(options.headers);\n propagation.inject(context.active(), headers, {\n set: (h, k, v) => h.set(k, typeof v === 'string' ? v : String(v)),\n });\n options.headers = headers;\n }\n }\n\n /**\n * Clears the resource timings and all resources assigned with spans\n * when {@link FetchPluginConfig.clearTimingResources} is\n * set to true (default false)\n * @private\n */\n private _clearResources() {\n if (this._tasksCount === 0 && this.getConfig().clearTimingResources) {\n performance.clearResourceTimings();\n this._usedResources = new WeakSet<PerformanceResourceTiming>();\n }\n }\n\n /**\n * Creates a new span\n * @param url\n * @param options\n */\n private _createSpan(\n url: string,\n options: Partial<Request | RequestInit> = {}\n ): Span | undefined {\n if (core.isUrlIgnored(url, this.getConfig().ignoreUrls)) {\n this._diag.debug('ignoring span as url matches ignored url');\n return;\n }\n\n let name = '';\n const attributes = {} as Attributes;\n if (this._semconvStability & SemconvStability.OLD) {\n const method = (options.method || 'GET').toUpperCase();\n name = `HTTP ${method}`;\n attributes[AttributeNames.COMPONENT] = this.moduleName;\n attributes[ATTR_HTTP_METHOD] = method;\n attributes[ATTR_HTTP_URL] = url;\n }\n if (this._semconvStability & SemconvStability.STABLE) {\n const origMethod = options.method;\n const normMethod = normalizeHttpRequestMethod(options.method || 'GET');\n if (!name) {\n // The \"old\" span name wins if emitting both old and stable semconv\n // ('http/dup').\n name = normMethod;\n }\n attributes[ATTR_HTTP_REQUEST_METHOD] = normMethod;\n if (normMethod !== origMethod) {\n attributes[ATTR_HTTP_REQUEST_METHOD_ORIGINAL] = origMethod;\n }\n attributes[ATTR_URL_FULL] = url;\n }\n\n return this.tracer.startSpan(name, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n }\n\n /**\n * Finds appropriate resource and add network events to the span\n * @param span\n * @param resourcesObserver\n * @param endTime\n */\n private _findResourceAndAddNetworkEvents(\n span: Span,\n resourcesObserver: SpanData,\n endTime: HrTime\n ): void {\n let resources: PerformanceResourceTiming[] = resourcesObserver.entries;\n if (!resources.length) {\n if (!performance.getEntriesByType) {\n return;\n }\n // fallback - either Observer is not available or it took longer\n // then OBSERVER_WAIT_TIME_MS and observer didn't collect enough\n // information\n resources = performance.getEntriesByType(\n 'resource'\n ) as PerformanceResourceTiming[];\n }\n const resource = web.getResource(\n resourcesObserver.spanUrl,\n resourcesObserver.startTime,\n endTime,\n resources,\n this._usedResources,\n 'fetch'\n );\n\n if (resource.mainRequest) {\n const mainRequest = resource.mainRequest;\n this._markResourceAsUsed(mainRequest);\n\n const corsPreFlightRequest = resource.corsPreFlightRequest;\n if (corsPreFlightRequest) {\n this._addChildSpan(span, corsPreFlightRequest);\n this._markResourceAsUsed(corsPreFlightRequest);\n }\n const skipOldSemconvContentLengthAttrs = !(\n this._semconvStability & SemconvStability.OLD\n );\n web.addSpanNetworkEvents(\n span,\n mainRequest,\n this.getConfig().ignoreNetworkEvents,\n undefined,\n skipOldSemconvContentLengthAttrs\n );\n }\n }\n\n /**\n * Marks certain [resource]{@link PerformanceResourceTiming} when information\n * from this is used to add events to span.\n * This is done to avoid reusing the same resource again for next span\n * @param resource\n */\n private _markResourceAsUsed(resource: PerformanceResourceTiming): void {\n this._usedResources.add(resource);\n }\n\n /**\n * Finish span, add attributes, network events etc.\n * @param span\n * @param spanData\n * @param response\n */\n private _endSpan(span: Span, spanData: SpanData, response: FetchResponse) {\n const endTime = core.millisToHrTime(Date.now());\n const performanceEndTime = core.hrTime();\n this._addFinalSpanAttributes(span, response);\n\n if (this._semconvStability & SemconvStability.STABLE) {\n // https://github.com/open-telemetry/semantic-conventions/blob/main/docs/http/http-spans.md#status\n if (response.status >= 400) {\n span.setStatus({ code: SpanStatusCode.ERROR });\n span.setAttribute(ATTR_ERROR_TYPE, String(response.status));\n }\n }\n\n setTimeout(() => {\n spanData.observer?.disconnect();\n this._findResourceAndAddNetworkEvents(span, spanData, performanceEndTime);\n this._tasksCount--;\n this._clearResources();\n span.end(endTime);\n }, OBSERVER_WAIT_TIME_MS);\n }\n\n /**\n * Patches the constructor of fetch\n */\n private _patchConstructor(): (original: typeof fetch) => typeof fetch {\n return original => {\n const plugin = this;\n\n return function patchConstructor(\n this: typeof globalThis,\n ...args: Parameters<typeof fetch>\n ): Promise<Response> {\n if (!plugin._isEnabled) {\n return original.apply(this, args);\n }\n const self = this;\n const url = web.parseUrl(\n args[0] instanceof Request ? args[0].url : String(args[0])\n ).href;\n\n // Per the Fetch spec, when fetch() is called with a Request object\n // and a separate init object, the init properties override the\n // Request's properties. Merge them into a new Request so that\n // downstream consumers (hooks, header injection, the actual fetch\n // call) see the correct final values.\n // See: https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#parameters\n let options: Request | RequestInit;\n if (args[0] instanceof Request) {\n options = args[1] != null ? new Request(args[0], args[1]) : args[0];\n } else {\n options = args[1] || {};\n }\n const createdSpan = plugin._createSpan(url, options);\n if (!createdSpan) {\n return original.apply(this, args);\n }\n const spanData = plugin._prepareSpanData(url);\n\n if (plugin.getConfig().measureRequestSize) {\n getFetchBodyLength(...args)\n .then(bodyLength => {\n if (!bodyLength) return;\n if (plugin._semconvStability & SemconvStability.OLD) {\n createdSpan.setAttribute(\n ATTR_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED,\n bodyLength\n );\n }\n if (plugin._semconvStability & SemconvStability.STABLE) {\n createdSpan.setAttribute(\n ATTR_HTTP_REQUEST_BODY_SIZE,\n bodyLength\n );\n }\n })\n .catch(error => {\n plugin._diag.warn('getFetchBodyLength', error);\n });\n }\n\n function endSpanOnError(span: Span, error: FetchError) {\n plugin._applyAttributesAfterFetch(span, options, error);\n plugin._endSpan(span, spanData, {\n status: error.status || 0,\n statusText: error.message,\n url,\n });\n }\n\n function endSpanOnSuccess(span: Span, response: Response) {\n plugin._applyAttributesAfterFetch(span, options, response);\n if (response.status >= 200 && response.status < 400) {\n plugin._endSpan(span, spanData, response);\n } else {\n plugin._endSpan(span, spanData, {\n status: response.status,\n statusText: response.statusText,\n url,\n });\n }\n }\n\n function onSuccess(span: Span, response: Response): Response {\n try {\n // Clone the response and eagerly consume the clone to detect\n // when the body transfer completes. The original response is\n // returned to the caller untouched so that it passes internal\n // brand-checks required by APIs such as\n // WebAssembly.compileStreaming.\n // TODO: Switch to a consumer-driven model and drop `resClone`.\n // Keeping eager consumption here to preserve current behavior and avoid breaking existing tests.\n // Context: discussion in PR #5894 → https://github.com/open-telemetry/opentelemetry-js/pull/5894\n const resClone = response.clone();\n const body = resClone.body;\n if (body) {\n const reader = body.getReader();\n\n const read = (): void => {\n reader.read().then(\n ({ done }) => {\n if (done) {\n endSpanOnSuccess(span, response);\n } else {\n read();\n }\n },\n error => {\n endSpanOnError(span, error);\n }\n );\n };\n read();\n } else {\n // some older browsers don't have .body implemented\n endSpanOnSuccess(span, response);\n }\n } catch (error) {\n // Setup failed (e.g. clone() or getReader() threw).\n // End the span and clean up so _tasksCount doesn't leak.\n plugin._diag.error('Failed to read fetch response body', error);\n plugin._endSpan(span, spanData, {\n status: 0,\n url,\n });\n }\n return response;\n }\n\n function onError(span: Span, error: FetchError): never {\n try {\n endSpanOnError(span, error);\n } catch (e: unknown) {\n // endSpanOnError failed — fall back to ending the span\n // directly so _tasksCount doesn't leak.\n plugin._diag.error('Failed to end span on fetch error', e);\n plugin._endSpan(span, spanData, {\n status: error.status || 0,\n url,\n });\n }\n\n throw error;\n }\n\n return context.with(\n trace.setSpan(context.active(), createdSpan),\n () => {\n // Call request hook before injection so hooks cannot tamper with propagation headers.\n // Also, this means the hook will see `options.headers` in the same type as passed in,\n // rather than as a `Headers` instance set by `_addHeaders()`.\n plugin._callRequestHook(createdSpan, options);\n plugin._addHeaders(options, url);\n plugin._tasksCount++;\n\n return original\n .apply(\n self,\n options instanceof Request ? [options] : [url, options]\n )\n .then(\n onSuccess.bind(self, createdSpan),\n onError.bind(self, createdSpan)\n );\n }\n );\n };\n };\n }\n\n private _applyAttributesAfterFetch(\n span: Span,\n request: Request | RequestInit,\n result: Response | FetchError\n ) {\n const applyCustomAttributesOnSpan =\n this.getConfig().applyCustomAttributesOnSpan;\n if (applyCustomAttributesOnSpan) {\n safeExecuteInTheMiddle(\n () => applyCustomAttributesOnSpan(span, request, result),\n error => {\n if (!error) {\n return;\n }\n\n this._diag.error('applyCustomAttributesOnSpan', error);\n },\n true\n );\n }\n }\n\n private _callRequestHook(span: Span, request: Request | RequestInit) {\n const requestHook = this.getConfig().requestHook;\n if (requestHook) {\n safeExecuteInTheMiddle(\n () => requestHook(span, request),\n error => {\n if (!error) {\n return;\n }\n\n this._diag.error('requestHook', error);\n },\n true\n );\n }\n }\n\n /**\n * Prepares a span data - needed later for matching appropriate network\n * resources\n * @param spanUrl\n */\n private _prepareSpanData(spanUrl: string): SpanData {\n const startTime = core.hrTime();\n const entries: PerformanceResourceTiming[] = [];\n if (typeof PerformanceObserver !== 'function') {\n return { entries, startTime, spanUrl };\n }\n\n const observer = new PerformanceObserver(list => {\n const perfObsEntries = list.getEntries() as PerformanceResourceTiming[];\n perfObsEntries.forEach(entry => {\n if (entry.initiatorType === 'fetch' && entry.name === spanUrl) {\n entries.push(entry);\n }\n });\n });\n observer.observe({\n entryTypes: ['resource'],\n });\n return { entries, observer, startTime, spanUrl };\n }\n\n /**\n * implements enable function\n */\n override enable(): void {\n if (!hasBrowserPerformanceAPI) {\n this._diag.warn(\n 'this instrumentation is intended for web usage only, it does not instrument server-side fetch()'\n );\n return;\n }\n\n if (this._isEnabled) {\n return;\n }\n\n if (this._isFetchPatched) {\n this._diag.debug('fetch constructor already patched');\n this._isEnabled = true;\n return;\n }\n\n try {\n // `_wrap` throws if a third-party script has locked globalThis.fetch via\n // Object.defineProperty(window, 'fetch', { writable: false, ... }).\n this._wrap(globalThis, 'fetch', this._patchConstructor());\n this._isFetchPatched = true;\n this._isEnabled = true;\n } catch (err) {\n this._diag.warn(\n 'Failed to patch globalThis.fetch; instrumentation will not be enabled. ' +\n 'Another script may have locked globalThis.fetch via Object.defineProperty.',\n err\n );\n }\n }\n\n /**\n * deactivates fetch instrumentation\n */\n override disable(): void {\n if (!hasBrowserPerformanceAPI) {\n return;\n }\n if (!this._isEnabled) {\n return;\n }\n this._isEnabled = false;\n this._usedResources = new WeakSet<PerformanceResourceTiming>();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/fetch.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n context,\n propagation,\n SpanKind,\n SpanStatusCode,\n trace,\n} from '@opentelemetry/api';\nimport type { Attributes, HrTime, Span } from '@opentelemetry/api';\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport {\n InstrumentationBase,\n safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\nimport * as core from '@opentelemetry/core';\nimport * as web from '@opentelemetry/sdk-trace-web';\nimport { ATTR_HTTP_REQUEST_BODY_SIZE } from './semconv';\nimport {\n ATTR_ERROR_TYPE,\n ATTR_HTTP_REQUEST_METHOD,\n ATTR_HTTP_REQUEST_METHOD_ORIGINAL,\n ATTR_HTTP_RESPONSE_STATUS_CODE,\n ATTR_SERVER_ADDRESS,\n ATTR_SERVER_PORT,\n ATTR_URL_FULL,\n} from '@opentelemetry/semantic-conventions';\nimport type { FetchError, FetchResponse, SpanData } from './types';\nimport {\n getFetchBodyLength,\n normalizeHttpRequestMethod,\n serverPortFromUrl,\n} from './utils';\nimport { VERSION } from './version';\n\n// how long to wait for observer to collect information about resources\n// this is needed as event \"load\" is called before observer\n// hard to say how long it should really wait, seems like 300ms is\n// safe enough\nconst OBSERVER_WAIT_TIME_MS = 300;\n\nconst hasBrowserPerformanceAPI = typeof PerformanceObserver !== 'undefined';\n\nexport interface FetchCustomAttributeFunction {\n (\n span: Span,\n request: Request | RequestInit,\n result: Response | FetchError\n ): void;\n}\n\nexport interface FetchRequestHookFunction {\n (span: Span, request: Request | RequestInit): void;\n}\n\n/**\n * FetchPlugin Config\n */\nexport interface FetchInstrumentationConfig extends InstrumentationConfig {\n // the number of timing resources is limited, after the limit\n // (chrome 250, safari 150) the information is not collected anymore\n // the only way to prevent that is to regularly clean the resources\n // whenever it is possible, this is needed only when PerformanceObserver\n // is not available\n clearTimingResources?: boolean;\n // urls which should include trace headers when origin doesn't match\n propagateTraceHeaderCorsUrls?: web.PropagateTraceHeaderCorsUrls;\n /**\n * URLs that partially match any regex in ignoreUrls will not be traced.\n * In addition, URLs that are _exact matches_ of strings in ignoreUrls will\n * also not be traced.\n */\n ignoreUrls?: Array<string | RegExp>;\n /** Function for adding custom attributes on the span */\n applyCustomAttributesOnSpan?: FetchCustomAttributeFunction;\n /** Function for adding custom attributes or headers before the request is handled */\n requestHook?: FetchRequestHookFunction;\n // Ignore adding network events as span events\n ignoreNetworkEvents?: boolean;\n /** Measure outgoing request size */\n measureRequestSize?: boolean;\n}\n\n/**\n * This class represents a fetch plugin for auto instrumentation\n */\nexport class FetchInstrumentation extends InstrumentationBase<FetchInstrumentationConfig> {\n readonly component: string = 'fetch';\n readonly version: string = VERSION;\n moduleName = this.component;\n private _usedResources = new WeakSet<PerformanceResourceTiming>();\n private _tasksCount = 0;\n\n // Note: Intentionally *not* using `_enabled` as the field name to avoid\n // any possible confusion with the `_enabled` field used on the *Node.js*\n // InstrumentationBase class.\n // Also not initializing the fields to `false` because the base class\n // constructor already call `enable` modifying their values and it will\n // set the instrumentaitons in a bas state (enabled, patched but with flags set to false)\n declare private _isEnabled: boolean;\n declare private _isFetchPatched: boolean;\n\n constructor(config: FetchInstrumentationConfig = {}) {\n super('@opentelemetry/instrumentation-fetch', VERSION, config);\n }\n\n init(): void {}\n\n /**\n * Add cors pre flight child span\n * @param span\n * @param corsPreFlightRequest\n */\n private _addChildSpan(\n span: Span,\n corsPreFlightRequest: PerformanceResourceTiming\n ): void {\n const childSpan = this.tracer.startSpan(\n 'CORS Preflight',\n {\n startTime: corsPreFlightRequest[web.PerformanceTimingNames.FETCH_START],\n },\n trace.setSpan(context.active(), span)\n );\n web.addSpanNetworkEvents(\n childSpan,\n corsPreFlightRequest,\n this.getConfig().ignoreNetworkEvents,\n undefined,\n true\n );\n childSpan.end(\n corsPreFlightRequest[web.PerformanceTimingNames.RESPONSE_END]\n );\n }\n\n /**\n * Adds more attributes to span just before ending it\n * @param span\n * @param response\n */\n private _addFinalSpanAttributes(span: Span, response: FetchResponse): void {\n const parsedUrl = web.parseUrl(response.url);\n span.setAttribute(ATTR_HTTP_RESPONSE_STATUS_CODE, response.status);\n // TODO: Set server.{address,port} at span creation for sampling decisions\n // (a \"SHOULD\" requirement in semconv).\n span.setAttribute(ATTR_SERVER_ADDRESS, parsedUrl.hostname);\n const serverPort = serverPortFromUrl(parsedUrl);\n if (serverPort) {\n span.setAttribute(ATTR_SERVER_PORT, serverPort);\n }\n }\n\n /**\n * Add headers\n * @param options\n * @param spanUrl\n */\n private _addHeaders(options: Request | RequestInit, spanUrl: string): void {\n if (\n !web.shouldPropagateTraceHeaders(\n spanUrl,\n this.getConfig().propagateTraceHeaderCorsUrls\n )\n ) {\n const headers: Partial<Record<string, unknown>> = {};\n propagation.inject(context.active(), headers);\n if (Object.keys(headers).length > 0) {\n this._diag.debug('headers inject skipped due to CORS policy');\n }\n return;\n }\n\n if (options instanceof Request) {\n // This mutates `Request.headers` in-place, because it is read-only\n // (per https://developer.mozilla.org/en-US/docs/Web/API/Request/headers),\n // so we cannot (easily) replace it.\n propagation.inject(context.active(), options.headers, {\n set: (h, k, v) => h.set(k, typeof v === 'string' ? v : String(v)),\n });\n } else {\n // Otherwise, create a new Headers to avoid mutating the caller's\n // possibly re-used headers.\n const headers = new Headers(options.headers);\n propagation.inject(context.active(), headers, {\n set: (h, k, v) => h.set(k, typeof v === 'string' ? v : String(v)),\n });\n options.headers = headers;\n }\n }\n\n /**\n * Clears the resource timings and all resources assigned with spans\n * when {@link FetchPluginConfig.clearTimingResources} is\n * set to true (default false)\n * @private\n */\n private _clearResources() {\n if (this._tasksCount === 0 && this.getConfig().clearTimingResources) {\n performance.clearResourceTimings();\n this._usedResources = new WeakSet<PerformanceResourceTiming>();\n }\n }\n\n /**\n * Creates a new span\n * @param url\n * @param options\n */\n private _createSpan(\n url: string,\n options: Partial<Request | RequestInit> = {}\n ): Span | undefined {\n if (core.isUrlIgnored(url, this.getConfig().ignoreUrls)) {\n this._diag.debug('ignoring span as url matches ignored url');\n return;\n }\n\n const attributes = {} as Attributes;\n const origMethod = options.method;\n const normMethod = normalizeHttpRequestMethod(options.method || 'GET');\n const name = normMethod;\n\n attributes[ATTR_HTTP_REQUEST_METHOD] = normMethod;\n if (normMethod !== origMethod) {\n attributes[ATTR_HTTP_REQUEST_METHOD_ORIGINAL] = origMethod;\n }\n attributes[ATTR_URL_FULL] = url;\n\n return this.tracer.startSpan(name, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n }\n\n /**\n * Finds appropriate resource and add network events to the span\n * @param span\n * @param resourcesObserver\n * @param endTime\n */\n private _findResourceAndAddNetworkEvents(\n span: Span,\n resourcesObserver: SpanData,\n endTime: HrTime\n ): void {\n let resources: PerformanceResourceTiming[] = resourcesObserver.entries;\n if (!resources.length) {\n if (!performance.getEntriesByType) {\n return;\n }\n // fallback - either Observer is not available or it took longer\n // then OBSERVER_WAIT_TIME_MS and observer didn't collect enough\n // information\n resources = performance.getEntriesByType(\n 'resource'\n ) as PerformanceResourceTiming[];\n }\n const resource = web.getResource(\n resourcesObserver.spanUrl,\n resourcesObserver.startTime,\n endTime,\n resources,\n this._usedResources,\n 'fetch'\n );\n\n if (resource.mainRequest) {\n const mainRequest = resource.mainRequest;\n this._markResourceAsUsed(mainRequest);\n\n const corsPreFlightRequest = resource.corsPreFlightRequest;\n if (corsPreFlightRequest) {\n this._addChildSpan(span, corsPreFlightRequest);\n this._markResourceAsUsed(corsPreFlightRequest);\n }\n web.addSpanNetworkEvents(\n span,\n mainRequest,\n this.getConfig().ignoreNetworkEvents,\n undefined,\n true\n );\n }\n }\n\n /**\n * Marks certain [resource]{@link PerformanceResourceTiming} when information\n * from this is used to add events to span.\n * This is done to avoid reusing the same resource again for next span\n * @param resource\n */\n private _markResourceAsUsed(resource: PerformanceResourceTiming): void {\n this._usedResources.add(resource);\n }\n\n /**\n * Finish span, add attributes, network events etc.\n * @param span\n * @param spanData\n * @param response\n */\n private _endSpan(span: Span, spanData: SpanData, response: FetchResponse) {\n const endTime = core.millisToHrTime(Date.now());\n const performanceEndTime = core.hrTime();\n this._addFinalSpanAttributes(span, response);\n\n // https://github.com/open-telemetry/semantic-conventions/blob/main/docs/http/http-spans.md#status\n if (response.status >= 400) {\n span.setStatus({ code: SpanStatusCode.ERROR });\n span.setAttribute(ATTR_ERROR_TYPE, String(response.status));\n }\n\n setTimeout(() => {\n spanData.observer?.disconnect();\n this._findResourceAndAddNetworkEvents(span, spanData, performanceEndTime);\n this._tasksCount--;\n this._clearResources();\n span.end(endTime);\n }, OBSERVER_WAIT_TIME_MS);\n }\n\n /**\n * Patches the constructor of fetch\n */\n private _patchConstructor(): (original: typeof fetch) => typeof fetch {\n return original => {\n const plugin = this;\n\n return function patchConstructor(\n this: typeof globalThis,\n ...args: Parameters<typeof fetch>\n ): Promise<Response> {\n if (!plugin._isEnabled) {\n return original.apply(this, args);\n }\n const self = this;\n const url = web.parseUrl(\n args[0] instanceof Request ? args[0].url : String(args[0])\n ).href;\n\n // Per the Fetch spec, when fetch() is called with a Request object\n // and a separate init object, the init properties override the\n // Request's properties. Merge them into a new Request so that\n // downstream consumers (hooks, header injection, the actual fetch\n // call) see the correct final values.\n // See: https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#parameters\n let options: Request | RequestInit;\n if (args[0] instanceof Request) {\n options = args[1] != null ? new Request(args[0], args[1]) : args[0];\n } else {\n options = args[1] || {};\n }\n const createdSpan = plugin._createSpan(url, options);\n if (!createdSpan) {\n return original.apply(this, args);\n }\n const spanData = plugin._prepareSpanData(url);\n\n if (plugin.getConfig().measureRequestSize) {\n getFetchBodyLength(...args)\n .then(bodyLength => {\n if (!bodyLength) return;\n createdSpan.setAttribute(ATTR_HTTP_REQUEST_BODY_SIZE, bodyLength);\n })\n .catch(error => {\n plugin._diag.warn('getFetchBodyLength', error);\n });\n }\n\n function endSpanOnError(span: Span, error: FetchError) {\n plugin._applyAttributesAfterFetch(span, options, error);\n plugin._endSpan(span, spanData, {\n status: error.status || 0,\n statusText: error.message,\n url,\n });\n }\n\n function endSpanOnSuccess(span: Span, response: Response) {\n plugin._applyAttributesAfterFetch(span, options, response);\n if (response.status >= 200 && response.status < 400) {\n plugin._endSpan(span, spanData, response);\n } else {\n plugin._endSpan(span, spanData, {\n status: response.status,\n statusText: response.statusText,\n url,\n });\n }\n }\n\n function onSuccess(span: Span, response: Response): Response {\n try {\n // Clone the response and eagerly consume the clone to detect\n // when the body transfer completes. The original response is\n // returned to the caller untouched so that it passes internal\n // brand-checks required by APIs such as\n // WebAssembly.compileStreaming.\n // TODO: Switch to a consumer-driven model and drop `resClone`.\n // Keeping eager consumption here to preserve current behavior and avoid breaking existing tests.\n // Context: discussion in PR #5894 → https://github.com/open-telemetry/opentelemetry-js/pull/5894\n const resClone = response.clone();\n const body = resClone.body;\n if (body) {\n const reader = body.getReader();\n\n const read = (): void => {\n reader.read().then(\n ({ done }) => {\n if (done) {\n endSpanOnSuccess(span, response);\n } else {\n read();\n }\n },\n error => {\n endSpanOnError(span, error);\n }\n );\n };\n read();\n } else {\n // some older browsers don't have .body implemented\n endSpanOnSuccess(span, response);\n }\n } catch (error) {\n // Setup failed (e.g. clone() or getReader() threw).\n // End the span and clean up so _tasksCount doesn't leak.\n plugin._diag.error('Failed to read fetch response body', error);\n plugin._endSpan(span, spanData, {\n status: 0,\n url,\n });\n }\n return response;\n }\n\n function onError(span: Span, error: FetchError): never {\n try {\n endSpanOnError(span, error);\n } catch (e: unknown) {\n // endSpanOnError failed — fall back to ending the span\n // directly so _tasksCount doesn't leak.\n plugin._diag.error('Failed to end span on fetch error', e);\n plugin._endSpan(span, spanData, {\n status: error.status || 0,\n url,\n });\n }\n\n throw error;\n }\n\n return context.with(\n trace.setSpan(context.active(), createdSpan),\n () => {\n // Call request hook before injection so hooks cannot tamper with propagation headers.\n // Also, this means the hook will see `options.headers` in the same type as passed in,\n // rather than as a `Headers` instance set by `_addHeaders()`.\n plugin._callRequestHook(createdSpan, options);\n plugin._addHeaders(options, url);\n plugin._tasksCount++;\n\n return original\n .apply(\n self,\n options instanceof Request ? [options] : [url, options]\n )\n .then(\n onSuccess.bind(self, createdSpan),\n onError.bind(self, createdSpan)\n );\n }\n );\n };\n };\n }\n\n private _applyAttributesAfterFetch(\n span: Span,\n request: Request | RequestInit,\n result: Response | FetchError\n ) {\n const applyCustomAttributesOnSpan =\n this.getConfig().applyCustomAttributesOnSpan;\n if (applyCustomAttributesOnSpan) {\n safeExecuteInTheMiddle(\n () => applyCustomAttributesOnSpan(span, request, result),\n error => {\n if (!error) {\n return;\n }\n\n this._diag.error('applyCustomAttributesOnSpan', error);\n },\n true\n );\n }\n }\n\n private _callRequestHook(span: Span, request: Request | RequestInit) {\n const requestHook = this.getConfig().requestHook;\n if (requestHook) {\n safeExecuteInTheMiddle(\n () => requestHook(span, request),\n error => {\n if (!error) {\n return;\n }\n\n this._diag.error('requestHook', error);\n },\n true\n );\n }\n }\n\n /**\n * Prepares a span data - needed later for matching appropriate network\n * resources\n * @param spanUrl\n */\n private _prepareSpanData(spanUrl: string): SpanData {\n const startTime = core.hrTime();\n const entries: PerformanceResourceTiming[] = [];\n if (typeof PerformanceObserver !== 'function') {\n return { entries, startTime, spanUrl };\n }\n\n const observer = new PerformanceObserver(list => {\n const perfObsEntries = list.getEntries() as PerformanceResourceTiming[];\n perfObsEntries.forEach(entry => {\n if (entry.initiatorType === 'fetch' && entry.name === spanUrl) {\n entries.push(entry);\n }\n });\n });\n observer.observe({\n entryTypes: ['resource'],\n });\n return { entries, observer, startTime, spanUrl };\n }\n\n /**\n * implements enable function\n */\n override enable(): void {\n if (!hasBrowserPerformanceAPI) {\n this._diag.warn(\n 'this instrumentation is intended for web usage only, it does not instrument server-side fetch()'\n );\n return;\n }\n\n if (this._isEnabled) {\n return;\n }\n\n if (this._isFetchPatched) {\n this._diag.debug('fetch constructor already patched');\n this._isEnabled = true;\n return;\n }\n\n try {\n // `_wrap` throws if a third-party script has locked globalThis.fetch via\n // Object.defineProperty(window, 'fetch', { writable: false, ... }).\n this._wrap(globalThis, 'fetch', this._patchConstructor());\n this._isFetchPatched = true;\n this._isEnabled = true;\n } catch (err) {\n this._diag.warn(\n 'Failed to patch globalThis.fetch; instrumentation will not be enabled. ' +\n 'Another script may have locked globalThis.fetch via Object.defineProperty.',\n err\n );\n }\n }\n\n /**\n * deactivates fetch instrumentation\n */\n override disable(): void {\n if (!hasBrowserPerformanceAPI) {\n return;\n }\n if (!this._isEnabled) {\n return;\n }\n this._isEnabled = false;\n this._usedResources = new WeakSet<PerformanceResourceTiming>();\n }\n}\n"]}
|
|
@@ -1,25 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Deprecated, use one of `server.address`, `client.address` or `http.request.header.host` instead, depending on the usage.
|
|
3
|
-
*
|
|
4
|
-
* @example www.example.org
|
|
5
|
-
*
|
|
6
|
-
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
|
|
7
|
-
*
|
|
8
|
-
* @deprecated Replaced by one of `server.address`, `client.address` or `http.request.header.host`, depending on the usage.
|
|
9
|
-
*/
|
|
10
|
-
export declare const ATTR_HTTP_HOST: "http.host";
|
|
11
|
-
/**
|
|
12
|
-
* Deprecated, use `http.request.method` instead.
|
|
13
|
-
*
|
|
14
|
-
* @example GET
|
|
15
|
-
* @example POST
|
|
16
|
-
* @example HEAD
|
|
17
|
-
*
|
|
18
|
-
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
|
|
19
|
-
*
|
|
20
|
-
* @deprecated Replaced by `http.request.method`.
|
|
21
|
-
*/
|
|
22
|
-
export declare const ATTR_HTTP_METHOD: "http.method";
|
|
23
1
|
/**
|
|
24
2
|
* The size of the request payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) header. For requests using transport encoding, this should be the compressed size.
|
|
25
3
|
*
|
|
@@ -28,66 +6,4 @@ export declare const ATTR_HTTP_METHOD: "http.method";
|
|
|
28
6
|
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
|
|
29
7
|
*/
|
|
30
8
|
export declare const ATTR_HTTP_REQUEST_BODY_SIZE: "http.request.body.size";
|
|
31
|
-
/**
|
|
32
|
-
* Deprecated, use `http.request.body.size` instead.
|
|
33
|
-
*
|
|
34
|
-
* @example 5493
|
|
35
|
-
*
|
|
36
|
-
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
|
|
37
|
-
*
|
|
38
|
-
* @deprecated Replaced by `http.request.body.size`.
|
|
39
|
-
*/
|
|
40
|
-
export declare const ATTR_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED: "http.request_content_length_uncompressed";
|
|
41
|
-
/**
|
|
42
|
-
* Deprecated, use `http.response.header.<key>` instead.
|
|
43
|
-
*
|
|
44
|
-
* @example 3495
|
|
45
|
-
*
|
|
46
|
-
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
|
|
47
|
-
*
|
|
48
|
-
* @deprecated Replaced by `http.response.header.<key>`.
|
|
49
|
-
*/
|
|
50
|
-
export declare const ATTR_HTTP_RESPONSE_CONTENT_LENGTH: "http.response_content_length";
|
|
51
|
-
/**
|
|
52
|
-
* Deprecated, use `url.scheme` instead.
|
|
53
|
-
*
|
|
54
|
-
* @example http
|
|
55
|
-
* @example https
|
|
56
|
-
*
|
|
57
|
-
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
|
|
58
|
-
*
|
|
59
|
-
* @deprecated Replaced by `url.scheme` instead.
|
|
60
|
-
*/
|
|
61
|
-
export declare const ATTR_HTTP_SCHEME: "http.scheme";
|
|
62
|
-
/**
|
|
63
|
-
* Deprecated, use `http.response.status_code` instead.
|
|
64
|
-
*
|
|
65
|
-
* @example 200
|
|
66
|
-
*
|
|
67
|
-
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
|
|
68
|
-
*
|
|
69
|
-
* @deprecated Replaced by `http.response.status_code`.
|
|
70
|
-
*/
|
|
71
|
-
export declare const ATTR_HTTP_STATUS_CODE: "http.status_code";
|
|
72
|
-
/**
|
|
73
|
-
* Deprecated, use `url.full` instead.
|
|
74
|
-
*
|
|
75
|
-
* @example https://www.foo.bar/search?q=OpenTelemetry#SemConv
|
|
76
|
-
*
|
|
77
|
-
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
|
|
78
|
-
*
|
|
79
|
-
* @deprecated Replaced by `url.full`.
|
|
80
|
-
*/
|
|
81
|
-
export declare const ATTR_HTTP_URL: "http.url";
|
|
82
|
-
/**
|
|
83
|
-
* Deprecated, use `user_agent.original` instead.
|
|
84
|
-
*
|
|
85
|
-
* @example CERN-LineMode/2.15 libwww/2.17b3
|
|
86
|
-
* @example Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1
|
|
87
|
-
*
|
|
88
|
-
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
|
|
89
|
-
*
|
|
90
|
-
* @deprecated Replaced by `user_agent.original`.
|
|
91
|
-
*/
|
|
92
|
-
export declare const ATTR_HTTP_USER_AGENT: "http.user_agent";
|
|
93
9
|
//# sourceMappingURL=semconv.d.ts.map
|
package/build/esnext/semconv.js
CHANGED
|
@@ -7,28 +7,6 @@
|
|
|
7
7
|
* used by this package.
|
|
8
8
|
* @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv
|
|
9
9
|
*/
|
|
10
|
-
/**
|
|
11
|
-
* Deprecated, use one of `server.address`, `client.address` or `http.request.header.host` instead, depending on the usage.
|
|
12
|
-
*
|
|
13
|
-
* @example www.example.org
|
|
14
|
-
*
|
|
15
|
-
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
|
|
16
|
-
*
|
|
17
|
-
* @deprecated Replaced by one of `server.address`, `client.address` or `http.request.header.host`, depending on the usage.
|
|
18
|
-
*/
|
|
19
|
-
export const ATTR_HTTP_HOST = 'http.host';
|
|
20
|
-
/**
|
|
21
|
-
* Deprecated, use `http.request.method` instead.
|
|
22
|
-
*
|
|
23
|
-
* @example GET
|
|
24
|
-
* @example POST
|
|
25
|
-
* @example HEAD
|
|
26
|
-
*
|
|
27
|
-
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
|
|
28
|
-
*
|
|
29
|
-
* @deprecated Replaced by `http.request.method`.
|
|
30
|
-
*/
|
|
31
|
-
export const ATTR_HTTP_METHOD = 'http.method';
|
|
32
10
|
/**
|
|
33
11
|
* The size of the request payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) header. For requests using transport encoding, this should be the compressed size.
|
|
34
12
|
*
|
|
@@ -37,66 +15,4 @@ export const ATTR_HTTP_METHOD = 'http.method';
|
|
|
37
15
|
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
|
|
38
16
|
*/
|
|
39
17
|
export const ATTR_HTTP_REQUEST_BODY_SIZE = 'http.request.body.size';
|
|
40
|
-
/**
|
|
41
|
-
* Deprecated, use `http.request.body.size` instead.
|
|
42
|
-
*
|
|
43
|
-
* @example 5493
|
|
44
|
-
*
|
|
45
|
-
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
|
|
46
|
-
*
|
|
47
|
-
* @deprecated Replaced by `http.request.body.size`.
|
|
48
|
-
*/
|
|
49
|
-
export const ATTR_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED = 'http.request_content_length_uncompressed';
|
|
50
|
-
/**
|
|
51
|
-
* Deprecated, use `http.response.header.<key>` instead.
|
|
52
|
-
*
|
|
53
|
-
* @example 3495
|
|
54
|
-
*
|
|
55
|
-
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
|
|
56
|
-
*
|
|
57
|
-
* @deprecated Replaced by `http.response.header.<key>`.
|
|
58
|
-
*/
|
|
59
|
-
export const ATTR_HTTP_RESPONSE_CONTENT_LENGTH = 'http.response_content_length';
|
|
60
|
-
/**
|
|
61
|
-
* Deprecated, use `url.scheme` instead.
|
|
62
|
-
*
|
|
63
|
-
* @example http
|
|
64
|
-
* @example https
|
|
65
|
-
*
|
|
66
|
-
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
|
|
67
|
-
*
|
|
68
|
-
* @deprecated Replaced by `url.scheme` instead.
|
|
69
|
-
*/
|
|
70
|
-
export const ATTR_HTTP_SCHEME = 'http.scheme';
|
|
71
|
-
/**
|
|
72
|
-
* Deprecated, use `http.response.status_code` instead.
|
|
73
|
-
*
|
|
74
|
-
* @example 200
|
|
75
|
-
*
|
|
76
|
-
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
|
|
77
|
-
*
|
|
78
|
-
* @deprecated Replaced by `http.response.status_code`.
|
|
79
|
-
*/
|
|
80
|
-
export const ATTR_HTTP_STATUS_CODE = 'http.status_code';
|
|
81
|
-
/**
|
|
82
|
-
* Deprecated, use `url.full` instead.
|
|
83
|
-
*
|
|
84
|
-
* @example https://www.foo.bar/search?q=OpenTelemetry#SemConv
|
|
85
|
-
*
|
|
86
|
-
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
|
|
87
|
-
*
|
|
88
|
-
* @deprecated Replaced by `url.full`.
|
|
89
|
-
*/
|
|
90
|
-
export const ATTR_HTTP_URL = 'http.url';
|
|
91
|
-
/**
|
|
92
|
-
* Deprecated, use `user_agent.original` instead.
|
|
93
|
-
*
|
|
94
|
-
* @example CERN-LineMode/2.15 libwww/2.17b3
|
|
95
|
-
* @example Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1
|
|
96
|
-
*
|
|
97
|
-
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
|
|
98
|
-
*
|
|
99
|
-
* @deprecated Replaced by `user_agent.original`.
|
|
100
|
-
*/
|
|
101
|
-
export const ATTR_HTTP_USER_AGENT = 'http.user_agent';
|
|
102
18
|
//# sourceMappingURL=semconv.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semconv.js","sourceRoot":"","sources":["../../src/semconv.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AAEH
|
|
1
|
+
{"version":3,"file":"semconv.js","sourceRoot":"","sources":["../../src/semconv.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,wBAAiC,CAAC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/*\n * This file contains a copy of unstable semantic convention definitions\n * used by this package.\n * @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n */\n\n/**\n * The size of the request payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) header. For requests using transport encoding, this should be the compressed size.\n *\n * @example 3495\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_HTTP_REQUEST_BODY_SIZE = 'http.request.body.size' as const;\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.
|
|
1
|
+
export declare const VERSION = "0.221.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/build/esnext/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,4DAA4D;AAC5D,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// this is autogenerated file, see scripts/version-update.js\nexport const VERSION = '0.
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,4DAA4D;AAC5D,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// this is autogenerated file, see scripts/version-update.js\nexport const VERSION = '0.221.0';\n"]}
|
package/build/src/fetch.d.ts
CHANGED
|
@@ -28,8 +28,6 @@ export interface FetchInstrumentationConfig extends InstrumentationConfig {
|
|
|
28
28
|
ignoreNetworkEvents?: boolean;
|
|
29
29
|
/** Measure outgoing request size */
|
|
30
30
|
measureRequestSize?: boolean;
|
|
31
|
-
/** Select the HTTP semantic conventions version(s) used. */
|
|
32
|
-
semconvStabilityOptIn?: string;
|
|
33
31
|
}
|
|
34
32
|
/**
|
|
35
33
|
* This class represents a fetch plugin for auto instrumentation
|
|
@@ -40,7 +38,6 @@ export declare class FetchInstrumentation extends InstrumentationBase<FetchInstr
|
|
|
40
38
|
moduleName: string;
|
|
41
39
|
private _usedResources;
|
|
42
40
|
private _tasksCount;
|
|
43
|
-
private _semconvStability;
|
|
44
41
|
private _isEnabled;
|
|
45
42
|
private _isFetchPatched;
|
|
46
43
|
constructor(config?: FetchInstrumentationConfig);
|