Peter Kurfer
af31b1166a
- watch events interactively - pipe events to files - remove file subscriptions
39 lines
754 B
Go
39 lines
754 B
Go
package sink
|
|
|
|
import (
|
|
"context"
|
|
|
|
"gitlab.com/inetmock/inetmock/pkg/audit"
|
|
)
|
|
|
|
func NewGRPCSink(ctx context.Context, name string, consumer func(ev audit.Event)) audit.Sink {
|
|
return &grpcSink{
|
|
name: name,
|
|
ctx: ctx,
|
|
consumer: consumer,
|
|
}
|
|
}
|
|
|
|
type grpcSink struct {
|
|
name string
|
|
ctx context.Context
|
|
consumer func(ev audit.Event)
|
|
}
|
|
|
|
func (g grpcSink) Name() string {
|
|
return g.name
|
|
}
|
|
|
|
func (g grpcSink) OnSubscribe(evs <-chan audit.Event, handle audit.CloseHandle) {
|
|
go func(ctx context.Context, consumer func(ev audit.Event), evs <-chan audit.Event, handle audit.CloseHandle) {
|
|
for {
|
|
select {
|
|
case ev := <-evs:
|
|
consumer(ev)
|
|
case <-ctx.Done():
|
|
handle()
|
|
return
|
|
}
|
|
}
|
|
}(g.ctx, g.consumer, evs, handle)
|
|
}
|