MCPcopy
hub / github.com/docker/compose / InitProvider

Function InitProvider

internal/tracing/tracing.go:68–117  ·  view source on GitHub ↗
(dockerCli command.Cli)

Source from the content-addressed store, hash-verified

66}
67
68func InitProvider(dockerCli command.Cli) (ShutdownFunc, error) {
69 ctx := context.Background()
70
71 var errs []error
72 var exporters []sdktrace.SpanExporter
73
74 envClient, otelEnv := traceClientFromEnv()
75 if envClient != nil {
76 if envExporter, err := otlptrace.New(ctx, envClient); err != nil {
77 errs = append(errs, err)
78 } else if envExporter != nil {
79 exporters = append(exporters, envExporter)
80 }
81 }
82
83 if dcClient, err := traceClientFromDockerContext(dockerCli, otelEnv); err != nil {
84 errs = append(errs, err)
85 } else if dcClient != nil {
86 if dcExporter, err := otlptrace.New(ctx, dcClient); err != nil {
87 errs = append(errs, err)
88 } else if dcExporter != nil {
89 exporters = append(exporters, dcExporter)
90 }
91 }
92 if len(errs) != 0 {
93 return nil, errors.Join(errs...)
94 }
95
96 res, err := resource.New(
97 ctx,
98 resource.WithAttributes(
99 semconv.ServiceName("compose"),
100 semconv.ServiceVersion(internal.Version),
101 attribute.String("docker.context", dockerCli.CurrentContext()),
102 ),
103 )
104 if err != nil {
105 return nil, fmt.Errorf("failed to create resource: %w", err)
106 }
107
108 muxExporter := MuxExporter{exporters: exporters}
109 tracerProvider := sdktrace.NewTracerProvider(
110 sdktrace.WithResource(res),
111 sdktrace.WithBatcher(muxExporter),
112 )
113 otel.SetTracerProvider(tracerProvider)
114
115 // Shutdown will flush any remaining spans and shut down the exporter.
116 return tracerProvider.Shutdown, nil
117}
118
119// traceClientFromEnv creates a GRPC OTLP client based on OS environment
120// variables.

Callers 1

InitTracingFunction · 0.85

Calls 4

traceClientFromEnvFunction · 0.85
CurrentContextMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected