Stabilize discovery lifecycle and rescan summary
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
import logging
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from sqlalchemy import select
|
||||
from app.core.state import state_manager, discovery_service
|
||||
from app.core.database import async_session
|
||||
from app.models.device import GroupModel, GroupCreateSchema
|
||||
|
||||
from app.api.schemas import RescanResponse
|
||||
from app.api.deps import verify_token, require_admin
|
||||
from app.core.database import async_session
|
||||
from app.core.state import state_manager, discovery_service
|
||||
from app.models.device import GroupModel, GroupCreateSchema
|
||||
from app.drivers.wiz import WizDriver
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -61,25 +63,14 @@ async def delete_group(group_id: str):
|
||||
return {"status": "deleted", "id": group_id}
|
||||
|
||||
|
||||
@router.post("/rescan", dependencies=[Depends(require_admin)])
|
||||
@router.post(
|
||||
"/rescan",
|
||||
dependencies=[Depends(require_admin)],
|
||||
response_model=RescanResponse,
|
||||
)
|
||||
async def rescan_network():
|
||||
found_devices = await discovery_service.scan_network()
|
||||
|
||||
# MAC-адреса найденных ламп
|
||||
found_macs = {dev["mac"] for dev in found_devices}
|
||||
|
||||
# Удаляем устройства, которые не ответили (оффлайн)
|
||||
offline_macs = [mac for mac in state_manager.devices if mac not in found_macs]
|
||||
for mac in offline_macs:
|
||||
del state_manager.devices[mac]
|
||||
logger.info(f"Устройство {mac} не ответило -- убрано из списка")
|
||||
|
||||
# Обновляем/добавляем найденные
|
||||
for dev_data in found_devices:
|
||||
state_manager.update_device(dev_data)
|
||||
|
||||
summary = await discovery_service.manual_refresh(state_manager)
|
||||
return {
|
||||
"status": "ok",
|
||||
"found": len(found_macs),
|
||||
"removed_offline": len(offline_macs),
|
||||
**summary.to_dict(),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user