feat(monitors): a DNS monitor can name a resolver; the host page puts Ansible above Docker (#5214)
CI / lint (push) Successful in 2s
CI / integration (push) Successful in 53s
CI / unit (push) Successful in 1m19s
CI / publish (push) Successful in 1m20s

DNS monitors take an optional Resolver, a server's IP. Set, the check asks
that server directly for A and AAAA over UDP and records how long it took
to answer; empty keeps today's lookup through the container's resolver.
"Does my local DNS still answer for public names" and "does 1.1.1.1" are
now separate monitors. No new dependency.

On a host's page the Ansible card moves above the Docker list, which can
run to dozens of containers and hid it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-07 16:14:11 -04:00
co-authored by Claude Opus 5.5
parent c6fc02def5
commit 6788ce60f1
12 changed files with 270 additions and 26 deletions
+2 -1
View File
@@ -36,7 +36,8 @@ async def run_monitor(monitor: Monitor) -> dict:
elif monitor.type == MonitorType.tcp.value:
result.update(await tcp_check(monitor.target, int(cfg.get("port") or DEFAULT_TCP_PORT)))
elif monitor.type == MonitorType.dns.value:
result.update(await dns_check(monitor.target, cfg.get("expected_ip") or None))
result.update(await dns_check(monitor.target, cfg.get("expected_ip") or None,
cfg.get("resolver") or None))
elif monitor.type == MonitorType.http.value:
result.update(await http_check(
url=monitor.target,