func newOTLPGRPCExporters()

in pkg/tracegen/otlp.go [174:218]


func newOTLPGRPCExporters(ctx context.Context, endpointURL *url.URL, cfg Config) (*otlpExporters, error) {
	var transportCredentials credentials.TransportCredentials

	switch endpointURL.Scheme {
	case "http":
		// If http:// is specified, then use insecure (plaintext).
		transportCredentials = grpcinsecure.NewCredentials()
	case "https":
		transportCredentials = credentials.NewTLS(&tls.Config{InsecureSkipVerify: cfg.insecure})
	}

	grpcConn, err := grpc.NewClient(
		endpointURL.Host,
		grpc.WithTransportCredentials(transportCredentials),
		grpc.WithDefaultCallOptions(grpc.UseCompressor("gzip")),
	)
	if err != nil {
		return nil, err
	}
	cleanup := func(context.Context) error {
		return grpcConn.Close()
	}

	traceOptions := []otlptracegrpc.Option{otlptracegrpc.WithGRPCConn(grpcConn)}
	var logHeaders map[string]string
	headers := map[string]string{"Authorization": "ApiKey " + cfg.apiKey}
	traceOptions = append(traceOptions, otlptracegrpc.WithHeaders(headers))
	logHeaders = headers

	otlpTraceExporter, err := otlptracegrpc.New(ctx, traceOptions...)
	if err != nil {
		cleanup(ctx)
		return nil, err
	}
	cleanup = combineCleanup(otlpTraceExporter.Shutdown, cleanup)

	return &otlpExporters{
		cleanup: cleanup,
		trace:   otlpTraceExporter,
		log: &otlploggrpcExporter{
			client:  plogotlp.NewGRPCClient(grpcConn),
			headers: logHeaders,
		},
	}, nil
}