monitoring: resolve ladder explorer secret without laptop-hardcoded path

Ladder used /Users/newkamek/… for bank-explorer password and wallet-cli.
Use SECRETS_ROOT/read_secret, EXP_PW/EXP_PW_FILE overrides, and
find_wallet_cli. Document Android automation prereqs; stage shop assets
also require qrcode.min.js.
This commit is contained in:
Hernâni Marques 2026-07-17 19:58:10 +02:00
parent 80d90f5857
commit c887617bc7
No known key found for this signature in database
GPG key ID: CB5738652768F7E9
7 changed files with 174 additions and 14 deletions

View file

@ -21,13 +21,17 @@
# LADDER_TIMEOUT_S default 3600
# LADDER_LOAD=0 skip host load snapshots
# LADDER_SETTLE_ROUNDS / LADDER_SETTLE_SLEEP — balance poll only (no shepherd)
# EXP_PW_FILE, LADDER_REPORT_DIR, MERCHANT_INSTANCE, …
# EXP_PW / EXP_PW_FILE / EXP_USER — explorer pool (default: secrets tree)
# CLI_JS / WALLET_CLI — wallet-cli .mjs (default: find_wallet_cli)
# LADDER_REPORT_DIR, MERCHANT_INSTANCE, …
#
# Phase: ./taler-monitoring.sh ladder
set -euo pipefail
ROOT=$(cd "$(dirname "$0")" && pwd)
# shellcheck source=lib.sh
source "$ROOT/lib.sh"
# When invoked standalone (not via taler-monitoring.sh), still load secrets.env
load_monitoring_secrets_env 2>/dev/null || true
# Area ladder.* — GOA withdraw/pay ladder
# Groups: ladder.plan / ladder.load / ladder.withdraw / ladder.pay / ladder.report
@ -44,8 +48,10 @@ elapsed_ms() {
: "${LADDER_SETTLE_ROUNDS:=18}"
: "${LADDER_SETTLE_SLEEP:=2}"
: "${EXP_USER:=explorer}"
: "${EXP_PW_FILE:=/Users/newkamek/src/koopa/koopa-admin-secrets/koopa/host-root/taler-bank/bank-explorer-password.txt}"
: "${CLI_JS:=/Users/newkamek/src/taler-typescript-core/packages/taler-wallet-cli/bin/taler-wallet-cli.mjs}"
# EXP_PW_FILE / EXP_PW optional overrides; otherwise read_secret + SECRETS_ROOT
: "${EXP_PW_FILE:=}"
: "${EXP_PW:=}"
: "${CLI_JS:=}"
: "${LADDER_MAX_AMOUNT:=4503599627370496}"
: "${LADDER_STEPS:=23}"
: "${LADDER_LOAD:=1}"
@ -58,6 +64,15 @@ elapsed_ms() {
: "${LADDER_PAY_SETTLE_ROUNDS:=6}"
: "${MERCHANT_INSTANCE:=goa-demo-cp4zqk}"
# Resolve wallet-cli .mjs (no hardcoded laptop path)
if [ -z "${CLI_JS}" ] || [ ! -f "${CLI_JS}" ]; then
CLI_JS=$(find_wallet_cli 2>/dev/null || true)
fi
if [ -z "${CLI_JS}" ] || [ ! -f "${CLI_JS}" ]; then
# allow PATH wrapper as last resort (wcli falls back to taler-wallet-cli)
CLI_JS=""
fi
CUR="${EXPECT_CURRENCY:-GOA}"
BANK="${BANK_PUBLIC%/}"
EX="${EXCHANGE_PUBLIC%/}/"
@ -82,13 +97,42 @@ ladder_over() {
}
wcli() {
if [ -f "$CLI_JS" ]; then
if [ -n "${CLI_JS:-}" ] && [ -f "$CLI_JS" ]; then
node "$CLI_JS" --wallet-db="$WDB" --no-throttle "$@"
else
taler-wallet-cli --wallet-db="$WDB" --no-throttle "$@"
fi
}
# Explorer pool password: env → file override → secrets tree → SSH koopa
resolve_explorer_pw() {
local pw="" f=""
if [ -n "${EXP_PW:-}" ]; then
printf '%s' "$EXP_PW"
return 0
fi
if [ -n "${EXP_PW_FILE:-}" ] && [ -f "$EXP_PW_FILE" ]; then
tr -d '\n\r' <"$EXP_PW_FILE"
return 0
fi
# Prefer shared read_secret (SECRETS_ROOT / ~/.config / koopa SSH)
if pw=$(read_secret "taler-bank/bank-explorer-password.txt" 2>/dev/null) && [ -n "$pw" ]; then
printf '%s' "$pw"
return 0
fi
# Extra local candidates (sibling of admin-log, taler-landing config)
for f in \
"${SECRETS_ROOT:+${SECRETS_ROOT}/taler-bank/bank-explorer-password.txt}" \
"${HOME}/src/koopa/koopa-admin-secrets/koopa/host-root/taler-bank/bank-explorer-password.txt" \
"${HOME}/.config/taler-landing/bank-explorer-password.txt"
do
[ -n "$f" ] && [ -f "$f" ] || continue
tr -d '\n\r' <"$f"
return 0
done
return 1
}
wallet_avail() {
wcli balance 2>/dev/null | python3 -c '
import json,sys
@ -270,11 +314,18 @@ metrics_report_load "$LOAD_BEFORE" "ladder-start" || true
# Fresh wallet per rung — baseline empty (or last-rung DB if re-used later)
metrics_report_coins "ladder-start" || true
if [ ! -f "$EXP_PW_FILE" ]; then
err bank "explorer password missing" "$EXP_PW_FILE"
if ! EXP_PW=$(resolve_explorer_pw); then
err bank "explorer password missing" \
"set EXP_PW / EXP_PW_FILE or SECRETS_ROOT=…/koopa/host-root (taler-bank/bank-explorer-password.txt)${SECRETS_ROOT:+ · SECRETS_ROOT=${SECRETS_ROOT}}"
secrets_hint 2>/dev/null || true
exit 1
fi
EXP_PW=$(tr -d '\n' <"$EXP_PW_FILE")
info "explorer secret" "${SECRETS_ROOT:+SECRETS_ROOT=${SECRETS_ROOT}}${SECRETS_ROOT:-via EXP_PW/EXP_PW_FILE/SSH}"
if [ -n "${CLI_JS:-}" ] && [ -f "${CLI_JS}" ]; then
info "wallet-cli" "$CLI_JS"
else
info "wallet-cli" "PATH taler-wallet-cli ($(command -v taler-wallet-cli 2>/dev/null || echo missing))"
fi
# --- auto-account ---
t0=$(now_ms)