/
otel.go
38 lines (27 loc) · 800 Bytes
/
otel.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
package taskqotel
import (
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/codes"
"go.opentelemetry.io/otel/trace"
"github.com/vmihailenco/taskq/v4"
)
var tracer = otel.Tracer("github.com/vmihailenco/taskq")
type OpenTelemetryHook struct{}
var _ taskq.ConsumerHook = (*OpenTelemetryHook)(nil)
func NewHook() *OpenTelemetryHook {
return new(OpenTelemetryHook)
}
func (h OpenTelemetryHook) BeforeProcessJob(evt *taskq.ProcessJobEvent) error {
evt.Ctx, _ = tracer.Start(evt.Ctx, evt.Job.TaskName)
return nil
}
func (h OpenTelemetryHook) AfterProcessJob(evt *taskq.ProcessJobEvent) error {
ctx := evt.Ctx
span := trace.SpanFromContext(ctx)
defer span.End()
if err := evt.Job.Err; err != nil {
span.SetStatus(codes.Error, err.Error())
span.RecordError(err)
}
return nil
}