feat(node): push USB changes and preserve sensor setup across sessions

This commit is contained in:
DCCONSTRUCTIONS
2026-09-06 00:24:48 +03:00
parent a8647c4d87
commit 22d69107ba
24 changed files with 636 additions and 60 deletions
+29
View File
@@ -2,11 +2,15 @@
from __future__ import annotations
import asyncio
import ipaddress
import json
from contextlib import suppress
from typing import Annotated
from urllib.parse import urlsplit
from fastapi import APIRouter, Depends, HTTPException, Request, Response
from fastapi.responses import StreamingResponse
from pydantic import BaseModel, ConfigDict, Field
from k1link.fleet.registry import FleetRegistry
@@ -53,6 +57,31 @@ def fleet_list(response: Response, fleet: Annotated[FleetRegistry, Depends(local
return fleet.listing()
@router.get("/events")
async def fleet_events(fleet: Annotated[FleetRegistry, Depends(local_operator)]):
async def stream():
queue, close = fleet.events.subscribe()
try:
while not fleet.stop.is_set():
# Full replacement snapshots recover missed events/reconnections.
# The timeout updates link expiry locally; it never queries a Node.
value = await asyncio.to_thread(fleet.listing)
yield "retry: 3000\ndata: " + json.dumps(value) + "\n\n"
with suppress(TimeoutError):
await asyncio.wait_for(queue.get(), timeout=5)
finally:
close()
return StreamingResponse(
stream(),
media_type="text/event-stream",
headers={
"Cache-Control": "no-store",
"X-Accel-Buffering": "no",
},
)
@router.post("/preview")
def fleet_preview(
body: PreviewRequest,