Files
boc/landvex-admin-backend/app/routers/__pycache__/live_data.cpython-39.pyc
T

76 lines
5.3 KiB
Plaintext
Raw Normal View History

a
`Ij{ã@sdZddlmZddlZddlmZmZeddgdZdZd d
Ze  d ¡d d
ƒZ
e  d¡de dœddƒZ e  d¡ddƒZ
e  d¡ddƒZdS)uG
LIFE Live Data API
Exponerar realtidsdata från multi-source pipeline
é)Ú APIRouterN)ÚdatetimeÚ timedeltaz/liveÚ live_data)ÚprefixÚtagsz4/home/bernt/.openclaw/workspace/rivp-pilot-1/rivp.dbcCst t¡}tj|_|S)N)Úsqlite3ÚconnectÚDB_PATHÚRowÚ row_factory)Úconn©rúN/home/bernt/.openclaw/workspace/landvex-admin-backend/app/routers/live_data.pyÚget_db
s
rz/public/statusc Ãtƒ}| ¡}| d¡| ¡d}| d¡| ¡d}| d¡| ¡d}| d¡dd| ¡Dƒ}| d¡| ¡d}| d ¡| ¡dpšd}| ¡t ¡ ¡d
||||t |d ƒd œ|d
d
d
d
dœdœS)zGet current system statuszSELECT COUNT(*) FROM roadsrz!SELECT COUNT(*) FROM observationszCSELECT COUNT(*) FROM observations WHERE detected_date = date('now')zVSELECT source, COUNT(*) as count FROM observations GROUP BY source ORDER BY count DESCcSsi|]}|d|dqS)rér©Ú.0ÚrowrrrÚ
<dictcomp>%óz#get_live_status.<locals>.<dictcomp>zp
SELECT COUNT(*) FROM observations
WHERE datetime(created_at) > datetime('now', '-1 hour')
SELECT AVG(
julianday('now') - julianday(detected_date)
) * 24 as avg_latency_hours
FROM observations
WHERE detected_date >= date('now', '-7 days')
Ú operationalr)Ú total_roadsÚtotal_observationsZobservations_todayZobservations_last_hourZreality_latency_hoursÚactive)Z trafikverketZsmhiÚquixzoomÚ satellite)Ú timestampZ
system_statusZdata_freshnessÚsourcesZpipeline_status)
rÚcursorÚexecuteÚfetchoneÚfetchallÚcloserÚnowÚ isoformatÚround)r
ÚcrÚ total_obsZ today_obsrZ last_hourÚ avg_latencyrrrÚget_live_statuss<
 
 
 

 

ûüõr*z/public/observations/streamé2)ÚlimitcÃsDtƒ}| ¡}| d|f¡dd| ¡Dƒ}| ¡t|ƒ|dœS)z#Get recent observations as a streamz¾
SELECT o.*, r.name as road_name, r.county, r.road_number
FROM observations o
JOIN roads r ON o.road_id = r.id
ORDER BY o.created_at DESC
LIMIT ?
cSsg|] }t|ƒqSr©ÚdictrrrrÚ
<listcomp>[rz*get_observation_stream.<locals>.<listcomp>)ÚcountÚ observations)rrr r"r#Úlen)r,r
r'r1rrrÚget_observation_streamMsúþr3z/public/alertscÃs`tƒ}| ¡}| d¡dd| ¡Dƒ}| ¡t|ƒtdd|Dƒƒtdd|Dƒƒ|dœS)z*Get active alerts (critical/high severity)a¨
SELECT o.*, r.name as road_name, r.county
FROM observations o
JOIN roads r ON o.road_id = r.id
WHERE o.severity IN ('critical', 'high')
AND o.detected_date >= date('now', '-7 days')
ORDER BY
CASE o.severity
WHEN 'critical' THEN 1
WHEN 'high' THEN 2
ELSE 3
END,
o.detected_date DESC
cSsg|] }t|ƒqSrr-rrrrr/xrz%get_active_alerts.<locals>.<listcomp>css |]}| d¡dkrdVqdS)ÚseverityÚcriticalrÚget©rÚarrrÚ <genexpr>}rz$get_active_alerts.<locals>.<genexpr>css |]}| d¡dkrdVqdS)r4ÚhighrNr6r8rrrr:~r)Z alert_countÚcritical_countZ
high_countÚalerts)rrr r"r#r2Úsum)r
r'r=rrrÚget_active_alertscs
ür?z/public/coveragec Ãtƒ}| ¡}| d¡g}| ¡D]:}| |d|d|d|d|d|d|dd œ¡q$| d
¡g}| ¡D]2}| |d|d|dt|dpœddƒd œ¡qv| ¡t|ƒ||d œS)
z'Get coverage data for map visualizationa8
SELECT o.latitude, o.longitude, o.observation_type, o.severity, o.confidence,
r.name as road_name, r.county
FROM observations o
JOIN roads r ON o.road_id = r.id
WHERE o.latitude != 0 AND o.longitude != 0
ORDER BY o.detected_date DESC
LIMIT 500
rrééééé)ÚlatZlonÚtyper4Ú
confidenceÚroadÚcountya3
SELECT r.county,
COUNT(DISTINCT r.id) as roads,
COUNT(o.id) as observations,
AVG(o.confidence) as avg_confidence
FROM roads r