Skip to content

Instantly share code, notes, and snippets.

@Stadicus
Last active March 28, 2018 19:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Stadicus/57122492cb3ea4b5ce606ac0df6db8ae to your computer and use it in GitHub Desktop.
Save Stadicus/57122492cb3ea4b5ce606ac0df6db8ae to your computer and use it in GitHub Desktop.
RaspiBolt LND Mainnet: Status overview
#!/bin/sh
# RaspiBolt LND Mainnet: systemd unit for getpublicip.sh script
# /etc/systemd/system/20-raspibolt-welcome.sh
# make executable and copy script to /etc/update-motd.d/
# root must be able to execute bitcoin-cli and lncli
# set colors
color_red='\033[0;31m'
color_green='\033[0;32m'
color_yellow='\033[0;33m'
color_gray='\033[0;37m'
# set datadir
bitcoin_dir="/home/bitcoin/.bitcoin"
lnd_dir="/home/bitcoin/.lnd"
# get uptime & load
load=$(w | grep "load average:" | cut -c11-)
# get memory
ram_avail=$(free -m | grep Mem | awk '{ print $7 }')
ram=$(printf "%sM / %sM" "${ram_avail}" "$(free -m | grep Mem | awk '{ print $2 }')")
if [ ${ram_avail} -lt 100 ]; then
color_ram="${color_red}\e[7m"
else
color_ram=${color_green}
fi
# get storage
sd_free_ratio=$(printf "%d" "$(df -h | grep "/$" | awk '{ print $4/$2*100 }')") 2>/dev/null
sd=$(printf "%s (%s%%)" "$(df -h | grep '/$' | awk '{ print $4 }')" "${sd_free_ratio}")
if [ ${sd_free_ratio} -lt 10 ]; then
color_sd="${color_red}"
else
color_sd=${color_green}
fi
hdd_free_ratio=$(printf "%d" "$(df -h | grep '/mnt/hdd$' | awk '{ print $4/$2*100 }')") 2>/dev/null
hdd=$(printf "%s (%s%%)" "$(df -h | grep '/mnt/hdd$' | awk '{ print $4 }')" "${hdd_free_ratio}")
if [ ${hdd_free_ratio} -lt 10 ]; then
color_hdd="${color_red}\e[7m"
else
color_hdd=${color_green}
fi
# get network traffic
network_rx=$(ifconfig eth0 | grep 'RX packets' | awk '{ print $6$7 }' | sed 's/[()]//g')
network_tx=$(ifconfig eth0 | grep 'TX packets' | awk '{ print $6$7 }' | sed 's/[()]//g')
# Bitcoin blockchain
btc_path=$(command -v bitcoin-cli)
if [ -n ${btc_path} ]; then
btc_title="฿itcoin"
chain="$(bitcoin-cli -datadir=${bitcoin_dir} getblockchaininfo | jq -r '.chain')"
if [ -n $chain ]; then
btc_title="${btc_title} (${chain}net)"
# get sync status
block_chain="$(bitcoin-cli -datadir=${bitcoin_dir} getblockcount)"
block_verified="$(bitcoin-cli -datadir=${bitcoin_dir} getblockchaininfo | jq -r '.blocks')"
block_diff=$(expr ${block_chain} - ${block_verified})
progress="$(bitcoin-cli -datadir=${bitcoin_dir} getblockchaininfo | jq -r '.verificationprogress')"
sync_percentage=$(printf "%.2f%%" "$(echo $progress | awk '{print 100 * $1}')")
if [ ${block_diff} -eq 0 ]; then # fully synced
sync="OK"
sync_color="${color_green}"
sync_behind=" "
elif [ ${block_diff} -eq 1 ]; then # fully synced
sync="OK"
sync_color="${color_green}"
sync_behind="-1 block"
elif [ ${block_diff} -le 10 ]; then # <= 2 blocks behind
sync="Catching up"
sync_color="${color_red}"
sync_behind="-${block_diff} blocks"
else
sync="In progress"
sync_color="${color_red}"
sync_behind="${sync_percentage}"
fi
# get last known block
last_block="$(bitcoin-cli -datadir=${bitcoin_dir} getblockcount)"
if [ ! -z "${last_block}" ]; then
btc_line2="${btc_line2} ${color_gray}(block ${last_block})"
fi
# get mem pool transactions
mempool="$(bitcoin-cli -datadir=${bitcoin_dir} getmempoolinfo | jq -r '.size')"
else
btc_line2="${color_red}NOT RUNNING\t\t"
fi
fi
# get public IP address & port
public_ip=$(curl -s ipinfo.io/ip)
public_port=$(cat ${bitcoin_dir}/bitcoin.conf 2>/dev/null | grep port= | awk -F"=" '{print $2}')
if [ "${public_port}" = "" ]; then
if [ $chain = "test" ]; then
public_port=18333
else
public_port=8333
fi
fi
public_check=$(curl -s https://bitnodes.earn.com/api/v1/nodes/me-${public_port}/ | jq .success)
if [ $public_check = "true" ]; then
public="Yes"
public_color="${color_green}"
else
public="Not reachable"
public_color="${color_red}"
fi
public_addr="${public_ip}:${public_port}"
# get LND info
ln_alias="$(/usr/local/bin/lncli --macaroonpath=${lnd_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert getinfo | jq -r '.alias')" 2>/dev/null
ln_channels_online="$(/usr/local/bin/lncli --macaroonpath=${lnd_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert getinfo | jq -r '.num_active_channels')"
ln_channels_total="$(/usr/local/bin/lncli --macaroonpath=${lnd_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert listchannels | jq '.[] | length')"
printf "
${color_green} .~~. .~~. ${color_yellow}%s: ${color_gray}Bitcoin Core & LND
${color_green} '. \ ' ' / .' ${color_yellow}%s
${color_red} .~ .~~~..~. ${color_gray}%s
${color_red} : .~.'~'.~. :
${color_red} ~ ( ) ( ) ~ ${color_yellow}%-24s %-24s %-20s
${color_red} ( : '~'.~.'~' : ) ${color_gray}Memory ${color_ram}%-16s${color_gray}Sync ${sync_color}%-14s${color_gray} %s
${color_red} ~ .~ ( ) ~. ~ ${color_gray}SSD ${color_sd}%-16s${color_gray} %-14s %s/%s Channels
${color_red} ( : '~' : ) ${color_gray}HDD ${color_hdd}%-16s${color_gray}Public ${public_color}%-14s
${color_red} '~ .~~~. ~' ${color_gray}Bandwith ▲ %-12s %s
${color_red} '~' ${color_gray} ▼ %-12s Mempool ${mempool} tx
${color_red} ${color_yellow}%s
%s %s
" \
"RaspiBolt" \
"-------------------------------------------------------------------" \
"${load}" \
"Ressources free" "${btc_title}" "Lightning (LND)" \
"${ram}" "${sync}" "${ln_alias}" \
"${sd}" "${sync_behind}" "${ln_channels_online}" "${ln_channels_total}" \
"${hdd}" "${public}" \
"${network_tx}" "${public_addr}" \
"${network_rx}" \
""
echo "$(tput -T xterm sgr0)"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment