← back to Domain Sniper
brand-typo-watcher: per-log breakdown in minute summary
f8c440dc19c4d49a18fdc44cb024b72d877553ab · 2026-05-12 17:02:28 -0700 · steve
Taps 'tick' status events from ct-source-ctlog to maintain a perLog map
of emitted/x509/precert counts per log. First minute confirms all 6 logs
producing — argon 135 emitted (was the 'silent' one), sphinx 154,
wyvern 155, xenon 112, tiger 9, elephant pending. Removes guesswork
about whether the fan-out is healthy or one log is wedged.
Files touched
Diff
commit f8c440dc19c4d49a18fdc44cb024b72d877553ab
Author: steve <steve@designerwallcoverings.com>
Date: Tue May 12 17:02:28 2026 -0700
brand-typo-watcher: per-log breakdown in minute summary
Taps 'tick' status events from ct-source-ctlog to maintain a perLog map
of emitted/x509/precert counts per log. First minute confirms all 6 logs
producing — argon 135 emitted (was the 'silent' one), sphinx 154,
wyvern 155, xenon 112, tiger 9, elephant pending. Removes guesswork
about whether the fan-out is healthy or one log is wedged.
---
brand-typo-watcher.js | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/brand-typo-watcher.js b/brand-typo-watcher.js
index 47aac24..774282c 100644
--- a/brand-typo-watcher.js
+++ b/brand-typo-watcher.js
@@ -119,6 +119,7 @@ function notify(title, msg) {
}
let count = { seen: 0, hits: 0, substring: 0, typo: 0, puny: 0 };
+const perLog = {}; // log_name -> { fetched, x509, precert, emitted }
function ts() { return new Date().toISOString(); }
function logHit(rec) {
@@ -185,6 +186,12 @@ function connectCtLog() {
console.error(`[${ts()}] seeded ${st.log} at tree_size=${st.position}`);
} else if (st.type === 'resumed') {
console.error(`[${ts()}] resumed ${st.log} at cursor=${st.position}`);
+ } else if (st.type === 'tick' && st.log) {
+ const p = (perLog[st.log] = perLog[st.log] || { fetched: 0, x509: 0, precert: 0, emitted: 0 });
+ p.fetched = st.stats ? st.stats.fetched : p.fetched;
+ p.x509 = st.stats ? st.stats.x509 : p.x509;
+ p.precert = st.stats ? st.stats.precert : p.precert;
+ p.emitted = st.stats ? st.stats.emitted : p.emitted;
}
},
});
@@ -197,6 +204,15 @@ function connect() {
setInterval(() => {
console.error(`[${ts()}] seen=${count.seen} hits=${count.hits} (substring=${count.substring} typo=${count.typo}) puny=${count.puny}`);
+ const logs = Object.keys(perLog).sort();
+ if (logs.length) {
+ const parts = logs.map((l) => {
+ const p = perLog[l];
+ const short = l.replace(/2026h1$/, '').slice(0, 8);
+ return `${short}=${p.emitted}(${p.x509}x/${p.precert}p)`;
+ });
+ console.error(`[${ts()}] per-log: ${parts.join(' ')}`);
+ }
}, 60_000);
process.on('SIGINT', () => process.exit(0));
← 9109f57 fingerprints: +5 aggressive operators (Key-Systems, Hexonet,
·
back to Domain Sniper
·
readme: snipe-curve 3.49h datapoint + per-log throughput cha 9d569c7 →