release 1.9.0: monpages top/bottom content markers + surface required

Require meaningful monitoring HTML: sticky-bar/generated at top, footer
or taler-mon:bottom at end; ERROR if body is progress-only. Mid-run
(incomplete meta or progress without complete foot) relaxes bottom only.
GOA always checks taler-monitoring-surface. Generator emits taler-mon
markers and taler-mon-page complete|incomplete meta.
This commit is contained in:
Hernâni Marques 2026-07-19 00:32:35 +02:00
parent e7a3cd558f
commit 757090cbff
No known key found for this signature in database
GPG key ID: CB5738652768F7E9
6 changed files with 163 additions and 20 deletions

View file

@ -971,12 +971,15 @@ def build_html(
suite_version_url=suite_version_url,
)
kind = "surface" if "surface" in (page_label or "") else "monitoring"
return f"""<!DOCTYPE html>
<html lang="{html.escape(lang if "lang" in dir() else "en")}">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="generated" content="{html.escape(generated_iso)}"/>
<meta name="taler-mon-page" content="complete"/>
<meta name="taler-mon-kind" content="{html.escape(kind)}"/>
<title>{html.escape(title)}</title>
<style>
:root {{
@ -1042,16 +1045,18 @@ footer {{
</style>
</head>
<body>
<!-- taler-mon:top -->
{bar}
<main>
{err_nav}
<div class="console">
<div class="console" id="mon-console">
{"".join(body_lines)}
</div>
<footer>
<footer id="mon-footer">
{html.escape(footer_txt)}
</footer>
</main>
<!-- taler-mon:bottom:complete -->
{STICKY_JS}
</body>
</html>
@ -1105,6 +1110,7 @@ def build_redirect_html(
suite_version=suite_version,
suite_version_url=suite_version_url,
)
kind = "surface" if "surface" in (page_label or "") else "monitoring"
return f"""<!DOCTYPE html>
<html lang="{html.escape(lang if "lang" in dir() else "en")}">
<head>
@ -1112,6 +1118,8 @@ def build_redirect_html(
<meta http-equiv="refresh" content="2; url={html.escape(link)}"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="generated" content="{html.escape(generated_iso)}"/>
<meta name="taler-mon-page" content="incomplete"/>
<meta name="taler-mon-kind" content="{html.escape(kind)}"/>
<title>{html.escape(page_label)} · errors · {html.escape(hostname)}</title>
<style>
:root {{
@ -1129,6 +1137,7 @@ body {{ margin: 0; background: var(--bg); color: var(--fg); font-size: 13px; }}
</style>
</head>
<body>
<!-- taler-mon:top -->
{bar}
<div class="box">
<p><strong>{html.escape(page_label)}</strong> has failures.</p>
@ -1136,6 +1145,7 @@ body {{ margin: 0; background: var(--bg); color: var(--fg); font-size: 13px; }}
error index, and sticky status bar.</p>
<p style="color:#666;font-size:12px">generated {html.escape(generated_at)} · source {c}</p>
</div>
<!-- taler-mon:bottom:incomplete -->
{STICKY_JS}
</body>
</html>