Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions experimental/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ For notes on migrating to 2.x / 0.200.x see [the upgrade guide](doc/upgrade-to-2

### :house: Internal

* refactor(web-common, instrumentation-fetch, instrumentation-xml-http-request): move utils from `@opentelemetry/sdk-trace-web`
into `@opentelemetry/web-common` and use them in `@opentelemetry/instrumentation-fetch` and `@opentelemetry/instrumentation-xml-http-request`.
With this change the instrumentations do not depend on SDK packages an the utils are kept in a shared package so we avoid code duplication.

## 0.222.0

### :boom: Breaking Changes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,8 @@
"dependencies": {
"@opentelemetry/core": "2.11.0",
"@opentelemetry/instrumentation": "0.222.0",
"@opentelemetry/sdk-trace-web": "2.11.0",
"@opentelemetry/semantic-conventions": "^1.29.0"
"@opentelemetry/semantic-conventions": "^1.29.0",
"@opentelemetry/web-common": "0.222.0"
},
"homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-fetch",
"sideEffects": false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import {
safeExecuteInTheMiddle,
} from '@opentelemetry/instrumentation';
import * as core from '@opentelemetry/core';
import * as web from '@opentelemetry/sdk-trace-web';
import * as web from '@opentelemetry/web-common';
import { ATTR_HTTP_REQUEST_BODY_SIZE } from './semconv';
import {
ATTR_ERROR_TYPE,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

import { diag } from '@opentelemetry/api';
import { getStringListFromEnv } from '@opentelemetry/core';
import type { URLLike } from '@opentelemetry/sdk-trace-web';
import type { URLLike } from '@opentelemetry/web-common';

const DIAG_LOGGER = diag.createComponentLogger({
namespace: '@opentelemetry/opentelemetry-instrumentation-fetch/utils',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,8 @@ import {
} from '@opentelemetry/propagator-b3';
import { ZoneContextManager } from '@opentelemetry/context-zone';
import * as tracing from '@opentelemetry/sdk-trace';
import {
PerformanceTimingNames as PTN,
WebTracerProvider,
} from '@opentelemetry/sdk-trace-web';
import { PerformanceTimingNames as PTN } from '@opentelemetry/web-common';
import { TracerProvider } from '@opentelemetry/sdk-trace';
import * as assert from 'assert';
import * as sinon from 'sinon';
import type {
Expand Down Expand Up @@ -334,7 +332,7 @@ describe('fetch', () => {
const fetchInstrumentation: FetchInstrumentation =
new FetchInstrumentation(config);
const dummySpanExporter = new DummySpanExporter();
const webTracerProviderWithZone = new WebTracerProvider({
const webTracerProviderWithZone = new TracerProvider({
spanProcessors: [
new tracing.SimpleSpanProcessor({ exporter: dummySpanExporter }),
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,6 @@
{
"path": "../../../packages/opentelemetry-propagator-b3"
},
{
"path": "../../../packages/opentelemetry-sdk-trace-web"
},
{
"path": "../../../packages/sdk-trace"
},
Expand All @@ -38,6 +35,9 @@
},
{
"path": "../opentelemetry-instrumentation"
},
{
"path": "../web-common"
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,8 @@
"dependencies": {
"@opentelemetry/core": "2.11.0",
"@opentelemetry/instrumentation": "0.222.0",
"@opentelemetry/sdk-trace-web": "2.11.0",
"@opentelemetry/semantic-conventions": "^1.29.0"
"@opentelemetry/semantic-conventions": "^1.29.0",
"@opentelemetry/web-common": "0.222.0"
},
"homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-xml-http-request",
"sideEffects": false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

import * as api from '@opentelemetry/api';
import { getStringListFromEnv } from '@opentelemetry/core';
import type { URLLike } from '@opentelemetry/sdk-trace-web';
import type { URLLike } from '@opentelemetry/web-common';

const DIAG_LOGGER = api.diag.createComponentLogger({
namespace:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import {
PerformanceTimingNames as PTN,
shouldPropagateTraceHeaders,
parseUrl,
} from '@opentelemetry/sdk-trace-web';
} from '@opentelemetry/web-common';
import {
ATTR_ERROR_TYPE,
ATTR_HTTP_REQUEST_METHOD,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import type { Span } from '@opentelemetry/api';
import { registerInstrumentations } from '@opentelemetry/instrumentation';
import type { ReadableSpan, SpanProcessor } from '@opentelemetry/sdk-trace';
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
import { TracerProvider } from '@opentelemetry/sdk-trace';
import { XMLHttpRequestInstrumentation } from '../src';
import * as assert from 'assert';

Expand All @@ -27,10 +27,10 @@ class TestSpanProcessor implements SpanProcessor {

describe('unmocked xhr', () => {
let testSpans: TestSpanProcessor;
let provider: WebTracerProvider;
let provider: TracerProvider;
beforeEach(() => {
testSpans = new TestSpanProcessor();
provider = new WebTracerProvider({
provider = new TracerProvider({
spanProcessors: [testSpans],
});
registerInstrumentations({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ import { ZoneContextManager } from '@opentelemetry/context-zone';
import * as tracing from '@opentelemetry/sdk-trace';
import {
PerformanceTimingNames as PTN,
WebTracerProvider,
parseUrl,
} from '@opentelemetry/sdk-trace-web';
} from '@opentelemetry/web-common';
import { TracerProvider } from '@opentelemetry/sdk-trace';
import * as assert from 'assert';
import * as sinon from 'sinon';
import { ATTR_HTTP_REQUEST_BODY_SIZE } from '../src/semconv';
Expand Down Expand Up @@ -293,7 +293,7 @@ describe('xhr', () => {
let requests: any[] = [];
let contextManager: ZoneContextManager;
let webTracerWithZone: api.Tracer;
let webTracerProviderWithZone: WebTracerProvider;
let webTracerProviderWithZone: TracerProvider;
let dummySpanExporter: DummySpanExporter;
let spyEntries: any;
let fakeNow = 0;
Expand Down Expand Up @@ -352,7 +352,7 @@ describe('xhr', () => {
...config,
});
dummySpanExporter = new DummySpanExporter();
webTracerProviderWithZone = new WebTracerProvider({
webTracerProviderWithZone = new TracerProvider({
spanProcessors: [
new tracing.SimpleSpanProcessor({ exporter: dummySpanExporter }),
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,6 @@
{
"path": "../../../packages/opentelemetry-propagator-b3"
},
{
"path": "../../../packages/opentelemetry-sdk-trace-web"
},
{
"path": "../../../packages/sdk-trace"
},
Expand All @@ -38,6 +35,9 @@
},
{
"path": "../opentelemetry-instrumentation"
},
{
"path": "../web-common"
}
]
}
1 change: 1 addition & 0 deletions experimental/packages/web-common/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
"@opentelemetry/api": ">=1.4.0 <1.10.0"
},
"dependencies": {
"@opentelemetry/core": "2.11.0",
"@opentelemetry/sdk-logs": "0.222.0",
"@opentelemetry/sdk-trace": "2.11.0",
"@opentelemetry/semantic-conventions": "^1.29.0"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

export enum PerformanceTimingNames {
CONNECT_END = 'connectEnd',
CONNECT_START = 'connectStart',
DECODED_BODY_SIZE = 'decodedBodySize',
DOM_COMPLETE = 'domComplete',
DOM_CONTENT_LOADED_EVENT_END = 'domContentLoadedEventEnd',
DOM_CONTENT_LOADED_EVENT_START = 'domContentLoadedEventStart',
DOM_INTERACTIVE = 'domInteractive',
DOMAIN_LOOKUP_END = 'domainLookupEnd',
DOMAIN_LOOKUP_START = 'domainLookupStart',
ENCODED_BODY_SIZE = 'encodedBodySize',
FETCH_START = 'fetchStart',
LOAD_EVENT_END = 'loadEventEnd',
LOAD_EVENT_START = 'loadEventStart',
NAVIGATION_START = 'navigationStart',
REDIRECT_END = 'redirectEnd',
REDIRECT_START = 'redirectStart',
REQUEST_START = 'requestStart',
RESPONSE_END = 'responseEnd',
RESPONSE_START = 'responseStart',
SECURE_CONNECTION_START = 'secureConnectionStart',
START_TIME = 'startTime',
UNLOAD_EVENT_END = 'unloadEventEnd',
UNLOAD_EVENT_START = 'unloadEventStart',
}
22 changes: 22 additions & 0 deletions experimental/packages/web-common/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,25 @@ export type { SessionIdGenerator } from './types/SessionIdGenerator';
export type { SessionPublisher } from './types/SessionPublisher';
export type { SessionObserver } from './types/SessionObserver';
export type { SessionStore } from './types/SessionStore';

export type {
PerformanceEntries,
PerformanceLegacy,
PerformanceResourceTimingInfo,
} from './types/Performance';
export type {
PropagateTraceHeaderCorsUrls,
URLLike,
} from './utils-resource-timings';
export { PerformanceTimingNames } from './enums/PerformanceTimingNames';
export {
addSpanNetworkEvent,
addSpanNetworkEvents,
getElementXPath,
getResource,
hasKey,
normalizeUrl,
parseUrl,
shouldPropagateTraceHeaders,
sortResources,
} from './utils-resource-timings';
30 changes: 30 additions & 0 deletions experimental/packages/web-common/src/semconv.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,33 @@
* @example "00112233-4455-6677-8899-aabbccddeeff"
*/
export const ATTR_SESSION_ID = 'session.id' as const;

/*
* This file contains a copy of unstable semantic convention definitions
* used by this package.
* @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv
*/

/**
* Deprecated, use `http.response.header.<key>` instead.
*
* @example 3495
*
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
*
* @deprecated Replaced by `http.response.header.<key>`.
*/
export const ATTR_HTTP_RESPONSE_CONTENT_LENGTH =
'http.response_content_length' as const;

/**
* Deprecated, use `http.response.body.size` instead.
*
* @example 5493
*
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
*
* @deprecated Replace by `http.response.body.size`.
*/
export const ATTR_HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED =
'http.response_content_length_uncompressed' as const;
48 changes: 48 additions & 0 deletions experimental/packages/web-common/src/types/Performance.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

import type { PerformanceTimingNames } from '../enums/PerformanceTimingNames';

export type PerformanceEntries = {
[PerformanceTimingNames.CONNECT_END]?: number;
[PerformanceTimingNames.CONNECT_START]?: number;
[PerformanceTimingNames.DECODED_BODY_SIZE]?: number;
[PerformanceTimingNames.DOM_COMPLETE]?: number;
[PerformanceTimingNames.DOM_CONTENT_LOADED_EVENT_END]?: number;
[PerformanceTimingNames.DOM_CONTENT_LOADED_EVENT_START]?: number;
[PerformanceTimingNames.DOM_INTERACTIVE]?: number;
[PerformanceTimingNames.DOMAIN_LOOKUP_END]?: number;
[PerformanceTimingNames.DOMAIN_LOOKUP_START]?: number;
[PerformanceTimingNames.ENCODED_BODY_SIZE]?: number;
[PerformanceTimingNames.FETCH_START]?: number;
[PerformanceTimingNames.LOAD_EVENT_END]?: number;
[PerformanceTimingNames.LOAD_EVENT_START]?: number;
[PerformanceTimingNames.REDIRECT_END]?: number;
[PerformanceTimingNames.REDIRECT_START]?: number;
[PerformanceTimingNames.REQUEST_START]?: number;
[PerformanceTimingNames.RESPONSE_END]?: number;
[PerformanceTimingNames.RESPONSE_START]?: number;
[PerformanceTimingNames.SECURE_CONNECTION_START]?: number;
[PerformanceTimingNames.START_TIME]?: number;
[PerformanceTimingNames.UNLOAD_EVENT_END]?: number;
[PerformanceTimingNames.UNLOAD_EVENT_START]?: number;
};

/**
* This interface defines a fallback to read performance metrics,
* this happens for example on Safari Mac
*/
export interface PerformanceLegacy {
timing?: PerformanceEntries;
}

/**
* This interface is used in {@link getResource} function to return
* main request and it's corresponding PreFlight request
*/
export interface PerformanceResourceTimingInfo {
corsPreFlightRequest?: PerformanceResourceTiming;
mainRequest?: PerformanceResourceTiming;
}
Loading