diff --git a/contrib/scripts/backend_status.sh b/contrib/scripts/backend_status.sh new file mode 100755 index 00000000..8f989a5d --- /dev/null +++ b/contrib/scripts/backend_status.sh @@ -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="$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" diff --git a/contrib/scripts/blockbook_status.sh b/contrib/scripts/blockbook_status.sh new file mode 100755 index 00000000..ff696c30 --- /dev/null +++ b/contrib/scripts/blockbook_status.sh @@ -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 [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 \ No newline at end of file