Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions Sources/Tracing/TracerProtocol+Legacy.swift
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,7 @@ extension LegacyTracer {
}
} catch {
span.recordError(error)
span.setStatus(.init(code: .error))
throw error // rethrow
}
}
Expand Down Expand Up @@ -333,6 +334,7 @@ extension LegacyTracer {
}
} catch {
span.recordError(error)
span.setStatus(.init(code: .error))
throw error // rethrow
}
}
Expand Down Expand Up @@ -383,6 +385,7 @@ extension LegacyTracer {
}
} catch {
span.recordError(error)
span.setStatus(.init(code: .error))
throw error // rethrow
}
}
Expand Down Expand Up @@ -437,6 +440,7 @@ extension LegacyTracer {
}
} catch {
span.recordError(error)
span.setStatus(.init(code: .error))
throw error // rethrow
}
}
Expand Down Expand Up @@ -485,6 +489,7 @@ extension LegacyTracer {
}
} catch {
span.recordError(error)
span.setStatus(.init(code: .error))
throw error // rethrow
}
}
Expand Down
6 changes: 6 additions & 0 deletions Sources/Tracing/TracerProtocol.swift
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ extension Tracer {
}
} catch {
span.recordError(error)
span.setStatus(.init(code: .error))
throw error // rethrow
}
}
Expand Down Expand Up @@ -231,6 +232,7 @@ extension Tracer {
}
} catch {
span.recordError(error)
span.setStatus(.init(code: .error))
throw error // rethrow
}
}
Expand Down Expand Up @@ -284,6 +286,7 @@ extension Tracer {
}
} catch {
span.recordError(error)
span.setStatus(.init(code: .error))
throw error // rethrow
}
}
Expand Down Expand Up @@ -321,6 +324,7 @@ extension Tracer {
}
} catch {
span.recordError(error)
span.setStatus(.init(code: .error))
throw error // rethrow
}
}
Expand Down Expand Up @@ -375,6 +379,7 @@ extension Tracer {
}
} catch {
span.recordError(error)
span.setStatus(.init(code: .error))
throw error // rethrow
}
}
Expand Down Expand Up @@ -425,6 +430,7 @@ extension Tracer {
}
} catch {
span.recordError(error)
span.setStatus(.init(code: .error))
throw error // rethrow
}
}
Expand Down
2 changes: 1 addition & 1 deletion Tests/TracingTests/TestTracer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ extension ServiceContext {
final class TestSpan: Span {
let kind: SpanKind

private var status: SpanStatus?
var status: SpanStatus?

package let startTimestampNanosSinceEpoch: UInt64
package private(set) var endTimestampNanosSinceEpoch: UInt64?
Expand Down
32 changes: 21 additions & 11 deletions Tests/TracingTests/TracerTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -78,14 +78,19 @@ struct TracerTests {
let tracer = TestTracer()

var spanEnded = false
tracer.onEndSpan = { _ in spanEnded = true }
var spanStatus: SpanStatus? = nil
tracer.onEndSpan = { span in
spanEnded = true
spanStatus = span.status
}

do {
_ = try tracer.withAnySpan("hello", context: .topLevel) { _ in
throw ExampleSpanError()
}
} catch {
#expect(spanEnded == true)
#expect(spanStatus?.code == .error)
#expect(error as? ExampleSpanError == ExampleSpanError())
return
}
Expand Down Expand Up @@ -117,7 +122,11 @@ struct TracerTests {
let tracer = TestTracer()

var spanEnded = false
tracer.onEndSpan = { _ in spanEnded = true }
var spanStatus: SpanStatus? = nil
tracer.onEndSpan = { span in
spanEnded = true
spanStatus = span.status
}

func operation(span: any Tracing.Span) throws -> String {
throw ExampleSpanError()
Expand All @@ -127,6 +136,7 @@ struct TracerTests {
_ = try tracer.withAnySpan("hello", operation)
} catch {
#expect(spanEnded == true)
#expect(spanStatus?.code == .error)
#expect(error as? ExampleSpanError == ExampleSpanError())
return
}
Expand Down Expand Up @@ -181,8 +191,8 @@ struct TracerTests {
func withSpan_automaticBaggagePropagation_async_throws() async throws {
let tracer = TestTracer()

let spanEnded: LockedValueBox<Bool> = .init(false)
tracer.onEndSpan = { _ in spanEnded.withValue { $0 = true } }
let endedSpan: LockedValueBox<TestSpan?> = .init(nil)
tracer.onEndSpan = { span in endedSpan.withValue { $0 = span } }

let operation: @Sendable (any Tracing.Span) async throws -> String = { _ in
throw ExampleSpanError()
Expand All @@ -191,7 +201,7 @@ struct TracerTests {
do {
_ = try await tracer.withAnySpan("hello", operation)
} catch {
#expect(spanEnded.withValue { $0 } == true)
#expect(endedSpan.withValue { $0?.status?.code } == .error)
#expect(error as? ExampleSpanError == ExampleSpanError())
return
}
Expand All @@ -202,8 +212,8 @@ struct TracerTests {
func static_Tracer_withSpan_automaticBaggagePropagation_async_throws() async throws {
let tracer = TestTracer()

let spanEnded: LockedValueBox<Bool> = .init(false)
tracer.onEndSpan = { _ in spanEnded.withValue { $0 = true } }
let endedSpan: LockedValueBox<TestSpan?> = .init(nil)
tracer.onEndSpan = { span in endedSpan.withValue { $0 = span } }

let operation: @Sendable (any Tracing.Span) async throws -> String = { _ in
throw ExampleSpanError()
Expand All @@ -212,7 +222,7 @@ struct TracerTests {
do {
_ = try await tracer.withSpan("hello", operation)
} catch {
#expect(spanEnded.withValue { $0 } == true)
#expect(endedSpan.withValue { $0?.status?.code } == .error)
#expect(error as? ExampleSpanError == ExampleSpanError())
return
}
Expand All @@ -223,8 +233,8 @@ struct TracerTests {
func static_Tracer_withSpan_automaticBaggagePropagation_throws() async throws {
let tracer = TestTracer()

let spanEnded: LockedValueBox<Bool> = .init(false)
tracer.onEndSpan = { _ in spanEnded.withValue { $0 = true } }
let endedSpan: LockedValueBox<TestSpan?> = .init(nil)
tracer.onEndSpan = { span in endedSpan.withValue { $0 = span } }

let operation: @Sendable (any Tracing.Span) async throws -> String = { _ in
throw ExampleSpanError()
Expand All @@ -233,7 +243,7 @@ struct TracerTests {
do {
_ = try await tracer.withSpan("hello", operation)
} catch {
#expect(spanEnded.withValue { $0 } == true)
#expect(endedSpan.withValue { $0?.status?.code } == .error)
#expect(error as? ExampleSpanError == ExampleSpanError())
return
}
Expand Down