65 lines
2.5 KiB
C#
65 lines
2.5 KiB
C#
using ChatRAG.Services.Contracts;
|
|
using Microsoft.Extensions.Diagnostics.HealthChecks;
|
|
|
|
namespace ChatRAG.Services
|
|
{
|
|
public class VectorDatabaseHealthCheck : IHealthCheck
|
|
{
|
|
private readonly IVectorDatabaseFactory _factory;
|
|
private readonly ILogger<VectorDatabaseHealthCheck> _logger;
|
|
|
|
public VectorDatabaseHealthCheck(
|
|
IVectorDatabaseFactory factory,
|
|
ILogger<VectorDatabaseHealthCheck> logger)
|
|
{
|
|
_factory = factory;
|
|
_logger = logger;
|
|
}
|
|
|
|
public async Task<HealthCheckResult> CheckHealthAsync(
|
|
HealthCheckContext context,
|
|
CancellationToken cancellationToken = default)
|
|
{
|
|
try
|
|
{
|
|
var provider = _factory.GetActiveProvider();
|
|
var vectorService = _factory.CreateVectorSearchService();
|
|
var textService = _factory.CreateTextDataService();
|
|
|
|
// Testa conectividade básica
|
|
var isHealthy = await vectorService.IsHealthyAsync();
|
|
var stats = await vectorService.GetStatsAsync();
|
|
var providerStats = await textService.GetProviderStatsAsync();
|
|
|
|
var data = new Dictionary<string, object>
|
|
{
|
|
["provider"] = provider,
|
|
["vector_service_healthy"] = isHealthy,
|
|
["total_documents"] = stats.GetValueOrDefault("total_documents", 0),
|
|
["provider_stats"] = providerStats
|
|
};
|
|
|
|
if (isHealthy)
|
|
{
|
|
_logger.LogDebug("Vector Database health check passou para provider {Provider}", provider);
|
|
return HealthCheckResult.Healthy($"Vector Database ({provider}) está saudável", data);
|
|
}
|
|
else
|
|
{
|
|
_logger.LogWarning("Vector Database health check falhou para provider {Provider}", provider);
|
|
return HealthCheckResult.Unhealthy($"Vector Database ({provider}) não está saudável", data: data);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "Erro no health check do Vector Database");
|
|
return HealthCheckResult.Unhealthy("Erro no Vector Database", ex, new Dictionary<string, object>
|
|
{
|
|
["provider"] = _factory.GetActiveProvider(),
|
|
["error"] = ex.Message
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|