api/pkg/audit/sink/writer_sink.go
Peter Kurfer af31b1166a
Audit API prototype
- watch events interactively
- pipe events to files
- remove file subscriptions
2021-01-26 18:19:03 +01:00

45 lines
888 B
Go

package sink
import "gitlab.com/inetmock/inetmock/pkg/audit"
type WriterSinkOption func(sink *writerCloserSink)
var (
WithCloseOnExit WriterSinkOption = func(sink *writerCloserSink) {
sink.closeOnExit = true
}
)
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
target audit.Writer
closeOnExit bool
}
func (f writerCloserSink) Name() string {
return f.name
}
func (f writerCloserSink) OnSubscribe(evs <-chan audit.Event, _ audit.CloseHandle) {
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)
}