Skip to content

Commit

Permalink
RUMM-3374 Deprecate OTelHTTPHeaders* by renaming to B3HTTPHeaders*
Browse files Browse the repository at this point in the history
  • Loading branch information
ncreated committed Aug 18, 2023
1 parent 3afe2ea commit 4a3819c
Show file tree
Hide file tree
Showing 24 changed files with 274 additions and 261 deletions.
96 changes: 48 additions & 48 deletions Datadog/Datadog.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -115,11 +115,11 @@ internal struct DebugManualTraceInjectionView: View {
Tracer.shared().inject(spanContext: span.context, writer: writer)
writer.traceHeaderFields.forEach { request.setValue($0.value, forHTTPHeaderField: $0.key) }
case .b3Single:
let writer = OTelHTTPHeadersWriter(sampleRate: sampleRate, injectEncoding: .single)
let writer = B3HTTPHeadersWriter(sampleRate: sampleRate, injectEncoding: .single)
Tracer.shared().inject(spanContext: span.context, writer: writer)
writer.traceHeaderFields.forEach { request.setValue($0.value, forHTTPHeaderField: $0.key) }
case .b3Multiple:
let writer = OTelHTTPHeadersWriter(sampleRate: sampleRate, injectEncoding: .multiple)
let writer = B3HTTPHeadersWriter(sampleRate: sampleRate, injectEncoding: .multiple)
Tracer.shared().inject(spanContext: span.context, writer: writer)
writer.traceHeaderFields.forEach { request.setValue($0.value, forHTTPHeaderField: $0.key) }
}
Expand Down
28 changes: 14 additions & 14 deletions DatadogCore/Tests/Datadog/TracerTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -744,14 +744,14 @@ class TracerTests: XCTestCase {
XCTAssertEqual(httpHeadersWriter.traceHeaderFields, expectedHTTPHeaders2)
}

func testItInjectsSpanContextWithOTelHTTPHeadersWriter_usingMultipleHeaders() {
func testItInjectsSpanContextWithB3HTTPHeadersWriter_usingMultipleHeaders() {
Trace.enable(with: config, in: core)
let tracer = Tracer.shared(in: core)
let spanContext1 = DDSpanContext(traceID: 1, spanID: 2, parentSpanID: 3, baggageItems: .mockAny())
let spanContext2 = DDSpanContext(traceID: 4, spanID: 5, parentSpanID: 6, baggageItems: .mockAny())
let spanContext3 = DDSpanContext(traceID: 77, spanID: 88, parentSpanID: nil, baggageItems: .mockAny())

let httpHeadersWriter = OTelHTTPHeadersWriter(sampler: .mockKeepAll(), injectEncoding: .multiple)
let httpHeadersWriter = B3HTTPHeadersWriter(sampler: .mockKeepAll(), injectEncoding: .multiple)
XCTAssertEqual(httpHeadersWriter.traceHeaderFields, [:])

// When
Expand Down Expand Up @@ -790,14 +790,14 @@ class TracerTests: XCTestCase {
XCTAssertEqual(httpHeadersWriter.traceHeaderFields, expectedHTTPHeaders3)
}

func testItInjectsSpanContextWithOTelHTTPHeadersWriter_usingSingleHeader() {
func testItInjectsSpanContextWithB3HTTPHeadersWriter_usingSingleHeader() {
Trace.enable(with: config, in: core)
let tracer = Tracer.shared(in: core)
let spanContext1 = DDSpanContext(traceID: 1, spanID: 2, parentSpanID: 3, baggageItems: .mockAny())
let spanContext2 = DDSpanContext(traceID: 4, spanID: 5, parentSpanID: 6, baggageItems: .mockAny())
let spanContext3 = DDSpanContext(traceID: 77, spanID: 88, parentSpanID: nil, baggageItems: .mockAny())

let httpHeadersWriter = OTelHTTPHeadersWriter(sampler: .mockKeepAll(), injectEncoding: .single)
let httpHeadersWriter = B3HTTPHeadersWriter(sampler: .mockKeepAll(), injectEncoding: .single)
XCTAssertEqual(httpHeadersWriter.traceHeaderFields, [:])

// When
Expand Down Expand Up @@ -828,12 +828,12 @@ class TracerTests: XCTestCase {
XCTAssertEqual(httpHeadersWriter.traceHeaderFields, expectedHTTPHeaders3)
}

func testItInjectsRejectedSpanContextWithOTelHTTPHeadersWriter_usingSingleHeader() {
func testItInjectsRejectedSpanContextWithB3HTTPHeadersWriter_usingSingleHeader() {
Trace.enable(with: config, in: core)
let tracer = Tracer.shared(in: core)
let spanContext = DDSpanContext(traceID: 1, spanID: 2, parentSpanID: .mockAny(), baggageItems: .mockAny())

let httpHeadersWriter = OTelHTTPHeadersWriter(sampler: .mockRejectAll())
let httpHeadersWriter = B3HTTPHeadersWriter(sampler: .mockRejectAll())
XCTAssertEqual(httpHeadersWriter.traceHeaderFields, [:])

// When
Expand All @@ -846,12 +846,12 @@ class TracerTests: XCTestCase {
XCTAssertEqual(httpHeadersWriter.traceHeaderFields, expectedHTTPHeaders)
}

func testItInjectsRejectedSpanContextWithOTelHTTPHeadersWriter_usingMultipleHeader() {
func testItInjectsRejectedSpanContextWithB3HTTPHeadersWriter_usingMultipleHeader() {
Trace.enable(with: config, in: core)
let tracer = Tracer.shared(in: core)
let spanContext = DDSpanContext(traceID: 1, spanID: 2, parentSpanID: .mockAny(), baggageItems: .mockAny())

let httpHeadersWriter = OTelHTTPHeadersWriter(sampler: .mockRejectAll(), injectEncoding: .multiple)
let httpHeadersWriter = B3HTTPHeadersWriter(sampler: .mockRejectAll(), injectEncoding: .multiple)
XCTAssertEqual(httpHeadersWriter.traceHeaderFields, [:])

// When
Expand Down Expand Up @@ -956,15 +956,15 @@ class TracerTests: XCTestCase {
XCTAssertNil(extractedSpanContext?.dd.parentSpanID)
}

func testItExtractsSpanContextWithOTelHTTPHeadersReader_forMultipleHeaders() {
func testItExtractsSpanContextWithB3HTTPHeadersReader_forMultipleHeaders() {
Trace.enable(with: config, in: core)
let tracer = Tracer.shared(in: core)
let injectedSpanContext = DDSpanContext(traceID: 1, spanID: 2, parentSpanID: 3, baggageItems: .mockAny())

let httpHeadersWriter = OTelHTTPHeadersWriter(sampler: .mockKeepAll(), injectEncoding: .multiple)
let httpHeadersWriter = B3HTTPHeadersWriter(sampler: .mockKeepAll(), injectEncoding: .multiple)
tracer.inject(spanContext: injectedSpanContext, writer: httpHeadersWriter)

let httpHeadersReader = OTelHTTPHeadersReader(
let httpHeadersReader = B3HTTPHeadersReader(
httpHeaderFields: httpHeadersWriter.traceHeaderFields
)
let extractedSpanContext = tracer.extract(reader: httpHeadersReader)
Expand All @@ -974,15 +974,15 @@ class TracerTests: XCTestCase {
XCTAssertEqual(extractedSpanContext?.dd.parentSpanID, injectedSpanContext.dd.parentSpanID)
}

func testItExtractsSpanContextWithOTelHTTPHeadersReader_forSingleHeader() {
func testItExtractsSpanContextWithB3HTTPHeadersReader_forSingleHeader() {
Trace.enable(with: config, in: core)
let tracer = Tracer.shared(in: core)
let injectedSpanContext = DDSpanContext(traceID: 1, spanID: 2, parentSpanID: 3, baggageItems: .mockAny())

let httpHeadersWriter = OTelHTTPHeadersWriter(sampler: .mockKeepAll(), injectEncoding: .single)
let httpHeadersWriter = B3HTTPHeadersWriter(sampler: .mockKeepAll(), injectEncoding: .single)
tracer.inject(spanContext: injectedSpanContext, writer: httpHeadersWriter)

let httpHeadersReader = OTelHTTPHeadersReader(
let httpHeadersReader = B3HTTPHeadersReader(
httpHeaderFields: httpHeadersWriter.traceHeaderFields
)
let extractedSpanContext = tracer.extract(reader: httpHeadersReader)
Expand Down
12 changes: 6 additions & 6 deletions DatadogCore/Tests/DatadogObjc/DDTracerTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -248,14 +248,14 @@ class DDTracerTests: XCTestCase {
)
}

func testInjectingSpanContextToValidCarrierAndFormatForOTel() throws {
func testInjectingSpanContextToValidCarrierAndFormatForB3() throws {
Trace.enable(with: config)
let objcTracer = DDTracer.shared()
let objcSpanContext = DDSpanContextObjc(
swiftSpanContext: DDSpanContext.mockWith(traceID: 1, spanID: 2)
)

let objcWriter = DDOTelHTTPHeadersWriter(sampleRate: 100)
let objcWriter = DDB3HTTPHeadersWriter(sampleRate: 100)
try objcTracer.inject(objcSpanContext, format: OT.formatTextMap, carrier: objcWriter)

let expectedHTTPHeaders = [
Expand All @@ -264,14 +264,14 @@ class DDTracerTests: XCTestCase {
XCTAssertEqual(objcWriter.traceHeaderFields, expectedHTTPHeaders)
}

func testInjectingRejectedSpanContextToValidCarrierAndFormatForOTel() throws {
func testInjectingRejectedSpanContextToValidCarrierAndFormatForB3() throws {
Trace.enable(with: config)
let objcTracer = DDTracer.shared()
let objcSpanContext = DDSpanContextObjc(
swiftSpanContext: DDSpanContext.mockWith(traceID: 1, spanID: 2)
)

let objcWriter = DDOTelHTTPHeadersWriter(sampleRate: 0)
let objcWriter = DDB3HTTPHeadersWriter(sampleRate: 0)
try objcTracer.inject(objcSpanContext, format: OT.formatTextMap, carrier: objcWriter)

let expectedHTTPHeaders = [
Expand All @@ -280,12 +280,12 @@ class DDTracerTests: XCTestCase {
XCTAssertEqual(objcWriter.traceHeaderFields, expectedHTTPHeaders)
}

func testInjectingSpanContextToInvalidCarrierOrFormatForOTel() throws {
func testInjectingSpanContextToInvalidCarrierOrFormatForB3() throws {
Trace.enable(with: config)
let objcTracer = DDTracer.shared()
let objcSpanContext = DDSpanContextObjc(swiftSpanContext: DDSpanContext.mockWith(traceID: 1, spanID: 2))

let objcValidWriter = DDOTelHTTPHeadersWriter(sampleRate: 100)
let objcValidWriter = DDB3HTTPHeadersWriter(sampleRate: 100)
let objcInvalidFormat = "foo"
XCTAssertThrowsError(
try objcTracer.inject(objcSpanContext, format: objcInvalidFormat, carrier: objcValidWriter)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,19 @@
#import <XCTest/XCTest.h>
@import DatadogObjc;

@interface DDOTelHTTPHeadersWriter_apiTests : XCTestCase
@interface DDB3HTTPHeadersWriter_apiTests : XCTestCase
@end

/*
* `DatadogObjc` APIs smoke tests - only check if the interface is available to Objc.
*/
@implementation DDOTelHTTPHeadersWriter_apiTests
@implementation DDB3HTTPHeadersWriter_apiTests

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-value"

- (void)testInitWithSamplingRate {
[[DDOTelHTTPHeadersWriter alloc] initWithSampleRate:100 injectEncoding:DDInjectEncodingSingle];
[[DDB3HTTPHeadersWriter alloc] initWithSampleRate:100 injectEncoding:DDInjectEncodingSingle];
}

#pragma clang diagnostic pop
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,12 @@

import Foundation

/// Open Telemetry propagation headers as explained in
@available(*, deprecated, renamed: "B3HTTPHeaders")
public typealias OTelHTTPHeaders = B3HTTPHeaders

/// B3 propagation headers as explained in
/// https://github.com/openzipkin/b3-propagation/blob/master/RATIONALE.md
public enum OTelHTTPHeaders {
public enum B3HTTPHeaders {
public enum Multiple {
/// The `X-B3-TraceId` header is encoded as 32 or 16 lower-hex characters.
/// For example, a 128-bit TraceId header might look like: `X-B3-TraceId: 463ac35c9f6413ad48485a3953bb6124`.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,28 +6,31 @@

import Foundation

public class OTelHTTPHeadersReader: TracePropagationHeadersReader {
@available(*, deprecated, renamed: "B3HTTPHeadersReader")
public typealias OTelHTTPHeadersReader = B3HTTPHeadersReader

public class B3HTTPHeadersReader: TracePropagationHeadersReader {
private let httpHeaderFields: [String: String]

public init(httpHeaderFields: [String: String]) {
self.httpHeaderFields = httpHeaderFields
}

public func read() -> (traceID: TraceID, spanID: SpanID, parentSpanID: SpanID?)? {
if let traceIDValue = httpHeaderFields[OTelHTTPHeaders.Multiple.traceIDField],
let spanIDValue = httpHeaderFields[OTelHTTPHeaders.Multiple.spanIDField],
if let traceIDValue = httpHeaderFields[B3HTTPHeaders.Multiple.traceIDField],
let spanIDValue = httpHeaderFields[B3HTTPHeaders.Multiple.spanIDField],
let traceID = TraceID(traceIDValue, representation: .hexadecimal),
let spanID = TraceID(spanIDValue, representation: .hexadecimal) {
return (
traceID: traceID,
spanID: spanID,
parentSpanID: httpHeaderFields[OTelHTTPHeaders.Multiple.parentSpanIDField]
parentSpanID: httpHeaderFields[B3HTTPHeaders.Multiple.parentSpanIDField]
.flatMap { TraceID($0, representation: .hexadecimal) }
)
}

let b3Value = httpHeaderFields[OTelHTTPHeaders.Single.b3Field]?
.components(separatedBy: OTelHTTPHeaders.Constants.b3Separator)
let b3Value = httpHeaderFields[B3HTTPHeaders.Single.b3Field]?
.components(separatedBy: B3HTTPHeaders.Constants.b3Separator)

if let traceIDValue = b3Value?[safe: 0],
let spanIDValue = b3Value?[safe: 1],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,17 @@

import Foundation

/// The `OTelHTTPHeadersWriter` class facilitates the injection of trace propagation headers into network requests
@available(*, deprecated, renamed: "B3HTTPHeadersWriter")
public typealias OTelHTTPHeadersWriter = B3HTTPHeadersWriter

/// The `B3HTTPHeadersWriter` class facilitates the injection of trace propagation headers into network requests
/// targeted at a backend expecting [B3 propagation format](https://github.com/openzipkin/b3-propagation).
///
/// Usage:
///
/// var request = URLRequest(...)
///
/// let writer = OTelHTTPHeadersWriter(injectEncoding: .single)
/// let writer = B3HTTPHeadersWriter(injectEncoding: .single)
/// let span = Tracer.shared().startRootSpan(operationName: "network request")
/// Tracer.shared().inject(spanContext: span.context, writer: writer)
///
Expand All @@ -23,8 +26,8 @@ import Foundation
///
/// // call span.finish() when the request completes
///
public class OTelHTTPHeadersWriter: TracePropagationHeadersWriter {
/// Enumerates Open Telemetry header encoding options.
public class B3HTTPHeadersWriter: TracePropagationHeadersWriter {
/// Enumerates B3 header encoding options.
///
/// There are two encodings of B3 propagation:
/// [Single Header](https://github.com/openzipkin/b3-propagation#single-header)
Expand Down Expand Up @@ -66,7 +69,7 @@ public class OTelHTTPHeadersWriter: TracePropagationHeadersWriter {
/// Initializes the headers writer.
///
/// - Parameter samplingRate: The sampling rate applied for headers injection.
/// - Parameter injectEncoding: The OTel header encoding type, with `.single` as the default.
/// - Parameter injectEncoding: The B3 header encoding type, with `.single` as the default.
@available(*, deprecated, message: "This will be removed in future versions of the SDK. Use `init(sampleRate:injectEncoding:)` instead.")
public convenience init(
samplingRate: Float,
Expand All @@ -78,7 +81,7 @@ public class OTelHTTPHeadersWriter: TracePropagationHeadersWriter {
/// Initializes the headers writer.
///
/// - Parameter sampleRate: The sampling rate applied for headers injection, with 20% as the default.
/// - Parameter injectEncoding: The OTel header encoding type, with `.single` as the default.
/// - Parameter injectEncoding: The B3 header encoding type, with `.single` as the default.
public convenience init(
sampleRate: Float = 20,
injectEncoding: InjectEncoding = .single
Expand All @@ -92,7 +95,7 @@ public class OTelHTTPHeadersWriter: TracePropagationHeadersWriter {
/// Initializes the headers writer.
///
/// - Parameter sampler: The sampler used for headers injection.
/// - Parameter injectEncoding: The OTel header encoding type, with `.single` as the default.
/// - Parameter injectEncoding: The B3 header encoding type, with `.single` as the default.
public init(
sampler: Sampler,
injectEncoding: InjectEncoding = .single
Expand All @@ -109,22 +112,22 @@ public class OTelHTTPHeadersWriter: TracePropagationHeadersWriter {
public func write(traceID: TraceID, spanID: SpanID, parentSpanID: SpanID?) {
let samplingPriority = sampler.sample()

typealias Constants = OTelHTTPHeaders.Constants
typealias Constants = B3HTTPHeaders.Constants

switch injectEncoding {
case .multiple:
traceHeaderFields = [
OTelHTTPHeaders.Multiple.sampledField: samplingPriority ? Constants.sampledValue : Constants.unsampledValue
B3HTTPHeaders.Multiple.sampledField: samplingPriority ? Constants.sampledValue : Constants.unsampledValue
]

if samplingPriority {
traceHeaderFields[OTelHTTPHeaders.Multiple.traceIDField] = String(traceID, representation: .hexadecimal32Chars)
traceHeaderFields[OTelHTTPHeaders.Multiple.spanIDField] = String(spanID, representation: .hexadecimal16Chars)
traceHeaderFields[OTelHTTPHeaders.Multiple.parentSpanIDField] = parentSpanID.map { String($0, representation: .hexadecimal16Chars) }
traceHeaderFields[B3HTTPHeaders.Multiple.traceIDField] = String(traceID, representation: .hexadecimal32Chars)
traceHeaderFields[B3HTTPHeaders.Multiple.spanIDField] = String(spanID, representation: .hexadecimal16Chars)
traceHeaderFields[B3HTTPHeaders.Multiple.parentSpanIDField] = parentSpanID.map { String($0, representation: .hexadecimal16Chars) }
}
case .single:
if samplingPriority {
traceHeaderFields[OTelHTTPHeaders.Single.b3Field] = [
traceHeaderFields[B3HTTPHeaders.Single.b3Field] = [
String(traceID, representation: .hexadecimal32Chars),
String(spanID, representation: .hexadecimal16Chars),
samplingPriority ? Constants.sampledValue : Constants.unsampledValue,
Expand All @@ -133,7 +136,7 @@ public class OTelHTTPHeadersWriter: TracePropagationHeadersWriter {
.compactMap { $0 }
.joined(separator: Constants.b3Separator)
} else {
traceHeaderFields[OTelHTTPHeaders.Single.b3Field] = Constants.unsampledValue
traceHeaderFields[B3HTTPHeaders.Single.b3Field] = Constants.unsampledValue
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ extension NetworkInstrumentationFeature {
if tracingHeaderTypes.contains(.datadog) {
reader = HTTPHeadersReader(httpHeaderFields: headers)
} else if tracingHeaderTypes.contains(.b3) || tracingHeaderTypes.contains(.b3multi) {
reader = OTelHTTPHeadersReader(httpHeaderFields: headers)
reader = B3HTTPHeadersReader(httpHeaderFields: headers)
} else {
reader = W3CHTTPHeadersReader(httpHeaderFields: headers)
}
Expand Down
Loading

0 comments on commit 4a3819c

Please sign in to comment.