release 1.7.3: monitoring pages as first-class suite section

README section lists public HTML report paths; sticky "What this monitors"
adds a dedicated block that monpages/public pages are part of taler-monitoring.
This commit is contained in:
Hernâni Marques 2026-07-19 01:25:10 +02:00
parent 4cfb1412aa
commit c73e7d62b4
No known key found for this signature in database
GPG key ID: CB5738652768F7E9
5 changed files with 133 additions and 21 deletions

View file

@ -65,6 +65,25 @@ def ui(lang: str, key: str, **kwargs) -> str:
"stack_i4": "HTML host: {host}",
"stack_i5": "Timer: host-agent path + 4h · /monitoring on bank, exchange, merchant fronts",
"stack_i_phases": "Log header phases= {phases}",
"pages_title": "Monitoring pages (suite HTML)",
"pages_summary": "Public sticky-bar reports · phase monpages · part of taler-monitoring",
"pages_i1": "These HTML reports are generated by taler-monitoring (site-gen/console_to_html.py + host-agent)",
"pages_i2": "Stack pages: /monitoring/ on bank, exchange, and merchant public hosts",
"pages_i3": "Suite pages on taler.hacktivism.ch: /taler-monitoring-surface/, /taler-monitoring-aptdeploy/, /taler-monitoring-mattermost/, /taler-monitoring-mail/",
"pages_i4": "Phase monpages: outside-in check that each public FQDN serves real suite HTML (not merchant JSON code 21)",
"pages_i5": "Host-agent publishes staging → DEPLOY_WWW_ROOT; Caddy must handle paths (see site-gen/caddy-monitoring-handles.snippet)",
"pages_i6": "This page host: {host} · path label: {label}",
"pages_section_lead": "Monitoring pages themselves (suite):",
"mm_title": "Mattermost chat health",
"mm_summary": "mattermost.taler.net · SPA + /api/v4/system/ping · TLS",
"mm_i1": "Outside-in phase mattermost (default https://mattermost.taler.net)",
"mm_i2": "Landing SPA, /api/v4/system/ping JSON, /login, TLS certificate expiry",
"mm_i3": "HTML on taler.hacktivism.ch /taler-monitoring-mattermost/",
"mail_title": "Mail (MX / SMTP / IMAP)",
"mail_summary": "firefly + pixel/TSA · catalog mail-catalog.conf",
"mail_i1": "Outside-in phase mail: MX, SMTP/IMAP ports and handshakes, SPF/DMARC",
"mail_i2": "Domains: taler.net & gnunet.org (firefly), taler-systems.com (pixel / mail.anastasis.lu)",
"mail_i3": "HTML on taler.hacktivism.ch /taler-monitoring-mail/",
"footer": "Console-style render of taler-monitoring output. Sticky bar: green = clean · yellow = warnings · red = errors. Commit pins the exact tree used for this run.",
"redirect_fail": "has failures.",
"redirect_see": "See {link} for the full console log, error index, and sticky status bar.",
@ -118,7 +137,26 @@ def ui(lang: str, key: str, **kwargs) -> str:
"stack_i4": "Hôte HTML : {host}",
"stack_i5": "Minuterie : host-agent path + 4 h · /monitoring sur bank, exchange, fronts marchands",
"stack_i_phases": "En-tête de journal phases= {phases}",
"footer": "Rendu console de taler-monitoring. Barre collante : vert = OK · jaune = avertissements · rouge = erreurs. Le commit fixe l'arbre exact de cette exécution.",
"pages_title": "Pages de monitoring (HTML de la suite)",
"pages_summary": "Rapports publics sticky-bar · phase monpages · partie de taler-monitoring",
"pages_i1": "Ces rapports HTML sont générés par taler-monitoring (site-gen/console_to_html.py + host-agent)",
"pages_i2": "Pages pile : /monitoring/ sur bank, exchange et hôtes marchands publics",
"pages_i3": "Pages suite sur taler.hacktivism.ch : /taler-monitoring-surface/, /taler-monitoring-aptdeploy/, /taler-monitoring-mattermost/, /taler-monitoring-mail/",
"pages_i4": "Phase monpages : contrôle outside-in que chaque FQDN public sert le HTML de la suite (pas JSON merchant code 21)",
"pages_i5": "Host-agent publie staging → DEPLOY_WWW_ROOT ; Caddy doit gérer les chemins (voir site-gen/caddy-monitoring-handles.snippet)",
"pages_i6": "Hôte de cette page : {host} · libellé : {label}",
"pages_section_lead": "Les pages de monitoring elles-mêmes (suite) :",
"mm_title": "Santé du chat Mattermost",
"mm_summary": "mattermost.taler.net · SPA + /api/v4/system/ping · TLS",
"mm_i1": "Phase outside-in mattermost (défaut https://mattermost.taler.net)",
"mm_i2": "SPA d'accueil, /api/v4/system/ping JSON, /login, expiration du certificat TLS",
"mm_i3": "HTML sur taler.hacktivism.ch /taler-monitoring-mattermost/",
"mail_title": "Mail (MX / SMTP / IMAP)",
"mail_summary": "firefly + pixel/TSA · catalogue mail-catalog.conf",
"mail_i1": "Phase outside-in mail : MX, ports SMTP/IMAP et handshakes, SPF/DMARC",
"mail_i2": "Domaines : taler.net & gnunet.org (firefly), taler-systems.com (pixel / mail.anastasis.lu)",
"mail_i3": "HTML sur taler.hacktivism.ch /taler-monitoring-mail/",
"footer": "Rendu console de taler-monitoring. Barre collante : vert = OK · jaune = avertissements · rouge = erreurs. Le commit fixe l'arbre exact de cette exécution.",
"redirect_fail": "a des échecs.",
"redirect_see": "Voir {link} pour le journal console complet, l'index d'erreurs et la barre de statut.",
"ago_s": "il y a {n}s",
@ -320,6 +358,19 @@ def extract_phases(log_text: str) -> str:
def _pages_items(lang: str, host: str, label: str) -> list[str]:
"""Dedicated section: monitoring HTML pages are part of taler-monitoring."""
return [
ui(lang, "pages_section_lead"),
ui(lang, "pages_i1"),
ui(lang, "pages_i2"),
ui(lang, "pages_i3"),
ui(lang, "pages_i4"),
ui(lang, "pages_i5"),
ui(lang, "pages_i6", host=host, label=label),
]
def monitoring_scope(
page_label: str,
hostname: str,
@ -337,35 +388,65 @@ def monitoring_scope(
lang = "fr"
if "surface" in label:
items = [
ui(lang, "surface_i1"),
ui(lang, "surface_i2"),
ui(lang, "surface_i3"),
ui(lang, "surface_i4", host=host),
ui(lang, "surface_i5"),
] + _pages_items(lang, host, label)
return {
"kind": "surface",
"lang": lang,
"title": ui(lang, "surface_title"),
"summary": ui(lang, "surface_summary"),
"items": [
ui(lang, "surface_i1"),
ui(lang, "surface_i2"),
ui(lang, "surface_i3"),
ui(lang, "surface_i4", host=host),
ui(lang, "surface_i5"),
],
"items": items,
}
if "aptdeploy" in label or "apt-deploy" in label or "apt_src" in label:
items = [
ui(lang, "apt_i1"),
ui(lang, "apt_i2"),
ui(lang, "apt_i3"),
ui(lang, "apt_i4"),
ui(lang, "apt_i5"),
ui(lang, "apt_i6", host=host),
ui(lang, "apt_i7"),
] + _pages_items(lang, host, label)
return {
"kind": "aptdeploy",
"lang": lang,
"title": ui(lang, "apt_title"),
"summary": ui(lang, "apt_summary"),
"items": [
ui(lang, "apt_i1"),
ui(lang, "apt_i2"),
ui(lang, "apt_i3"),
ui(lang, "apt_i4"),
ui(lang, "apt_i5"),
ui(lang, "apt_i6", host=host),
ui(lang, "apt_i7"),
],
"items": items,
}
if "mattermost" in label:
items = [
ui(lang, "mm_i1"),
ui(lang, "mm_i2"),
ui(lang, "mm_i3"),
] + _pages_items(lang, host, label)
return {
"kind": "mattermost",
"lang": lang,
"title": ui(lang, "mm_title"),
"summary": ui(lang, "mm_summary"),
"items": items,
}
if label in ("taler-monitoring-mail", "mail") or label.endswith("-mail"):
items = [
ui(lang, "mail_i1"),
ui(lang, "mail_i2"),
ui(lang, "mail_i3"),
] + _pages_items(lang, host, label)
return {
"kind": "mail",
"lang": lang,
"title": ui(lang, "mail_title"),
"summary": ui(lang, "mail_summary"),
"items": items,
}
phase_txt = phases or "urls · inside · versions"
@ -392,6 +473,7 @@ def monitoring_scope(
if phases:
items.insert(2, ui(lang, "stack_i_phases", phases=phases))
items = items + _pages_items(lang, host, label)
return {
"kind": role,
"lang": lang,