from __future__ import annotations from app.core.config import settings from app.core.files import read_runtime_json, write_runtime_json DEFAULT_RUNTIME_SETTINGS = { "worker_mode": settings.worker_mode, "worker_service_name": settings.worker_service_name, "api_service_name": settings.api_service_name, "sync_agent_service_name": settings.sync_agent_service_name, "worker_log_sync_enabled": False, "worker_log_sync_mode": "key", } def _normalize_worker_log_sync_mode(value: object) -> str: return "full" if str(value or "").strip().lower() == "full" else "key" def normalize_runtime_settings(payload: dict | None) -> dict: merged = dict(DEFAULT_RUNTIME_SETTINGS) if isinstance(payload, dict): for key in DEFAULT_RUNTIME_SETTINGS: if key in payload and payload[key] is not None: merged[key] = payload[key] worker_mode = str(merged.get("worker_mode") or "").strip() if worker_mode not in {"windows-local", "linux-systemd"}: merged["worker_mode"] = DEFAULT_RUNTIME_SETTINGS["worker_mode"] for key in ("worker_service_name", "api_service_name", "sync_agent_service_name"): value = str(merged.get(key) or "").strip() merged[key] = value or DEFAULT_RUNTIME_SETTINGS[key] merged["worker_log_sync_enabled"] = bool(merged.get("worker_log_sync_enabled", False)) merged["worker_log_sync_mode"] = _normalize_worker_log_sync_mode(merged.get("worker_log_sync_mode")) return merged def get_runtime_settings() -> dict: stored = read_runtime_json("runtime_settings.json", default={}) return normalize_runtime_settings(stored) def update_runtime_settings(payload: dict) -> dict: merged = normalize_runtime_settings({**get_runtime_settings(), **(payload or {})}) write_runtime_json("runtime_settings.json", merged) return merged