Files
getDomain/domain-api/app/services/runtime_settings_service.py
Your Name 0e096947fc debug
2026-04-17 15:13:46 +08:00

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