📊 Descripción General
La clase HealthCheckResponse representa la respuesta completa de un health check del sistema RestMaster. Esta clase proporciona información detallada sobre el estado de salud de diferentes componentes del sistema, incluyendo la base de datos, espacio en disco y uso de memoria.
🎯 Propósito de la Clase
- Monitoreo del Sistema: Estado general de salud
- Diagnóstico de Problemas: Identificación de fallos
- Métricas de Rendimiento: Uso de recursos
- Alertas Proactivas: Detección temprana de problemas
- APIs de Health: Endpoints de monitoreo
📋 Clases Relacionadas
🗄️ DatabaseConnectionDetails
Proporciona información detallada sobre el estado de la conexión a la base de datos.
Status
string
Estado de la conexión a la BD
Version
string
Versión de SQL Server
Level
string
Nivel de compatibilidad
Edition
string
Edición de SQL Server
EngineEdition
string
Edición del motor de BD
IsClustered
bool
Indica si está en cluster
IsFullTextInstalled
bool
Indica si Full-Text Search está instalado
IsIntegratedSecurityOnly
bool
Indica si solo usa autenticación integrada
IsXtpSupported
bool
Indica si soporta In-Memory OLTP
💾 DiskSpaceDetails
Proporciona información sobre el uso del espacio en disco del sistema.
Status
string
Estado del espacio en disco
TotalSpaceGB
double
Espacio total en GB
FreeSpaceGB
double
Espacio libre en GB
UsedSpaceGB
double
Espacio usado en GB
🧠 MemoryUsageDetails
Proporciona información sobre el uso de memoria del proceso.
Status
string
Estado del uso de memoria
TotalMemoryMb
long
Memoria total disponible en MB
PrivateMemorySizeMb
long
Memoria privada del proceso en MB
WorkingSetMb
long
Working set del proceso en MB
💡 Ejemplo de Uso
// Crear respuesta de health check
var healthResponse = new HealthCheckResponse
{
Status = "Healthy",
Message = "Sistema funcionando correctamente",
DatabaseConnection = new DatabaseConnectionDetails
{
Status = "Connected",
Version = "15.0.2000.5",
Level = "150",
Edition = "Standard Edition (64-bit)",
EngineEdition = "3",
IsClustered = false,
IsFullTextInstalled = true,
IsIntegratedSecurityOnly = false,
IsXtpSupported = true
},
DiskSpace = new DiskSpaceDetails
{
Status = "Healthy",
TotalSpaceGB = 500.0,
FreeSpaceGB = 350.0,
UsedSpaceGB = 150.0
},
MemoryUsage = new MemoryUsageDetails
{
Status = "Healthy",
TotalMemoryMb = 16384,
PrivateMemorySizeMb = 512,
WorkingSetMb = 1024
}
};
// Verificar estado general
if (healthResponse.Status == "Healthy")
{
Console.WriteLine("✅ Sistema saludable");
}
else if (healthResponse.Status == "Degraded")
{
Console.WriteLine("⚠️ Sistema degradado");
}
else
{
Console.WriteLine("❌ Sistema no saludable");
}
// Verificar espacio en disco
var diskUsagePercentage = (healthResponse.DiskSpace.UsedSpaceGB / healthResponse.DiskSpace.TotalSpaceGB) * 100;
if (diskUsagePercentage > 90)
{
Console.WriteLine($"⚠️ Espacio en disco crítico: {diskUsagePercentage:F1}% usado");
}
// Verificar uso de memoria
var memoryUsagePercentage = (double)healthResponse.MemoryUsage.PrivateMemorySizeMb / healthResponse.MemoryUsage.TotalMemoryMb * 100;
if (memoryUsagePercentage > 80)
{
Console.WriteLine($"⚠️ Uso de memoria alto: {memoryUsagePercentage:F1}%");
}
// Verificar conexión a BD
if (healthResponse.DatabaseConnection.Status != "Connected")
{
Console.WriteLine("❌ Problema con la conexión a la base de datos");
}
// Serializar a JSON
var jsonResponse = JsonSerializer.Serialize(healthResponse, new JsonSerializerOptions
{
WriteIndented = true
});
// Enviar respuesta HTTP
return Ok(healthResponse);
// Ejemplo de health check degradado
var degradedResponse = new HealthCheckResponse
{
Status = "Degraded",
Message = "Algunos componentes tienen problemas",
DatabaseConnection = new DatabaseConnectionDetails
{
Status = "Connected",
Version = "15.0.2000.5",
Level = "150",
Edition = "Standard Edition (64-bit)",
EngineEdition = "3",
IsClustered = false,
IsFullTextInstalled = true,
IsIntegratedSecurityOnly = false,
IsXtpSupported = true
},
DiskSpace = new DiskSpaceDetails
{
Status = "Warning",
TotalSpaceGB = 500.0,
FreeSpaceGB = 25.0, // Solo 5% libre
UsedSpaceGB = 475.0
},
MemoryUsage = new MemoryUsageDetails
{
Status = "Healthy",
TotalMemoryMb = 16384,
PrivateMemorySizeMb = 512,
WorkingSetMb = 1024
}
};