website: demo household and the admin screenshots it produced
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
"""The repository's projection-coherence oracle (`recompute_checks` and
|
||||
`expectProjectionsMatchRecompute` in src/storage/repositories/queries_repo.zig),
|
||||
plus file-level invariants. Exits 1 on any violation. usage: check_coherence.py DATA_DIR"""
|
||||
import sqlite3
|
||||
import sys
|
||||
|
||||
DATA = sys.argv[1]
|
||||
BUCKET = "(CASE WHEN timestamp >= 0 THEN timestamp / 1800 * 1800 ELSE (timestamp - 1799) / 1800 * 1800 END)"
|
||||
CHECKS = [
|
||||
("SELECT bucket, queries, blocked, cached, rt_sum, rt_count FROM bucket_totals",
|
||||
f"SELECT {BUCKET}, count(*), coalesce(sum(blocked <> 0), 0), coalesce(sum(cache_hit = 1), 0),"
|
||||
" coalesce(sum(response_time_us), 0), count(response_time_us) FROM query_log GROUP BY 1"),
|
||||
("SELECT bucket, client_ip, queries FROM bucket_clients",
|
||||
f"SELECT {BUCKET}, client_ip, count(*) FROM query_log GROUP BY 1, 2"),
|
||||
("SELECT bucket, qtype, count FROM bucket_types",
|
||||
f"SELECT {BUCKET}, coalesce(qtype, -1), count(*) FROM query_log GROUP BY 1, 2"),
|
||||
("SELECT bucket, route_kind, source_present, source_text, count FROM bucket_routes",
|
||||
f"SELECT {BUCKET}, route_kind, source IS NOT NULL, coalesce(source, ''), count(*)"
|
||||
" FROM (SELECT timestamp, route_kind, CASE route_kind WHEN 'upstream' THEN upstream"
|
||||
" WHEN 'forward_zone' THEN forward_zone END AS source FROM query_log) GROUP BY 1, 2, 3, 4"),
|
||||
]
|
||||
|
||||
ql = sqlite3.connect(f"file:{DATA}/querylog.db?mode=ro", uri=True)
|
||||
failures = 0
|
||||
|
||||
|
||||
def expect(label, ok, detail=""):
|
||||
global failures
|
||||
print(("ok " if ok else "FAIL ") + label + (f" ({detail})" if detail else ""))
|
||||
failures += not ok
|
||||
|
||||
|
||||
for projection, recompute in CHECKS:
|
||||
diff = ql.execute(
|
||||
f"SELECT (SELECT count(*) FROM ({projection} EXCEPT {recompute}))"
|
||||
f" + (SELECT count(*) FROM ({recompute} EXCEPT {projection}))"
|
||||
).fetchone()[0]
|
||||
expect(f"projection == recompute: {projection.split('FROM ')[1]}", diff == 0, f"{diff} differing rows")
|
||||
|
||||
integrity = ql.execute("PRAGMA integrity_check").fetchone()[0]
|
||||
expect("querylog integrity_check", integrity == "ok", integrity)
|
||||
expect("querylog user_version == 1", ql.execute("PRAGMA user_version").fetchone()[0] == 1)
|
||||
orphans = ql.execute("SELECT count(*) FROM query_log WHERE domain_id NOT IN (SELECT id FROM domains)").fetchone()[0]
|
||||
expect("every query_log.domain_id names a domain", orphans == 0, f"{orphans} orphans")
|
||||
created, since, first = ql.execute(
|
||||
"SELECT created_at, available_since, (SELECT min(timestamp) FROM query_log) FROM querylog_meta").fetchone()
|
||||
expect("available_since = created_at + 1 <= first row", since == created + 1 and (first is None or since <= first),
|
||||
f"created_at={created} available_since={since} first_row={first}")
|
||||
disorder = ql.execute(
|
||||
"SELECT count(*) FROM query_log a JOIN query_log b ON b.id = a.id + 1 WHERE b.timestamp < a.timestamp").fetchone()[0]
|
||||
expect("query_log ids ascend with timestamps", disorder == 0, f"{disorder} inversions")
|
||||
|
||||
cfg = sqlite3.connect(f"file:{DATA}/config.db?mode=ro", uri=True)
|
||||
cfg.execute(f"ATTACH 'file:{DATA}/querylog.db?mode=ro' AS ql")
|
||||
bad = cfg.execute("""SELECT count(*) FROM clients c WHERE EXISTS (SELECT 1 FROM ql.query_log q WHERE q.client_ip = c.ip)
|
||||
AND (c.first_seen > (SELECT min(timestamp) FROM ql.query_log WHERE client_ip = c.ip)
|
||||
OR c.last_seen < (SELECT max(timestamp) FROM ql.query_log WHERE client_ip = c.ip))""").fetchone()[0]
|
||||
expect("clients first_seen/last_seen bracket their logged rows", bad == 0, f"{bad} clients out of range")
|
||||
unknown = cfg.execute("SELECT count(DISTINCT client_ip) FROM ql.query_log WHERE client_ip NOT IN (SELECT ip FROM clients)").fetchone()[0]
|
||||
expect("every logged client is a named client row", unknown == 0, f"{unknown} unknown")
|
||||
expect("config integrity_check", cfg.execute("PRAGMA integrity_check").fetchone()[0] == "ok")
|
||||
sys.exit(1 if failures else 0)
|
||||
Reference in New Issue
Block a user