safraeli commited on
Commit
5a689d4
·
verified ·
1 Parent(s): c046bc3

Cache TB data: backend/api/routes/control.py

Browse files
Files changed (1) hide show
  1. backend/api/routes/control.py +11 -2
backend/api/routes/control.py CHANGED
@@ -61,14 +61,23 @@ async def control_budget():
61
  )
62
 
63
 
 
 
 
64
  @router.get("/trackers")
65
  async def control_trackers():
66
- """Live tracker angles from ThingsBoard."""
 
 
 
67
  try:
68
  from src.tracker_dispatcher import TrackerDispatcher
69
  dispatcher = TrackerDispatcher()
70
  angles = dispatcher.read_current_angles()
71
- return {"trackers": angles, "source": "ThingsBoard"}
 
 
 
72
  except Exception as exc:
73
  log.error("Tracker fetch failed: %s", exc)
74
  raise HTTPException(status_code=502, detail=f"Tracker fetch failed: {exc}")
 
61
  )
62
 
63
 
64
+ _tracker_cache: dict = {"data": None, "expires": 0.0}
65
+
66
+
67
  @router.get("/trackers")
68
  async def control_trackers():
69
+ """Live tracker angles from ThingsBoard (5-min TTL cache)."""
70
+ import time as _time
71
+ if _tracker_cache["data"] and _time.monotonic() < _tracker_cache["expires"]:
72
+ return _tracker_cache["data"]
73
  try:
74
  from src.tracker_dispatcher import TrackerDispatcher
75
  dispatcher = TrackerDispatcher()
76
  angles = dispatcher.read_current_angles()
77
+ result = {"trackers": angles, "source": "ThingsBoard"}
78
+ _tracker_cache["data"] = result
79
+ _tracker_cache["expires"] = _time.monotonic() + 300 # 5 min
80
+ return result
81
  except Exception as exc:
82
  log.error("Tracker fetch failed: %s", exc)
83
  raise HTTPException(status_code=502, detail=f"Tracker fetch failed: {exc}")