5
5
6
6
require "opentelemetry"
7
7
8
- require "traces/ context"
8
+ require_relative " context"
9
9
require_relative "version"
10
10
11
11
module Traces
@@ -21,20 +21,30 @@ def trace(name, attributes: nil, &block)
21
21
end
22
22
23
23
def trace_context = ( context )
24
- span_context = ::OpenTelemetry ::Trace ::SpanContext . new (
25
- trace_id : context . trace_id ,
26
- span_id : context . parent_id ,
27
- trace_flags : ::OpenTelemetry ::Trace ::TraceFlags . from_byte ( context . flags ) ,
28
- tracestate : context . state ,
29
- remote : context . remote?
30
- )
24
+ if context . context
25
+ context = context . context
26
+ else
27
+ span_context = ::OpenTelemetry ::Trace ::SpanContext . new (
28
+ trace_id : context . trace_id ,
29
+ span_id : context . parent_id ,
30
+ trace_flags : ::OpenTelemetry ::Trace ::TraceFlags . from_byte ( context . flags ) ,
31
+ tracestate : context . state ,
32
+ remote : context . remote?
33
+ )
34
+
35
+ span = ::OpenTelemetry ::Trace . non_recording_span ( span_context )
36
+ context = ::OpenTelemetry ::Trace . context_with_span ( span )
37
+ end
31
38
32
- span = ::OpenTelemetry ::Trace . non_recording_span ( span_context )
33
- context = ::OpenTelemetry ::Trace . context_with_span ( span )
34
39
::OpenTelemetry ::Context . attach ( context )
35
40
end
36
41
37
- def trace_context ( span = ::OpenTelemetry ::Trace . current_span )
42
+ def trace_context ( span = nil )
43
+ if span . nil?
44
+ span = ::OpenTelemetry ::Trace . current_span
45
+ context = ::OpenTelemetry ::Context . current
46
+ end
47
+
38
48
if span_context = span . context
39
49
flags = 0
40
50
@@ -47,7 +57,8 @@ def trace_context(span = ::OpenTelemetry::Trace.current_span)
47
57
span_context . span_id ,
48
58
flags ,
49
59
span_context . tracestate ,
50
- remote : span_context . remote?
60
+ remote : span_context . remote? ,
61
+ context : context ,
51
62
)
52
63
end
53
64
end
0 commit comments