new contrib scripts for checking blockbook and backend status

This commit is contained in:
pragmaxim
2026-01-29 10:09:57 +01:00
parent cdd6e069ca
commit 1385233dd8
2 changed files with 72 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
#!/usr/bin/env bash
set -euo pipefail
die() { echo "error: $1" >&2; exit 1; }
[[ $# -ge 1 ]] || die "missing coin argument. usage: blockbook_backend_status.sh <coin>"
coin="$1"
var="BB_RPC_URL_HTTP_${coin}"
url="${!var-}"
[[ -n "$url" ]] || die "environment variable ${var} is not set"
user_var="BB_RPC_USER"
pass_var="BB_RPC_PASS"
user="${!user_var-}"
pass="${!pass_var-}"
auth=()
if [[ -n "$user" || -n "$pass" ]]; then
[[ -n "$user" && -n "$pass" ]] || die "set both ${user_var} and ${pass_var}"
auth=(-u "${user}:${pass}")
fi
command -v curl >/dev/null 2>&1 || die "curl is not installed"
command -v jq >/dev/null 2>&1 || die "jq is not installed"
rpc() { curl -skS "${auth[@]}" -H 'content-type: application/json' --data "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"$1\",\"params\":${2:-[]}}" "$url"; }
resp="$(rpc eth_syncing)"
if echo "$resp" | jq -e '.error|not' >/dev/null 2>&1; then
if echo "$resp" | jq -e '.result == false' >/dev/null 2>&1; then
bn="$(rpc eth_blockNumber)"
echo "$bn" | jq -e '.error|not' >/dev/null 2>&1 || die "eth_blockNumber failed"
hex="$(echo "$bn" | jq -r '.result')"
[[ -n "$hex" && "$hex" != "null" ]] || die "eth_blockNumber returned empty result"
height=$((16#${hex#0x}))
jq -n --argjson height "$height" '{backend:"evm", is_synced:true, height:$height}'
else
cur_hex="$(echo "$resp" | jq -r '.result.currentBlock')"
high_hex="$(echo "$resp" | jq -r '.result.highestBlock')"
[[ -n "$cur_hex" && "$cur_hex" != "null" ]] || die "eth_syncing returned empty currentBlock"
[[ -n "$high_hex" && "$high_hex" != "null" ]] || die "eth_syncing returned empty highestBlock"
cur=$((16#${cur_hex#0x}))
high=$((16#${high_hex#0x}))
jq -n --argjson height "$cur" --argjson highest "$high" \
'{backend:"evm", is_synced:false, height:$height, highest:$highest}'
fi
exit 0
fi
resp="$(rpc getblockchaininfo)"
if echo "$resp" | jq -e '.result and (.error|not)' >/dev/null 2>&1; then
echo "$resp" | jq '{backend:"utxo", is_synced:(.result.initialblockdownload|not), height:.result.blocks, getblockchaininfo:.}'
exit 0
fi
die "backend did not return a valid eth_syncing or getblockchaininfo response"

View File

@@ -0,0 +1,19 @@
#!/usr/bin/env bash
set -euo pipefail
die() { echo "error: $1" >&2; exit 1; }
[[ $# -ge 1 ]] || die "missing coin argument. usage: blockbook_status.sh <coin> [hostname]"
coin="$1"
if [[ -n "${2-}" ]]; then
host="$2"
else
host="localhost"
fi
var="B_PORT_PUBLIC_${coin}"
port="${!var-}"
[[ -n "$port" ]] || die "environment variable ${var} is not set"
command -v curl >/dev/null 2>&1 || die "curl is not installed"
command -v jq >/dev/null 2>&1 || die "jq is not installed"
curl -skv "https://${host}:${port}/api/status" | jq