33 lines
1.2 KiB
C#
33 lines
1.2 KiB
C#
|
|
using OTSSignsOrchestrator.Server.Data.Entities;
|
||
|
|
|
||
|
|
namespace OTSSignsOrchestrator.Server.Health;
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// Result of a single health check execution.
|
||
|
|
/// </summary>
|
||
|
|
public record HealthCheckResult(HealthStatus Status, string Message, string? Detail = null);
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// Contract for an individual health check that runs against a specific <see cref="Instance"/>.
|
||
|
|
/// </summary>
|
||
|
|
public interface IHealthCheck
|
||
|
|
{
|
||
|
|
/// <summary>Human-readable name written to <see cref="HealthEvent.CheckName"/>.</summary>
|
||
|
|
string CheckName { get; }
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// When true the engine will automatically call <see cref="RemediateAsync"/>
|
||
|
|
/// if the check returns <see cref="HealthStatus.Critical"/>.
|
||
|
|
/// </summary>
|
||
|
|
bool AutoRemediate { get; }
|
||
|
|
|
||
|
|
/// <summary>Execute the check for <paramref name="instance"/>.</summary>
|
||
|
|
Task<HealthCheckResult> RunAsync(Instance instance, CancellationToken ct);
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// Attempt automatic remediation. Return true if the issue was fixed.
|
||
|
|
/// The default implementation does nothing and returns false.
|
||
|
|
/// </summary>
|
||
|
|
Task<bool> RemediateAsync(Instance instance, CancellationToken ct) => Task.FromResult(false);
|
||
|
|
}
|