This commit is contained in:
2026-06-16 11:10:15 +03:00
parent 0571291b69
commit 3399e81447
6 changed files with 190 additions and 70 deletions
+27 -12
View File
@@ -15,6 +15,8 @@ WEB_SENDER_ID = "web"
COMMAND_KINDS = frozenset({"at", "mode", "stats_push"})
PAIRED_ONLINE_SEC = 30.0
PAIRED_START_DELAY_SEC = 3.0
# Hide devices on map/UI after this many seconds without telemetry.
DEVICE_VISIBLE_SEC = 180.0
logger = logging.getLogger(__name__)
@@ -163,8 +165,13 @@ def list_devices() -> list[dict[str, Any]]:
ORDER BY d.last_seen DESC
"""
).fetchall()
cutoff = time.time() - DEVICE_VISIBLE_SEC
devices = [_row_to_device(r) for r in rows]
return [d for d in devices if not _is_null_island(d)]
return [
d
for d in devices
if not _is_null_island(d) and d.get("last_seen", 0) >= cutoff
]
def _is_null_island(device: dict[str, Any]) -> bool:
@@ -335,13 +342,18 @@ def list_tracks(device_id: Optional[str] = None, limit: int = 50) -> list[dict[s
WHERE p.track_id = t.id AND p.role IS NOT NULL AND p.role != ''
ORDER BY p.ts DESC LIMIT 1)
"""
if device_id:
rows = conn.execute(
f"""
track_cols = f"""
SELECT t.id, t.device_id, t.started_at, t.ended_at, t.label,
d.label AS device_label,
(SELECT COUNT(*) FROM track_points p WHERE p.track_id = t.id) AS point_count,
{role_sub} AS role
FROM tracks t
LEFT JOIN devices d ON d.device_id = t.device_id
"""
if device_id:
rows = conn.execute(
f"""
{track_cols}
WHERE t.device_id = ?
ORDER BY t.started_at DESC
LIMIT ?
@@ -351,10 +363,7 @@ def list_tracks(device_id: Optional[str] = None, limit: int = 50) -> list[dict[s
else:
rows = conn.execute(
f"""
SELECT t.id, t.device_id, t.started_at, t.ended_at, t.label,
(SELECT COUNT(*) FROM track_points p WHERE p.track_id = t.id) AS point_count,
{role_sub} AS role
FROM tracks t
{track_cols}
ORDER BY t.started_at DESC
LIMIT ?
""",
@@ -367,7 +376,11 @@ def get_track(track_id: int) -> dict[str, Any]:
with _db() as conn:
track = conn.execute(
"""
SELECT id, device_id, started_at, ended_at, label FROM tracks WHERE id = ?
SELECT t.id, t.device_id, t.started_at, t.ended_at, t.label,
d.label AS device_label
FROM tracks t
LEFT JOIN devices d ON d.device_id = t.device_id
WHERE t.id = ?
""",
(track_id,),
).fetchone()
@@ -408,9 +421,11 @@ def get_chat(since: float = 0.0, limit: int = 200) -> list[dict[str, Any]]:
with _db() as conn:
rows = conn.execute(
"""
SELECT id, device_id, text, ts FROM chat
WHERE ts > ?
ORDER BY ts ASC LIMIT ?
SELECT c.id, c.device_id, c.text, c.ts, d.label AS device_label
FROM chat c
LEFT JOIN devices d ON d.device_id = c.device_id
WHERE c.ts > ?
ORDER BY c.ts ASC LIMIT ?
""",
(since, limit),
).fetchall()