-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathoptions.go
More file actions
136 lines (121 loc) · 5.17 KB
/
Copy pathoptions.go
File metadata and controls
136 lines (121 loc) · 5.17 KB
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package temporalsentryinterceptor
import (
"context"
"time"
"github.com/getsentry/sentry-go"
"go.temporal.io/sdk/activity"
"go.temporal.io/sdk/temporal"
"go.temporal.io/sdk/workflow"
)
type (
// ConfigureSentryScopeFunc defines a function to configure Sentry scope with context and request data.
ConfigureSentryScopeFunc = func(
ctx context.Context, request []any, eventName string, activityInfo *activity.Info, workflowInfo *workflow.Info,
) func(scope *sentry.Scope)
// FilterWorkflowErrorFunc defines a function to filter workflow errors before reporting to Sentry.
FilterWorkflowErrorFunc = func(err error, request []any, info *workflow.Info) bool
// FilterWorkflowPanicFunc defines a function to filter workflow panics before reporting to Sentry.
FilterWorkflowPanicFunc = func(p any, request []any, info *workflow.Info) bool
// FilterActivityErrorFunc defines a function to filter activity errors before reporting to Sentry.
FilterActivityErrorFunc = func(err error, request []any, info *activity.Info) bool
// FilterActivityPanicFunc defines a function to filter activity panics before reporting to Sentry.
FilterActivityPanicFunc = func(p any, request []any, info *activity.Info) bool
// Option defines a configuration option for the interceptor.
Option = func(*options)
)
// options holds configuration settings for the Temporal Sentry interceptor.
type options struct {
configureSentryScope ConfigureSentryScopeFunc
filterWorkflowError FilterWorkflowErrorFunc
filterWorkflowPanic FilterWorkflowPanicFunc
filterActivityError FilterActivityErrorFunc
filterActivityPanic FilterActivityPanicFunc
workflowPanicActivityOptions workflow.LocalActivityOptions
workflowErrorActivityOptions workflow.LocalActivityOptions
}
// defaultOptions returns default configuration options for the interceptor.
func defaultOptions() *options {
o := &options{
configureSentryScope: func(
_ context.Context, _ []any, eventName string, activityInfo *activity.Info, workflowInfo *workflow.Info,
) func(scope *sentry.Scope) {
return func(scope *sentry.Scope) {
scope.SetTag("temporal.event_type", eventName)
if workflowInfo != nil {
scope.SetTag("temporal.workflow_type", workflowInfo.WorkflowType.Name)
scope.SetExtra("temporal.workflow_id", workflowInfo.WorkflowExecution.ID)
scope.SetExtra("temporal.workflow_run_id", workflowInfo.WorkflowExecution.RunID)
scope.SetExtra("temporal.workflow_task_queue", workflowInfo.TaskQueueName)
scope.SetExtra("temporal.workflow_attempt", workflowInfo.Attempt)
}
if activityInfo != nil {
scope.SetTag("temporal.activity_type", activityInfo.ActivityType.Name)
scope.SetExtra("temporal.activity_id", activityInfo.ActivityID)
scope.SetExtra("temporal.activity_task_queue", activityInfo.TaskQueue)
scope.SetExtra("temporal.activity_attempt", activityInfo.Attempt)
}
}
},
filterWorkflowError: nil,
filterWorkflowPanic: nil,
filterActivityError: nil,
filterActivityPanic: nil,
workflowPanicActivityOptions: workflow.LocalActivityOptions{
Summary: "ReportPanicToSentry",
ScheduleToCloseTimeout: 5 * time.Second,
RetryPolicy: &temporal.RetryPolicy{
MaximumAttempts: 1,
},
},
workflowErrorActivityOptions: workflow.LocalActivityOptions{
Summary: "ReportErrorToSentry",
ScheduleToCloseTimeout: 5 * time.Second,
RetryPolicy: &temporal.RetryPolicy{
MaximumAttempts: 1,
},
},
}
return o
}
// WithConfigureSentryScope sets a custom function to configure Sentry scope.
func WithConfigureSentryScope(configureSentryScope ConfigureSentryScopeFunc) Option {
return func(o *options) {
o.configureSentryScope = configureSentryScope
}
}
// WithFilterWorkflowError sets a filter function for workflow errors.
func WithFilterWorkflowError(filterWorkflowError FilterWorkflowErrorFunc) Option {
return func(o *options) {
o.filterWorkflowError = filterWorkflowError
}
}
// WithFilterWorkflowPanic sets a filter function for workflow panics.
func WithFilterWorkflowPanic(filterWorkflowPanic FilterWorkflowPanicFunc) Option {
return func(o *options) {
o.filterWorkflowPanic = filterWorkflowPanic
}
}
// WithFilterActivityError sets a filter function for activity errors.
func WithFilterActivityError(filterActivityError FilterActivityErrorFunc) Option {
return func(o *options) {
o.filterActivityError = filterActivityError
}
}
// WithFilterActivityPanic sets a filter function for activity panics.
func WithFilterActivityPanic(filterActivityPanic FilterActivityPanicFunc) Option {
return func(o *options) {
o.filterActivityPanic = filterActivityPanic
}
}
// WithWorkflowPanicActivityOptions sets custom activity options for panic reporting.
func WithWorkflowPanicActivityOptions(workflowPanicActivityOptions workflow.LocalActivityOptions) Option {
return func(o *options) {
o.workflowPanicActivityOptions = workflowPanicActivityOptions
}
}
// WithWorkflowErrorActivityOptions sets custom activity options for error reporting.
func WithWorkflowErrorActivityOptions(workflowErrorActivityOptions workflow.LocalActivityOptions) Option {
return func(o *options) {
o.workflowErrorActivityOptions = workflowErrorActivityOptions
}
}