23 lines
2.1 KiB
Python
23 lines
2.1 KiB
Python
# 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
|