vault/audit/sink_wrapper.go
Marc Boudreau b07eff0998
VAULT-18934: Record individual metrics for each Auditing Event Pipeline (#22266)
* add sink wrapper to take telemetry measures

* make use of sinkwrapper
2023-08-10 09:49:55 -04:00

43 lines
1.1 KiB
Go

package audit
import (
"context"
metrics "github.com/armon/go-metrics"
"github.com/hashicorp/eventlogger"
)
// SinkWrapper is a wrapper for any kind of Sink Node that processes events
// containing an auditEvent payload.
type SinkWrapper struct {
Name string
Sink eventlogger.Node
}
// Process simply wraps the Process method of this SinkWrapper's sink field by
// taking a measurement of the time elapsed since the provided Event was created
// once this method returns.
func (s *SinkWrapper) Process(ctx context.Context, e *eventlogger.Event) (*eventlogger.Event, error) {
defer func() {
auditEvent, ok := e.Payload.(*auditEvent)
if ok {
metrics.MeasureSince([]string{"audit", s.Name, auditEvent.Subtype.MetricTag()}, e.CreatedAt)
}
}()
return s.Sink.Process(ctx, e)
}
// Reopen simply wraps the Reopen method of this SinkWrapper's sink field
// without doing any additional work.
func (s *SinkWrapper) Reopen() error {
return s.Sink.Reopen()
}
// Type simply wraps the Type method of this SinkWrapper's sink field without
// doing any additional work.
func (s *SinkWrapper) Type() eventlogger.NodeType {
return s.Sink.Type()
}