release 1.10.9: stats policy not false first-error (www.stats-01)
This commit is contained in:
parent
b9953fd3fe
commit
94c1bab1d4
4 changed files with 9 additions and 4 deletions
2
VERSION
2
VERSION
|
|
@ -1 +1 @@
|
||||||
1.10.8
|
1.10.9
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ Git tags: `vMAJOR.FEATURE.FIX` (e.g. `v1.8.0`). File `VERSION` omits the `v` pre
|
||||||
|
|
||||||
| Tag | Date (UTC) | Notes |
|
| Tag | Date (UTC) | Notes |
|
||||||
|-----|------------|--------|
|
|-----|------------|--------|
|
||||||
|
| **v1.10.9** | 2026-07-19 | **Bugfix:** stats policy INFO no longer says bare “ERROR” (false #first-error on www.stats-01); extract_errors only from `┌ ERROR` badges. |
|
||||||
| **v1.10.8** | 2026-07-19 | **Docs/clarity:** only three public mon URL families (`/monitoring`, `/taler-monitoring-surface`, `/taler-monitoring-aptdeploy`) each bare+slash(+_err); suite name ≠ path; no `/taler-monitoring` page. |
|
| **v1.10.8** | 2026-07-19 | **Docs/clarity:** only three public mon URL families (`/monitoring`, `/taler-monitoring-surface`, `/taler-monitoring-aptdeploy`) each bare+slash(+_err); suite name ≠ path; no `/taler-monitoring` page. |
|
||||||
| **v1.10.7** | 2026-07-19 | **Bugfix:** stop always-rsync of **stale suite-overlay** over Forgejo tip (broke stage sticky / new site-gen). Overlay only when suite missing phases. |
|
| **v1.10.7** | 2026-07-19 | **Bugfix:** stop always-rsync of **stale suite-overlay** over Forgejo tip (broke stage sticky / new site-gen). Overlay only when suite missing phases. |
|
||||||
| **v1.10.6** | 2026-07-19 | **Fix:** stage mon HTML quality — suite update out of public log; filter git noise; stage-specific sticky (not GOA); `CHECK_BANK=0` / `MERCHANT_REQUIRED` for mytops stage scope. |
|
| **v1.10.6** | 2026-07-19 | **Fix:** stage mon HTML quality — suite update out of public log; filter git noise; stage-specific sticky (not GOA); `CHECK_BANK=0` / `MERCHANT_REQUIRED` for mytops stage scope. |
|
||||||
|
|
|
||||||
|
|
@ -259,7 +259,7 @@ set_group perf
|
||||||
section "www · performance · public HTTPS latency (outside-in)"
|
section "www · performance · public HTTPS latency (outside-in)"
|
||||||
|
|
||||||
# Latency thresholds (ms), outside-in from this runner.
|
# Latency thresholds (ms), outside-in from this runner.
|
||||||
# ≥ PERF_WARN_MS → WARN. ≥ PERF_FAIL_MS → ERROR (suite fails).
|
# ≥ PERF_WARN_MS → WARN. ≥ PERF_FAIL_MS → suite fail (hard).
|
||||||
PERF_WARN_MS="${PERF_WARN_MS:-8000}"
|
PERF_WARN_MS="${PERF_WARN_MS:-8000}"
|
||||||
PERF_FAIL_MS="${PERF_FAIL_MS:-20000}"
|
PERF_FAIL_MS="${PERF_FAIL_MS:-20000}"
|
||||||
PERF_TSV="$tmp/perf.tsv"
|
PERF_TSV="$tmp/perf.tsv"
|
||||||
|
|
@ -580,7 +580,8 @@ PY
|
||||||
if [ "${CHECK_LANDING:-1}" = "1" ] || [ "${LOCAL_STACK:-0}" = "1" ]; then
|
if [ "${CHECK_LANDING:-1}" = "1" ] || [ "${LOCAL_STACK:-0}" = "1" ]; then
|
||||||
set_group stats
|
set_group stats
|
||||||
section "www · landing stats.json (freshness + display fields · outside-in)"
|
section "www · landing stats.json (freshness + display fields · outside-in)"
|
||||||
info "stats policy" "STALE≥${STATS_STALE_SECS}s WARN · FAIL≥${STATS_FAIL_SECS}s ERROR (0=disable fail) · need generated_at_unix"
|
# Avoid the bare word ERROR in INFO text (older HTML converters treated it as a check failure / first-error).
|
||||||
|
info "stats policy" "STALE≥${STATS_STALE_SECS}s→WARN · FAIL≥${STATS_FAIL_SECS}s→suite-fail (0=off) · need generated_at_unix"
|
||||||
check_landing_stats_json "bank" "$BANK_PUBLIC" || true
|
check_landing_stats_json "bank" "$BANK_PUBLIC" || true
|
||||||
check_landing_stats_json "exchange" "$EXCHANGE_PUBLIC" || true
|
check_landing_stats_json "exchange" "$EXCHANGE_PUBLIC" || true
|
||||||
check_landing_stats_json "merchant" "$MERCHANT_PUBLIC" || true
|
check_landing_stats_json "merchant" "$MERCHANT_PUBLIC" || true
|
||||||
|
|
|
||||||
|
|
@ -369,13 +369,16 @@ def extract_errors(lines: list[str]) -> list[str]:
|
||||||
errs.append(body)
|
errs.append(body)
|
||||||
elif "ERROR" in ln.upper() and ln.strip() and not is_run_timeout_text(ln):
|
elif "ERROR" in ln.upper() and ln.strip() and not is_run_timeout_text(ln):
|
||||||
errs.append(ln.strip())
|
errs.append(ln.strip())
|
||||||
if re.search(r"\bERROR\b", ln, re.I) and "--- ERRORS" not in ln:
|
# Only real check badges (not INFO text mentioning thresholds like "… ERROR (0=disable)")
|
||||||
|
if re.search(r"┌\s*ERROR\b|\[\s*ERROR\b", ln, re.I) and "--- ERRORS" not in ln:
|
||||||
if is_run_timeout_text(ln):
|
if is_run_timeout_text(ln):
|
||||||
if "run.timeout-01" in ln.lower() or "RUN_TIMEOUT exceeded" in ln:
|
if "run.timeout-01" in ln.lower() or "RUN_TIMEOUT exceeded" in ln:
|
||||||
timeout_detail = re.sub(r"\s+", " ", strip_ansi(ln)).strip()
|
timeout_detail = re.sub(r"\s+", " ", strip_ansi(ln)).strip()
|
||||||
continue
|
continue
|
||||||
if is_summary_error_line(ln):
|
if is_summary_error_line(ln):
|
||||||
continue
|
continue
|
||||||
|
if classify(ln) not in ("error", "blocker"):
|
||||||
|
continue
|
||||||
body = re.sub(r"^.*\bERROR\b\s*\]?\s*", "", ln, flags=re.I).strip(" ·")
|
body = re.sub(r"^.*\bERROR\b\s*\]?\s*", "", ln, flags=re.I).strip(" ·")
|
||||||
if body and body not in errs and "failed — see" not in body.lower():
|
if body and body not in errs and "failed — see" not in body.lower():
|
||||||
if re.search(
|
if re.search(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue