newOpenTelemetryWrapper is responsible for the openTelemetryWrapper initialization using provided configuration.
( ctx context.Context, spanName string, spanAttributes map[string]string, )
| 43 | |
| 44 | // newOpenTelemetryWrapper is responsible for the openTelemetryWrapper initialization using provided configuration. |
| 45 | func newOpenTelemetryWrapper( |
| 46 | ctx context.Context, |
| 47 | spanName string, |
| 48 | spanAttributes map[string]string, |
| 49 | ) (openTelemetryWrapper, error) { |
| 50 | if spanName == "" { |
| 51 | spanName = defaultSpanName |
| 52 | } |
| 53 | |
| 54 | ot := openTelemetryWrapper{ |
| 55 | spanName: spanName, |
| 56 | spanAttributes: spanAttributes, |
| 57 | } |
| 58 | |
| 59 | version, _ := caddy.Version() |
| 60 | res, err := ot.newResource(caddyhttp.ServerHeader, version) |
| 61 | if err != nil { |
| 62 | return ot, fmt.Errorf("creating resource error: %w", err) |
| 63 | } |
| 64 | |
| 65 | traceExporter, err := autoexport.NewSpanExporter(ctx) |
| 66 | if err != nil { |
| 67 | return ot, fmt.Errorf("creating trace exporter error: %w", err) |
| 68 | } |
| 69 | |
| 70 | ot.propagators = autoprop.NewTextMapPropagator() |
| 71 | |
| 72 | tracerProvider := globalTracerProvider.getTracerProvider( |
| 73 | sdktrace.WithBatcher(traceExporter), |
| 74 | sdktrace.WithResource(res), |
| 75 | ) |
| 76 | |
| 77 | ot.handler = otelhttp.NewHandler(http.HandlerFunc(ot.serveHTTP), |
| 78 | ot.spanName, |
| 79 | otelhttp.WithTracerProvider(tracerProvider), |
| 80 | otelhttp.WithPropagators(ot.propagators), |
| 81 | otelhttp.WithSpanNameFormatter(ot.spanNameFormatter), |
| 82 | ) |
| 83 | |
| 84 | return ot, nil |
| 85 | } |
| 86 | |
| 87 | // serveHTTP injects a tracing context and call the next handler. |
| 88 | func (ot *openTelemetryWrapper) serveHTTP(w http.ResponseWriter, r *http.Request) { |