birschick-bq commented on code in PR #2729: URL: https://github.com/apache/arrow-adbc/pull/2729#discussion_r2072321568
########## go/adbc/driver/internal/driverbase/database.go: ########## @@ -136,4 +200,113 @@ func (db *database) SetLogger(logger *slog.Logger) { } } +func (base *database) InitTracing(driverName string, driverVersion string) { + base.Base().InitTracing(driverName, driverVersion) +} + +func (base *DatabaseImplBase) InitTracing(driverName string, driverVersion string) { + var exporter sdktrace.SpanExporter = nil + var tracer trace.Tracer + + exporterName := os.Getenv("OTEL_TRACES_EXPORTER") + exporterType, _ := tryParseTraceExporterType(exporterName) + switch exporterType { + case TraceExporterConsole: + exporter, _ = newStdoutTraceExporter() + case TraceExporterOtlp: + exporter, _ = newOtlpTraceExporter(context.Background()) + case TraceExporterAdbcFile: + exporter, _ = newAdbcFileExporter(driverName) + } + + fullyQualifiedDriverName := driverNamespace + "." + driverName + if exporter != nil { + tracerProvider, err := newTracerProvider(exporter) + if err != nil { + panic(err) + } + base.Base().tracerShutdownFunc = tracerProvider.Shutdown + tracer = tracerProvider.Tracer( + fullyQualifiedDriverName, + trace.WithInstrumentationVersion(driverVersion), + trace.WithSchemaURL(semconv.SchemaURL), + ) + } else { + tracer = otel.Tracer(fullyQualifiedDriverName) + } + base.Base().Tracer = tracer +} + +func tryParseTraceExporterType(value string) (traceExporterType, bool) { + if te, ok := traceExporterNames[value]; ok { + return te, true + } + return TraceExporterNone, false +} + +func getDriverVersion(driverInfo *DriverInfo) string { + var unknownDriverVersion = "unknown" + value, ok := driverInfo.GetInfoForInfoCode(adbc.InfoDriverVersion) + if !ok || value == nil { + return unknownDriverVersion + } + if driverVersion, ok := value.(string); ok { + return driverVersion + } + return unknownDriverVersion +} + +func newOtlpTraceExporter(ctx context.Context) (*otlptrace.Exporter, error) { + return otlptracegrpc.New( + ctx, + otlptracegrpc.WithEndpoint("localhost:4317"), + otlptracegrpc.WithInsecure(), + otlptracegrpc.WithRetry(otlptracegrpc.RetryConfig{ + Enabled: true, + InitialInterval: 5 * time.Second, + MaxInterval: 30 * time.Second, + // MaxAttempts: 5, + }), + ) Review Comment: Removed the explicit configuration. That was a mistake. All these options can be configured via environment variables. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: github-unsubscr...@arrow.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org