# coding: utf-8 import sys,json,pathlib,urllib.request,subprocess sys.path.insert(0,'/tmp/codex-mileage-diag-pymysql.zip');sys.path.insert(0,'/tmp') from db_access import connect c=connect();out={} with c.cursor() as q: q.execute('START TRANSACTION WITH CONSISTENT SNAPSHOT, READ ONLY') for name,sql in { 'byDate':"SELECT stat_date,COUNT(DISTINCT vin) vehicles,COUNT(*) protocolRows,MIN(updated_at) earliestUpdated,MAX(updated_at) latestUpdated FROM vehicle_daily_mileage WHERE stat_date BETWEEN '2026-09-15' AND '2026-09-18' GROUP BY stat_date", 'byProtocol':"SELECT stat_date,protocol,COUNT(*) rowsCount,MIN(daily_mileage_km) minimumKm,MAX(daily_mileage_km) maximumKm FROM vehicle_daily_mileage WHERE stat_date BETWEEN '2026-09-15' AND '2026-09-18' GROUP BY stat_date,protocol", 'invalidProjections':"SELECT COUNT(*) n FROM vehicle_daily_mileage WHERE stat_date BETWEEN '2026-09-15' AND '2026-09-18' AND (daily_mileage_km<0 OR latest_total_mileage_km<0)", 'historicalProjectionMismatch':"SELECT COUNT(*) n FROM vehicle_daily_mileage m LEFT JOIN vehicle_daily_mileage_source s ON s.vin=m.vin AND s.stat_date=m.stat_date AND s.protocol=m.protocol AND s.is_selected=1 WHERE m.stat_date BETWEEN '2026-09-15' AND '2026-09-17' AND (s.vin IS NULL OR m.daily_mileage_km<>s.daily_mileage_km)", 'samples':"SELECT b.plate,m.stat_date,m.protocol,m.daily_mileage_km,m.latest_total_mileage_km,m.updated_at FROM vehicle_daily_mileage m JOIN vehicle_identity_binding b ON b.vin=m.vin WHERE b.plate IN ('粤AGH6240','粤AGG5043') AND m.stat_date BETWEEN '2026-09-15' AND '2026-09-18' ORDER BY b.plate,m.stat_date,m.protocol" }.items(): q.execute(sql);out[name]=q.fetchall() c.rollback();c.close() out['readyz']=json.load(urllib.request.urlopen('http://127.0.0.1:20213/readyz',timeout=10)) metrics=urllib.request.urlopen('http://127.0.0.1:20213/metrics',timeout=10).read().decode() out['metrics']=[x for x in metrics.splitlines() if x.startswith(('vehicle_stat_kafka_lag{','vehicle_stat_retry_pending_messages{','vehicle_stat_worker_active{'))] print(json.dumps(out,default=str)) assert out['invalidProjections'][0]['n']==0 assert out['historicalProjectionMismatch'][0]['n']==0