Archived
Add formatting and type checks
This commit is contained in:
1 parent
c0d82eaf26
commit
24747866bc
38 files changed
+800
-265
No files matched your search
@@ -1,5 +1,6 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from collections.abc import Mapping, Sequence
|
||||
from datetime import datetime
|
||||
from urllib.parse import urlencode
|
||||
|
||||
@@ -30,13 +31,14 @@ def _admin_secret_panel(title: str, rows: list[SafeHtml]) -> SafeHtml:
|
||||
</section>
|
||||
""")
|
||||
|
||||
|
||||
def _render_admin_page(
|
||||
service: DdnsService,
|
||||
settings: DdnsSettings,
|
||||
accounts: list[dict[str, str | int | None]],
|
||||
cleanup_runs: list[dict[str, str | int]],
|
||||
scheduled_tasks: list[dict[str, str | int | None]],
|
||||
update_events: list[dict[str, str | int | None]],
|
||||
accounts: Sequence[Mapping[str, object]],
|
||||
cleanup_runs: Sequence[Mapping[str, object]],
|
||||
scheduled_tasks: Sequence[Mapping[str, object]],
|
||||
update_events: Sequence[Mapping[str, object]],
|
||||
service_metrics: dict[str, float],
|
||||
table_counts: dict[str, int],
|
||||
table_offsets: dict[str, int],
|
||||
@@ -55,8 +57,16 @@ def _render_admin_page(
|
||||
accounts_count = escape(table_counts.get("accounts", len(accounts)))
|
||||
event_count = escape(table_counts.get("update_events", len(update_events)))
|
||||
metrics_html = _metrics_panel(service_metrics)
|
||||
account_pager = _server_page_links(admin_path, "accounts_offset", table_offsets.get("accounts", 0), table_limit, table_counts.get("accounts", 0))
|
||||
event_pager = _server_page_links(admin_path, "update_events_offset", table_offsets.get("update_events", 0), table_limit, table_counts.get("update_events", 0))
|
||||
account_pager = _server_page_links(
|
||||
admin_path, "accounts_offset", table_offsets.get("accounts", 0), table_limit, table_counts.get("accounts", 0)
|
||||
)
|
||||
event_pager = _server_page_links(
|
||||
admin_path,
|
||||
"update_events_offset",
|
||||
table_offsets.get("update_events", 0),
|
||||
table_limit,
|
||||
table_counts.get("update_events", 0),
|
||||
)
|
||||
cleanup_panel = _cleanup_panel(settings, cleanup_runs, scheduled_tasks, safe_admin_path, csrf)
|
||||
totals_html = _totals_strip(table_counts, service_metrics)
|
||||
return _page(
|
||||
@@ -142,10 +152,7 @@ def _totals_strip(table_counts: dict[str, int], metrics: dict[str, float]) -> Sa
|
||||
]
|
||||
return trusted(
|
||||
'<div class="admin-total-strip" aria-label="Service totals">'
|
||||
+ "".join(
|
||||
f'<span><strong>{escape(value)}</strong>{escape(label)}</span>'
|
||||
for label, value in items
|
||||
)
|
||||
+ "".join(f"<span><strong>{escape(value)}</strong>{escape(label)}</span>" for label, value in items)
|
||||
+ "</div>"
|
||||
)
|
||||
|
||||
@@ -181,12 +188,15 @@ def _server_page_links(admin_path: str, offset_name: str, offset: int, limit: in
|
||||
|
||||
def _cleanup_panel(
|
||||
settings: DdnsSettings,
|
||||
cleanup_runs: list[dict[str, str | int]],
|
||||
scheduled_tasks: list[dict[str, str | int | None]],
|
||||
cleanup_runs: Sequence[Mapping[str, object]],
|
||||
scheduled_tasks: Sequence[Mapping[str, object]],
|
||||
safe_admin_path: str,
|
||||
csrf: str,
|
||||
) -> SafeHtml:
|
||||
task = next((item for item in scheduled_tasks if item.get("name") == "cleanup"), scheduled_tasks[0] if scheduled_tasks else {})
|
||||
task = next(
|
||||
(item for item in scheduled_tasks if item.get("name") == "cleanup"),
|
||||
scheduled_tasks[0] if scheduled_tasks else {},
|
||||
)
|
||||
last_run = task.get("last_finished_at") or (cleanup_runs[0].get("created_at") if cleanup_runs else None)
|
||||
next_run = task.get("next_run_at")
|
||||
status = task.get("last_status") or "pending"
|
||||
@@ -235,14 +245,14 @@ def _metrics_panel(metrics: dict[str, float]) -> SafeHtml:
|
||||
("Blocked requests", _metric_int(metrics.get("rate_limit_hits_total", 0))),
|
||||
("Average update time", f"{average_latency:.1f} ms"),
|
||||
("Last update time", f"{metrics.get('last_update_latency_ms', 0):.1f} ms"),
|
||||
("Cleanup ok/errors", f"{_metric_int(metrics.get('cleanup_success_total', 0))}/{_metric_int(metrics.get('cleanup_errors_total', 0))}"),
|
||||
(
|
||||
"Cleanup ok/errors",
|
||||
f"{_metric_int(metrics.get('cleanup_success_total', 0))}/{_metric_int(metrics.get('cleanup_errors_total', 0))}",
|
||||
),
|
||||
]
|
||||
cards = "\n".join(
|
||||
f"""
|
||||
cards = "\n".join(f"""
|
||||
<span><strong>{escape(value)}</strong>{escape(label)}</span>
|
||||
"""
|
||||
for label, value in items
|
||||
)
|
||||
""" for label, value in items)
|
||||
return trusted(f"""
|
||||
<div class="admin-metric-strip" aria-label="Service metrics">
|
||||
{cards}
|
||||
@@ -250,13 +260,16 @@ def _metrics_panel(metrics: dict[str, float]) -> SafeHtml:
|
||||
""")
|
||||
|
||||
|
||||
def _metric_int(value: float) -> str:
|
||||
return str(int(value))
|
||||
def _metric_int(value: object) -> str:
|
||||
try:
|
||||
return str(int(float(str(value))))
|
||||
except ValueError:
|
||||
return "0"
|
||||
|
||||
|
||||
def _format_interval(seconds: object) -> str:
|
||||
try:
|
||||
value = int(seconds)
|
||||
value = int(str(seconds))
|
||||
except (TypeError, ValueError):
|
||||
return str(seconds)
|
||||
if value % 3600 == 0:
|
||||
|
||||
Reference in new issue
Block a user