47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
from fastapi import APIRouter, Depends
|
|
from sqlalchemy.orm import Session
|
|
from datetime import datetime, timedelta
|
|
from typing import Dict, Any
|
|
import random
|
|
|
|
from app.seismo.database import get_db
|
|
from app.seismo.services.snapshot import emit_status_snapshot
|
|
|
|
router = APIRouter(prefix="/api", tags=["roster"])
|
|
|
|
|
|
@router.get("/status-snapshot")
|
|
def get_status_snapshot(db: Session = Depends(get_db)):
|
|
"""
|
|
Calls emit_status_snapshot() to get current fleet status.
|
|
This will be replaced with real Series3 emitter logic later.
|
|
"""
|
|
return emit_status_snapshot()
|
|
|
|
|
|
@router.get("/roster")
|
|
def get_roster(db: Session = Depends(get_db)):
|
|
"""
|
|
Returns list of units with their metadata and status.
|
|
Uses mock data for now.
|
|
"""
|
|
snapshot = emit_status_snapshot()
|
|
units_list = []
|
|
|
|
for unit_id, unit_data in snapshot["units"].items():
|
|
units_list.append({
|
|
"id": unit_id,
|
|
"status": unit_data["status"],
|
|
"age": unit_data["age"],
|
|
"last_seen": unit_data["last"],
|
|
"deployed": unit_data["deployed"],
|
|
"note": unit_data.get("note", ""),
|
|
"last_file": unit_data.get("fname", "")
|
|
})
|
|
|
|
# Sort by status priority (Missing > Pending > OK) then by ID
|
|
status_priority = {"Missing": 0, "Pending": 1, "OK": 2}
|
|
units_list.sort(key=lambda x: (status_priority.get(x["status"], 3), x["id"]))
|
|
|
|
return {"units": units_list}
|