summaryrefslogtreecommitdiff
path: root/vendor/go.opentelemetry.io/contrib/instrumentation/runtime/options.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/go.opentelemetry.io/contrib/instrumentation/runtime/options.go')
-rw-r--r--vendor/go.opentelemetry.io/contrib/instrumentation/runtime/options.go99
1 files changed, 99 insertions, 0 deletions
diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/runtime/options.go b/vendor/go.opentelemetry.io/contrib/instrumentation/runtime/options.go
new file mode 100644
index 000000000..580dc5dcd
--- /dev/null
+++ b/vendor/go.opentelemetry.io/contrib/instrumentation/runtime/options.go
@@ -0,0 +1,99 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package runtime // import "go.opentelemetry.io/contrib/instrumentation/runtime"
+
+import (
+ "time"
+
+ "go.opentelemetry.io/otel"
+ "go.opentelemetry.io/otel/metric"
+)
+
+// config contains optional settings for reporting runtime metrics.
+type config struct {
+ // MinimumReadMemStatsInterval sets the minimum interval
+ // between calls to runtime.ReadMemStats(). Negative values
+ // are ignored.
+ MinimumReadMemStatsInterval time.Duration
+
+ // MeterProvider sets the metric.MeterProvider. If nil, the global
+ // Provider will be used.
+ MeterProvider metric.MeterProvider
+}
+
+// Option supports configuring optional settings for runtime metrics.
+type Option interface {
+ apply(*config)
+}
+
+// ProducerOption supports configuring optional settings for runtime metrics using a
+// metric producer in addition to standard instrumentation.
+type ProducerOption interface {
+ Option
+ applyProducer(*config)
+}
+
+// DefaultMinimumReadMemStatsInterval is the default minimum interval
+// between calls to runtime.ReadMemStats(). Use the
+// WithMinimumReadMemStatsInterval() option to modify this setting in
+// Start().
+const DefaultMinimumReadMemStatsInterval time.Duration = 15 * time.Second
+
+// WithMinimumReadMemStatsInterval sets a minimum interval between calls to
+// runtime.ReadMemStats(), which is a relatively expensive call to make
+// frequently. This setting is ignored when `d` is negative.
+func WithMinimumReadMemStatsInterval(d time.Duration) Option {
+ return minimumReadMemStatsIntervalOption(d)
+}
+
+type minimumReadMemStatsIntervalOption time.Duration
+
+func (o minimumReadMemStatsIntervalOption) apply(c *config) {
+ if o >= 0 {
+ c.MinimumReadMemStatsInterval = time.Duration(o)
+ }
+}
+
+func (o minimumReadMemStatsIntervalOption) applyProducer(c *config) { o.apply(c) }
+
+// WithMeterProvider sets the Metric implementation to use for
+// reporting. If this option is not used, the global metric.MeterProvider
+// will be used. `provider` must be non-nil.
+func WithMeterProvider(provider metric.MeterProvider) Option {
+ return metricProviderOption{provider}
+}
+
+type metricProviderOption struct{ metric.MeterProvider }
+
+func (o metricProviderOption) apply(c *config) {
+ if o.MeterProvider != nil {
+ c.MeterProvider = o.MeterProvider
+ }
+}
+
+// newConfig computes a config from the supplied Options.
+func newConfig(opts ...Option) config {
+ c := config{
+ MeterProvider: otel.GetMeterProvider(),
+ }
+ for _, opt := range opts {
+ opt.apply(&c)
+ }
+ if c.MinimumReadMemStatsInterval <= 0 {
+ c.MinimumReadMemStatsInterval = DefaultMinimumReadMemStatsInterval
+ }
+ return c
+}
+
+// newConfig computes a config from the supplied ProducerOptions.
+func newProducerConfig(opts ...ProducerOption) config {
+ c := config{}
+ for _, opt := range opts {
+ opt.applyProducer(&c)
+ }
+ if c.MinimumReadMemStatsInterval <= 0 {
+ c.MinimumReadMemStatsInterval = DefaultMinimumReadMemStatsInterval
+ }
+ return c
+}