provider returns a trace.TracerProvider, a close function and a bool showing whether tracing is enabled or not.
(ctx context.Context)
| 118 | // provider returns a trace.TracerProvider, a close function and a bool showing |
| 119 | // whether tracing is enabled or not. |
| 120 | func (s *scaletestTracingFlags) provider(ctx context.Context) (trace.TracerProvider, func(context.Context) error, bool, error) { |
| 121 | shouldTrace := s.traceEnable || s.traceCoder || s.traceHoneycombAPIKey != "" |
| 122 | if !shouldTrace { |
| 123 | tracerProvider := trace.NewNoopTracerProvider() |
| 124 | return tracerProvider, func(_ context.Context) error { return nil }, false, nil |
| 125 | } |
| 126 | |
| 127 | tracerProvider, closeTracing, err := tracing.TracerProvider(ctx, scaletestTracerName, tracing.TracerOpts{ |
| 128 | Default: s.traceEnable, |
| 129 | Honeycomb: s.traceHoneycombAPIKey, |
| 130 | }) |
| 131 | if err != nil { |
| 132 | return nil, nil, false, xerrors.Errorf("initialize tracing: %w", err) |
| 133 | } |
| 134 | |
| 135 | var closeTracingOnce sync.Once |
| 136 | return tracerProvider, func(_ context.Context) error { |
| 137 | var err error |
| 138 | closeTracingOnce.Do(func() { |
| 139 | // Allow time to upload traces even if ctx is canceled |
| 140 | traceCtx, traceCancel := context.WithTimeout(context.Background(), 10*time.Second) |
| 141 | defer traceCancel() |
| 142 | err = closeTracing(traceCtx) |
| 143 | }) |
| 144 | |
| 145 | return err |
| 146 | }, true, nil |
| 147 | } |
| 148 | |
| 149 | type concurrencyFlags struct { |
| 150 | cleanup bool |