mirror of https://github.com/hashicorp/consul
110 lines
3.2 KiB
Go
110 lines
3.2 KiB
Go
|
package statsd
|
||
|
|
||
|
import "time"
|
||
|
|
||
|
var (
|
||
|
// DefaultNamespace is the default value for the Namespace option
|
||
|
DefaultNamespace = ""
|
||
|
// DefaultTags is the default value for the Tags option
|
||
|
DefaultTags = []string{}
|
||
|
// DefaultBuffered is the default value for the Buffered option
|
||
|
DefaultBuffered = false
|
||
|
// DefaultMaxMessagesPerPayload is the default value for the MaxMessagesPerPayload option
|
||
|
DefaultMaxMessagesPerPayload = 16
|
||
|
// DefaultAsyncUDS is the default value for the AsyncUDS option
|
||
|
DefaultAsyncUDS = false
|
||
|
// DefaultWriteTimeoutUDS is the default value for the WriteTimeoutUDS option
|
||
|
DefaultWriteTimeoutUDS = 1 * time.Millisecond
|
||
|
)
|
||
|
|
||
|
// Options contains the configuration options for a client.
|
||
|
type Options struct {
|
||
|
// Namespace to prepend to all metrics, events and service checks name.
|
||
|
Namespace string
|
||
|
// Tags are global tags to be applied to every metrics, events and service checks.
|
||
|
Tags []string
|
||
|
// Buffered allows to pack multiple DogStatsD messages in one payload. Messages will be buffered
|
||
|
// until the total size of the payload exceeds MaxMessagesPerPayload metrics, events and/or service
|
||
|
// checks or after 100ms since the payload startedto be built.
|
||
|
Buffered bool
|
||
|
// MaxMessagesPerPayload is the maximum number of metrics, events and/or service checks a single payload will contain.
|
||
|
// Note that this option only takes effect when the client is buffered.
|
||
|
MaxMessagesPerPayload int
|
||
|
// AsyncUDS allows to switch between async and blocking mode for UDS.
|
||
|
// Blocking mode allows for error checking but does not guarentee that calls won't block the execution.
|
||
|
AsyncUDS bool
|
||
|
// WriteTimeoutUDS is the timeout after which a UDS packet is dropped.
|
||
|
WriteTimeoutUDS time.Duration
|
||
|
}
|
||
|
|
||
|
func resolveOptions(options []Option) (*Options, error) {
|
||
|
o := &Options{
|
||
|
Namespace: DefaultNamespace,
|
||
|
Tags: DefaultTags,
|
||
|
Buffered: DefaultBuffered,
|
||
|
MaxMessagesPerPayload: DefaultMaxMessagesPerPayload,
|
||
|
AsyncUDS: DefaultAsyncUDS,
|
||
|
WriteTimeoutUDS: DefaultWriteTimeoutUDS,
|
||
|
}
|
||
|
|
||
|
for _, option := range options {
|
||
|
err := option(o)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return o, nil
|
||
|
}
|
||
|
|
||
|
// Option is a client option. Can return an error if validation fails.
|
||
|
type Option func(*Options) error
|
||
|
|
||
|
// WithNamespace sets the Namespace option.
|
||
|
func WithNamespace(namespace string) Option {
|
||
|
return func(o *Options) error {
|
||
|
o.Namespace = namespace
|
||
|
return nil
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// WithTags sets the Tags option.
|
||
|
func WithTags(tags []string) Option {
|
||
|
return func(o *Options) error {
|
||
|
o.Tags = tags
|
||
|
return nil
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Buffered sets the Buffered option.
|
||
|
func Buffered() Option {
|
||
|
return func(o *Options) error {
|
||
|
o.Buffered = true
|
||
|
return nil
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// WithMaxMessagesPerPayload sets the MaxMessagesPerPayload option.
|
||
|
func WithMaxMessagesPerPayload(maxMessagesPerPayload int) Option {
|
||
|
return func(o *Options) error {
|
||
|
o.MaxMessagesPerPayload = maxMessagesPerPayload
|
||
|
return nil
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// WithAsyncUDS sets the AsyncUDS option.
|
||
|
func WithAsyncUDS() Option {
|
||
|
return func(o *Options) error {
|
||
|
o.AsyncUDS = true
|
||
|
return nil
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// WithWriteTimeoutUDS sets the WriteTimeoutUDS option.
|
||
|
func WithWriteTimeoutUDS(writeTimeoutUDS time.Duration) Option {
|
||
|
return func(o *Options) error {
|
||
|
o.WriteTimeoutUDS = writeTimeoutUDS
|
||
|
return nil
|
||
|
}
|
||
|
}
|