From 4e2e82f610d212f987694f211e409a7c774fe289 Mon Sep 17 00:00:00 2001
From: Eric Amodio <eamodio@gmail.com>
Date: Thu, 8 Dec 2022 11:16:09 -0500
Subject: [PATCH] Adds better tracer isolation (in theory)

---
 src/telemetry/openTelemetryProvider.ts | 28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/src/telemetry/openTelemetryProvider.ts b/src/telemetry/openTelemetryProvider.ts
index d092f10..269da41 100644
--- a/src/telemetry/openTelemetryProvider.ts
+++ b/src/telemetry/openTelemetryProvider.ts
@@ -1,12 +1,12 @@
 import type { AttributeValue, Span, TimeInput, Tracer } from '@opentelemetry/api';
-import { diag, DiagConsoleLogger, trace } from '@opentelemetry/api';
-import { DiagLogLevel } from '@opentelemetry/api/build/src/diag/types';
+// import { diag, DiagConsoleLogger } from '@opentelemetry/api';
+// import { DiagLogLevel } from '@opentelemetry/api/build/src/diag/types';
 import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
 import { Resource } from '@opentelemetry/resources';
 import {
 	BasicTracerProvider,
 	BatchSpanProcessor,
-	ConsoleSpanExporter,
+	// ConsoleSpanExporter,
 	SimpleSpanProcessor,
 } from '@opentelemetry/sdk-trace-base';
 import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
@@ -15,10 +15,12 @@ import type { TelemetryContext, TelemetryProvider } from './telemetry';
 
 export class OpenTelemetryProvider implements TelemetryProvider {
 	private _globalAttributes: Record<string, AttributeValue> = {};
+
+	private readonly provider: BasicTracerProvider;
 	private readonly tracer: Tracer;
 
 	constructor(context: TelemetryContext, agent?: HttpsProxyAgent, debugging?: boolean) {
-		const provider = new BasicTracerProvider({
+		this.provider = new BasicTracerProvider({
 			resource: new Resource({
 				[SemanticResourceAttributes.SERVICE_NAME]: 'gitlens',
 				[SemanticResourceAttributes.SERVICE_VERSION]: context.extensionVersion,
@@ -37,10 +39,10 @@ export class OpenTelemetryProvider implements TelemetryProvider {
 			}) as any,
 		});
 
-		if (debugging) {
-			diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.VERBOSE);
-			provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
-		}
+		// if (debugging) {
+		// 	diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.VERBOSE);
+		// 	this.provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
+		// }
 
 		const exporter = new OTLPTraceExporter({
 			url: debugging
@@ -49,15 +51,17 @@ export class OpenTelemetryProvider implements TelemetryProvider {
 			compression: 'gzip' as any,
 			httpAgentOptions: agent?.options,
 		});
-		provider.addSpanProcessor(debugging ? new SimpleSpanProcessor(exporter) : new BatchSpanProcessor(exporter));
+		this.provider.addSpanProcessor(
+			debugging ? new SimpleSpanProcessor(exporter) : new BatchSpanProcessor(exporter),
+		);
 
-		provider.register();
+		this.provider.register();
 
-		this.tracer = trace.getTracer(context.extensionId);
+		this.tracer = this.provider.getTracer(context.extensionId);
 	}
 
 	dispose(): void {
-		trace.disable();
+		void this.provider.shutdown();
 	}
 
 	sendEvent(name: string, data?: Record<string, AttributeValue>, startTime?: TimeInput, endTime?: TimeInput): void {