in src/Aspire.Elastic.Clients.Elasticsearch/AspireElasticClientsElasticsearchExtensions.cs [64:127]
private static void AddElasticsearchClient(
this IHostApplicationBuilder builder,
Action<ElasticClientsElasticsearchSettings>? configureSettings,
Action<ElasticsearchClientSettings>? configureClientSettings,
string connectionName,
object? serviceKey)
{
ArgumentNullException.ThrowIfNull(builder);
ArgumentException.ThrowIfNullOrEmpty(connectionName);
var configSection = builder.Configuration.GetSection(DefaultConfigSectionName);
var namedConfigSection = configSection.GetSection(connectionName);
ElasticClientsElasticsearchSettings settings = new();
configSection.Bind(settings);
namedConfigSection.Bind(settings);
if (builder.Configuration.GetConnectionString(connectionName) is string connectionString)
{
settings.ParseConnectionString(connectionString);
}
configureSettings?.Invoke(settings);
if (serviceKey is null)
{
builder.Services.AddSingleton<ElasticsearchClient>(CreateElasticsearchClient);
}
else
{
builder.Services.AddKeyedSingleton<ElasticsearchClient>(serviceKey, (sp, key) => CreateElasticsearchClient(sp));
}
if (!settings.DisableTracing)
{
builder.Services
.AddOpenTelemetry()
.WithTracing(tracer => tracer.AddSource(ActivityNameSource));
}
if (!settings.DisableHealthChecks)
{
var healthCheckName = serviceKey is null ? "Elastic.Clients.Elasticsearch" : $"Elastic.Clients.Elasticsearch_{connectionName}";
builder.TryAddHealthCheck(new HealthCheckRegistration(
healthCheckName,
sp => new ElasticsearchHealthCheck(serviceKey is null ?
sp.GetRequiredService<ElasticsearchClient>() :
sp.GetRequiredKeyedService<ElasticsearchClient>(serviceKey)),
failureStatus: null,
tags: null,
timeout: settings.HealthCheckTimeout > 0 ? TimeSpan.FromMilliseconds(settings.HealthCheckTimeout.Value) : null
));
}
ElasticsearchClient CreateElasticsearchClient(IServiceProvider serviceProvider)
{
var elasticsearchClientSettings = CreateElasticsearchClientSettings(settings, connectionName, DefaultConfigSectionName);
configureClientSettings?.Invoke(elasticsearchClientSettings);
return new ElasticsearchClient(elasticsearchClientSettings);
}
}