namespace ClawdDotNet.Core.Deploymentcenter.Watchdog;
///
/// Die Statuswerte, die der Watchdog kennt. stopped und maintenance sind
/// angekündigte Zustände — der Evaluator lässt solche Monitore in Ruhe, statt wenige
/// Minuten nach einem geplanten Herunterfahren einen Fehlalarm zu erzeugen.
///
public static class WatchdogStatus
{
public const string Ok = "ok";
public const string Warning = "warning";
public const string Error = "error";
public const string Stopped = "stopped";
public const string Maintenance = "maintenance";
}
///
/// Eine selbst ermittelte Teilprüfung. Das Deploymentcenter interpretiert den Namen
/// nicht — es liest nur und . Was „gesund"
/// bedeutet, entscheidet damit jede Anwendung selbst.
///
/// Schlägt eine Prüfung fehl, stuft der Server einen als ok gemeldeten
/// Heartbeat auf warning herab. Das ist der Unterschied zwischen „ein Faden
/// läuft" und „die Anwendung tut, was sie soll".
///
public sealed record HealthCheck(bool Ok, string? Message = null);
/// Momentaufnahme des Instanz-Zustands für einen Heartbeat.
/// Einer der Werte aus .
/// Kurzbegründung, erscheint im Dashboard.
///
/// Nur Zahlen: Das Deploymentcenter legt sie mit Zeitstempel ab (14 Tage) und vergleicht
/// den aktuellen Wert mit dem Sieben-Tage-Schnitt desselben Monitors. Nicht-numerische
/// Werte würden dabei stillschweigend verworfen — beschreibende Angaben gehören
/// deshalb in oder in die Checks.
///
/// Selbst ermittelter Gesundheitszustand je Teilbereich.
public sealed record InstanceHealth(
string Status,
string? Message,
IReadOnlyDictionary Metrics,
IReadOnlyDictionary Checks)
{
public static InstanceHealth Ok(string? message = null) => new(
WatchdogStatus.Ok, message,
new Dictionary(),
new Dictionary());
}
/// Liefert vor jedem Heartbeat den aktuellen Instanz-Zustand.
public interface IInstanceHealthProvider
{
Task GetAsync(CancellationToken ct);
}