En este artículo hablábamos sobre los healthchecks, su importancia y cómo implementarlos. Ahora, vamos a profundizar en cómo realizar esta implementación específicamente en el ecosistema de desarrollo de Dinaup .NET, asegurando que todos los componentes clave de tu aplicación estén bajo constante monitorización.
Paso 1: Identificar Componentes Clave
Para asegurar la salud de tu aplicación, debes monitorizar los siguientes componentes críticos:
- Vault
- Dinaup Client
- Dinaup Client Default Session
Descripción de los Componentes
- Vault: Es el componente donde se guardan los secretos y credenciales sensibles de tu aplicación. Asegurarse de que el Vault esté accesible y funcionando correctamente es crucial para la seguridad y operación de tu aplicación.
- Dinaup Client: Es el cliente principal que maneja las interacciones con los servicios de Dinaup. Este cliente es fundamental para la comunicación y operación de tu aplicación dentro del ecosistema Dinaup.
- Dinaup Client Default Session: Es la sesión por defecto utilizada por el Dinaup Client para realizar operaciones. Esta sesión debe estar activa y saludable para asegurar que las operaciones se realicen sin interrupciones.
Paso 2: Configuración Inicial
Primero, asegúrate de agregar DinaupClient y Vault como singletons en tu configuración de servicios. Esto se hace en el archivo Program.cs o Startup.cs de tu proyecto .NET.
builder.Services.AddSingleton<Dinaup.DinaupClientC>(dinaupClient);
builder.Services.AddSingleton<Dinaup.Vault.VaultData>(vaultData);
Paso 3: Crear el Controlador de Healthcheck
A continuación, crea un controlador HealthCheckController para manejar las peticiones GET al endpoint /HealthCheck. Este controlador verificará el estado de los componentes y retornará un resultado indicando si la aplicación está saludable.
using Microsoft.AspNetCore.Mvc;
using System;
using System.Threading.Tasks;
public partial class HealthCheckController : Controller
{
private readonly Dinaup.Vault.VaultData vault;
private readonly Dinaup.DinaupClientC dinaupClient;
public HealthCheckController(Dinaup.DinaupClientC _dinaupClient, Dinaup.Vault.VaultData _vault)
{
this.dinaupClient = _dinaupClient;
this.vault = _vault;
}
[HttpGet("HealthCheck")]
public async Task<IResult> HealthCheck()
{
var components = new
{
vault = CheckVault(),
dinaupClient = CheckDinaupClient(),
dinaupClientDefaultSession = await CheckDinaupClientDefaultSession()
};
var isHealthy = components.vault && components.dinaupClient && components.dinaupClientDefaultSession;
var status = isHealthy ? "Healthy" : "Unhealthy";
var statusCode = isHealthy ? StatusCodes.Status200OK : StatusCodes.Status503ServiceUnavailable;
return TypedResults.Json(new { status, components }, statusCode: statusCode);
}
private bool CheckVault()
{
try
{
return vault.HealthCheck();
}
catch (Exception ex)
{
Dinaup.Logs.Log.Error(ex, "Error al calcular estado de vault");
return false;
}
}
private bool CheckDinaupClient()
{
try
{
return (dinaupClient != null);
}
catch (Exception ex)
{
Dinaup.Logs.Log.Error(ex, "Error al calcular estado de DinaupClient");
return false;
}
}
private async Task<bool> CheckDinaupClientDefaultSession()
{
try
{
return (dinaupClient != null) &&
(dinaupClient.DefaultSession != null ) &&
await dinaupClient.HealthCheckAsync();
}
catch (Exception ex)
{
Dinaup.Logs.Log.Error(ex, "Error al calcular estado de CheckDinaupClientDefaultSession");
return false;
}
}
}
Paso 4: Pruebas y Monitorización
Para asegurar una monitorización continua, puedes usar herramientas como Uptime Kuma y UptimeRobot. Estas herramientas pueden realizar las peticiones GET a tu endpoint /HealthCheck y alertarte si detectan algún problema.
