Wait until config is loaded to load otel

This commit is contained in:
David Baker 2023-03-22 12:41:33 +00:00
parent ec88907981
commit 48493a96e1
2 changed files with 16 additions and 3 deletions

View file

@ -23,6 +23,7 @@ import * as Sentry from "@sentry/react";
import { getUrlParams } from "./UrlParams"; import { getUrlParams } from "./UrlParams";
import { Config } from "./config/Config"; import { Config } from "./config/Config";
import { ElementCallOpenTelemetry } from "./otel/otel";
enum LoadState { enum LoadState {
None, None,
@ -35,6 +36,7 @@ class DependencyLoadStates {
// olm: LoadState = LoadState.None; // olm: LoadState = LoadState.None;
config: LoadState = LoadState.None; config: LoadState = LoadState.None;
sentry: LoadState = LoadState.None; sentry: LoadState = LoadState.None;
openTelemetry: LoadState = LoadState.None;
allDepsAreLoaded() { allDepsAreLoaded() {
return !Object.values(this).some((s) => s !== LoadState.Loaded); return !Object.values(this).some((s) => s !== LoadState.Loaded);
@ -209,6 +211,15 @@ export class Initializer {
this.loadStates.sentry = LoadState.Loaded; 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()) { if (this.loadStates.allDepsAreLoaded()) {
// resolve if there is no dependency that is not loaded // resolve if there is no dependency that is not loaded
resolve(); resolve();

View file

@ -39,6 +39,11 @@ export class ElementCallOpenTelemetry {
private _tracer: Tracer; private _tracer: Tracer;
private _anonymity: Anonymity; private _anonymity: Anonymity;
static globalInit(): void {
settingsBus.on("opt-in-analytics", recheckOTelEnabledStatus);
recheckOTelEnabledStatus(getSetting("opt-in-analytics", false));
}
static get instance(): ElementCallOpenTelemetry { static get instance(): ElementCallOpenTelemetry {
return sharedInstance; return sharedInstance;
} }
@ -93,6 +98,3 @@ function recheckOTelEnabledStatus(optInAnalayticsEnabled: boolean): void {
sharedInstance = undefined; sharedInstance = undefined;
} }
} }
settingsBus.on("opt-in-analytics", recheckOTelEnabledStatus);
recheckOTelEnabledStatus(getSetting("opt-in-analytics", false));