api/pkg/audit/sink/grpc_sink.go

40 lines
754 B
Go
Raw Normal View History

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)
}