#!/usr/bin/env bash # Append a real RPC reachability line (primary, optional secondary) — minimal execution evidence, not full DR. # This is a smoke check: eth_blockNumber over HTTP JSON-RPC. For data-centre DR, attach separate drill logs. # # Env (after load-project-env): # RPC_URL_138 — primary # RPC_URL_138_SECONDARY — optional fallback URL # JVMTM_BCP_LOG — default output/jvmtm-evidence/bcp/failover-execution-log.txt set -eo pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" # shellcheck source=scripts/lib/load-project-env.sh set +u source "${REPO_ROOT}/scripts/lib/load-project-env.sh" set -euo pipefail LOG="${JVMTM_BCP_LOG:-${REPO_ROOT}/output/jvmtm-evidence/bcp/failover-execution-log.txt}" mkdir -p "$(dirname "$LOG")" P="${RPC_URL_138:-http://192.168.11.211:8545}" S="${RPC_URL_138_SECONDARY:-}" TS="$(date -u +%Y-%m-%dT%H:%M:%SZ)" rpc_ping() { local url="$1" curl -sS -m 8 -X POST "$url" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' 2>/dev/null | jq -r '.result // empty' || true } R1="$(rpc_ping "$P")" if [[ -n "$R1" ]]; then echo "${TS} primary_ok rpc=${P} block=${R1}" >> "$LOG" echo "primary_ok $R1" >&2 exit 0 fi echo "${TS} primary_fail rpc=${P}" >> "$LOG" if [[ -n "$S" ]]; then R2="$(rpc_ping "$S")" if [[ -n "$R2" ]]; then echo "${TS} secondary_ok rpc=${S} block=${R2} (after primary fail)" >> "$LOG" echo "secondary_ok $R2" >&2 exit 0 fi echo "${TS} secondary_fail rpc=${S}" >> "$LOG" fi echo "FAIL: no RPC responded" >&2 exit 1