monitoring: boxed badges + area.group test IDs
This commit is contained in:
parent
f8affeb651
commit
e1cc6d7141
10 changed files with 286 additions and 225 deletions
|
|
@ -352,11 +352,12 @@ koopa_ssh_python() {
|
|||
with_timeout "$t" ssh "${SSH_BASE_OPTS[@]}" "${KOOPA_SSH}" python3 -
|
||||
}
|
||||
|
||||
# ANSI colours — badge tags (fg+bg) + body (label bold, detail dim).
|
||||
# Off: NO_COLOR=1 or CLICOLOR=0. Badges need a terminal that supports SGR bg.
|
||||
# ANSI colours — boxed badges (fg+bg) + body (label bold, detail dim).
|
||||
# Off: NO_COLOR=1 or CLICOLOR=0.
|
||||
if [ "${NO_COLOR:-0}" = "1" ] || [ "${CLICOLOR:-1}" = "0" ]; then
|
||||
G= R= Y= C= M= D= W= B= N=
|
||||
BG_OK= BG_INFO= BG_WARN= BG_ERR= BG_BLK= BG_SEC=
|
||||
BOX=0
|
||||
else
|
||||
G=$'\e[1;32m' # green text (totals)
|
||||
R=$'\e[1;31m' # red text
|
||||
|
|
@ -367,13 +368,14 @@ else
|
|||
W=$'\e[1;37m' # bold white label
|
||||
B=$'\e[1m' # bold section
|
||||
N=$'\e[0m' # reset
|
||||
# Badge: bright text on solid background (space-padded in _msg_line)
|
||||
# Badge fill: bright text on solid background
|
||||
BG_OK=$'\e[1;30;42m' # black on green
|
||||
BG_INFO=$'\e[1;30;46m' # black on cyan
|
||||
BG_WARN=$'\e[1;30;43m' # black on yellow
|
||||
BG_ERR=$'\e[1;37;41m' # white on red
|
||||
BG_BLK=$'\e[1;37;45m' # white on magenta
|
||||
BG_SEC=$'\e[1;37;44m' # white on blue (section)
|
||||
BOX=1
|
||||
fi
|
||||
|
||||
PASS_N=0
|
||||
|
|
@ -383,17 +385,68 @@ INFO_N=0
|
|||
BLOCKERS=() # human-readable payment/withdraw blockers
|
||||
ERRORS=() # all ERROR lines (component scope)
|
||||
|
||||
# Test IDs by area: www-001, e2e-001, inside-001, …
|
||||
# Usage: set_area www then each ok/fail/warn/info/blocker/err auto-numbers.
|
||||
# Grouped test IDs: area.group-NN (e.g. www.exchange-01, e2e.pay-03)
|
||||
# set_area www # phase: www | e2e | inside | versions | …
|
||||
# set_group exchange # resets counter + prints group box → www.exchange-01
|
||||
# set_group bank # → www.bank-01
|
||||
# Without set_group: area-01, area-02, … (flat within area)
|
||||
TEST_AREA=""
|
||||
TEST_GROUP=""
|
||||
TEST_N=0
|
||||
# Last issued id (www-001); set by _take_tid — not via $(…) so TEST_N persists.
|
||||
LAST_TID=""
|
||||
# Per-group counters so re-entering www.exchange after perf continues NN
|
||||
# (shell vars TEST_CNT_<area>_<group>).
|
||||
_tid_key() {
|
||||
# $1=area $2=group → safe identifier
|
||||
printf 'TEST_CNT_%s_%s' "$1" "$2" | tr -c 'A-Za-z0-9_' '_'
|
||||
}
|
||||
_tid_save() {
|
||||
[ -z "${TEST_AREA:-}" ] || [ -z "${TEST_GROUP:-}" ] && return 0
|
||||
local k
|
||||
k=$(_tid_key "$TEST_AREA" "$TEST_GROUP")
|
||||
eval "$k=\$TEST_N"
|
||||
}
|
||||
_tid_load() {
|
||||
local k
|
||||
k=$(_tid_key "$TEST_AREA" "$1")
|
||||
eval "TEST_N=\${$k:-0}"
|
||||
}
|
||||
set_area() {
|
||||
# leave previous group counter saved
|
||||
_tid_save
|
||||
TEST_AREA="$1"
|
||||
TEST_GROUP=""
|
||||
TEST_N=0
|
||||
LAST_TID=""
|
||||
}
|
||||
# Start a logical sub-group. Short stable names:
|
||||
# exchange bank merchant perf stats landing paivana
|
||||
# prereq wallet atm settle pay shop dig load report
|
||||
# ssh caddy outside inside compare withdraw
|
||||
# Counter continues if the same group is re-entered later in the area.
|
||||
# Prints a compact group chip so log + issue text map cleanly (www.bank-03).
|
||||
set_group() {
|
||||
local g="$1"
|
||||
# no-op if same group already active (e.g. inside emit loop)
|
||||
if [ "$g" = "${TEST_GROUP:-}" ] && [ -n "$g" ]; then
|
||||
return 0
|
||||
fi
|
||||
_tid_save
|
||||
TEST_GROUP="$g"
|
||||
LAST_TID=""
|
||||
if [ -z "${TEST_AREA:-}" ] || [ -z "$g" ]; then
|
||||
TEST_N=0
|
||||
return 0
|
||||
fi
|
||||
_tid_load "$g"
|
||||
local tag="${TEST_AREA}.${g}"
|
||||
if [ "${BOX:-0}" = "1" ]; then
|
||||
# cyan-outline group chip: ┌ www.exchange ┐
|
||||
printf '%s%s┌ %s ┐%s\n' "$D" "$C" "$tag" "$N"
|
||||
else
|
||||
printf -- '-- %s --\n' "$tag"
|
||||
fi
|
||||
}
|
||||
# Assign next id into LAST_TID (must not run in a subshell).
|
||||
_take_tid() {
|
||||
LAST_TID=""
|
||||
|
|
@ -401,27 +454,40 @@ _take_tid() {
|
|||
return
|
||||
fi
|
||||
TEST_N=$((TEST_N + 1))
|
||||
LAST_TID=$(printf '%s-%03d' "$TEST_AREA" "$TEST_N")
|
||||
if [ -n "${TEST_GROUP:-}" ]; then
|
||||
LAST_TID=$(printf '%s.%s-%02d' "$TEST_AREA" "$TEST_GROUP" "$TEST_N")
|
||||
_tid_save
|
||||
else
|
||||
LAST_TID=$(printf '%s-%02d' "$TEST_AREA" "$TEST_N")
|
||||
fi
|
||||
}
|
||||
# Dim test id: "www-001 " or empty
|
||||
# Dim test id: "www.exchange-01 " or empty
|
||||
_fmt_tid() {
|
||||
if [ -n "${LAST_TID:-}" ]; then
|
||||
printf '%s%s%s ' "$D" "$LAST_TID" "$N"
|
||||
fi
|
||||
}
|
||||
# One concrete line: [TAG] tid label · detail
|
||||
# $1=badge style (bg+fg) $2=tag text $3=label colour $4=label $5=detail
|
||||
# Boxed badge cell: ┌ OK ┐ with filled bg (tag left-padded, width 7 for BLOCKER)
|
||||
# $1=badge style $2=tag text
|
||||
_fmt_badge() {
|
||||
local badge="$1" tag="$2" inner
|
||||
inner=$(printf -- '%-7s' "$tag")
|
||||
if [ "${BOX:-0}" = "1" ]; then
|
||||
printf '%s┌ %s┐%s' "$badge" "$inner" "$N"
|
||||
else
|
||||
printf '%s[ %s]%s' "$badge" "$inner" "$N"
|
||||
fi
|
||||
}
|
||||
# One concrete line: ┌ OK ┐ tid label · detail
|
||||
# $1=badge style $2=tag text $3=label colour $4=label $5=detail
|
||||
_msg_line() {
|
||||
local badge="$1" tag="$2" lcol="$3" label="$4" detail="${5:-}"
|
||||
# Fixed-width badge cell: " OK " / " BLOCKER" (9 chars, space-padded)
|
||||
local tcell
|
||||
tcell=$(printf ' %-7s ' "$tag")
|
||||
if [ -n "$detail" ]; then
|
||||
printf '%s%s%s %s%s%s%s %s·%s %s%s%s\n' \
|
||||
"$badge" "$tcell" "$N" "$(_fmt_tid)" "$lcol" "$label" "$N" "$D" "$N" "$D" "$detail" "$N"
|
||||
printf -- '%s %s%s%s%s %s·%s %s%s%s\n' \
|
||||
"$(_fmt_badge "$badge" "$tag")" "$(_fmt_tid)" "$lcol" "$label" "$N" "$D" "$N" "$D" "$detail" "$N"
|
||||
else
|
||||
printf '%s%s%s %s%s%s%s\n' \
|
||||
"$badge" "$tcell" "$N" "$(_fmt_tid)" "$lcol" "$label" "$N"
|
||||
printf -- '%s %s%s%s%s\n' \
|
||||
"$(_fmt_badge "$badge" "$tag")" "$(_fmt_tid)" "$lcol" "$label" "$N"
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
@ -484,33 +550,58 @@ blocker() {
|
|||
ERRORS+=("BLOCKER ${LAST_TID:+$LAST_TID }[$step] $msg")
|
||||
}
|
||||
section() {
|
||||
# Blue badge + bold title
|
||||
local title=" $* "
|
||||
printf '\n%s%s%s %s%s%s\n' "$BG_SEC" " == " "$N" "$B" "$title" "$N"
|
||||
# Boxed section header (3 lines when colour on)
|
||||
local title="$*"
|
||||
local w=${#title}
|
||||
[ "$w" -lt 24 ] && w=24
|
||||
[ "$w" -gt 56 ] && w=56
|
||||
local pad line i
|
||||
pad=$(printf -- "%-${w}s" "$title")
|
||||
if [ "${BOX:-0}" = "1" ]; then
|
||||
line=""
|
||||
i=0
|
||||
while [ "$i" -lt $((w + 2)) ]; do
|
||||
line="${line}═"
|
||||
i=$((i + 1))
|
||||
done
|
||||
printf -- '\n%s╔%s╗%s\n' "$BG_SEC" "$line" "$N"
|
||||
printf -- '%s║%s %s%s%s %s║%s\n' "$BG_SEC" "$N" "$B" "$pad" "$N" "$BG_SEC" "$N"
|
||||
printf -- '%s╚%s╝%s\n' "$BG_SEC" "$line" "$N"
|
||||
else
|
||||
printf -- '\n== %s ==\n' "$title"
|
||||
fi
|
||||
}
|
||||
|
||||
summary() {
|
||||
echo ""
|
||||
if [ "${#BLOCKERS[@]}" -gt 0 ]; then
|
||||
printf '%s BLOCKERS %s %s(pay/withdraw cannot finish)%s\n' "$BG_BLK" "$N" "$D" "$N"
|
||||
if [ "${BOX:-0}" = "1" ]; then
|
||||
printf -- '%s┌ BLOCKERS · pay/withdraw cannot finish ┐%s\n' "$BG_BLK" "$N"
|
||||
else
|
||||
printf -- '--- BLOCKERS (pay/withdraw cannot finish) ---\n'
|
||||
fi
|
||||
local b
|
||||
for b in "${BLOCKERS[@]}"; do
|
||||
printf '%s •%s %s%s%s\n' "$M" "$N" "$W" "$b" "$N"
|
||||
printf -- '%s •%s %s%s%s\n' "$M" "$N" "$W" "$b" "$N"
|
||||
done
|
||||
fi
|
||||
if [ "${#ERRORS[@]}" -gt 0 ] && [ "${#BLOCKERS[@]}" -lt "${#ERRORS[@]}" ]; then
|
||||
printf '%s ERRORS %s %s(failed checks)%s\n' "$BG_ERR" "$N" "$D" "$N"
|
||||
if [ "${BOX:-0}" = "1" ]; then
|
||||
printf -- '%s┌ ERRORS · failed checks ┐%s\n' "$BG_ERR" "$N"
|
||||
else
|
||||
printf -- '--- ERRORS (failed checks) ---\n'
|
||||
fi
|
||||
local e
|
||||
for e in "${ERRORS[@]}"; do
|
||||
case "$e" in BLOCKER*) continue ;; esac
|
||||
printf '%s •%s %s%s%s\n' "$R" "$N" "$W" "$e" "$N"
|
||||
printf -- '%s •%s %s%s%s\n' "$R" "$N" "$W" "$e" "$N"
|
||||
done
|
||||
fi
|
||||
printf '%stotals:%s %s%d OK%s' "$D" "$N" "$G" "$PASS_N" "$N"
|
||||
[ "$FAIL_N" -gt 0 ] && printf ', %s%d ERROR%s' "$R" "$FAIL_N" "$N"
|
||||
[ "$WARN_N" -gt 0 ] && printf ', %s%d WARN%s' "$Y" "$WARN_N" "$N"
|
||||
[ "$INFO_N" -gt 0 ] && printf ', %s%d INFO%s' "$C" "$INFO_N" "$N"
|
||||
[ "${#BLOCKERS[@]}" -gt 0 ] && printf ', %s%d BLOCKER%s' "$M" "${#BLOCKERS[@]}" "$N"
|
||||
printf -- '%stotals:%s %s%d OK%s' "$D" "$N" "$G" "$PASS_N" "$N"
|
||||
[ "$FAIL_N" -gt 0 ] && printf -- ', %s%d ERROR%s' "$R" "$FAIL_N" "$N"
|
||||
[ "$WARN_N" -gt 0 ] && printf -- ', %s%d WARN%s' "$Y" "$WARN_N" "$N"
|
||||
[ "$INFO_N" -gt 0 ] && printf -- ', %s%d INFO%s' "$C" "$INFO_N" "$N"
|
||||
[ "${#BLOCKERS[@]}" -gt 0 ] && printf -- ', %s%d BLOCKER%s' "$M" "${#BLOCKERS[@]}" "$N"
|
||||
printf '\n'
|
||||
[ "$FAIL_N" -eq 0 ]
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue