diff --git a/Sources/Exporters/OpenTelemetryProtocolHttp/HTTPClient.swift b/Sources/Exporters/OpenTelemetryProtocolHttp/HTTPClient.swift index 59633e85d..83b892fed 100644 --- a/Sources/Exporters/OpenTelemetryProtocolHttp/HTTPClient.swift +++ b/Sources/Exporters/OpenTelemetryProtocolHttp/HTTPClient.swift @@ -71,5 +71,14 @@ func httpClientResult(for taskResult: (Data?, URLResponse?, Error?)) -> Result SpanExporterResultCode { + var resultValue: SpanExporterResultCode = .success var sendingSpans: [SpanData] = [] exporterLock.withLockVoid { pendingSpans.append(contentsOf: spans) @@ -68,7 +69,17 @@ public class OtlpHttpTraceExporter: OtlpHttpExporterBase, SpanExporter { $0.resourceSpans = SpanAdapter.toProtoResourceSpans( spanDataList: sendingSpans) } - let request = createRequest(body: body, endpoint: endpoint) + let semaphore = DispatchSemaphore(value: 0) + var request = createRequest(body: body, endpoint: endpoint) + if let headers = envVarHeaders { + headers.forEach { key, value in + request.addValue(value, forHTTPHeaderField: key) + } + } else if let headers = config.headers { + headers.forEach { key, value in + request.addValue(value, forHTTPHeaderField: key) + } + } exporterMetrics?.addSeen(value: sendingSpans.count) httpClient.send(request: request) { [weak self] result in switch result { @@ -80,9 +91,12 @@ public class OtlpHttpTraceExporter: OtlpHttpExporterBase, SpanExporter { self?.pendingSpans.append(contentsOf: sendingSpans) } print(error) + resultValue = .failure } + semaphore.signal() } - return .success + semaphore.wait() + return resultValue } public func flush(explicitTimeout: TimeInterval? = nil)