File size: 1,070 Bytes
d6f631f | 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 | package eventhandler
import (
"context"
"runtime/debug"
"go.opentelemetry.io/otel/trace"
"github.com/openmeterio/openmeter/openmeter/notification"
"github.com/openmeterio/openmeter/pkg/framework/tracex"
)
func (h *Handler) Dispatch(ctx context.Context, event *notification.Event) error {
spanLink := trace.LinkFromContext(ctx)
fn := func(ctx context.Context) error {
return h.reconcileEvent(ctx, event)
}
go func() {
defer func() {
if err := recover(); err != nil {
h.logger.Error("notification event handler panicked",
"error", err,
"code.stacktrace", string(debug.Stack()))
}
}()
ctx, cancel := context.WithTimeout(context.Background(), notification.DefaultDispatchTimeout)
defer cancel()
tracerOpts := []trace.SpanStartOption{
trace.WithNewRoot(),
trace.WithLinks(spanLink),
}
err := tracex.StartWithNoValue(ctx, h.tracer, "event_handler.dispatch", tracerOpts...).Wrap(fn)
if err != nil {
h.logger.WarnContext(ctx, "failed to dispatch event", "eventID", event.ID, "error", err)
}
}()
return nil
}
|