diff options
Diffstat (limited to 'vendor/go.opentelemetry.io/contrib/exporters/autoexport/signal.go')
| -rw-r--r-- | vendor/go.opentelemetry.io/contrib/exporters/autoexport/signal.go | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/vendor/go.opentelemetry.io/contrib/exporters/autoexport/signal.go b/vendor/go.opentelemetry.io/contrib/exporters/autoexport/signal.go new file mode 100644 index 000000000..157e51ff3 --- /dev/null +++ b/vendor/go.opentelemetry.io/contrib/exporters/autoexport/signal.go @@ -0,0 +1,61 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package autoexport // import "go.opentelemetry.io/contrib/exporters/autoexport" + +import ( + "context" + "os" +) + +type signal[T any] struct { + envKey string + registry *registry[T] +} + +func newSignal[T any](envKey string) signal[T] { + return signal[T]{ + envKey: envKey, + registry: ®istry[T]{ + names: make(map[string]func(context.Context) (T, error)), + }, + } +} + +func (s signal[T]) create(ctx context.Context, opts ...option[T]) (T, error) { + var cfg config[T] + for _, opt := range opts { + opt.apply(&cfg) + } + + expType := os.Getenv(s.envKey) + if expType == "" { + if cfg.fallbackFactory != nil { + return cfg.fallbackFactory(ctx) + } + expType = "otlp" + } + + return s.registry.load(ctx, expType) +} + +type config[T any] struct { + fallbackFactory func(ctx context.Context) (T, error) +} + +type option[T any] interface { + apply(cfg *config[T]) +} + +type optionFunc[T any] func(cfg *config[T]) + +//lint:ignore U1000 https://github.com/dominikh/go-tools/issues/1440 +func (fn optionFunc[T]) apply(cfg *config[T]) { + fn(cfg) +} + +func withFallbackFactory[T any](fallbackFactory func(ctx context.Context) (T, error)) option[T] { + return optionFunc[T](func(cfg *config[T]) { + cfg.fallbackFactory = fallbackFactory + }) +} |
