forked from cschleiden/go-workflows
/
tracing.go
55 lines (41 loc) · 1.66 KB
/
tracing.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package tracing
import (
"context"
"github.com/cschleiden/go-workflows/internal/contextpropagation"
"github.com/cschleiden/go-workflows/internal/core"
"github.com/cschleiden/go-workflows/internal/sync"
"github.com/cschleiden/go-workflows/internal/workflowtracer"
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/trace"
)
var propagator propagation.TextMapPropagator = propagation.NewCompositeTextMapPropagator(
propagation.TraceContext{},
propagation.Baggage{},
)
func injectSpan(ctx context.Context, metadata *core.WorkflowMetadata) {
propagator.Inject(ctx, metadata)
}
func extractSpan(ctx context.Context, metadata *core.WorkflowMetadata) context.Context {
return propagator.Extract(ctx, metadata)
}
type TracingContextPropagator struct {
}
var _ contextpropagation.ContextPropagator = &TracingContextPropagator{}
func (*TracingContextPropagator) Inject(ctx context.Context, metadata *core.WorkflowMetadata) error {
injectSpan(ctx, metadata)
return nil
}
func (*TracingContextPropagator) Extract(ctx context.Context, metadata *core.WorkflowMetadata) (context.Context, error) {
return extractSpan(ctx, metadata), nil
}
func (*TracingContextPropagator) InjectFromWorkflow(ctx sync.Context, metadata *core.WorkflowMetadata) error {
span := workflowtracer.SpanFromContext(ctx)
sctx := trace.ContextWithSpan(context.Background(), span)
injectSpan(sctx, metadata)
return nil
}
func (*TracingContextPropagator) ExtractToWorkflow(ctx sync.Context, metadata *core.WorkflowMetadata) (sync.Context, error) {
sctx := extractSpan(context.Background(), metadata)
span := trace.SpanFromContext(sctx)
return workflowtracer.ContextWithSpan(ctx, span), nil
}