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:
parent
4cfb1412aa
commit
c73e7d62b4
5 changed files with 133 additions and 21 deletions
25
README.md
25
README.md
|
|
@ -16,6 +16,31 @@ Full local GOA example: `./taler-monitoring.sh -d hacktivism.ch urls inside vers
|
|||
Repo: https://git.hacktivism.ch/hernani/taler-monitoring · tree: `~/src/taler-monitoring`
|
||||
Version: `./taler-monitoring.sh --ver` (or `--version` / `-V`)
|
||||
|
||||
|
||||
## Monitoring pages (part of the suite)
|
||||
|
||||
The **public HTML reports** are not an external addon — they are a first-class part of **taler-monitoring**:
|
||||
|
||||
| Kind | Public path(s) | Produced by |
|
||||
|------|----------------|-------------|
|
||||
| Stack host report | `https://{bank,exchange,merchant}/monitoring/` | host-agent + `site-gen/console_to_html.py` |
|
||||
| Surface inventory | `https://taler.hacktivism.ch/taler-monitoring-surface/` | `run-surface-monitoring.sh` |
|
||||
| apt-src deploy tests | `https://taler.hacktivism.ch/taler-monitoring-aptdeploy/` | `run-aptdeploy-monitoring.sh` |
|
||||
| Mattermost | `https://taler.hacktivism.ch/taler-monitoring-mattermost/` | `run-mattermost-monitoring.sh` |
|
||||
| Mail (MX/SMTP/IMAP) | `https://taler.hacktivism.ch/taler-monitoring-mail/` | `run-mail-monitoring.sh` |
|
||||
|
||||
Related:
|
||||
|
||||
- **Phase `monpages`:** outside-in check that those FQDNs serve suite HTML (sticky-bar), not merchant JSON code 21.
|
||||
- **Sticky “What this monitors”:** each page lists its checks **and** a dedicated block *Monitoring pages themselves (suite)*.
|
||||
- **Publish:** staging `~/monitoring-sites-staging` → `DEPLOY_WWW_ROOT` + Caddy handles (`site-gen/caddy-monitoring-handles.snippet`, v1.7.2+).
|
||||
|
||||
```bash
|
||||
./taler-monitoring.sh monpages
|
||||
./taler-monitoring.sh -d hacktivism.ch monpages
|
||||
```
|
||||
|
||||
|
||||
Host packages (koopa / runners): **[DEPENDENCIES.md](./DEPENDENCIES.md)**.
|
||||
Host-agents (GOA + FP; shared report pipeline): **[host-agent/README.md](./host-agent/README.md)**.
|
||||
Public HTML site-gen (same timeout/log/HTML defaults): **[site-gen/README.md](./site-gen/README.md)**.
|
||||
|
|
|
|||
2
VERSION
2
VERSION
|
|
@ -1 +1 @@
|
|||
1.7.2
|
||||
1.7.3
|
||||
|
|
@ -13,11 +13,12 @@ Tags and `VERSION` use **MAJOR.FEATURE.FIX** (three components), introduced in *
|
|||
| **FEATURE** | New capabilities (phases, HTML features, i18n packs, …) |
|
||||
| **FIX** | Bugfixes and docs that do not add a feature |
|
||||
|
||||
Git tags: `vMAJOR.FEATURE.FIX` (e.g. `v1.7.2`). File `VERSION` omits the `v` prefix.
|
||||
Git tags: `vMAJOR.FEATURE.FIX` (e.g. `v1.7.3`). File `VERSION` omits the `v` prefix.
|
||||
|
||||
| Tag | Date (UTC) | Notes |
|
||||
|-----|------------|--------|
|
||||
| **v1.8.0** | *planned* | **L10n** packs for user-facing strings: **fr-CH** (FrancPaysan) and **de-CH** (hacktivism / Taler CH German). |
|
||||
| **v1.7.3** | 2026-07-18 | Monitoring **pages themselves** as suite scope: README section + sticky “What this monitors” block (monpages / public HTML paths). |
|
||||
| **v1.7.2** | 2026-07-18 | **Bugfix:** Caddy static handles — `root` must be host dir + matcher `/monitoring*` (not leaf dir + `/monitoring/`), else file_server returns empty 404 after apply. |
|
||||
| **v1.7.1** | 2026-07-18 | Host-agent default `STRICT_EXIT=1`; monpages staging-vs-public diagnosis; re-htmlify after public check fails. |
|
||||
| **v1.7.0** | 2026-07-18 | CLI `--ver` / `--version` / `-V`: suite version, git commit, repo/tag/commit URLs. |
|
||||
|
|
@ -36,7 +37,7 @@ Git tags: `vMAJOR.FEATURE.FIX` (e.g. `v1.7.2`). File `VERSION` omits the `v` pre
|
|||
|
||||
## Sticky bar version (v1.3.0+)
|
||||
|
||||
Generated HTML shows the installed release tag (e.g. `v1.7.2`) and links to Forgejo:
|
||||
Generated HTML shows the installed release tag (e.g. `v1.7.3`) and links to Forgejo:
|
||||
|
||||
`https://git.hacktivism.ch/hernani/taler-monitoring/src/tag/<tag>`
|
||||
|
||||
|
|
@ -66,5 +67,5 @@ Full locale packs (fr-CH / de-CH): **v1.8.0** (planned).
|
|||
|
||||
```bash
|
||||
git clone https://git.hacktivism.ch/hernani/taler-monitoring.git ~/src/taler-monitoring
|
||||
cd ~/src/taler-monitoring && git checkout v1.7.2
|
||||
cd ~/src/taler-monitoring && git checkout v1.7.3
|
||||
```
|
||||
|
|
|
|||
|
|
@ -192,3 +192,7 @@ Caddy `/var/www/monitoring-sites` is separate (you configured hernani write acce
|
|||
Host-agent jobs default to **`STRICT_EXIT=1`**: non-zero exit if suite checks fail, `DEPLOY_WWW_ROOT` is not writable, or public monpages (FQDN) fail.
|
||||
|
||||
Set `STRICT_EXIT=0` only if you want timers to stay green while still logging errors (not recommended for production).
|
||||
|
||||
## Monitoring pages (suite)
|
||||
|
||||
Public sticky-bar HTML under `/monitoring*` and `/taler-monitoring-*` is part of **taler-monitoring** (not a separate product). See main [README — Monitoring pages](../README.md#monitoring-pages-part-of-the-suite). Phase **monpages** verifies they are live.
|
||||
|
|
|
|||
|
|
@ -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,27 +388,23 @@ def monitoring_scope(
|
|||
lang = "fr"
|
||||
|
||||
if "surface" in label:
|
||||
return {
|
||||
"kind": "surface",
|
||||
"lang": lang,
|
||||
"title": ui(lang, "surface_title"),
|
||||
"summary": ui(lang, "surface_summary"),
|
||||
"items": [
|
||||
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": items,
|
||||
}
|
||||
|
||||
if "aptdeploy" in label or "apt-deploy" in label or "apt_src" in label:
|
||||
return {
|
||||
"kind": "aptdeploy",
|
||||
"lang": lang,
|
||||
"title": ui(lang, "apt_title"),
|
||||
"summary": ui(lang, "apt_summary"),
|
||||
"items": [
|
||||
items = [
|
||||
ui(lang, "apt_i1"),
|
||||
ui(lang, "apt_i2"),
|
||||
ui(lang, "apt_i3"),
|
||||
|
|
@ -365,7 +412,41 @@ def monitoring_scope(
|
|||
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": 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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue