74 lines
1.5 KiB
Go
74 lines
1.5 KiB
Go
// 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
|
|
}
|