UNPKG

@embrace-io/web-sdk

Version:
1 lines 3.59 kB
{"version":3,"file":"ServerTimingInstrumentation.cjs","names":["EmbraceInstrumentationBase","SERVER_TIMING_EVENT_NAME","SeverityNumber","KEY_EMB_TYPE","KEY_EMB_SERVER_TIMING_NAME","KEY_EMB_SERVER_TIMING_DURATION","KEY_EMB_SERVER_TIMING_DESCRIPTION"],"sources":["../../../../src/instrumentations/server-timing/ServerTimingInstrumentation/ServerTimingInstrumentation.ts"],"sourcesContent":["import { SeverityNumber } from '@opentelemetry/api-logs';\nimport { EMB_TYPES, KEY_EMB_TYPE } from '../../../constants/index.ts';\nimport { EmbraceInstrumentationBase } from '../../EmbraceInstrumentationBase/index.ts';\nimport {\n KEY_EMB_SERVER_TIMING_DESCRIPTION,\n KEY_EMB_SERVER_TIMING_DURATION,\n KEY_EMB_SERVER_TIMING_NAME,\n SERVER_TIMING_EVENT_NAME,\n} from './constants.ts';\nimport type { ServerTimingInstrumentationArgs } from './types.ts';\n\nexport class ServerTimingInstrumentation extends EmbraceInstrumentationBase {\n private readonly _onLoad: () => void;\n private _performanceCollected = false;\n\n public constructor({\n diag,\n perf,\n limitManager,\n }: ServerTimingInstrumentationArgs = {}) {\n super({\n instrumentationName: 'ServerTimingInstrumentation',\n instrumentationVersion: '1.0.0',\n diag,\n perf,\n limitManager,\n config: {},\n });\n\n this._onLoad = () => {\n this._readServerTiming();\n };\n\n if (this._config.enabled) {\n this.enable();\n }\n }\n\n public override onEnable(): void {\n window.removeEventListener('load', this._onLoad);\n\n if (window.document.readyState === 'complete') {\n this._readServerTiming();\n return;\n }\n\n window.addEventListener('load', this._onLoad);\n }\n\n public override onDisable(): void {\n window.removeEventListener('load', this._onLoad);\n }\n\n private _readServerTiming(): void {\n if (this._performanceCollected) {\n return;\n }\n this._performanceCollected = true;\n\n const navEntries = performance.getEntriesByType(\n 'navigation',\n ) as PerformanceNavigationTiming[];\n const serverTiming = navEntries[0]?.serverTiming;\n\n if (!serverTiming?.length) {\n return;\n }\n\n for (const entry of serverTiming) {\n if (this.limitManager?.limitServerTimingEntry()) {\n return;\n }\n\n this.logger.emit({\n eventName: SERVER_TIMING_EVENT_NAME,\n severityNumber: SeverityNumber.INFO,\n attributes: {\n [KEY_EMB_TYPE]: EMB_TYPES.ServerTiming,\n [KEY_EMB_SERVER_TIMING_NAME]: entry.name,\n [KEY_EMB_SERVER_TIMING_DURATION]: entry.duration,\n [KEY_EMB_SERVER_TIMING_DESCRIPTION]: entry.description,\n },\n });\n }\n }\n}\n"],"mappings":";;;;;;AAWA,IAAa,8BAAb,cAAiDA,+EAAAA,2BAA2B;CAC1E;CACA,wBAAgC;CAEhC,YAAmB,EACjB,MACA,MACA,iBACmC,CAAC,GAAG;EACvC,MAAM;GACJ,qBAAqB;GACrB,wBAAwB;GACxB;GACA;GACA;GACA,QAAQ,CAAC;EACX,CAAC;EAED,KAAK,gBAAgB;GACnB,KAAK,kBAAkB;EACzB;EAEA,IAAI,KAAK,QAAQ,SACf,KAAK,OAAO;CAEhB;CAEA,WAAiC;EAC/B,OAAO,oBAAoB,QAAQ,KAAK,OAAO;EAE/C,IAAI,OAAO,SAAS,eAAe,YAAY;GAC7C,KAAK,kBAAkB;GACvB;EACF;EAEA,OAAO,iBAAiB,QAAQ,KAAK,OAAO;CAC9C;CAEA,YAAkC;EAChC,OAAO,oBAAoB,QAAQ,KAAK,OAAO;CACjD;CAEA,oBAAkC;EAChC,IAAI,KAAK,uBACP;EAEF,KAAK,wBAAwB;EAK7B,MAAM,eAHa,YAAY,iBAC7B,YAE4B,CAAC,CAAC,EAAE,EAAE;EAEpC,IAAI,CAAC,cAAc,QACjB;EAGF,KAAK,MAAM,SAAS,cAAc;GAChC,IAAI,KAAK,cAAc,uBAAuB,GAC5C;GAGF,KAAK,OAAO,KAAK;IACf,WAAWC,6EAAAA;IACX,gBAAgBC,wBAAAA,eAAe;IAC/B,YAAY;MACTC,6BAAAA,eAAAA;MACAC,6EAAAA,6BAA6B,MAAM;MACnCC,6EAAAA,iCAAiC,MAAM;MACvCC,6EAAAA,oCAAoC,MAAM;IAC7C;GACF,CAAC;EACH;CACF;AACF"}