@@ -11,21 +11,27 @@ import (
11
11
"github.com/cschleiden/go-workflows/internal/history"
12
12
"github.com/cschleiden/go-workflows/internal/payload"
13
13
"github.com/cschleiden/go-workflows/internal/task"
14
+ "github.com/cschleiden/go-workflows/internal/tracing"
14
15
"github.com/cschleiden/go-workflows/internal/workflow"
15
16
"github.com/cschleiden/go-workflows/log"
17
+ "go.opentelemetry.io/otel/attribute"
18
+ "go.opentelemetry.io/otel/trace"
16
19
)
17
20
18
21
type Executor struct {
19
22
logger log.Logger
23
+ tracer trace.Tracer
20
24
r * workflow.Registry
21
25
}
22
26
23
- func NewExecutor (logger log.Logger , r * workflow.Registry ) Executor {
27
+ func NewExecutor (logger log.Logger , tracer trace. Tracer , r * workflow.Registry ) Executor {
24
28
return Executor {
25
29
logger : logger ,
30
+ tracer : tracer ,
26
31
r : r ,
27
32
}
28
33
}
34
+
29
35
func (e * Executor ) ExecuteActivity (ctx context.Context , task * task.Activity ) (payload.Payload , error ) {
30
36
a := task .Event .Attributes .(* history.ActivityScheduledAttributes )
31
37
@@ -44,18 +50,28 @@ func (e *Executor) ExecuteActivity(ctx context.Context, task *task.Activity) (pa
44
50
return nil , fmt .Errorf ("converting activity inputs: %w" , err )
45
51
}
46
52
53
+ // Add activity state to context
47
54
as := NewActivityState (
48
55
task .Event .ID ,
49
56
task .WorkflowInstance ,
50
57
e .logger )
51
58
activityCtx := WithActivityState (ctx , as )
52
59
60
+ activityCtx = tracing .UnmarshalSpan (activityCtx , task .WorkflowMetadata )
61
+ activityCtx , span := e .tracer .Start (activityCtx , "ActivityTaskExecution" , trace .WithAttributes (
62
+ attribute .String ("activity" , a .Name ),
63
+ attribute .String (tracing .WorkflowInstanceID , task .WorkflowInstance .InstanceID ),
64
+ attribute .String (tracing .ActivityTaskID , task .ID ),
65
+ ))
66
+
67
+ // Execute activity
53
68
if addContext {
54
69
args [0 ] = reflect .ValueOf (activityCtx )
55
70
}
56
-
57
71
r := activityFn .Call (args )
58
72
73
+ defer span .End ()
74
+
59
75
if len (r ) < 1 || len (r ) > 2 {
60
76
return nil , errors .New ("activity has to return either (error) or (<result>, error)" )
61
77
}
0 commit comments