diff --git a/packages/integration-tests/src/tests/docload/docload.spec.ts b/packages/integration-tests/src/tests/docload/docload.spec.ts index a07d8f4a..0c0bfeb3 100644 --- a/packages/integration-tests/src/tests/docload/docload.spec.ts +++ b/packages/integration-tests/src/tests/docload/docload.spec.ts @@ -50,7 +50,7 @@ test.describe('docload', () => { } }) - test('documentFetch, resourceFetch, and documentLoad spans', async ({ recordPage }) => { + test('documentFetch, resourceFetch, and documentLoad spans', async ({ recordPage, browserName }) => { await recordPage.goTo('/docload/docload.ejs') await recordPage.waitForSpans((spans) => spans.filter((span) => span.name === 'documentLoad').length === 1) @@ -96,6 +96,11 @@ test.describe('docload', () => { expect(docFetchSpans[0].tags['link.traceId']).toBeDefined() expect(docFetchSpans[0].tags['link.spanId']).toBeDefined() + if (browserName !== 'webkit') { + // Webkit does not support https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/responseStatus + expect(parseInt(docFetchSpans[0].tags['http.response.status_code'] as string)).toBeGreaterThan(0) + } + expect(parseInt(scriptFetchSpans[0].tags['http.response_content_length'] as string)).toBeGreaterThan(0) expect(docLoadSpans[0].tags['component']).toBe('document-load') diff --git a/packages/web/src/SplunkDocumentLoadInstrumentation.ts b/packages/web/src/SplunkDocumentLoadInstrumentation.ts index 39227708..ab6efaa8 100644 --- a/packages/web/src/SplunkDocumentLoadInstrumentation.ts +++ b/packages/web/src/SplunkDocumentLoadInstrumentation.ts @@ -17,7 +17,7 @@ */ import { InstrumentationConfig } from '@opentelemetry/instrumentation' -import { DocumentLoadInstrumentation } from '@opentelemetry/instrumentation-document-load' +import { AttributeNames, DocumentLoadInstrumentation } from '@opentelemetry/instrumentation-document-load' import * as api from '@opentelemetry/api' import { captureTraceParentFromPerformanceEntries } from './servertiming' import { PerformanceEntries } from '@opentelemetry/sdk-trace-web' @@ -65,27 +65,27 @@ export class SplunkDocumentLoadInstrumentation extends DocumentLoadInstrumentati span.setAttribute('component', this.component) } - if (span && exposedSpan.name !== 'documentLoad') { + if (span && exposedSpan.name !== AttributeNames.DOCUMENT_LOAD) { // only apply links to document/resource fetch // To maintain compatibility, getEntries copies out select items from // different versions of the performance API into its own structure for the // initial document load (but leaves the entries undisturbed for resource loads). - if ( - exposedSpan.name === 'documentFetch' && - !(entries as PerformanceEntriesWithServerTiming).serverTiming && - performance.getEntriesByType - ) { + if (exposedSpan.name === AttributeNames.DOCUMENT_FETCH && performance.getEntriesByType) { const navEntries = performance.getEntriesByType('navigation') - if (navEntries[0]?.serverTiming) { + if (!(entries as PerformanceEntriesWithServerTiming).serverTiming && navEntries[0]?.serverTiming) { ;(entries as PerformanceEntriesWithServerTiming).serverTiming = navEntries[0].serverTiming } + + if (navEntries[0]?.responseStatus) { + span.setAttribute('http.response.status_code', navEntries[0].responseStatus) + } } captureTraceParentFromPerformanceEntries(entries, span) span.setAttribute(SemanticAttributes.HTTP_METHOD, 'GET') } - if (span && exposedSpan.name === 'documentLoad') { + if (span && exposedSpan.name === AttributeNames.DOCUMENT_LOAD) { addExtraDocLoadTags(span) }