diff --git a/src/initializer.tsx b/src/initializer.tsx index e10a4ec..37e659e 100644 --- a/src/initializer.tsx +++ b/src/initializer.tsx @@ -23,6 +23,7 @@ import * as Sentry from "@sentry/react"; import { getUrlParams } from "./UrlParams"; import { Config } from "./config/Config"; +import { ElementCallOpenTelemetry } from "./otel/otel"; enum LoadState { None, @@ -35,6 +36,7 @@ class DependencyLoadStates { // olm: LoadState = LoadState.None; config: LoadState = LoadState.None; sentry: LoadState = LoadState.None; + openTelemetry: LoadState = LoadState.None; allDepsAreLoaded() { return !Object.values(this).some((s) => s !== LoadState.Loaded); @@ -209,6 +211,15 @@ export class Initializer { this.loadStates.sentry = LoadState.Loaded; } + // OpenTelemetry (also only after config loaded) + if ( + this.loadStates.openTelemetry === LoadState.None && + this.loadStates.config === LoadState.Loaded + ) { + ElementCallOpenTelemetry.globalInit(); + this.loadStates.openTelemetry = LoadState.Loaded; + } + if (this.loadStates.allDepsAreLoaded()) { // resolve if there is no dependency that is not loaded resolve(); diff --git a/src/otel/otel.ts b/src/otel/otel.ts index 301c077..25de3ac 100644 --- a/src/otel/otel.ts +++ b/src/otel/otel.ts @@ -39,6 +39,11 @@ export class ElementCallOpenTelemetry { private _tracer: Tracer; private _anonymity: Anonymity; + static globalInit(): void { + settingsBus.on("opt-in-analytics", recheckOTelEnabledStatus); + recheckOTelEnabledStatus(getSetting("opt-in-analytics", false)); + } + static get instance(): ElementCallOpenTelemetry { return sharedInstance; } @@ -93,6 +98,3 @@ function recheckOTelEnabledStatus(optInAnalayticsEnabled: boolean): void { sharedInstance = undefined; } } - -settingsBus.on("opt-in-analytics", recheckOTelEnabledStatus); -recheckOTelEnabledStatus(getSetting("opt-in-analytics", false));