Skip to content

Instantly share code, notes, and snippets.

@kvaps
Created July 9, 2024 11:40
Show Gist options
  • Save kvaps/f840b6da426ba93f1bb50215a804bb6b to your computer and use it in GitHub Desktop.
Save kvaps/f840b6da426ba93f1bb50215a804bb6b to your computer and use it in GitHub Desktop.
Solana healthcheck
#!/bin/bash
catchupKey=$1
# Check catchup
if [ -n "$catchupKey" ]; then
catchupInfo=$(solana catchup --output json-compact "$catchupKey" http://127.0.0.1:8899/ 2>&1)
if ! echo "$catchupInfo" | grep -q 'has caught up'; then
echo "$catchupInfo"
exit 1
fi
fi
# Collect information
identityPubkey=$(solana address --url "http://127.0.0.1:8899")
validators=$(solana validators --url "http://127.0.0.1:8899" --output json-compact)
voteAccount=$(jq --arg idPubkey "$identityPubkey" -r 'first(.validators[] | select(.identityPubkey == $idPubkey)) | .voteAccountPubkey' <<< "$validators")
if [ $(grep -c "$voteAccount" <<< "$validators") == 0 ]; then
echo "validator not found in set!"
exit 1
fi
blockProduction=$(solana block-production --url "http://127.0.0.1:8899" --output json-compact)
validatorBlockProduction=$(jq --arg idPubkey "$identityPubkey" -r '.leaders[] | select(.identityPubkey == $idPubkey)' <<< "$blockProduction")
delinquentValidatorInfo=$(jq --arg voteAcc "$voteAccount" -r '.validators[] | select(.voteAccountPubkey == $voteAcc and .delinquent == true)' <<< "$validators")
if [ -n "$delinquentValidatorInfo" ]; then
status=3
rootSlot=$(jq -r '.rootSlot' <<< "$delinquentValidatorInfo")
lastVote=$(jq -r '.lastVote' <<< "$delinquentValidatorInfo")
else
currentValidatorInfo=$(jq --arg voteAcc "$voteAccount" -r '.validators[] | select(.voteAccountPubkey == $voteAcc)' <<< "$validators")
if [ -n "$currentValidatorInfo" ]; then
status=0
rootSlot=$(jq -r '.rootSlot' <<< "$currentValidatorInfo")
lastVote=$(jq -r '.lastVote' <<< "$currentValidatorInfo")
else
status=2
fi
fi
# Extra checks
if [ "$status" != 0 ]; then
echo "status not 0!"
exit 1
fi
skippedSlots=$(($rootSlot - $lastVote))
if [ "$skippedSlots" -lt -128 ]; then
echo "number of skippedSlots ($skippedSlots) is too high!"
exit 1
fi
echo ok
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment