10 KiB
taler-monitoring — test IDs by area
Every check line is numbered per area as AREA-NNN (zero-padded):
| Area | Phase script | Meaning |
|---|---|---|
| www | check_urls.sh |
public HTTPS (outside-in) |
| inside | check_inside.sh |
containers / processes on koopa |
| versions | check_versions.sh |
deb.taler.net available + packages vs trixie |
| sanity | check_sanity.sh |
public + server per component |
| server | check_server.sh |
SSH host ports / processes |
| e2e | check_e2e.sh |
withdraw + pay cycle |
Format in output:
[OK] www-001 exchange /config https://exchange…/config
[ERROR] e2e-012 bank-auth: admin token failed
[BLOCKER] e2e-015 prereq: merchant HTTP 502
IDs are assigned in run order within the area (set_area resets the counter). Optional soft checks still consume a number when they WARN.
www — public URLs (./taler-monitoring.sh urls)
| ID | Check |
|---|---|
| www-… | exchange /config, currency, alt_unit_names |
| www-… | exchange /keys (+ alt_unit_names soft) |
| www-… | exchange /intro/, / (302→intro) |
| www-… | exchange /terms body (not empty / not API error) |
| www-… | exchange /privacy body |
| www-… | exchange /terms/ (200 or redirect) |
| www-… | bank /config, currency, alt_unit_names |
| www-… | bank integration / webui / intro / / |
| www-… | bank /terms body |
| www-… | bank /privacy (or /intro/privacy.html fallback) |
| www-… | merchant /config, currency, currencies alt_unit_names |
| www-… | each merchant exchanges[] /config alt_unit_names |
| www-… | merchant /intro/, /webui/, / |
| www-… | merchant /terms body (dual-currency notice) |
| www-… | merchant /privacy body (must not be not configured) |
| www-… | merchant /terms/ redirect |
| www-… | landing (aggregated per site): one line for bank/merchant/exchange (/intro + assets + own/external link counts); failures listed as samples; soft external/shop assets compact |
| www-… | cross-links: one line (4 intros) on local stack |
| www-… | bank demo-withdraw + shop assets: one line (+ soft shop-pay if missing) |
| www-… | bank /intro/demo-withdraw.json → taler://withdraw/HOST:PORT/taler-integration/… + integration op HTTP 200 |
| www-… | landing exposed links (bank / merchant / exchange): parse each /intro/ HTML, probe every own-stack https:// + root-relative href/src/content, soft-check external stores/docs |
| www-… | landing static: qrcode.min.js, og-goa-shop.png, qr-logo.png, shop-pay.js/css |
| www-… | cross-links between bank ↔ merchant ↔ exchange intros (local stack) |
| www-… | bank /intro/demo-withdraw.json → taler://withdraw/HOST/taler-integration/… (no default :443/:80; non-default port OK) + integration op HTTP 200 |
| www-… | bank /intro/auto-account.json (earlier) → same withdraw shape, no payto_uri, login at /webui/ |
| www-… | performance (outside-in RTT): bank/exchange/merchant /config, keys, webui, intro — ms; WARN ≥ PERF_WARN_MS (8000); ERROR ≥ PERF_FAIL_MS (20000) |
| www-… | landing load stats: /intro/stats.json → loadavg, container RSS, in-container probe ms (public; SSH container cat fallback); warn if stale/missing |
Legal docs rule: HTTP 200, non-empty body, not plain not configured, not merchant API JSON code:21. On local stack, optional content needle (terms/privacy/FADP/GOA…).
Performance rule: Measured from the monitoring runner (public URLs via Caddy), not container loopback. HTTP must match expect (usually 200); latency (ms) is on every perf OK/WARN/ERROR line, plus a perf summary (n / min / p50 / avg / max). Slow ≥ PERF_WARN_MS (default 8000) → WARN; ≥ PERF_FAIL_MS (default 20000) → ERROR.
Landing links rule: Own-stack (bank/exchange/taler.* + page host) must be HTTP 200 (or redirect→200). External (App Store, Play, F-Droid, wallet.taler.net, docs/git.taler.net, …) soft WARN if down. Auto-account wallet link must be taler://withdraw/HOST/taler-integration/… (default ports stripped for mobile wallets), never payto.
alt_unit_names rule: wallet codec requires a non-empty map including scale key "0". For multi-currency merchant, also follow every entry in exchanges[] and check that exchange’s public /config.
(IDs after a failed early check may shift if later soft checks are skipped when body missing — numbering follows executed checks.)
inside — koopa SSH (./taler-monitoring.sh inside)
| ID | Check (typical order) |
|---|---|
| inside-001 | ssh koopa (or koopa-external fallback) |
| inside-002+ | per-component emit: container, ports, libeufin/httpd, postgres, local /config//keys, wirewatch, DNS pin, caddy |
| inside-… | load / memory: host loadavg + RAM; bank/exchange/merchant podman CPU/mem/block + process RSS by role + DB sizes |
Remote lines E|comp|LEVEL|key|detail each become one numbered result.
SSH: KOOPA_SSH (default koopa), then KOOPA_SSH_FALLBACKS (default koopa-external) when LAN is unreachable.
sanity — bank · exchange · merchant (./taler-monitoring.sh sanity)
| ID | Section |
|---|---|
| sanity-001… | bank public + server |
| sanity-… | exchange public + server |
| sanity-… | merchant public + server |
Sequential through the whole script (one set_area sanity).
versions — packages vs deb.taler.net (./taler-monitoring.sh versions)
Outside (runner / public network — no SSH)
| ID (order) | Check |
|---|---|
| versions-… | DNS deb.taler.net |
| versions-… | HTTPS portal + apt base URL |
| versions-… | suite InRelease / Release |
| versions-… | suite Packages + Packages.gz |
| versions-… | sample pool .deb fetchable (Range 200/206) |
| versions-… | suite offers taler-exchange, taler-merchant, libeufin-bank |
| versions-… | optional trixie-testing Packages |
| versions-… | TLS verify (soft) |
Inside (SSH koopa containers)
| ID | Check |
|---|---|
| versions-… | ssh koopa |
| versions-… | each container → InRelease (pasta can reach apt repo) |
| versions-… | each container lists deb.taler.net in apt sources |
| versions-… | each installed taler* / libeufin* / libtaler* / libdonau* vs suite version |
| versions-… | core packages installed (taler-exchange, libeufin-bank, taler-merchant) |
Outside always runs. Inside skipped with SKIP_SSH=1 (still reports outside results).
Compare rules:
- match suite → OK
- ahead of suite (often testing/dev) → INFO
- behind suite → ERROR for core packages, WARN otherwise (
TALER_PKG_BEHIND=errorforces ERROR)
Default suite: trixie (TALER_APT_SUITE, TALER_APT_BASE=https://deb.taler.net/apt/debian).
Without SSH (SKIP_SSH=1 or remote domain): still runs outside-in repo checks; skips container install compare.
server — SSH ports (./taler-monitoring.sh server)
| ID | Check |
|---|---|
| server-001 | ssh |
| server-002+ | containers, local pasta ports, processes, caddy |
e2e — payment path (./taler-monitoring.sh e2e)
Local GOA also: ATM includes GOA:4200, then paivana (HTTP 302 on PAIVANA_PUBLIC + public template pay paivana / GOA:4200 on goa-shop). Disable with E2E_PAIVANA=0.
| ID | Step (approx.) |
|---|---|
| e2e-001 | budget info |
| e2e-002 | wallet-cli present |
| e2e-003 | mode / currency info |
| e2e-004… | secrets, reachability gates |
| e2e-… | account, credit, withdraw, confirm, coins, order, pay ladder |
| e2e-… | load snapshots at e2e-start, after-withdraw, after-pay, after-shop, e2e-end (host loadavg/RAM + container RSS/CPU/DB) |
| e2e-… | coins before/after each ATM withdraw, settle, pay, shop: count in circulation / spent, amount + denoms using alt_unit_names (e.g. 5 Kilo-GOA (GOA:5000)), Δ vs previous snap |
| e2e-… | GOA shop products — full catalog list; random pick of 2 (override E2E_SHOP_PICK_N) |
| e2e-… | balances, dig on failure, load delta + overall metrics |
Shop product pays use instance goa-shop (default) and catalog E2E_SHOP_PRODUCTS
(id|Product name|amount lines). Each e2e run shuffles the catalog and pays
only E2E_SHOP_PICK_N products (default 2). Flow matches the landing popup
(public POST /templates/{id}, not private orders). Report labels use product name.
Blockers keep the same ID prefix: [BLOCKER] e2e-0NN step: message.
ladder — GOA withdraw ranges (./taler-monitoring.sh ladder)
| Step | What |
|---|---|
| ladder-001 | GET /intro/auto-account.json (personal account, GOA:0) |
| ladder-… | load snapshot before withdraws (host + bank/exchange/merchant mem/CPU) |
| ladder-… | Phase A withdraw (23): mint explorer pool — 0 → random → max−1 → max into one cumulative wallet (mids × LADDER_WITHDRAW_SCALE, default 1.5) |
| ladder-… | wallet-cli accept-uri + explorer confirm when selected; settle; coins snap |
| ladder-… | Phase B pay (23): same shape 0 → random → max−1 → max via merchant orders + handle-uri --yes |
| ladder-… | load snapshot after + delta + overall timing (withdraw + pay) |
| report | withdraw TSV + pay TSV + JSON |
Default amounts (build_ladder_pair, strictly increasing):
withdraw: [0] + random mids + [max−1] + [max]
pay: [0] + (withdraw_mid / scale) + [max−1] + [max] # always ≤ matching withdraw mid
TSV range: pin:0 | random | pin:max-1 | pin:max.
Soft: absolute max mint/pay may CEILING_REJECT / skip (WARN). max-1 is a hard pin.
LADDER_PAY=0 skips phase B.
| Env | Default | Meaning |
|---|---|---|
LADDER_STEPS |
23 |
total rungs (0 + mids + max) |
LADDER_MAX_AMOUNT |
4503599627370496 |
absolute last pin |
LADDER_TIMEOUT_S |
3600 |
large rungs need time |
LADDER_MAX_RUNGS |
99 |
cap list length after build |
./taler-monitoring.sh ladder
LADDER_STEPS=10 ./taler-monitoring.sh ladder
LADDER_REPORT_DIR=/tmp/my-ladder ./taler-monitoring.sh ladder
Run one area
./taler-monitoring.sh urls # www only
./taler-monitoring.sh inside # inside only
./taler-monitoring.sh versions # deb.taler.net + package drift
./taler-monitoring.sh e2e # e2e only
./taler-monitoring.sh ladder # GOA amount ladder + timings
./taler-monitoring.sh -d taler.net urls