Skip to content

Commit 48a1427

Browse files
committed
RUM-9747 Trace Additional Context
1 parent c0d0fe8 commit 48a1427

File tree

7 files changed

+42
-101
lines changed

7 files changed

+42
-101
lines changed

Datadog/Datadog.xcodeproj/project.pbxproj

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1056,10 +1056,6 @@
10561056
D22789372D64A0D7007E9DB0 /* UploadQualityMetric.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22789352D64A0D3007E9DB0 /* UploadQualityMetric.swift */; };
10571057
D227A0A42C7622EA00C83324 /* BenchmarkProfiler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D227A0A32C7622EA00C83324 /* BenchmarkProfiler.swift */; };
10581058
D227A0A52C7622EA00C83324 /* BenchmarkProfiler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D227A0A32C7622EA00C83324 /* BenchmarkProfiler.swift */; };
1059-
D22C5BC82A98A0B20024CC1F /* Baggages.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22C5BC52A989D130024CC1F /* Baggages.swift */; };
1060-
D22C5BC92A98A0B30024CC1F /* Baggages.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22C5BC52A989D130024CC1F /* Baggages.swift */; };
1061-
D22C5BCB2A98A5400024CC1F /* Baggages.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22C5BCA2A98A5400024CC1F /* Baggages.swift */; };
1062-
D22C5BCC2A98A5400024CC1F /* Baggages.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22C5BCA2A98A5400024CC1F /* Baggages.swift */; };
10631059
D22F06D729DAFD500026CC3C /* FixedWidthInteger+Convenience.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22F06D529DAFD500026CC3C /* FixedWidthInteger+Convenience.swift */; };
10641060
D22F06D829DAFD500026CC3C /* FixedWidthInteger+Convenience.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22F06D529DAFD500026CC3C /* FixedWidthInteger+Convenience.swift */; };
10651061
D22F06D929DAFD500026CC3C /* TimeInterval+Convenience.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22F06D629DAFD500026CC3C /* TimeInterval+Convenience.swift */; };
@@ -1480,6 +1476,8 @@
14801476
D2BEEDB92B3360F50065F3AC /* URLSessionTaskDelegateSwizzlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2BEEDB72B3360F50065F3AC /* URLSessionTaskDelegateSwizzlerTests.swift */; };
14811477
D2BEEDBA2B33638F0065F3AC /* NetworkInstrumentationSwizzler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2181A8A2B0500BB00A518C0 /* NetworkInstrumentationSwizzler.swift */; };
14821478
D2BEEDBB2B3363900065F3AC /* NetworkInstrumentationSwizzler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2181A8A2B0500BB00A518C0 /* NetworkInstrumentationSwizzler.swift */; };
1479+
D2C179E12DD2388800556F68 /* SpanCoreContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2C179E02DD2388800556F68 /* SpanCoreContext.swift */; };
1480+
D2C179E22DD2388800556F68 /* SpanCoreContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2C179E02DD2388800556F68 /* SpanCoreContext.swift */; };
14831481
D2C1A4FA29C4C4CB00946C31 /* SpanSanitizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61122ECD25B1B74500F9C7F5 /* SpanSanitizer.swift */; };
14841482
D2C1A4FB29C4C4CB00946C31 /* MessageReceivers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2546C0A29AF56270054E00B /* MessageReceivers.swift */; };
14851483
D2C1A4FC29C4C4CB00946C31 /* RequestBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2546C0729AF55E90054E00B /* RequestBuilder.swift */; };
@@ -3065,8 +3063,6 @@
30653063
D22789352D64A0D3007E9DB0 /* UploadQualityMetric.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UploadQualityMetric.swift; sourceTree = "<group>"; };
30663064
D227A0A32C7622EA00C83324 /* BenchmarkProfiler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BenchmarkProfiler.swift; sourceTree = "<group>"; };
30673065
D22C1F5B271484B400922024 /* LogEventMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogEventMapper.swift; sourceTree = "<group>"; };
3068-
D22C5BC52A989D130024CC1F /* Baggages.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Baggages.swift; sourceTree = "<group>"; };
3069-
D22C5BCA2A98A5400024CC1F /* Baggages.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Baggages.swift; sourceTree = "<group>"; };
30703066
D22F06D529DAFD500026CC3C /* FixedWidthInteger+Convenience.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FixedWidthInteger+Convenience.swift"; sourceTree = "<group>"; };
30713067
D22F06D629DAFD500026CC3C /* TimeInterval+Convenience.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "TimeInterval+Convenience.swift"; sourceTree = "<group>"; };
30723068
D23039A5298D513C001A1FA3 /* DatadogInternal.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DatadogInternal.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -3220,6 +3216,7 @@
32203216
D2BEEDB12B335DA90065F3AC /* URLSessionTaskDelegateSwizzler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLSessionTaskDelegateSwizzler.swift; sourceTree = "<group>"; };
32213217
D2BEEDB42B33607D0065F3AC /* URLSessionSwizzler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLSessionSwizzler.swift; sourceTree = "<group>"; };
32223218
D2BEEDB72B3360F50065F3AC /* URLSessionTaskDelegateSwizzlerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLSessionTaskDelegateSwizzlerTests.swift; sourceTree = "<group>"; };
3219+
D2C179E02DD2388800556F68 /* SpanCoreContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpanCoreContext.swift; sourceTree = "<group>"; };
32233220
D2C1A55A29C4F2DF00946C31 /* DatadogTrace.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DatadogTrace.framework; sourceTree = BUILT_PRODUCTS_DIR; };
32243221
D2C1A57329C4F2E800946C31 /* DatadogTraceTests tvOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "DatadogTraceTests tvOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
32253222
D2C5D52A2B84F6AB00B63F36 /* WebViewRecordReceiver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebViewRecordReceiver.swift; sourceTree = "<group>"; };
@@ -6306,7 +6303,6 @@
63066303
616F1FAF283E227100651A3A /* LogsFeature.swift */,
63076304
D243BBF129A6209C000B9CEC /* RequestBuilder.swift */,
63086305
D243BBF429A620CC000B9CEC /* MessageReceivers.swift */,
6309-
D22C5BC52A989D130024CC1F /* Baggages.swift */,
63106306
);
63116307
path = Feature;
63126308
sourceTree = "<group>";
@@ -6335,7 +6331,6 @@
63356331
D2546C0329AF55AA0054E00B /* TraceFeature.swift */,
63366332
D2546C0729AF55E90054E00B /* RequestBuilder.swift */,
63376333
D2546C0A29AF56270054E00B /* MessageReceivers.swift */,
6338-
D22C5BCA2A98A5400024CC1F /* Baggages.swift */,
63396334
);
63406335
path = Feature;
63416336
sourceTree = "<group>";
@@ -6629,6 +6624,7 @@
66296624
D2D748342DC223EE00C61353 /* Trace */ = {
66306625
isa = PBXGroup;
66316626
children = (
6627+
D2C179E02DD2388800556F68 /* SpanCoreContext.swift */,
66326628
D2D748382DC2306100C61353 /* TraceID.swift */,
66336629
D2D748392DC2306100C61353 /* SpanID.swift */,
66346630
);
@@ -8805,7 +8801,6 @@
88058801
615D52BB2C88A83A00F8B8FC /* SynchronizedTags.swift in Sources */,
88068802
D243BBF529A620CC000B9CEC /* MessageReceivers.swift in Sources */,
88078803
615D52B82C888C1F00F8B8FC /* SynchronizedAttributes.swift in Sources */,
8808-
D22C5BC92A98A0B30024CC1F /* Baggages.swift in Sources */,
88098804
);
88108805
runOnlyForDeploymentPostprocessing = 0;
88118806
};
@@ -8846,7 +8841,6 @@
88468841
615D52BC2C88A83A00F8B8FC /* SynchronizedTags.swift in Sources */,
88478842
D243BBF629A620CC000B9CEC /* MessageReceivers.swift in Sources */,
88488843
615D52B92C888C1F00F8B8FC /* SynchronizedAttributes.swift in Sources */,
8849-
D22C5BC82A98A0B20024CC1F /* Baggages.swift in Sources */,
88508844
);
88518845
runOnlyForDeploymentPostprocessing = 0;
88528846
};
@@ -8958,6 +8952,7 @@
89588952
D23039E5298D5236001A1FA3 /* DateProvider.swift in Sources */,
89598953
D23039E0298D5235001A1FA3 /* DatadogCoreProtocol.swift in Sources */,
89608954
D23039FD298D5236001A1FA3 /* DataCompression.swift in Sources */,
8955+
D2C179E12DD2388800556F68 /* SpanCoreContext.swift in Sources */,
89618956
B3E46CAE2D91B40000BABF66 /* NetworkContext.swift in Sources */,
89628957
D2EA0F462C0E1AE300CB20F8 /* SessionReplayConfiguration.swift in Sources */,
89638958
6167E6F92B81E95900C3CA2D /* BinaryImage.swift in Sources */,
@@ -9371,7 +9366,6 @@
93719366
D2C1A50B29C4C4CB00946C31 /* SpanEventBuilder.swift in Sources */,
93729367
D2C1A4FF29C4C4CB00946C31 /* Warnings.swift in Sources */,
93739368
D2C1A51729C4C53F00946C31 /* OTFormat.swift in Sources */,
9374-
D22C5BCB2A98A5400024CC1F /* Baggages.swift in Sources */,
93759369
3CFF5D492B555F4F00FC483A /* OTelTracerProvider.swift in Sources */,
93769370
D2C1A4FA29C4C4CB00946C31 /* SpanSanitizer.swift in Sources */,
93779371
D2C1A50A29C4C4CB00946C31 /* TraceFeature.swift in Sources */,
@@ -9630,7 +9624,6 @@
96309624
D2C1A54C29C4F2DF00946C31 /* SpanEventBuilder.swift in Sources */,
96319625
D2C1A54D29C4F2DF00946C31 /* Warnings.swift in Sources */,
96329626
D2C1A54E29C4F2DF00946C31 /* OTFormat.swift in Sources */,
9633-
D22C5BCC2A98A5400024CC1F /* Baggages.swift in Sources */,
96349627
3CFF5D4A2B555F4F00FC483A /* OTelTracerProvider.swift in Sources */,
96359628
D2C1A54F29C4F2DF00946C31 /* SpanSanitizer.swift in Sources */,
96369629
D2C1A55029C4F2DF00946C31 /* TraceFeature.swift in Sources */,
@@ -10039,6 +10032,7 @@
1003910032
D2DA237C298D57AA00C6C7E6 /* DatadogCoreProtocol.swift in Sources */,
1004010033
D2DA237D298D57AA00C6C7E6 /* DataCompression.swift in Sources */,
1004110034
D2C9A26A2C0F3F5A007526F5 /* SessionReplayConfiguration.swift in Sources */,
10035+
D2C179E22DD2388800556F68 /* SpanCoreContext.swift in Sources */,
1004210036
B3E46CAF2D91B40000BABF66 /* NetworkContext.swift in Sources */,
1004310037
6167E6FA2B81E95900C3CA2D /* BinaryImage.swift in Sources */,
1004410038
6174D60D2BFDDEDF00EC7469 /* SDKMetricFields.swift in Sources */,
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0.
3+
* This product includes software developed at Datadog (https://www.datadoghq.com/).
4+
* Copyright 2019-Present Datadog, Inc.
5+
*/
6+
7+
import Foundation
8+
9+
/// The Trace context received from `Core`.
10+
public struct SpanCoreContext: AdditionalContext {
11+
public static let key = "span_context"
12+
13+
/// The Trace ID
14+
public let traceID: String
15+
/// The Span ID
16+
public let spanID: String
17+
18+
/// Creates a Span context.
19+
/// - Parameters:
20+
/// - traceID: The Trace ID
21+
/// - spanID: The Span ID
22+
public init(traceID: String, spanID: String) {
23+
self.traceID = traceID
24+
self.spanID = spanID
25+
}
26+
}

DatadogLogs/Sources/Feature/Baggages.swift

Lines changed: 0 additions & 21 deletions
This file was deleted.

DatadogLogs/Sources/RemoteLogger.swift

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -145,15 +145,9 @@ internal final class RemoteLogger: LoggerProtocol, Sendable {
145145
}
146146

147147
// When bundle with Trace is enabled, link RUM context (if available):
148-
if self.activeSpanIntegration, let spanContext = context.baggages[SpanContext.key] {
149-
do {
150-
let trace = try spanContext.decode(type: SpanContext.self)
151-
internalAttributes[LogEvent.Attributes.Trace.traceID] = trace.traceID?.toString(representation: .hexadecimal)
152-
internalAttributes[LogEvent.Attributes.Trace.spanID] = trace.spanID?.toString(representation: .decimal)
153-
} catch {
154-
self.featureScope.telemetry
155-
.error("Fails to decode Span context from Logs", error: error)
156-
}
148+
if self.activeSpanIntegration, let spanContext = context.additionalContext(ofType: SpanCoreContext.self) {
149+
internalAttributes[LogEvent.Attributes.Trace.traceID] = spanContext.traceID
150+
internalAttributes[LogEvent.Attributes.Trace.spanID] = spanContext.spanID
157151
}
158152

159153
// When binary images are requested, add them

DatadogLogs/Tests/RemoteLoggerTests.swift

Lines changed: 5 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -510,11 +510,11 @@ class RemoteLoggerTests: XCTestCase {
510510

511511
// When
512512
featureScope.contextMock = .mockWith(
513-
baggages: [
514-
"span_context": .init([
515-
"dd.trace_id": traceID.toString(representation: .hexadecimal),
516-
"dd.span_id": spanID.toString(representation: .decimal)
517-
])
513+
additionalContext: [
514+
SpanCoreContext(
515+
traceID: traceID.toString(representation: .hexadecimal),
516+
spanID: spanID.toString(representation: .decimal)
517+
)
518518
]
519519
)
520520
logger.info("message")
@@ -552,36 +552,4 @@ class RemoteLoggerTests: XCTestCase {
552552
XCTAssertNil(log.attributes.internalAttributes?["dd.span_id"])
553553
XCTAssertTrue(featureScope.telemetryMock.messages.isEmpty)
554554
}
555-
556-
func testWhenActiveSpanIntegrationIsEnabled_withMalformedRUMContext_itSendsTelemetryError() throws {
557-
// Given
558-
let logger = RemoteLogger(
559-
featureScope: featureScope,
560-
globalAttributes: .mockAny(),
561-
configuration: .mockAny(),
562-
dateProvider: RelativeDateProvider(),
563-
rumContextIntegration: false,
564-
activeSpanIntegration: true,
565-
backtraceReporter: BacktraceReporterMock()
566-
)
567-
568-
// When
569-
featureScope.contextMock = .mockWith(
570-
baggages: [
571-
"span_context": .init("malformed Span context")
572-
]
573-
)
574-
logger.info("message")
575-
576-
// Then
577-
let logs = featureScope.eventsWritten(ofType: LogEvent.self)
578-
XCTAssertEqual(logs.count, 1)
579-
580-
let log = try XCTUnwrap(logs.first)
581-
XCTAssertNil(log.attributes.internalAttributes?["dd.trace_id"])
582-
XCTAssertNil(log.attributes.internalAttributes?["dd.span_id"])
583-
584-
let error = try XCTUnwrap(featureScope.telemetryMock.messages.firstError())
585-
XCTAssert(error.message.contains("Fails to decode Span context from Logs - typeMismatch"))
586-
}
587555
}

DatadogTrace/Sources/DatadogTracer.swift

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,13 +169,12 @@ internal final class DatadogTracer: OTTracer, OpenTelemetryApi.Tracer {
169169
let context = activeSpan?.context as? DDSpanContext
170170

171171
featureScope.set(
172-
baggage: context.map {
172+
context: context.map {
173173
SpanCoreContext(
174174
traceID: String($0.traceID, representation: .hexadecimal),
175175
spanID: String($0.spanID, representation: .decimal)
176176
)
177-
},
178-
forKey: SpanCoreContext.key
177+
}
179178
)
180179
}
181180
// MARK: - OpenTelemetry

DatadogTrace/Sources/Feature/Baggages.swift

Lines changed: 0 additions & 19 deletions
This file was deleted.

0 commit comments

Comments
 (0)