Selaa lähdekoodia

Track API bug fix 5

auth_API_bug_fix
Lorenzo Pollutri 1 kuukausi sitten
vanhempi
commit
c094396dbc
1 muutettua tiedostoa jossa 33 lisäystä ja 5 poistoa
  1. +33
    -5
      routes/reslevis.py

+ 33
- 5
routes/reslevis.py Näytä tiedosto

@@ -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(


Ladataan…
Peruuta
Tallenna