50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
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
|