event-gateway/internal/sink/debug/debug.go

74 lines
1.5 KiB
Go
Raw Permalink Normal View History

2024-04-20 20:31:06 +00:00
// Copyright © 2023 Roberto Hidalgo <event-gateway@un.rob.mx>
// 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
}