|
Переписан механизм определения offline: last_contact-based вместо TCP ping + retry для сканера
CronController::status_update_scanning(): - Устройства помечаются lost по таймауту last_contact (device_offline_threshold, default 300s) - TCP ping fallback удалён — больше не даёт ложных active - Сканер теперь нужен только для восстановления lost и обновления IP при роуминге - Добавлен createDeviceScanner() для тестируемости DeviceScanner: - BATCH_SIZE 32 -> 8 (меньше коллизий на WiFi) - Таймаут 1s -> 2s - Пауза 200мс между батчами - Retry с 500мс backoff для failed IPs EventsController::new_event(): - Восстанавливает connection_status = active при входящем событии DevicesRESTAPIController::device_status(): - Больше не помечает lost при временном сетевом сбое Config: - Добавлен device_offline_threshold (env DEVICE_OFFLINE_THRESHOLD) Тесты: 6 новых тестов CronController, 145 tests/345 assertions — все green |
|---|
|
|
| server/SHServ/Controllers/CronController.php |
|---|
| server/SHServ/Controllers/DevicesRESTAPIController.php |
|---|
| server/SHServ/Controllers/EventsController.php |
|---|
| server/SHServ/Tools/DeviceScanner.php |
|---|
| server/SHServ/config.php |
|---|
| server/tests/CronControllerTest.php |
|---|
| server/tests/bootstrap.php |
|---|