import html import json from onguard24.status_snapshot import build def _row(name: str, value: object) -> str: label = html.escape(name) if value == "disabled": badge = 'не настроено' return f"{label}{badge}" if isinstance(value, dict): st = value.get("status", "?") if st == "ok": badge = 'OK' elif st == "reachable": badge = 'доступен' elif st == "error": badge = 'ошибка' else: badge = f'{html.escape(str(st))}' extra = {k: v for k, v in value.items() if k != "status"} detail_html = "" if extra: detail_html = ( f'
'
                f"{html.escape(json.dumps(extra, ensure_ascii=False, indent=2))}"
                f"
" ) return f"{label}{badge}{detail_html}" badge = html.escape(str(value)) return f"{label}{badge}" async def render_root_page(request) -> str: data = await build(request) rows = "" for key in ("database", "vault", "grafana", "forgejo"): if key in data: rows += _row(key, data[key]) payload = html.escape(json.dumps(data, ensure_ascii=False, indent=2)) return f""" onGuard24

onGuard24

Проверки доступа

{rows}

Полный ответ /api/v1/status

{payload}
"""