// Copyright © 2023 Roberto Hidalgo // SPDX-License-Identifier: Apache-2.0 package debug import ( "context" "git.rob.mx/nidito/chinampa/pkg/logger" "git.rob.mx/nidito/event-gateway/internal/payload" "git.rob.mx/nidito/event-gateway/internal/sink/types" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/trace" ) var log = logger.Sub("event-gateway.sink.debug") var MaxDebugCalls = 10 type Event struct{} func (e *Event) String() string { return "debug" } func (e *Event) Kind() types.Kind { return types.Debug } type Sink struct { Calls []context.Context tracer trace.Tracer } func New() (types.Sink, error) { return &Sink{ Calls: []context.Context{}, tracer: otel.Tracer("event-gateway.sink.debug"), }, nil } func (s *Sink) Tracer() trace.Tracer { return s.tracer } func (s *Sink) String() string { return "debug" } func (s *Sink) Parse(c *types.Config) (types.Event, error) { return &Event{}, nil } func (s *Sink) Dispatch(ctx context.Context, span trace.Span, event types.Event) error { log.Infof("Dispatching handler for: %+v", event) s.Calls = append(s.Calls, ctx) if len(s.Calls) > MaxDebugCalls { // keep the most recent in memory, up to MaxDebugCalls s.Calls = s.Calls[len(s.Calls)-MaxDebugCalls : len(s.Calls)] } data, err := payload.FromContext(ctx) if err != nil { span.RecordError(err) return err } var val any if data != nil && data.Value != nil { val = data.Value } log.Infof("Debug handler dispatched: %+v", val) return nil }