< Summary

Information
Class: Chronicis.Api.Services.HealthCheckServiceBase
Assembly: Chronicis.Api
File(s): /home/runner/work/chronicis/chronicis/src/Chronicis.Api/Services/HealthChecks/HealthCheckServiceBase.cs
Line coverage
100%
Covered lines: 2
Uncovered lines: 0
Coverable lines: 2
Total lines: 53
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%

File(s)

/home/runner/work/chronicis/chronicis/src/Chronicis.Api/Services/HealthChecks/HealthCheckServiceBase.cs

#LineLine coverage
 1using System.Diagnostics;
 2using Chronicis.Shared.DTOs;
 3
 4namespace Chronicis.Api.Services;
 5
 6public abstract class HealthCheckServiceBase : IHealthCheckService
 7{
 8    private readonly ILogger _logger;
 9
 10    protected HealthCheckServiceBase(ILogger logger)
 11    {
 512        _logger = logger;
 513    }
 14
 15    public async Task<ServiceHealthDto> CheckHealthAsync(string serviceName, string serviceKey)
 16    {
 17        var stopwatch = Stopwatch.StartNew();
 18        var checkedAt = DateTime.UtcNow;
 19
 20        try
 21        {
 22            var (status, message) = await PerformHealthCheckAsync();
 23            stopwatch.Stop();
 24
 25            return new ServiceHealthDto
 26            {
 27                Name = serviceName,
 28                ServiceKey = serviceKey,
 29                Status = status,
 30                Message = message,
 31                ResponseTimeMs = stopwatch.Elapsed.TotalMilliseconds,
 32                CheckedAt = checkedAt
 33            };
 34        }
 35        catch (Exception ex)
 36        {
 37            stopwatch.Stop();
 38            _logger.LogErrorSanitized(ex, "Health check failed for {ServiceName}", serviceName);
 39
 40            return new ServiceHealthDto
 41            {
 42                Name = serviceName,
 43                ServiceKey = serviceKey,
 44                Status = HealthStatus.Unhealthy,
 45                Message = ex.Message,
 46                ResponseTimeMs = stopwatch.Elapsed.TotalMilliseconds,
 47                CheckedAt = checkedAt
 48            };
 49        }
 50    }
 51
 52    protected abstract Task<(string Status, string? Message)> PerformHealthCheckAsync();
 53}