api/pkg/audit/options.go

68 lines
1.8 KiB
Go

package audit
import (
"runtime"
"time"
)
const (
defaultEventStreamBufferSize = 100
defaultSinkBufferSize = 0
defaultSinkConsumptionTimeout = 50 * time.Millisecond
)
var (
generatorIdx int64 = 1
defaultDistributeParallelization = runtime.NumCPU() / 2
WithBufferSize = func(bufferSize int) EventStreamOption {
return func(cfg *eventStreamCfg) {
cfg.bufferSize = bufferSize
}
}
WithGeneratorIndex = func(generatorIndex int64) EventStreamOption {
return func(cfg *eventStreamCfg) {
cfg.generatorIndex = generatorIndex
}
}
WithSinkBufferSize = func(bufferSize int) EventStreamOption {
return func(cfg *eventStreamCfg) {
cfg.sinkBuffersize = bufferSize
}
}
WithSinkConsumptionTimeout = func(timeout time.Duration) EventStreamOption {
return func(cfg *eventStreamCfg) {
cfg.sinkConsumptionTimeout = timeout
}
}
WithDistributeParallelization = func(parallelization int) EventStreamOption {
return func(cfg *eventStreamCfg) {
if parallelization <= 0 || parallelization > runtime.NumCPU() {
return
}
cfg.distributeParallelization = parallelization
}
}
)
type EventStreamOption func(cfg *eventStreamCfg)
type eventStreamCfg struct {
bufferSize int
sinkBuffersize int
generatorIndex int64
distributeParallelization int
sinkConsumptionTimeout time.Duration
}
func newEventStreamCfg() eventStreamCfg {
cfg := eventStreamCfg{
generatorIndex: generatorIdx,
sinkBuffersize: defaultSinkBufferSize,
bufferSize: defaultEventStreamBufferSize,
sinkConsumptionTimeout: defaultSinkConsumptionTimeout,
distributeParallelization: defaultDistributeParallelization,
}
generatorIdx++
return cfg
}