From 707570c650c42f3f6c2ebe1636829388d59a7525 Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Tue, 16 Jan 2024 11:20:39 -0500 Subject: [PATCH 01/24] add span domain to span data --- packages/tracing-internal/src/browser/metrics/index.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/tracing-internal/src/browser/metrics/index.ts b/packages/tracing-internal/src/browser/metrics/index.ts index 7525653e8b2f..18e521b55219 100644 --- a/packages/tracing-internal/src/browser/metrics/index.ts +++ b/packages/tracing-internal/src/browser/metrics/index.ts @@ -226,7 +226,8 @@ export function addPerformanceEntries(transaction: Transaction): void { } case 'resource': { const resourceName = (entry.name as string).replace(WINDOW.location.origin, ''); - _addResourceSpans(transaction, entry, resourceName, startTime, duration, timeOrigin); + const resourceOrigin = new URL(entry.name as string).origin; + _addResourceSpans(transaction, entry, resourceName, resourceOrigin, startTime, duration, timeOrigin); break; } default: @@ -402,6 +403,7 @@ export function _addResourceSpans( transaction: Transaction, entry: ResourceEntry, resourceName: string, + resourceOrigin: string, startTime: number, duration: number, timeOrigin: number, @@ -420,6 +422,9 @@ export function _addResourceSpans( if ('renderBlockingStatus' in entry) { data['resource.render_blocking_status'] = entry.renderBlockingStatus; } + if (resourceOrigin) { + data['span.domain'] = resourceOrigin; + } const startTimestamp = timeOrigin + startTime; const endTimestamp = startTimestamp + duration; From 5296648b43bf283de0de938d834df1ba21f325db Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Wed, 17 Jan 2024 11:29:38 -0500 Subject: [PATCH 02/24] update data --- .../src/browser/metrics/index.ts | 18 ++++++++++++------ packages/utils/src/url.ts | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/packages/tracing-internal/src/browser/metrics/index.ts b/packages/tracing-internal/src/browser/metrics/index.ts index 18e521b55219..018219664f04 100644 --- a/packages/tracing-internal/src/browser/metrics/index.ts +++ b/packages/tracing-internal/src/browser/metrics/index.ts @@ -3,7 +3,7 @@ import type { IdleTransaction, Transaction } from '@sentry/core'; import { spanToJSON } from '@sentry/core'; import { getActiveTransaction, setMeasurement } from '@sentry/core'; import type { Measurements, SpanContext } from '@sentry/types'; -import { browserPerformanceTimeOrigin, getComponentName, htmlTreeAsString, logger } from '@sentry/utils'; +import { browserPerformanceTimeOrigin, getComponentName, htmlTreeAsString, logger, parseUrl } from '@sentry/utils'; import { DEBUG_BUILD } from '../../common/debug-build'; import { @@ -226,8 +226,8 @@ export function addPerformanceEntries(transaction: Transaction): void { } case 'resource': { const resourceName = (entry.name as string).replace(WINDOW.location.origin, ''); - const resourceOrigin = new URL(entry.name as string).origin; - _addResourceSpans(transaction, entry, resourceName, resourceOrigin, startTime, duration, timeOrigin); + const resourceUrl = parseUrl(entry.name as string); + _addResourceSpans(transaction, entry, resourceName, resourceUrl, startTime, duration, timeOrigin); break; } default: @@ -403,7 +403,7 @@ export function _addResourceSpans( transaction: Transaction, entry: ResourceEntry, resourceName: string, - resourceOrigin: string, + resourceUrl: ReturnType, startTime: number, duration: number, timeOrigin: number, @@ -422,10 +422,16 @@ export function _addResourceSpans( if ('renderBlockingStatus' in entry) { data['resource.render_blocking_status'] = entry.renderBlockingStatus; } - if (resourceOrigin) { - data['span.domain'] = resourceOrigin; + if (resourceUrl.protocol) { + data['url.scheme'] = resourceUrl.protocol; } + if (resourceUrl.host) { + data['server.address'] = resourceUrl.host; + } + + data['url.same_origin'] = resourceUrl.host === window.location.host; + const startTimestamp = timeOrigin + startTime; const endTimestamp = startTimestamp + duration; diff --git a/packages/utils/src/url.ts b/packages/utils/src/url.ts index d5d773e27389..6c0c81b6bac1 100644 --- a/packages/utils/src/url.ts +++ b/packages/utils/src/url.ts @@ -1,4 +1,4 @@ -type PartialURL = { +export type PartialURL = { host?: string; path?: string; protocol?: string; From 999dd9f01dfeb0d2966a9275811361e6dacfe476 Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Wed, 17 Jan 2024 11:30:40 -0500 Subject: [PATCH 03/24] update --- packages/tracing-internal/src/browser/metrics/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tracing-internal/src/browser/metrics/index.ts b/packages/tracing-internal/src/browser/metrics/index.ts index 018219664f04..f1d7b2da4c64 100644 --- a/packages/tracing-internal/src/browser/metrics/index.ts +++ b/packages/tracing-internal/src/browser/metrics/index.ts @@ -430,7 +430,7 @@ export function _addResourceSpans( data['server.address'] = resourceUrl.host; } - data['url.same_origin'] = resourceUrl.host === window.location.host; + data['url.same_origin'] = resourceUrl.host === WINDOW.location.host; const startTimestamp = timeOrigin + startTime; const endTimestamp = startTimestamp + duration; From 28d0fef1aadf85371cdfd308eac0664329d6bc29 Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Wed, 17 Jan 2024 11:36:18 -0500 Subject: [PATCH 04/24] refactor --- .../src/browser/metrics/index.ts | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/tracing-internal/src/browser/metrics/index.ts b/packages/tracing-internal/src/browser/metrics/index.ts index f1d7b2da4c64..b4ffebf8a9f7 100644 --- a/packages/tracing-internal/src/browser/metrics/index.ts +++ b/packages/tracing-internal/src/browser/metrics/index.ts @@ -225,9 +225,7 @@ export function addPerformanceEntries(transaction: Transaction): void { break; } case 'resource': { - const resourceName = (entry.name as string).replace(WINDOW.location.origin, ''); - const resourceUrl = parseUrl(entry.name as string); - _addResourceSpans(transaction, entry, resourceName, resourceUrl, startTime, duration, timeOrigin); + _addResourceSpans(transaction, entry, entry.name as string, startTime, duration, timeOrigin); break; } default: @@ -402,8 +400,7 @@ export interface ResourceEntry extends Record { export function _addResourceSpans( transaction: Transaction, entry: ResourceEntry, - resourceName: string, - resourceUrl: ReturnType, + resourceUrl: string, startTime: number, duration: number, timeOrigin: number, @@ -414,29 +411,32 @@ export function _addResourceSpans( return; } + const parsedUrl = parseUrl(resourceUrl); + // eslint-disable-next-line @typescript-eslint/no-explicit-any const data: Record = {}; setResourceEntrySizeData(data, entry, 'transferSize', 'http.response_transfer_size'); setResourceEntrySizeData(data, entry, 'encodedBodySize', 'http.response_content_length'); setResourceEntrySizeData(data, entry, 'decodedBodySize', 'http.decoded_response_content_length'); + if ('renderBlockingStatus' in entry) { data['resource.render_blocking_status'] = entry.renderBlockingStatus; } - if (resourceUrl.protocol) { - data['url.scheme'] = resourceUrl.protocol; + if (parsedUrl.protocol) { + data['url.scheme'] = parsedUrl.protocol; } - if (resourceUrl.host) { - data['server.address'] = resourceUrl.host; + if (parsedUrl.host) { + data['server.address'] = parsedUrl.host; } - data['url.same_origin'] = resourceUrl.host === WINDOW.location.host; + data['url.same_origin'] = resourceUrl.includes(WINDOW.location.origin); const startTimestamp = timeOrigin + startTime; const endTimestamp = startTimestamp + duration; _startChild(transaction, { - description: resourceName, + description: resourceUrl.replace(WINDOW.location.origin, ''), endTimestamp, op: entry.initiatorType ? `resource.${entry.initiatorType}` : 'resource.other', origin: 'auto.resource.browser.metrics', From db5473b8c49bc54585a248c6052444693643eaff Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Wed, 17 Jan 2024 11:36:33 -0500 Subject: [PATCH 05/24] update --- packages/utils/src/url.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/utils/src/url.ts b/packages/utils/src/url.ts index 6c0c81b6bac1..d5d773e27389 100644 --- a/packages/utils/src/url.ts +++ b/packages/utils/src/url.ts @@ -1,4 +1,4 @@ -export type PartialURL = { +type PartialURL = { host?: string; path?: string; protocol?: string; From df84b36b5ccb9051f4e5632ec01984ecd32a1026 Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Wed, 17 Jan 2024 16:12:41 -0500 Subject: [PATCH 06/24] add tests --- .../test/browser/metrics/index.test.ts | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/packages/tracing-internal/test/browser/metrics/index.test.ts b/packages/tracing-internal/test/browser/metrics/index.test.ts index f24b6ce4b45a..213d3188de24 100644 --- a/packages/tracing-internal/test/browser/metrics/index.test.ts +++ b/packages/tracing-internal/test/browser/metrics/index.test.ts @@ -1,6 +1,23 @@ +import { GLOBAL_OBJ } from '@sentry/utils'; import { Transaction } from '../../../src'; import type { ResourceEntry } from '../../../src/browser/metrics'; import { _addMeasureSpans, _addResourceSpans } from '../../../src/browser/metrics'; +import { WINDOW } from '../../../src/browser/types'; + +const mockWindowLocation = { + ancestorOrigins: {}, + href: "https://github.com/getsentry/sentry-javascript/pull/10205/files", + origin: "https://github.com", + protocol: "https:", + host: "github.com", + hostname: "github.com", + port: "", + pathname: "/getsentry/sentry-javascript/pull/10205/files", + search: "", + hash: "" +} as Window['location']; + +WINDOW.location = mockWindowLocation; describe('_addMeasureSpans', () => { // eslint-disable-next-line deprecation/deprecation @@ -100,6 +117,9 @@ describe('_addResourceSpans', () => { ['http.response_content_length']: entry.encodedBodySize, ['http.response_transfer_size']: entry.transferSize, ['resource.render_blocking_status']: entry.renderBlockingStatus, + ['url.scheme']: WINDOW.location.protocol, + ['server.address']: WINDOW.location.host, + ['url.same_origin']: false, }, description: '/assets/to/css', endTimestamp: timeOrigin + startTime + duration, From f7c4d1355f58b950d42d98c8e1e7f1617fb18363 Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Wed, 17 Jan 2024 16:18:44 -0500 Subject: [PATCH 07/24] fix tests --- .../test/browser/metrics/index.test.ts | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/packages/tracing-internal/test/browser/metrics/index.test.ts b/packages/tracing-internal/test/browser/metrics/index.test.ts index 213d3188de24..78dc4f52ad43 100644 --- a/packages/tracing-internal/test/browser/metrics/index.test.ts +++ b/packages/tracing-internal/test/browser/metrics/index.test.ts @@ -1,4 +1,4 @@ -import { GLOBAL_OBJ } from '@sentry/utils'; +import { GLOBAL_OBJ, parseUrl } from '@sentry/utils'; import { Transaction } from '../../../src'; import type { ResourceEntry } from '../../../src/browser/metrics'; import { _addMeasureSpans, _addResourceSpans } from '../../../src/browser/metrics'; @@ -6,19 +6,21 @@ import { WINDOW } from '../../../src/browser/types'; const mockWindowLocation = { ancestorOrigins: {}, - href: "https://github.com/getsentry/sentry-javascript/pull/10205/files", - origin: "https://github.com", + href: "https://example.com/path/to/something", + origin: "https://example.com", protocol: "https:", - host: "github.com", - hostname: "github.com", + host: "example.com", + hostname: "example.com", port: "", - pathname: "/getsentry/sentry-javascript/pull/10205/files", + pathname: "/path/to/something", search: "", hash: "" } as Window['location']; WINDOW.location = mockWindowLocation; +const resourceEntryName = 'https://example.com/assets/to/css'; + describe('_addMeasureSpans', () => { // eslint-disable-next-line deprecation/deprecation const transaction = new Transaction({ op: 'pageload', name: '/' }); @@ -73,7 +75,7 @@ describe('_addResourceSpans', () => { decodedBodySize: 256, renderBlockingStatus: 'non-blocking', }; - _addResourceSpans(transaction, entry, '/assets/to/me', 123, 456, 100); + _addResourceSpans(transaction, entry, resourceEntryName, 123, 456, 100); // eslint-disable-next-line @typescript-eslint/unbound-method, deprecation/deprecation expect(transaction.startChild).toHaveBeenCalledTimes(0); @@ -87,7 +89,7 @@ describe('_addResourceSpans', () => { decodedBodySize: 256, renderBlockingStatus: 'non-blocking', }; - _addResourceSpans(transaction, entry, '/assets/to/me', 123, 456, 100); + _addResourceSpans(transaction, entry, 'https://example.com/assets/to/me', 123, 456, 100); // eslint-disable-next-line @typescript-eslint/unbound-method, deprecation/deprecation expect(transaction.startChild).toHaveBeenCalledTimes(0); @@ -106,7 +108,7 @@ describe('_addResourceSpans', () => { const startTime = 23; const duration = 356; - _addResourceSpans(transaction, entry, '/assets/to/css', startTime, duration, timeOrigin); + _addResourceSpans(transaction, entry, resourceEntryName, startTime, duration, timeOrigin); // eslint-disable-next-line @typescript-eslint/unbound-method, deprecation/deprecation expect(transaction.startChild).toHaveBeenCalledTimes(1); @@ -117,9 +119,9 @@ describe('_addResourceSpans', () => { ['http.response_content_length']: entry.encodedBodySize, ['http.response_transfer_size']: entry.transferSize, ['resource.render_blocking_status']: entry.renderBlockingStatus, - ['url.scheme']: WINDOW.location.protocol, - ['server.address']: WINDOW.location.host, - ['url.same_origin']: false, + ['url.scheme']: 'https:', + ['server.address']: 'example.com', + ['url.same_origin']: true, }, description: '/assets/to/css', endTimestamp: timeOrigin + startTime + duration, @@ -157,7 +159,7 @@ describe('_addResourceSpans', () => { const entry: ResourceEntry = { initiatorType, }; - _addResourceSpans(transaction, entry, '/assets/to/me', 123, 234, 465); + _addResourceSpans(transaction, entry, 'https://example.com/assets/to/me', 123, 234, 465); // eslint-disable-next-line @typescript-eslint/unbound-method, deprecation/deprecation expect(transaction.startChild).toHaveBeenLastCalledWith( @@ -177,7 +179,7 @@ describe('_addResourceSpans', () => { renderBlockingStatus: 'non-blocking', }; - _addResourceSpans(transaction, entry, '/assets/to/css', 100, 23, 345); + _addResourceSpans(transaction, entry, resourceEntryName, 100, 23, 345); // eslint-disable-next-line @typescript-eslint/unbound-method, deprecation/deprecation expect(transaction.startChild).toHaveBeenCalledTimes(1); @@ -189,6 +191,7 @@ describe('_addResourceSpans', () => { ['http.response_content_length']: entry.encodedBodySize, ['http.response_transfer_size']: entry.transferSize, ['resource.render_blocking_status']: entry.renderBlockingStatus, + ['resource.render_blocking_status']: entry.renderBlockingStatus, }, }), ); @@ -202,7 +205,7 @@ describe('_addResourceSpans', () => { decodedBodySize: 2147483647, }; - _addResourceSpans(transaction, entry, '/assets/to/css', 100, 23, 345); + _addResourceSpans(transaction, entry, resourceEntryName, 100, 23, 345); // eslint-disable-next-line @typescript-eslint/unbound-method, deprecation/deprecation expect(transaction.startChild).toHaveBeenCalledTimes(1); @@ -224,7 +227,7 @@ describe('_addResourceSpans', () => { decodedBodySize: null, } as unknown as ResourceEntry; - _addResourceSpans(transaction, entry, '/assets/to/css', 100, 23, 345); + _addResourceSpans(transaction, entry, resourceEntryName, 100, 23, 345); // eslint-disable-next-line @typescript-eslint/unbound-method, deprecation/deprecation expect(transaction.startChild).toHaveBeenCalledTimes(1); From 797828d68a9f9d209c2fa16a4ccf061449bcfd8c Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Wed, 17 Jan 2024 16:30:03 -0500 Subject: [PATCH 08/24] fix failure --- packages/tracing-internal/test/browser/metrics/index.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/tracing-internal/test/browser/metrics/index.test.ts b/packages/tracing-internal/test/browser/metrics/index.test.ts index 78dc4f52ad43..50efac903642 100644 --- a/packages/tracing-internal/test/browser/metrics/index.test.ts +++ b/packages/tracing-internal/test/browser/metrics/index.test.ts @@ -191,7 +191,9 @@ describe('_addResourceSpans', () => { ['http.response_content_length']: entry.encodedBodySize, ['http.response_transfer_size']: entry.transferSize, ['resource.render_blocking_status']: entry.renderBlockingStatus, - ['resource.render_blocking_status']: entry.renderBlockingStatus, + ['url.scheme']: 'https:', + ['server.address']: 'example.com', + ['url.same_origin']: true, }, }), ); From e92abb92249ba08d78a878fd15b614799b92b370 Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Wed, 17 Jan 2024 16:49:47 -0500 Subject: [PATCH 09/24] fix test --- .../tracing-internal/test/browser/metrics/index.test.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/tracing-internal/test/browser/metrics/index.test.ts b/packages/tracing-internal/test/browser/metrics/index.test.ts index 50efac903642..b9ca22756829 100644 --- a/packages/tracing-internal/test/browser/metrics/index.test.ts +++ b/packages/tracing-internal/test/browser/metrics/index.test.ts @@ -236,7 +236,12 @@ describe('_addResourceSpans', () => { // eslint-disable-next-line @typescript-eslint/unbound-method, deprecation/deprecation expect(transaction.startChild).toHaveBeenLastCalledWith( expect.objectContaining({ - data: {}, + data: { "server.address": "example.com", "url.same_origin": true, "url.scheme": "https" }, + "description": "/assets/to/css", + "endTimestamp": 468, + "op": "resource.css", + "origin": "auto.resource.browser.metrics", + "startTimestamp": 445, }), ); }); From 55e6244d8bbeffbb1d524dbb4f2d39e999857c02 Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Wed, 17 Jan 2024 16:53:40 -0500 Subject: [PATCH 10/24] fix linting --- packages/tracing-internal/test/browser/metrics/index.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/tracing-internal/test/browser/metrics/index.test.ts b/packages/tracing-internal/test/browser/metrics/index.test.ts index b9ca22756829..79ed92f1b2b0 100644 --- a/packages/tracing-internal/test/browser/metrics/index.test.ts +++ b/packages/tracing-internal/test/browser/metrics/index.test.ts @@ -1,4 +1,3 @@ -import { GLOBAL_OBJ, parseUrl } from '@sentry/utils'; import { Transaction } from '../../../src'; import type { ResourceEntry } from '../../../src/browser/metrics'; import { _addMeasureSpans, _addResourceSpans } from '../../../src/browser/metrics'; From 5ea753f05ca989a1cd64fc67ec17e1a816cd8fd2 Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Wed, 17 Jan 2024 16:54:15 -0500 Subject: [PATCH 11/24] update scheme --- packages/tracing-internal/test/browser/metrics/index.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tracing-internal/test/browser/metrics/index.test.ts b/packages/tracing-internal/test/browser/metrics/index.test.ts index 79ed92f1b2b0..da6dcd56f0d7 100644 --- a/packages/tracing-internal/test/browser/metrics/index.test.ts +++ b/packages/tracing-internal/test/browser/metrics/index.test.ts @@ -235,7 +235,7 @@ describe('_addResourceSpans', () => { // eslint-disable-next-line @typescript-eslint/unbound-method, deprecation/deprecation expect(transaction.startChild).toHaveBeenLastCalledWith( expect.objectContaining({ - data: { "server.address": "example.com", "url.same_origin": true, "url.scheme": "https" }, + data: { "server.address": "example.com", "url.same_origin": true, "url.scheme": "https:" }, "description": "/assets/to/css", "endTimestamp": 468, "op": "resource.css", From 0204e6ea46f3a83c005787af17287c7dc4853be1 Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Wed, 17 Jan 2024 17:01:35 -0500 Subject: [PATCH 12/24] fix --- packages/tracing-internal/src/browser/metrics/index.ts | 2 +- .../tracing-internal/test/browser/metrics/index.test.ts | 9 ++------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/packages/tracing-internal/src/browser/metrics/index.ts b/packages/tracing-internal/src/browser/metrics/index.ts index b4ffebf8a9f7..2a1f7eb0eba1 100644 --- a/packages/tracing-internal/src/browser/metrics/index.ts +++ b/packages/tracing-internal/src/browser/metrics/index.ts @@ -423,7 +423,7 @@ export function _addResourceSpans( data['resource.render_blocking_status'] = entry.renderBlockingStatus; } if (parsedUrl.protocol) { - data['url.scheme'] = parsedUrl.protocol; + data['url.scheme'] = parsedUrl.protocol.split(':').pop(); // the protocol returned by parseUrl includes a :, but OTEL spec does not, so we remove it. } if (parsedUrl.host) { diff --git a/packages/tracing-internal/test/browser/metrics/index.test.ts b/packages/tracing-internal/test/browser/metrics/index.test.ts index da6dcd56f0d7..8c9a81761b9c 100644 --- a/packages/tracing-internal/test/browser/metrics/index.test.ts +++ b/packages/tracing-internal/test/browser/metrics/index.test.ts @@ -7,7 +7,7 @@ const mockWindowLocation = { ancestorOrigins: {}, href: "https://example.com/path/to/something", origin: "https://example.com", - protocol: "https:", + protocol: "https", host: "example.com", hostname: "example.com", port: "", @@ -235,12 +235,7 @@ describe('_addResourceSpans', () => { // eslint-disable-next-line @typescript-eslint/unbound-method, deprecation/deprecation expect(transaction.startChild).toHaveBeenLastCalledWith( expect.objectContaining({ - data: { "server.address": "example.com", "url.same_origin": true, "url.scheme": "https:" }, - "description": "/assets/to/css", - "endTimestamp": 468, - "op": "resource.css", - "origin": "auto.resource.browser.metrics", - "startTimestamp": 445, + data: { "server.address": "example.com", "url.same_origin": true, "url.scheme": "https" }, }), ); }); From e0cbd903555fee2c40ddf8d722a7003a09fea7bc Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Wed, 17 Jan 2024 17:08:39 -0500 Subject: [PATCH 13/24] update test 2 --- .../test/browser/metrics/index.test.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/tracing-internal/test/browser/metrics/index.test.ts b/packages/tracing-internal/test/browser/metrics/index.test.ts index 8c9a81761b9c..d661b45247d7 100644 --- a/packages/tracing-internal/test/browser/metrics/index.test.ts +++ b/packages/tracing-internal/test/browser/metrics/index.test.ts @@ -213,8 +213,14 @@ describe('_addResourceSpans', () => { // eslint-disable-next-line @typescript-eslint/unbound-method, deprecation/deprecation expect(transaction.startChild).toHaveBeenLastCalledWith( expect.objectContaining({ - data: {}, - }), + data: { "server.address": "example.com", "url.same_origin": true, "url.scheme": "https" }, + description: "/assets/to/css", + endTimestamp: 468, + op: "resource.css", + origin: "auto.resource.browser.metrics", + startTimestamp: 445 + } + ), ); }); @@ -236,6 +242,11 @@ describe('_addResourceSpans', () => { expect(transaction.startChild).toHaveBeenLastCalledWith( expect.objectContaining({ data: { "server.address": "example.com", "url.same_origin": true, "url.scheme": "https" }, + description: "/assets/to/css", + endTimestamp: 468, + op: "resource.css", + origin: "auto.resource.browser.metrics", + startTimestamp: 445 }), ); }); From 3bdd4fc6eb8c3c2b5793cb7807d5ddfe6cfcbf99 Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Wed, 17 Jan 2024 17:09:22 -0500 Subject: [PATCH 14/24] remove colon --- packages/tracing-internal/test/browser/metrics/index.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/tracing-internal/test/browser/metrics/index.test.ts b/packages/tracing-internal/test/browser/metrics/index.test.ts index d661b45247d7..3fb811725b7e 100644 --- a/packages/tracing-internal/test/browser/metrics/index.test.ts +++ b/packages/tracing-internal/test/browser/metrics/index.test.ts @@ -118,7 +118,7 @@ describe('_addResourceSpans', () => { ['http.response_content_length']: entry.encodedBodySize, ['http.response_transfer_size']: entry.transferSize, ['resource.render_blocking_status']: entry.renderBlockingStatus, - ['url.scheme']: 'https:', + ['url.scheme']: 'https', ['server.address']: 'example.com', ['url.same_origin']: true, }, @@ -190,7 +190,7 @@ describe('_addResourceSpans', () => { ['http.response_content_length']: entry.encodedBodySize, ['http.response_transfer_size']: entry.transferSize, ['resource.render_blocking_status']: entry.renderBlockingStatus, - ['url.scheme']: 'https:', + ['url.scheme']: 'https', ['server.address']: 'example.com', ['url.same_origin']: true, }, From 06ea035e5312205ed3682c0359c31eb4358693a3 Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Thu, 18 Jan 2024 11:05:35 -0500 Subject: [PATCH 15/24] add beforeAll and afterAll --- .../test/browser/metrics/index.test.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/tracing-internal/test/browser/metrics/index.test.ts b/packages/tracing-internal/test/browser/metrics/index.test.ts index 3fb811725b7e..91a7344db4b8 100644 --- a/packages/tracing-internal/test/browser/metrics/index.test.ts +++ b/packages/tracing-internal/test/browser/metrics/index.test.ts @@ -16,13 +16,13 @@ const mockWindowLocation = { hash: "" } as Window['location']; -WINDOW.location = mockWindowLocation; - +const originalWindowLocation = WINDOW.location; const resourceEntryName = 'https://example.com/assets/to/css'; describe('_addMeasureSpans', () => { // eslint-disable-next-line deprecation/deprecation const transaction = new Transaction({ op: 'pageload', name: '/' }); + beforeEach(() => { // eslint-disable-next-line deprecation/deprecation transaction.startChild = jest.fn(); @@ -60,6 +60,15 @@ describe('_addMeasureSpans', () => { describe('_addResourceSpans', () => { // eslint-disable-next-line deprecation/deprecation const transaction = new Transaction({ op: 'pageload', name: '/' }); + + beforeAll(() => { + WINDOW.location = mockWindowLocation; + }) + + afterAll(() => { + WINDOW.location = originalWindowLocation; + }) + beforeEach(() => { // eslint-disable-next-line deprecation/deprecation transaction.startChild = jest.fn(); From d110c4e026ac1d2a06e6dac9cc33338a4450f7e3 Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Thu, 18 Jan 2024 11:14:21 -0500 Subject: [PATCH 16/24] run yarn fix --- .../test/browser/metrics/index.test.ts | 45 +++++++++---------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/packages/tracing-internal/test/browser/metrics/index.test.ts b/packages/tracing-internal/test/browser/metrics/index.test.ts index 91a7344db4b8..2c448f744f23 100644 --- a/packages/tracing-internal/test/browser/metrics/index.test.ts +++ b/packages/tracing-internal/test/browser/metrics/index.test.ts @@ -5,15 +5,15 @@ import { WINDOW } from '../../../src/browser/types'; const mockWindowLocation = { ancestorOrigins: {}, - href: "https://example.com/path/to/something", - origin: "https://example.com", - protocol: "https", - host: "example.com", - hostname: "example.com", - port: "", - pathname: "/path/to/something", - search: "", - hash: "" + href: 'https://example.com/path/to/something', + origin: 'https://example.com', + protocol: 'https', + host: 'example.com', + hostname: 'example.com', + port: '', + pathname: '/path/to/something', + search: '', + hash: '', } as Window['location']; const originalWindowLocation = WINDOW.location; @@ -63,11 +63,11 @@ describe('_addResourceSpans', () => { beforeAll(() => { WINDOW.location = mockWindowLocation; - }) + }); afterAll(() => { WINDOW.location = originalWindowLocation; - }) + }); beforeEach(() => { // eslint-disable-next-line deprecation/deprecation @@ -222,14 +222,13 @@ describe('_addResourceSpans', () => { // eslint-disable-next-line @typescript-eslint/unbound-method, deprecation/deprecation expect(transaction.startChild).toHaveBeenLastCalledWith( expect.objectContaining({ - data: { "server.address": "example.com", "url.same_origin": true, "url.scheme": "https" }, - description: "/assets/to/css", + data: { 'server.address': 'example.com', 'url.same_origin': true, 'url.scheme': 'https' }, + description: '/assets/to/css', endTimestamp: 468, - op: "resource.css", - origin: "auto.resource.browser.metrics", - startTimestamp: 445 - } - ), + op: 'resource.css', + origin: 'auto.resource.browser.metrics', + startTimestamp: 445, + }), ); }); @@ -250,12 +249,12 @@ describe('_addResourceSpans', () => { // eslint-disable-next-line @typescript-eslint/unbound-method, deprecation/deprecation expect(transaction.startChild).toHaveBeenLastCalledWith( expect.objectContaining({ - data: { "server.address": "example.com", "url.same_origin": true, "url.scheme": "https" }, - description: "/assets/to/css", + data: { 'server.address': 'example.com', 'url.same_origin': true, 'url.scheme': 'https' }, + description: '/assets/to/css', endTimestamp: 468, - op: "resource.css", - origin: "auto.resource.browser.metrics", - startTimestamp: 445 + op: 'resource.css', + origin: 'auto.resource.browser.metrics', + startTimestamp: 445, }), ); }); From b6291800b21aa3833e1a4b637f0bfb2090ed605c Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Thu, 18 Jan 2024 13:29:48 -0500 Subject: [PATCH 17/24] add logging --- .../tracing-internal/test/browser/metrics/index.test.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/tracing-internal/test/browser/metrics/index.test.ts b/packages/tracing-internal/test/browser/metrics/index.test.ts index 2c448f744f23..aec9047a7071 100644 --- a/packages/tracing-internal/test/browser/metrics/index.test.ts +++ b/packages/tracing-internal/test/browser/metrics/index.test.ts @@ -17,6 +17,9 @@ const mockWindowLocation = { } as Window['location']; const originalWindowLocation = WINDOW.location; +console.log('\n\n WINDOW!! \n\n'); +console.log(WINDOW); +console.log('\n\n'); const resourceEntryName = 'https://example.com/assets/to/css'; describe('_addMeasureSpans', () => { @@ -63,6 +66,9 @@ describe('_addResourceSpans', () => { beforeAll(() => { WINDOW.location = mockWindowLocation; + console.log('\n\n MOCK WINDOW!! \n\n'); + console.log(WINDOW); + console.log('\n\n'); }); afterAll(() => { From 41529182bc618606a005eac663bdbd65b52e8b3c Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Thu, 18 Jan 2024 13:30:17 -0500 Subject: [PATCH 18/24] update --- packages/tracing-internal/test/browser/metrics/index.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/tracing-internal/test/browser/metrics/index.test.ts b/packages/tracing-internal/test/browser/metrics/index.test.ts index aec9047a7071..a505aa33bd3d 100644 --- a/packages/tracing-internal/test/browser/metrics/index.test.ts +++ b/packages/tracing-internal/test/browser/metrics/index.test.ts @@ -18,7 +18,7 @@ const mockWindowLocation = { const originalWindowLocation = WINDOW.location; console.log('\n\n WINDOW!! \n\n'); -console.log(WINDOW); +console.log(WINDOW.location); console.log('\n\n'); const resourceEntryName = 'https://example.com/assets/to/css'; @@ -67,7 +67,7 @@ describe('_addResourceSpans', () => { beforeAll(() => { WINDOW.location = mockWindowLocation; console.log('\n\n MOCK WINDOW!! \n\n'); - console.log(WINDOW); + console.log(WINDOW.location); console.log('\n\n'); }); From 89373d6374d6a23fdb8310ae8dacfbc4da450a4d Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Thu, 18 Jan 2024 13:42:05 -0500 Subject: [PATCH 19/24] use JSDOM --- .../test/browser/metrics/index.test.ts | 38 ++++++++++++++++--- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/packages/tracing-internal/test/browser/metrics/index.test.ts b/packages/tracing-internal/test/browser/metrics/index.test.ts index a505aa33bd3d..b62589e7562f 100644 --- a/packages/tracing-internal/test/browser/metrics/index.test.ts +++ b/packages/tracing-internal/test/browser/metrics/index.test.ts @@ -1,3 +1,4 @@ +import { JSDOM } from 'jsdom'; import { Transaction } from '../../../src'; import type { ResourceEntry } from '../../../src/browser/metrics'; import { _addMeasureSpans, _addResourceSpans } from '../../../src/browser/metrics'; @@ -17,6 +18,13 @@ const mockWindowLocation = { } as Window['location']; const originalWindowLocation = WINDOW.location; +// @ts-expect-error store a reference so we can reset it later +const globalDocument = global.document; +// @ts-expect-error store a reference so we can reset it later +const globalWindow = global.window; +// @ts-expect-error store a reference so we can reset it later +const globalLocation = global.location; + console.log('\n\n WINDOW!! \n\n'); console.log(WINDOW.location); console.log('\n\n'); @@ -65,14 +73,11 @@ describe('_addResourceSpans', () => { const transaction = new Transaction({ op: 'pageload', name: '/' }); beforeAll(() => { - WINDOW.location = mockWindowLocation; - console.log('\n\n MOCK WINDOW!! \n\n'); - console.log(WINDOW.location); - console.log('\n\n'); + setGlobalLocation(mockWindowLocation); }); afterAll(() => { - WINDOW.location = originalWindowLocation; + resetGlobalLocation(); }); beforeEach(() => { @@ -265,3 +270,26 @@ describe('_addResourceSpans', () => { ); }); }); + +const setGlobalLocation = (location: Location) => { + const dom = new JSDOM(); + // @ts-expect-error need to override global document + global.document = dom.window.document; + // @ts-expect-error need to override global document + global.window = dom.window; + // @ts-expect-error need to override global document + global.location = dom.window.location; + + WINDOW.location = location; +} + +const resetGlobalLocation = () => { + // @ts-expect-error need to override global document + global.document = globalDocument; + // @ts-expect-error need to override global document + global.window = globalWindow; + // @ts-expect-error need to override global document + global.location = globalLocation; + + WINDOW.location = originalWindowLocation; +} From 2bc3a4f72840e03826bcf76b2ce90c68fc885d9a Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Thu, 18 Jan 2024 13:54:27 -0500 Subject: [PATCH 20/24] set global --- .../test/browser/metrics/index.test.ts | 26 +++---------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/packages/tracing-internal/test/browser/metrics/index.test.ts b/packages/tracing-internal/test/browser/metrics/index.test.ts index b62589e7562f..7d15b97d8adf 100644 --- a/packages/tracing-internal/test/browser/metrics/index.test.ts +++ b/packages/tracing-internal/test/browser/metrics/index.test.ts @@ -1,4 +1,3 @@ -import { JSDOM } from 'jsdom'; import { Transaction } from '../../../src'; import type { ResourceEntry } from '../../../src/browser/metrics'; import { _addMeasureSpans, _addResourceSpans } from '../../../src/browser/metrics'; @@ -17,17 +16,9 @@ const mockWindowLocation = { hash: '', } as Window['location']; -const originalWindowLocation = WINDOW.location; -// @ts-expect-error store a reference so we can reset it later -const globalDocument = global.document; -// @ts-expect-error store a reference so we can reset it later -const globalWindow = global.window; // @ts-expect-error store a reference so we can reset it later const globalLocation = global.location; -console.log('\n\n WINDOW!! \n\n'); -console.log(WINDOW.location); -console.log('\n\n'); const resourceEntryName = 'https://example.com/assets/to/css'; describe('_addMeasureSpans', () => { @@ -272,24 +263,15 @@ describe('_addResourceSpans', () => { }); const setGlobalLocation = (location: Location) => { - const dom = new JSDOM(); - // @ts-expect-error need to override global document - global.document = dom.window.document; - // @ts-expect-error need to override global document - global.window = dom.window; // @ts-expect-error need to override global document - global.location = dom.window.location; + global.location = mockWindowLocation; - WINDOW.location = location; + console.log('\n\n WINDOW origin!! \n\n'); + console.log(WINDOW.location.origin); + console.log('\n\n'); } const resetGlobalLocation = () => { - // @ts-expect-error need to override global document - global.document = globalDocument; - // @ts-expect-error need to override global document - global.window = globalWindow; // @ts-expect-error need to override global document global.location = globalLocation; - - WINDOW.location = originalWindowLocation; } From 3c83b80b890c6102888337f1375b6114186f73e2 Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Thu, 18 Jan 2024 14:16:44 -0500 Subject: [PATCH 21/24] try deleting --- .../tracing-internal/test/browser/metrics/index.test.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/tracing-internal/test/browser/metrics/index.test.ts b/packages/tracing-internal/test/browser/metrics/index.test.ts index 7d15b97d8adf..1cf999f150b1 100644 --- a/packages/tracing-internal/test/browser/metrics/index.test.ts +++ b/packages/tracing-internal/test/browser/metrics/index.test.ts @@ -16,8 +16,7 @@ const mockWindowLocation = { hash: '', } as Window['location']; -// @ts-expect-error store a reference so we can reset it later -const globalLocation = global.location; +const originalLocation = WINDOW.location; const resourceEntryName = 'https://example.com/assets/to/css'; @@ -264,7 +263,8 @@ describe('_addResourceSpans', () => { const setGlobalLocation = (location: Location) => { // @ts-expect-error need to override global document - global.location = mockWindowLocation; + delete WINDOW.location; + WINDOW.location = mockWindowLocation; console.log('\n\n WINDOW origin!! \n\n'); console.log(WINDOW.location.origin); @@ -272,6 +272,5 @@ const setGlobalLocation = (location: Location) => { } const resetGlobalLocation = () => { - // @ts-expect-error need to override global document - global.location = globalLocation; + WINDOW.location = originalLocation; } From 7a371a627023bbc7607dc730df262cbf2bd5f067 Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Thu, 18 Jan 2024 14:32:12 -0500 Subject: [PATCH 22/24] fix linting --- .../test/browser/metrics/index.test.ts | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/tracing-internal/test/browser/metrics/index.test.ts b/packages/tracing-internal/test/browser/metrics/index.test.ts index 1cf999f150b1..bccfa53c4e35 100644 --- a/packages/tracing-internal/test/browser/metrics/index.test.ts +++ b/packages/tracing-internal/test/browser/metrics/index.test.ts @@ -262,15 +262,13 @@ describe('_addResourceSpans', () => { }); const setGlobalLocation = (location: Location) => { - // @ts-expect-error need to override global document + // @ts-expect-error need to delete this in order to set to new value delete WINDOW.location; WINDOW.location = mockWindowLocation; - - console.log('\n\n WINDOW origin!! \n\n'); - console.log(WINDOW.location.origin); - console.log('\n\n'); -} +}; const resetGlobalLocation = () => { + // @ts-expect-error + delete WINDOW.location; WINDOW.location = originalLocation; -} +}; From a69dc2e6c056d42a144dc23ea77f0b8bf8485def Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Thu, 18 Jan 2024 15:09:54 -0500 Subject: [PATCH 23/24] fix linting --- packages/tracing-internal/test/browser/metrics/index.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/tracing-internal/test/browser/metrics/index.test.ts b/packages/tracing-internal/test/browser/metrics/index.test.ts index bccfa53c4e35..1ad1e8d26b3e 100644 --- a/packages/tracing-internal/test/browser/metrics/index.test.ts +++ b/packages/tracing-internal/test/browser/metrics/index.test.ts @@ -261,14 +261,14 @@ describe('_addResourceSpans', () => { }); }); -const setGlobalLocation = (location: Location) => { +const setGlobalLocation = () => { // @ts-expect-error need to delete this in order to set to new value delete WINDOW.location; WINDOW.location = mockWindowLocation; }; const resetGlobalLocation = () => { - // @ts-expect-error + // @ts-expect-error need to delete this in order to set to new value delete WINDOW.location; WINDOW.location = originalLocation; }; From 8962a5a6c0c94dfd7299fea2afcfed41e04434e9 Mon Sep 17 00:00:00 2001 From: Dominik Buszowiecki Date: Thu, 18 Jan 2024 15:17:35 -0500 Subject: [PATCH 24/24] fix lint --- packages/tracing-internal/test/browser/metrics/index.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/tracing-internal/test/browser/metrics/index.test.ts b/packages/tracing-internal/test/browser/metrics/index.test.ts index 1ad1e8d26b3e..ce6060497ef7 100644 --- a/packages/tracing-internal/test/browser/metrics/index.test.ts +++ b/packages/tracing-internal/test/browser/metrics/index.test.ts @@ -261,10 +261,10 @@ describe('_addResourceSpans', () => { }); }); -const setGlobalLocation = () => { +const setGlobalLocation = (location: Location) => { // @ts-expect-error need to delete this in order to set to new value delete WINDOW.location; - WINDOW.location = mockWindowLocation; + WINDOW.location = location; }; const resetGlobalLocation = () => {