-
Notifications
You must be signed in to change notification settings - Fork 0
/
otel_provider.go
102 lines (101 loc) · 2.91 KB
/
otel_provider.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package wool
//
//// SetupOTelSDK bootstraps the OpenTelemetry pipeline.
//// If it does not return an error, make sure to call shutdown for proper cleanup.
// func setupOTelSDK(ctx context.Context, serviceName, serviceVersion string) (shutdown func(context.Context) error, err error) {
// var shutdownFuncs []func(context.Context) error
//
// // shutdown calls cleanup functions registered via shutdownFuncs.
// // The errors from the calls are joined.
// // Each registered cleanup will be invoked once.
// shutdown = func(ctx context.Context) error {
// var err error
// for _, fn := range shutdownFuncs {
// err = errors.Join(err, fn(ctx))
// }
// shutdownFuncs = nil
// return err
// }
//
// // handleErr calls shutdown for cleanup and makes sure that all errors are returned.
// handleErr := func(inErr error) {
// err = errors.Join(inErr, shutdown(ctx))
// }
//
// // Set up Resource.
// res, err := newResource(serviceName, serviceVersion)
// if err != nil {
// handleErr(err)
// return
// }
//
// // Set up propagator.
// prop := newPropagator()
// otel.SetTextMapPropagator(prop)
//
// // Set up trace provider.
// tracerProvider, err := newTraceProvider(res)
// if err != nil {
// handleErr(err)
// return
// }
// shutdownFuncs = append(shutdownFuncs, tracerProvider.Shutdown)
// otel.SetTracerProvider(tracerProvider)
//
// // Set up meter provider.
// meterProvider, err := newMeterProvider(res)
// if err != nil {
// handleErr(err)
// return
// }
// shutdownFuncs = append(shutdownFuncs, meterProvider.Shutdown)
// otel.SetMeterProvider(meterProvider)
//
// return
// }
//
// func newResource(serviceName, serviceVersion string) (*resource.Resource, error) {
// return resource.Merge(resource.Default(),
// resource.NewWithAttributes(semconv.SchemaURL,
// semconv.ServiceName(serviceName),
// semconv.ServiceVersion(serviceVersion),
// ))
// }
//
// func newPropagator() propagation.TextMapPropagator {
// return propagation.NewCompositeTextMapPropagator(
// propagation.TraceContext{},
// propagation.Baggage{},
// )
// }
//
// func newTraceProvider(res *resource.Resource) (*trace.TracerProvider, error) {
// traceExporter, err := stdouttrace.New(
// stdouttrace.WithPrettyPrint())
// if err != nil {
// return nil, err
// }
//
// traceProvider := trace.NewTracerProvider(
// trace.WithBatcher(traceExporter,
// // Default is 5s. Set to 1s for demonstrative purposes.
// trace.WithBatchTimeout(time.Second)),
// trace.WithResource(res),
// )
// return traceProvider, nil
// }
//
// func newMeterProvider(res *resource.Resource) (*metric.MeterProvider, error) {
// metricExporter, err := stdoutmetric.New()
// if err != nil {
// return nil, err
// }
//
// meterProvider := metric.NewMeterProvider(
// metric.WithResource(res),
// metric.WithReader(metric.NewPeriodicReader(metricExporter,
// // Default is 1m. Set to 3s for demonstrative purposes.
// metric.WithInterval(3*time.Second))),
// )
// return meterProvider, nil
// }