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
Swagger
OpenAPI
/health
JSON статус
Проверки доступа
Полный ответ /api/v1/status
{payload}
"""