Skip to content

[FEATURE] Health Checks: Comprehensive Implementations for All Encina Components #622

@dlrivada

Description

@dlrivada

Summary

Create comprehensive health check implementations for all Encina stores and providers.

Motivation

Health checks are essential for:

  1. Kubernetes: Liveness and readiness probes
  2. Load Balancers: Instance health detection
  3. Monitoring: Proactive alerting
  4. Self-Healing: Auto-recovery triggers

Proposed Solution

Store Health Checks

// Outbox Store Health Check
public class OutboxStoreHealthCheck : IHealthCheck
{
    public async Task<HealthCheckResult> CheckHealthAsync(
        HealthCheckContext context, CancellationToken ct)
    {
        try
        {
            await _store.GetPendingCountAsync(ct);
            return HealthCheckResult.Healthy();
        }
        catch (Exception ex)
        {
            return HealthCheckResult.Unhealthy("Outbox store unavailable", ex);
        }
    }
}

Transport Health Checks

// Kafka Health Check
public class KafkaHealthCheck : IHealthCheck
{
    public async Task<HealthCheckResult> CheckHealthAsync(...)
    {
        // Check broker connectivity
        // Check topic existence
    }
}

Health Checks to Implement

Category Health Checks
Stores Outbox, Inbox, Saga, ScheduledMessage, DeadLetter, RoutingSlip, Choreography, Tenant, AuditLog
Transports Kafka, RabbitMQ, Azure Service Bus, Amazon SQS, NATS, MQTT, Redis Streams
Databases All 13 providers
Caching Redis, Memory
External Schema Registry, Secrets, Feature Flags, Service Discovery

Registration

services.AddHealthChecks()
    .AddEncinaOutboxHealthCheck()
    .AddEncinaInboxHealthCheck()
    .AddEncinaKafkaHealthCheck()
    .AddEncinaSqlServerHealthCheck();

Alternatives Considered

  1. Use AspNetCore.Diagnostics.HealthChecks library: Popular community package with many pre-built health checks. However, Encina-specific stores and patterns require custom implementations that understand our abstractions.

  2. Rely on infrastructure-level health checks only: Could use database connectivity checks at infrastructure level, but this misses application-specific health like message backlog size or saga timeout detection.

Affected Packages

  • Encina (core)
  • Encina.EntityFrameworkCore
  • Encina.Dapper.*
  • Encina.ADO.*
  • Encina.AspNetCore
  • Encina.OpenTelemetry
  • Encina.Caching.*
  • Other: Encina.HealthChecks (new package), all transport packages

Additional Context

Acceptance Criteria

  • Health check base class with common patterns
  • Store health checks (all stores)
  • Transport health checks (all transports)
  • Database health checks (all 13 providers)
  • External service health checks
  • Degraded state support
  • Configurable timeouts
  • ServiceCollection extensions
  • Unit tests
  • Documentation

Package Dependencies

  • Microsoft.Extensions.Diagnostics.HealthChecks

Related Issues

  • All store implementation issues
  • All transport implementation issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions