package reporter import ( "time" "go.opentelemetry.io/otel/metric" ) type config struct { shutdownTimeout time.Duration collectInterval time.Duration metrics []func(metric.Meter) error } // Option is a functional option for configuring the dialhome package. type Option func(*config) // WithShutdownTimeout sets the shutdown timeout to use for dialhome. func WithShutdownTimeout(timeout time.Duration) Option { return func(c *config) { c.shutdownTimeout = timeout } } // WithCollectInterval sets the collect interval for metrics to be queried. func WithCollectInterval(interval time.Duration) Option { return func(c *config) { c.collectInterval = interval } } // WithMetrics adds metrics to be collected func WithMetrics(fns ...func(metric.Meter) error) Option { return func(c *config) { c.metrics = append(c.metrics, fns...) } } func getConfig(opts ...Option) *config { c := new(config) defaults := []Option{ WithShutdownTimeout(time.Second * 5), WithCollectInterval(time.Hour), } for _, opt := range append(defaults, opts...) { opt(c) } return c }