86 lines
3.2 KiB
C#
86 lines
3.2 KiB
C#
using LiteCharms.Infrastructure.Database;
|
|
using LiteCharms.Infrastructure.HealthChecks;
|
|
using LiteCharms.Models.Configuraton.Email;
|
|
|
|
namespace LiteCharms.Extensions;
|
|
|
|
public static class Services
|
|
{
|
|
public static IServiceCollection AddEmail(this IServiceCollection services, IConfiguration configuration)
|
|
{
|
|
services.Configure<SmtpSettings>(configuration.GetSection("Email"));
|
|
|
|
return services;
|
|
}
|
|
|
|
public static IServiceCollection AddHealthChecksSupport(this IServiceCollection services, IConfiguration configuration)
|
|
{
|
|
services.AddHealthChecks()
|
|
.AddCheck("Self", () => HealthCheckResult.Healthy())
|
|
.AddCheck<PostgresHealthCheck>("PostgreSQL");
|
|
|
|
//services.AddHealthChecksUI(setup =>
|
|
//{
|
|
// setup.AddHealthCheckEndpoint("Lead Generator", $"{configuration["ASPNETCORE_URLS"]}/health");
|
|
// setup.SetEvaluationTimeInSeconds(15);
|
|
//}).AddInMemoryStorage(databaseName: "healthuidb");
|
|
|
|
return services;
|
|
}
|
|
|
|
public static IServiceCollection AddLeadGeneratorDatabase(this IServiceCollection services, IConfiguration configuration)
|
|
{
|
|
services.AddPooledDbContextFactory<LeadGeneratorDbContext>(options =>
|
|
options.UseNpgsql(configuration.GetConnectionString("PostgresLeadGenerator")));
|
|
|
|
return services;
|
|
}
|
|
|
|
public static WebApplicationBuilder AddMonitoring(this WebApplicationBuilder builder)
|
|
{
|
|
var serviceName = builder.Configuration.GetValue<string>("Monitoring:ServiceName") ?? "LiteCharms";
|
|
var endpoint = builder.Configuration.GetValue<string>("Monitoring:Address")!;
|
|
var apiKey = builder.Configuration.GetValue<string>("Monitoring:ApiKey");
|
|
|
|
var resourceBuilder = ResourceBuilder.CreateDefault()
|
|
.AddService(serviceName);
|
|
|
|
var otlpHeaders = !string.IsNullOrEmpty(apiKey) ? $"x-otlp-api-key={apiKey}" : null;
|
|
|
|
builder.Logging.AddOpenTelemetry(logging =>
|
|
{
|
|
logging.SetResourceBuilder(resourceBuilder);
|
|
logging.AddOtlpExporter(opt =>
|
|
{
|
|
opt.Endpoint = new Uri(endpoint);
|
|
opt.Protocol = OtlpExportProtocol.Grpc;
|
|
opt.Headers = otlpHeaders;
|
|
});
|
|
});
|
|
|
|
builder.Services.AddOpenTelemetry()
|
|
.WithTracing(tracing => tracing
|
|
.SetResourceBuilder(resourceBuilder)
|
|
.AddAspNetCoreInstrumentation()
|
|
.AddHttpClientInstrumentation()
|
|
.AddOtlpExporter(opt =>
|
|
{
|
|
opt.Endpoint = new Uri(endpoint);
|
|
opt.Protocol = OtlpExportProtocol.Grpc;
|
|
opt.Headers = otlpHeaders;
|
|
}))
|
|
.WithMetrics(metrics => metrics
|
|
.SetResourceBuilder(resourceBuilder)
|
|
.AddMeter(serviceName)
|
|
.AddAspNetCoreInstrumentation()
|
|
.AddRuntimeInstrumentation()
|
|
.AddOtlpExporter(opt =>
|
|
{
|
|
opt.Endpoint = new Uri(endpoint);
|
|
opt.Protocol = OtlpExportProtocol.Grpc;
|
|
opt.Headers = otlpHeaders;
|
|
}));
|
|
|
|
return builder;
|
|
}
|
|
} |