From c094396dbc1837f8d3e23956f281a5ef556c503b Mon Sep 17 00:00:00 2001 From: pollutri Date: Wed, 25 Mar 2026 13:27:30 +0100 Subject: [PATCH] Track API bug fix 5 --- routes/reslevis.py | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/routes/reslevis.py b/routes/reslevis.py index 99c47f6..9363f95 100644 --- a/routes/reslevis.py +++ b/routes/reslevis.py @@ -1,5 +1,6 @@ import asyncio import json +import logging from fastapi import APIRouter, Depends, HTTPException, Query, Request import httpx import config_env @@ -37,7 +38,9 @@ from security import get_current_user #CORE SYNC CORE_BASE_URL = config_env.CORE_API_URL.rstrip("/") +TRACKS_CORE_BASE_URL = "http://localhost:1902" CORE_TIMEOUT = 2.0 # secondi +logger = logging.getLogger("reslevis") async def sync_core_get(request: Request) -> None: if request.method != "GET": @@ -177,15 +180,17 @@ async def _core_get_json_via_curl( params: Optional[dict] = None, ): query_string = urlencode(params or {}) - url = f"{CORE_BASE_URL}{path}" + url = f"{TRACKS_CORE_BASE_URL}{path}" if query_string: url = f"{url}?{query_string}" cmd = ["curl", "-sS", "-X", "GET"] - if CORE_BASE_URL.startswith("https://"): + if TRACKS_CORE_BASE_URL.startswith("https://"): cmd.append("-k") cmd.append(url) + logger.warning("tracks curl url=%s", url) + process = await asyncio.create_subprocess_exec( *cmd, stdout=asyncio.subprocess.PIPE, @@ -195,11 +200,16 @@ async def _core_get_json_via_curl( if process.returncode != 0: detail = (stderr or stdout).decode("utf-8", errors="replace").strip() or "CORE curl request failed" + logger.error("tracks curl failed url=%s detail=%s", url, detail) raise HTTPException(status_code=502, detail=detail) + preview = stdout.decode("utf-8", errors="replace") + logger.warning("tracks curl response url=%s preview=%s", url, preview[:500]) + try: - return json.loads(stdout.decode("utf-8")) + return json.loads(preview) except ValueError as exc: + logger.error("tracks curl invalid json url=%s", url) raise HTTPException(status_code=502, detail="Invalid CORE response") from exc @@ -207,10 +217,13 @@ async def _fetch_tracks_for_tracker( tracker_id: str, params: Optional[dict] = None, ) -> List[dict]: + logger.warning("tracks fetch tracker_id=%s params=%s", tracker_id, params) payload = await _core_get_json_via_curl(f"/reslevis/getTracks/{tracker_id}", params=params) if not isinstance(payload, list): raise HTTPException(status_code=502, detail="Unexpected CORE response type") - return [_normalize_track(row) for row in payload if isinstance(row, dict)] + rows = [_normalize_track(row) for row in payload if isinstance(row, dict)] + logger.warning("tracks fetch tracker_id=%s rows=%s", tracker_id, len(rows)) + return rows def _sort_tracks_desc(rows: List[dict]) -> List[dict]: @@ -243,6 +256,21 @@ async def _fetch_all_tracks(params: dict) -> List[dict]: return merged +async def _fetch_first_tracker_tracks(params: dict) -> List[dict]: + trackers_payload = await _core_get_json_via_curl("/reslevis/getTrackers") + if not isinstance(trackers_payload, list): + raise HTTPException(status_code=502, detail="Unexpected CORE tracker response type") + + for item in trackers_payload: + if not isinstance(item, dict): + continue + tracker_id = item.get("id") + if tracker_id: + return await _fetch_tracks_for_tracker(str(tracker_id), params) + + return [] + + @router.get( "/getGateways", response_model=List[GatewayItem], @@ -435,7 +463,7 @@ async def getTracks( if selected_tracker_id: return await _fetch_tracks_for_tracker(selected_tracker_id, params) - return await _fetch_all_tracks(params) + return await _fetch_first_tracker_tracks(params) @router.get(