api/pkg/audit/sink/writer_sink.go

46 lines
867 B
Go
Raw Normal View History

2021-01-13 16:59:08 +00:00
package sink
import "gitlab.com/inetmock/inetmock/pkg/audit"
type WriterSinkOption func(sink *writerCloserSink)
var (
WithCloseOnExit WriterSinkOption = func(sink *writerCloserSink) {
sink.closeOnExit = true
}
)
2021-01-13 16:59:08 +00:00
func NewWriterSink(name string, target audit.Writer, opts ...WriterSinkOption) audit.Sink {
sink := &writerCloserSink{
name: name,
target: target,
}
for _, opt := range opts {
opt(sink)
}
return sink
}
type writerCloserSink struct {
name string
2021-01-13 16:59:08 +00:00
target audit.Writer
closeOnExit bool
}
func (f writerCloserSink) Name() string {
return f.name
}
2021-01-13 16:59:08 +00:00
func (f writerCloserSink) OnSubscribe(evs <-chan audit.Event) {
go func(target audit.Writer, closeOnExit bool, evs <-chan audit.Event) {
for ev := range evs {
_ = target.Write(&ev)
}
if closeOnExit {
_ = target.Close()
}
}(f.target, f.closeOnExit, evs)
}