feat: graceful shutdown with store persistence and restart overlay
Lint & Test / test (push) Failing after 29s
Lint & Test / test (push) Failing after 29s
- Add /api/v1/system/shutdown endpoint that triggers clean uvicorn exit - Persist all 15 stores to disk during shutdown via _save_all_stores() - Add force parameter to BaseJsonStore._save() to bypass restore freeze - Restart script now requests graceful shutdown via API (15s timeout), falls back to force-kill only if server doesn't exit in time - Broadcast server_restarting event over WebSocket before shutdown - Frontend shows "Server restarting..." overlay instantly on WS event, replacing the old dynamically-created overlay from settings.ts - Add server_ref module to share uvicorn Server + TrayManager refs - Add i18n keys for restart overlay (en/ru/zh)
This commit is contained in:
@@ -15,6 +15,7 @@ from pathlib import Path
|
||||
import uvicorn
|
||||
|
||||
from wled_controller.config import get_config
|
||||
from wled_controller.server_ref import set_server, set_tray
|
||||
from wled_controller.tray import PYSTRAY_AVAILABLE, TrayManager
|
||||
from wled_controller.utils import setup_logging, get_logger
|
||||
|
||||
@@ -52,6 +53,7 @@ def main() -> None:
|
||||
log_level=config.server.log_level.lower(),
|
||||
)
|
||||
server = uvicorn.Server(uv_config)
|
||||
set_server(server)
|
||||
|
||||
use_tray = PYSTRAY_AVAILABLE and (
|
||||
sys.platform == "win32" or _force_tray()
|
||||
@@ -80,6 +82,7 @@ def main() -> None:
|
||||
port=config.server.port,
|
||||
on_exit=lambda: _request_shutdown(server),
|
||||
)
|
||||
set_tray(tray)
|
||||
tray.run()
|
||||
|
||||
# Tray exited — wait for server to finish its graceful shutdown
|
||||
|
||||
Reference in New Issue
Block a user