Add dnsmasq version awareness, readiness endpoint, and Docker healthcheck

- Options: VersionCommand, VersionTimeoutSeconds, MinimumVersion, EnforceMinimumVersion
- Version probe service and parser; startup enforcement when EnforceMinimumVersion
- Save flow: block save on probe failure (VersionProbeFailed) or version below minimum (UnsupportedVersion)
- Status API and Dnsmasq page: show version with tooltip, link to CHANGELOG
- Readiness: GET /healthz/ready (version + dnsmasq running when StatusCommand set)
- MapReadyHealthCheck extension; Dockerfile HEALTHCHECK + curl; compose healthcheck and service_healthy
- Docs: README and agents.md updated
This commit is contained in:
2026-03-08 23:12:38 +10:00
parent a03e93bcd3
commit d910688742
19 changed files with 363 additions and 10 deletions
@@ -24,6 +24,22 @@ else if (_error != null)
else if (_status != null)
{
<section class="page-section">
@if (!string.IsNullOrWhiteSpace(_status.DnsmasqVersion) || !string.IsNullOrWhiteSpace(_status.DnsmasqVersionError))
{
<p class="text-muted small mb-1 text-end">
@if (!string.IsNullOrWhiteSpace(_status.DnsmasqVersion))
{
var versionTooltip = "Minimum required by this UI: " + _status.MinimumSupportedDnsmasqVersion + ". " + (_status.DnsmasqVersionSupported ? "Supported." : "Unsupported.");
<a href="https://thekelleys.org.uk/dnsmasq/CHANGELOG" target="_blank" rel="noopener noreferrer" class="text-muted text-decoration-none" title="@versionTooltip">
dnsmasq <code>@_status.DnsmasqVersion</code>
</a>
}
@if (!string.IsNullOrWhiteSpace(_status.DnsmasqVersionError))
{
<span class="text-warning ms-1" title="@_status.DnsmasqVersionError">@_status.DnsmasqVersionError</span>
}
</p>
}
<h2 class="page-section-title">Service configuration</h2>
<p class="mb-1"><strong>Config files (load order):</strong></p>
<ul class="list-unstyled small ms-2 mb-0">