Browse Source

Adds better tracer isolation (in theory)

main
Eric Amodio 2 years ago
parent
commit
4e2e82f610
1 changed files with 16 additions and 12 deletions
  1. +16
    -12
      src/telemetry/openTelemetryProvider.ts

+ 16
- 12
src/telemetry/openTelemetryProvider.ts View File

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

||||||
x
 
000:0
Loading…
Cancel
Save