func()

in config/configelasticsearch/esclient.go [103:165]


func (cfg *ClientConfig) ToClient(
	ctx context.Context,
	host component.Host,
	telemetry component.TelemetrySettings,
) (*elasticsearch.Client, error) {
	httpClient, err := cfg.ClientConfig.ToClient(ctx, host, telemetry)
	if err != nil {
		return nil, err
	}

	// endpoints converts Config.Endpoints, Config.CloudID,
	// and Config.ClientConfig.Endpoint to a list of addresses.
	endpoints, err := cfg.endpoints()
	if err != nil {
		return nil, err
	}

	esLogger := clientLogger{
		Logger:          telemetry.Logger,
		logRequestBody:  cfg.TelemetrySettings.LogRequestBody,
		logResponseBody: cfg.TelemetrySettings.LogResponseBody,
	}

	maxRetries := defaultMaxRetries
	if cfg.Retry.MaxRetries != 0 {
		maxRetries = cfg.Retry.MaxRetries
	}

	return elasticsearch.NewClient(elasticsearch.Config{
		Transport: httpClient.Transport,

		// configure connection setup
		Addresses: endpoints,

		// configure retry behavior
		RetryOnStatus: cfg.Retry.RetryOnStatus,
		DisableRetry:  !cfg.Retry.Enabled,
		// RetryOnError:  retryOnError, // should be used from esclient version 8 onwards
		MaxRetries:   maxRetries,
		RetryBackoff: createElasticsearchBackoffFunc(&cfg.Retry),

		// configure sniffing
		DiscoverNodesOnStart:  cfg.Discovery.OnStart,
		DiscoverNodesInterval: cfg.Discovery.Interval,

		// configure internal metrics reporting and logging
		EnableMetrics:     false, // TODO
		EnableDebugLogger: false, // TODO
		Logger:            &esLogger,

		Instrumentation: func() elastictransport.Instrumentation {
			// only set tracing if enabled and not the noop tracer
			// The actual implementation of the no-op tracer (tracer.noopNoContextTracer)
			// is not exported by the OpenTelemetry collector, so we cannot directly check for it.
			// Instead, we assert if the default Go SDK Tracer provider is used: https://github.com/open-telemetry/opentelemetry-collector/blob/v0.118.0/service/telemetry/tracer.go#L66
			// TODO: use tracer.Enabled() once available in the Go SDK:https: //github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/api.md#enabled
			if _, ok := telemetry.TracerProvider.(*traceSdk.TracerProvider); ok {
				return elasticsearch.NewOpenTelemetryInstrumentation(telemetry.TracerProvider, false)
			}
			return nil
		}(),
	})
}