[object Object]

← 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

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)