6
6
"github.com/cschleiden/go-workflows/internal/contextpropagation"
7
7
"github.com/cschleiden/go-workflows/internal/core"
8
8
"github.com/cschleiden/go-workflows/internal/sync"
9
+ "github.com/cschleiden/go-workflows/internal/workflowtracer"
9
10
"go.opentelemetry.io/otel/propagation"
10
11
"go.opentelemetry.io/otel/trace"
11
12
)
@@ -15,52 +16,40 @@ var propagator propagation.TextMapPropagator = propagation.NewCompositeTextMapPr
15
16
propagation.Baggage {},
16
17
)
17
18
18
- func InjectSpan (ctx context.Context , metadata * core.WorkflowMetadata ) {
19
+ func injectSpan (ctx context.Context , metadata * core.WorkflowMetadata ) {
19
20
propagator .Inject (ctx , metadata )
20
21
}
21
22
22
- func ExtractSpan (ctx context.Context , metadata * core.WorkflowMetadata ) context.Context {
23
+ func extractSpan (ctx context.Context , metadata * core.WorkflowMetadata ) context.Context {
23
24
return propagator .Extract (ctx , metadata )
24
25
}
25
26
26
- type traceContextKeyType int
27
-
28
- const currentSpanKey traceContextKeyType = iota
29
-
30
- func WorkflowContextWithSpan (ctx sync.Context , span trace.Span ) sync.Context {
31
- return sync .WithValue (ctx , currentSpanKey , span )
32
- }
33
-
34
- func SpanFromWorkflowContext (ctx sync.Context ) trace.Span {
35
- if span , ok := ctx .Value (currentSpanKey ).(trace.Span ); ok {
36
- return span
37
- }
38
-
39
- panic ("no span in context" )
40
- }
41
-
42
27
type TracingContextPropagator struct {
43
28
}
44
29
45
30
var _ contextpropagation.ContextPropagator = & TracingContextPropagator {}
46
31
47
32
func (* TracingContextPropagator ) Inject (ctx context.Context , metadata * core.WorkflowMetadata ) error {
48
- InjectSpan (ctx , metadata )
33
+ injectSpan (ctx , metadata )
49
34
return nil
50
35
}
51
36
52
37
func (* TracingContextPropagator ) Extract (ctx context.Context , metadata * core.WorkflowMetadata ) (context.Context , error ) {
53
- return ExtractSpan (ctx , metadata ), nil
38
+ return extractSpan (ctx , metadata ), nil
54
39
}
55
40
56
41
func (* TracingContextPropagator ) InjectFromWorkflow (ctx sync.Context , metadata * core.WorkflowMetadata ) error {
57
- // Ignore
42
+ span := workflowtracer .SpanFromContext (ctx )
43
+ sctx := trace .ContextWithSpan (context .Background (), span )
44
+
45
+ injectSpan (sctx , metadata )
58
46
59
47
return nil
60
48
}
61
49
62
50
func (* TracingContextPropagator ) ExtractToWorkflow (ctx sync.Context , metadata * core.WorkflowMetadata ) (sync.Context , error ) {
63
- // Ignore
51
+ sctx := extractSpan (context .Background (), metadata )
52
+ span := trace .SpanFromContext (sctx )
64
53
65
- return ctx , nil
54
+ return workflowtracer . ContextWithSpan ( ctx , span ) , nil
66
55
}
0 commit comments