mirror of https://github.com/cirruslabs/tart.git
OpenTelemetry: only initialize tracing when TRACEPARENT env. var. is set (#1182)
This commit is contained in:
parent
7038c45f8b
commit
e0147448a8
|
|
@ -4,30 +4,44 @@ import OpenTelemetrySdk
|
||||||
import OpenTelemetryProtocolExporterHttp
|
import OpenTelemetryProtocolExporterHttp
|
||||||
|
|
||||||
class OTel {
|
class OTel {
|
||||||
let spanExporter: SpanExporter
|
let tracerProvider: TracerProviderSdk?
|
||||||
let spanProcessor: SpanProcessor
|
|
||||||
let tracerProvider: TracerProviderSdk
|
|
||||||
let tracer: Tracer
|
let tracer: Tracer
|
||||||
|
|
||||||
static let shared = OTel()
|
static let shared = OTel()
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
|
tracerProvider = Self.initializeTracing()
|
||||||
|
tracer = OpenTelemetry.instance.tracerProvider.get(instrumentationName: "tart", instrumentationVersion: CI.version)
|
||||||
|
}
|
||||||
|
|
||||||
|
static func initializeTracing() -> TracerProviderSdk? {
|
||||||
|
guard let _ = ProcessInfo.processInfo.environment["TRACEPARENT"] else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
let spanExporter: SpanExporter
|
||||||
if let endpointRaw = ProcessInfo.processInfo.environment["OTEL_EXPORTER_OTLP_TRACES_ENDPOINT"],
|
if let endpointRaw = ProcessInfo.processInfo.environment["OTEL_EXPORTER_OTLP_TRACES_ENDPOINT"],
|
||||||
let endpoint = URL(string: endpointRaw) {
|
let endpoint = URL(string: endpointRaw) {
|
||||||
spanExporter = OtlpHttpTraceExporter(endpoint: endpoint)
|
spanExporter = OtlpHttpTraceExporter(endpoint: endpoint)
|
||||||
} else {
|
} else {
|
||||||
spanExporter = OtlpHttpTraceExporter()
|
spanExporter = OtlpHttpTraceExporter()
|
||||||
}
|
}
|
||||||
spanProcessor = SimpleSpanProcessor(spanExporter: spanExporter)
|
let spanProcessor = SimpleSpanProcessor(spanExporter: spanExporter)
|
||||||
tracerProvider = TracerProviderBuilder().add(spanProcessor: spanProcessor).build()
|
let tracerProvider = TracerProviderBuilder().add(spanProcessor: spanProcessor).build()
|
||||||
|
|
||||||
OpenTelemetry.registerTracerProvider(tracerProvider: tracerProvider)
|
OpenTelemetry.registerTracerProvider(tracerProvider: tracerProvider)
|
||||||
|
|
||||||
tracer = OpenTelemetry.instance.tracerProvider.get(instrumentationName: "tart", instrumentationVersion: CI.version)
|
return tracerProvider
|
||||||
}
|
}
|
||||||
|
|
||||||
func flush() {
|
func flush() {
|
||||||
OpenTelemetry.instance.contextProvider.activeSpan?.end()
|
OpenTelemetry.instance.contextProvider.activeSpan?.end()
|
||||||
|
|
||||||
|
guard let tracerProvider else {
|
||||||
|
// No tracing was initialized, so just ending a span is enough
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
tracerProvider.forceFlush()
|
tracerProvider.forceFlush()
|
||||||
|
|
||||||
// Work around OpenTelemtry not flushing traces after explicitly asking it to do so
|
// Work around OpenTelemtry not flushing traces after explicitly asking it to do so
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue