package observability import ( "context" "skeleton/config" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp" "go.opentelemetry.io/otel/propagation" "go.opentelemetry.io/otel/sdk/resource" sdktrace "go.opentelemetry.io/otel/sdk/trace" semconv "go.opentelemetry.io/otel/semconv/v1.34.0" ) func InitTracing(ctx context.Context, cfg config.ObservabilityConfig) (func(context.Context) error, error) { if !cfg.TracingEnabled { return func(context.Context) error { return nil }, nil } options := []otlptracehttp.Option{otlptracehttp.WithEndpoint(cfg.TracingEndpoint)} if cfg.TracingInsecure { options = append(options, otlptracehttp.WithInsecure()) } exporter, err := otlptracehttp.New(ctx, options...) if err != nil { return nil, err } res, err := resource.New(ctx, resource.WithAttributes(semconv.ServiceName(cfg.TracingService))) if err != nil { return nil, err } provider := sdktrace.NewTracerProvider(sdktrace.WithBatcher(exporter), sdktrace.WithResource(res)) otel.SetTracerProvider(provider) otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator( propagation.TraceContext{}, propagation.Baggage{}, )) return provider.Shutdown, nil }