← back to Dw Canary Watchdog
watchdog: fix dead George alert URL (HTTPS flip 2026-06-17)
9db5a979b34e09ae97c1751a184ec662a1c374d2 · 2026-06-17 14:19:43 -0700 · Steve Abrams
The meta-watchdog's own FAIL-email path was silently dead — http://100.107.67.67:9850
now 400s. Point at the Tailscale MagicDNS host so canary-down alerts actually send.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Files touched
M data/digest.mdM watchdog.mjs
Diff
commit 9db5a979b34e09ae97c1751a184ec662a1c374d2
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed Jun 17 14:19:43 2026 -0700
watchdog: fix dead George alert URL (HTTPS flip 2026-06-17)
The meta-watchdog's own FAIL-email path was silently dead — http://100.107.67.67:9850
now 400s. Point at the Tailscale MagicDNS host so canary-down alerts actually send.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---
data/digest.md | 16 ++++++++--------
watchdog.mjs | 6 ++++--
2 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/data/digest.md b/data/digest.md
index b45532d..a258d47 100644
--- a/data/digest.md
+++ b/data/digest.md
@@ -1,10 +1,10 @@
```
-DW Ops Health — 🔴 ATTENTION — 2026-06-16 06:50 PT
-🟢 uptime-probe 13↑ 0~ 0↓ of 20 sites · 0h ago
-🔴 scraper-canary 1 fail / 0 warn of 10 vendors (1 unknown) · 1h ago
-🟢 map-auditor PASS · 0 fail / 0 warn · 0.2h ago
-🔴 backup-canary 1 fail / 6 warn · 324 repos (318 no-remote ok) · 1.1h ago
-🟢 leak-scanner 0 leaking / 6 clean of 6 · 1.1h ago
-🟡 scraper-healthcheck regressions in last run · 21.4h ago
-🟢 canary-watchdog 6/6 canaries running · 0h ago
+DW Ops Health — 🔴 ATTENTION — 2026-06-16 15:19 PT
+🟢 uptime-probe 13↑ 0~ 0↓ of 20 sites · 0.1h ago
+🟢 scraper-canary 0 fail / 0 warn of 10 vendors · 3.3h ago
+🟢 map-auditor PASS · 0 fail / 0 warn · 2.8h ago
+🔴 backup-canary 1 fail / 6 warn · 325 repos (319 no-remote ok) · 0.7h ago
+🟢 leak-scanner 0 leaking / 6 clean of 6 · 9.5h ago
+🟡 scraper-healthcheck regressions in last run · 5.8h ago
+🟢 canary-watchdog 6/6 canaries running · 2.2h ago
```
diff --git a/watchdog.mjs b/watchdog.mjs
index ed3cb04..a55da06 100644
--- a/watchdog.mjs
+++ b/watchdog.mjs
@@ -70,9 +70,11 @@ async function emailGeorge(subject, html) {
let auth = ENV.GEORGE_AUTH;
if (!auth) { try { const env = fs.readFileSync(path.join(os.homedir(), 'Projects/secrets-manager/.env'), 'utf8'); auth = (env.match(/^GEORGE_AUTH=(.*)$/m) || [])[1]; } catch {} }
if (!auth) { log('email skipped (no GEORGE_AUTH)'); return false; }
- const host = ENV.GEORGE_HOST || '100.107.67.67', port = ENV.GEORGE_PORT || '9850';
+ // George flipped to HTTPS-only 2026-06-17 — raw http://<ip> now 400s and the IP
+ // has no valid cert; default to the Tailscale MagicDNS host (overridable).
+ const base = ENV.GEORGE_URL || 'https://kamatera.tail79cb8e.ts.net:9850';
try { const ac = new AbortController(); const t = setTimeout(() => ac.abort(), 15000);
- const r = await fetch(`http://${host}:${port}/api/send`, { method: 'POST', headers: { 'Authorization': auth, 'Content-Type': 'application/json; charset=utf-8' },
+ const r = await fetch(`${base}/api/send`, { method: 'POST', headers: { 'Authorization': auth, 'Content-Type': 'application/json; charset=utf-8' },
body: JSON.stringify({ to: ENV.WATCHDOG_TO || 'steve@designerwallcoverings.com', subject, body: html }), signal: ac.signal });
clearTimeout(t); const j = await r.json().catch(() => ({})); return !!j.success; } catch { return false; }
}
← bd93b05 ops-digest: CNCP post only on health state-change (no per-ti
·
back to Dw Canary Watchdog
·
(newest)