From dff11d8a946d1c01102dd014909e9aad295cbbfd Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Mon, 11 Mar 2024 16:14:26 +0000 Subject: [PATCH] fix(ember): Ensure browser tracing is correctly lazy loaded --- .../sentry-performance.ts | 37 +++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/packages/ember/addon/instance-initializers/sentry-performance.ts b/packages/ember/addon/instance-initializers/sentry-performance.ts index 552fa1df7e78..177c43b27d3f 100644 --- a/packages/ember/addon/instance-initializers/sentry-performance.ts +++ b/packages/ember/addon/instance-initializers/sentry-performance.ts @@ -6,20 +6,21 @@ import type RouterService from '@ember/routing/router-service'; import { _backburner, run, scheduleOnce } from '@ember/runloop'; import type { EmberRunQueues } from '@ember/runloop/-private/types'; import { getOwnConfig, isTesting, macroCondition } from '@embroider/macros'; -import type { ExtendedBackburner } from '@sentry/ember/runloop'; -import type { Span } from '@sentry/types'; -import { GLOBAL_OBJ, browserPerformanceTimeOrigin, timestampInSeconds } from '@sentry/utils'; - -import type { BrowserClient } from '@sentry/browser'; +import type { + BrowserClient, + startBrowserTracingNavigationSpan as startBrowserTracingNavigationSpanType, + startBrowserTracingPageLoadSpan as startBrowserTracingPageLoadSpanType, +} from '@sentry/browser'; import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, getActiveSpan, getClient, - startBrowserTracingNavigationSpan, - startBrowserTracingPageLoadSpan, startInactiveSpan, } from '@sentry/browser'; +import type { ExtendedBackburner } from '@sentry/ember/runloop'; +import type { Span } from '@sentry/types'; +import { GLOBAL_OBJ, browserPerformanceTimeOrigin, timestampInSeconds } from '@sentry/utils'; import type { EmberRouterMain, EmberSentryConfig, GlobalConfig, OwnConfig } from '../types'; function getSentryConfig(): EmberSentryConfig { @@ -99,6 +100,8 @@ export function _instrumentEmberRouter( routerService: RouterService, routerMain: EmberRouterMain, config: EmberSentryConfig, + startBrowserTracingPageLoadSpan: typeof startBrowserTracingPageLoadSpanType, + startBrowserTracingNavigationSpan: typeof startBrowserTracingNavigationSpanType, ): void { const { disableRunloopPerformance } = config; const location = routerMain.location; @@ -411,7 +414,8 @@ export async function instrumentForPerformance(appInstance: ApplicationInstance) // Maintaining backwards compatibility with config.browserTracingOptions, but passing it with Sentry options is preferred. const browserTracingOptions = config.browserTracingOptions || config.sentry.browserTracingOptions || {}; - const { browserTracingIntegration } = await import('@sentry/browser'); + const { browserTracingIntegration, startBrowserTracingNavigationSpan, startBrowserTracingPageLoadSpan } = + await import('@sentry/browser'); const idleTimeout = config.transitionTimeout || 5000; @@ -431,7 +435,7 @@ export async function instrumentForPerformance(appInstance: ApplicationInstance) } // We _always_ call this, as it triggers the page load & navigation spans - _instrumentNavigation(appInstance, config); + _instrumentNavigation(appInstance, config, startBrowserTracingPageLoadSpan, startBrowserTracingNavigationSpan); // Skip instrumenting the stuff below again in tests, as these are not reset between tests if (isAlreadyInitialized) { @@ -443,7 +447,12 @@ export async function instrumentForPerformance(appInstance: ApplicationInstance) _instrumentInitialLoad(config); } -function _instrumentNavigation(appInstance: ApplicationInstance, config: EmberSentryConfig): void { +function _instrumentNavigation( + appInstance: ApplicationInstance, + config: EmberSentryConfig, + startBrowserTracingPageLoadSpan: typeof startBrowserTracingPageLoadSpanType, + startBrowserTracingNavigationSpan: typeof startBrowserTracingNavigationSpanType, +): void { // eslint-disable-next-line ember/no-private-routing-service const routerMain = appInstance.lookup('router:main') as EmberRouterMain; let routerService = appInstance.lookup('service:router') as RouterService & { @@ -465,7 +474,13 @@ function _instrumentNavigation(appInstance: ApplicationInstance, config: EmberSe } routerService._hasMountedSentryPerformanceRouting = true; - _instrumentEmberRouter(routerService, routerMain, config); + _instrumentEmberRouter( + routerService, + routerMain, + config, + startBrowserTracingPageLoadSpan, + startBrowserTracingNavigationSpan, + ); } export default {