summaryrefslogtreecommitdiff
path: root/vendor/go.opentelemetry.io/contrib/exporters/autoexport/spans.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/go.opentelemetry.io/contrib/exporters/autoexport/spans.go')
-rw-r--r--vendor/go.opentelemetry.io/contrib/exporters/autoexport/spans.go98
1 files changed, 98 insertions, 0 deletions
diff --git a/vendor/go.opentelemetry.io/contrib/exporters/autoexport/spans.go b/vendor/go.opentelemetry.io/contrib/exporters/autoexport/spans.go
new file mode 100644
index 000000000..8970d18f7
--- /dev/null
+++ b/vendor/go.opentelemetry.io/contrib/exporters/autoexport/spans.go
@@ -0,0 +1,98 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package autoexport // import "go.opentelemetry.io/contrib/exporters/autoexport"
+
+import (
+ "context"
+ "os"
+
+ "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
+ "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
+ "go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
+ "go.opentelemetry.io/otel/sdk/trace"
+)
+
+const otelExporterOTLPTracesProtoEnvKey = "OTEL_EXPORTER_OTLP_TRACES_PROTOCOL"
+
+// SpanOption applies an autoexport configuration option.
+type SpanOption = option[trace.SpanExporter]
+
+// Option applies an autoexport configuration option.
+//
+// Deprecated: Use SpanOption.
+type Option = SpanOption
+
+// WithFallbackSpanExporter sets the fallback exporter to use when no exporter
+// is configured through the OTEL_TRACES_EXPORTER environment variable.
+func WithFallbackSpanExporter(spanExporterFactory func(ctx context.Context) (trace.SpanExporter, error)) SpanOption {
+ return withFallbackFactory[trace.SpanExporter](spanExporterFactory)
+}
+
+// NewSpanExporter returns a configured [go.opentelemetry.io/otel/sdk/trace.SpanExporter]
+// defined using the environment variables described below.
+//
+// OTEL_TRACES_EXPORTER defines the traces exporter; supported values:
+// - "none" - "no operation" exporter
+// - "otlp" (default) - OTLP exporter; see [go.opentelemetry.io/otel/exporters/otlp/otlptrace]
+// - "console" - Standard output exporter; see [go.opentelemetry.io/otel/exporters/stdout/stdouttrace]
+//
+// OTEL_EXPORTER_OTLP_PROTOCOL defines OTLP exporter's transport protocol;
+// supported values:
+// - "grpc" - protobuf-encoded data using gRPC wire format over HTTP/2 connection;
+// see: [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc]
+// - "http/protobuf" (default) - protobuf-encoded data over HTTP connection;
+// see: [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp]
+//
+// OTEL_EXPORTER_OTLP_TRACES_PROTOCOL defines OTLP exporter's transport protocol for the traces signal;
+// supported values are the same as OTEL_EXPORTER_OTLP_PROTOCOL.
+//
+// An error is returned if an environment value is set to an unhandled value.
+//
+// Use [RegisterSpanExporter] to handle more values of OTEL_TRACES_EXPORTER.
+//
+// Use [WithFallbackSpanExporter] option to change the returned exporter
+// when OTEL_TRACES_EXPORTER is unset or empty.
+//
+// Use [IsNoneSpanExporter] to check if the returned exporter is a "no operation" exporter.
+func NewSpanExporter(ctx context.Context, opts ...SpanOption) (trace.SpanExporter, error) {
+ return tracesSignal.create(ctx, opts...)
+}
+
+// RegisterSpanExporter sets the SpanExporter factory to be used when the
+// OTEL_TRACES_EXPORTER environment variable contains the exporter name. This
+// will panic if name has already been registered.
+func RegisterSpanExporter(name string, factory func(context.Context) (trace.SpanExporter, error)) {
+ must(tracesSignal.registry.store(name, factory))
+}
+
+var tracesSignal = newSignal[trace.SpanExporter]("OTEL_TRACES_EXPORTER")
+
+func init() {
+ RegisterSpanExporter("otlp", func(ctx context.Context) (trace.SpanExporter, error) {
+ proto := os.Getenv(otelExporterOTLPTracesProtoEnvKey)
+ if proto == "" {
+ proto = os.Getenv(otelExporterOTLPProtoEnvKey)
+ }
+
+ // Fallback to default, http/protobuf.
+ if proto == "" {
+ proto = "http/protobuf"
+ }
+
+ switch proto {
+ case "grpc":
+ return otlptracegrpc.New(ctx)
+ case "http/protobuf":
+ return otlptracehttp.New(ctx)
+ default:
+ return nil, errInvalidOTLPProtocol
+ }
+ })
+ RegisterSpanExporter("console", func(ctx context.Context) (trace.SpanExporter, error) {
+ return stdouttrace.New()
+ })
+ RegisterSpanExporter("none", func(ctx context.Context) (trace.SpanExporter, error) {
+ return noopSpanExporter{}, nil
+ })
+}