Implementación de Healthchecks en el SDK de Dinaup para .NET

Dinaup

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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Ir al contenido