in internal/telemetrygen/traces/traces.go [39:114]
func Start(cfg *Config) error {
logger := cfg.Logger
if logger == nil {
newLogger, err := common.CreateLogger(cfg.SkipSettingGRPCLogger)
if err != nil {
return err
}
logger = newLogger
}
var exp *otlptrace.Exporter
if cfg.UseHTTP {
var exporterOpts []otlptracehttp.Option
logger.Info("starting HTTP exporter")
exporterOpts, err := httpExporterOptions(cfg)
if err != nil {
return err
}
exp, err = otlptracehttp.New(context.Background(), exporterOpts...)
if err != nil {
return fmt.Errorf("failed to obtain OTLP HTTP exporter: %w", err)
}
} else {
var exporterOpts []otlptracegrpc.Option
logger.Info("starting gRPC exporter")
exporterOpts, err := grpcExporterOptions(cfg)
if err != nil {
return err
}
exp, err = otlptracegrpc.New(context.Background(), exporterOpts...)
if err != nil {
return fmt.Errorf("failed to obtain OTLP gRPC exporter: %w", err)
}
}
defer func() {
logger.Info("stopping the exporter")
if tempError := exp.Shutdown(context.Background()); tempError != nil {
logger.Error("failed to stop the exporter", zap.Error(tempError))
}
}()
var ssp sdktrace.SpanProcessor
if cfg.Batch {
ssp = sdktrace.NewBatchSpanProcessor(exp, sdktrace.WithBlocking())
defer func() {
logger.Info("stop the batch span processor")
if tempError := ssp.Shutdown(context.Background()); tempError != nil {
logger.Error("failed to stop the batch span processor", zap.Error(tempError))
}
}()
}
var attributes []attribute.KeyValue
// may be overridden by `--otlp-attributes service.name="foo"`
attributes = append(attributes, semconv.ServiceNameKey.String(cfg.ServiceName))
attributes = append(attributes, cfg.GetAttributes()...)
tracerProvider := sdktrace.NewTracerProvider(
sdktrace.WithResource(resource.NewWithAttributes(semconv.SchemaURL, attributes...)),
)
if cfg.Batch {
tracerProvider.RegisterSpanProcessor(ssp)
}
otel.SetTracerProvider(tracerProvider)
if err := Run(cfg, logger); err != nil {
logger.Error("failed to execute the test scenario.", zap.Error(err))
return err
}
return nil
}