Skip to content

Commit

Permalink
fix(ember): Ensure browser tracing is correctly lazy loaded (#11027)
Browse files Browse the repository at this point in the history
Backport of #11026
  • Loading branch information
mydea committed Mar 11, 2024
1 parent df6f048 commit c6e03a3
Showing 1 changed file with 26 additions and 11 deletions.
37 changes: 26 additions & 11 deletions packages/ember/addon/instance-initializers/sentry-performance.ts
Expand Up @@ -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 {
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -424,7 +427,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;

Expand All @@ -444,7 +448,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) {
Expand All @@ -456,7 +460,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 & {
Expand All @@ -478,7 +487,13 @@ function _instrumentNavigation(appInstance: ApplicationInstance, config: EmberSe
}

routerService._hasMountedSentryPerformanceRouting = true;
_instrumentEmberRouter(routerService, routerMain, config);
_instrumentEmberRouter(
routerService,
routerMain,
config,
startBrowserTracingPageLoadSpan,
startBrowserTracingNavigationSpan,
);
}

export default {
Expand Down

0 comments on commit c6e03a3

Please sign in to comment.