Skip to content

Commit e014744

Browse files
authored
OpenTelemetry: only initialize tracing when TRACEPARENT env. var. is set (#1182)
1 parent 7038c45 commit e014744

1 file changed

Lines changed: 20 additions & 6 deletions

File tree

Sources/tart/OTel.swift

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,44 @@ import OpenTelemetrySdk
44
import OpenTelemetryProtocolExporterHttp
55

66
class OTel {
7-
let spanExporter: SpanExporter
8-
let spanProcessor: SpanProcessor
9-
let tracerProvider: TracerProviderSdk
7+
let tracerProvider: TracerProviderSdk?
108
let tracer: Tracer
119

1210
static let shared = OTel()
1311

1412
init() {
13+
tracerProvider = Self.initializeTracing()
14+
tracer = OpenTelemetry.instance.tracerProvider.get(instrumentationName: "tart", instrumentationVersion: CI.version)
15+
}
16+
17+
static func initializeTracing() -> TracerProviderSdk? {
18+
guard let _ = ProcessInfo.processInfo.environment["TRACEPARENT"] else {
19+
return nil
20+
}
21+
22+
let spanExporter: SpanExporter
1523
if let endpointRaw = ProcessInfo.processInfo.environment["OTEL_EXPORTER_OTLP_TRACES_ENDPOINT"],
1624
let endpoint = URL(string: endpointRaw) {
1725
spanExporter = OtlpHttpTraceExporter(endpoint: endpoint)
1826
} else {
1927
spanExporter = OtlpHttpTraceExporter()
2028
}
21-
spanProcessor = SimpleSpanProcessor(spanExporter: spanExporter)
22-
tracerProvider = TracerProviderBuilder().add(spanProcessor: spanProcessor).build()
29+
let spanProcessor = SimpleSpanProcessor(spanExporter: spanExporter)
30+
let tracerProvider = TracerProviderBuilder().add(spanProcessor: spanProcessor).build()
31+
2332
OpenTelemetry.registerTracerProvider(tracerProvider: tracerProvider)
2433

25-
tracer = OpenTelemetry.instance.tracerProvider.get(instrumentationName: "tart", instrumentationVersion: CI.version)
34+
return tracerProvider
2635
}
2736

2837
func flush() {
2938
OpenTelemetry.instance.contextProvider.activeSpan?.end()
3039

40+
guard let tracerProvider else {
41+
// No tracing was initialized, so just ending a span is enough
42+
return
43+
}
44+
3145
tracerProvider.forceFlush()
3246

3347
// Work around OpenTelemtry not flushing traces after explicitly asking it to do so

0 commit comments

Comments
 (0)