Last active
March 28, 2018 19:17
-
-
Save Stadicus/57122492cb3ea4b5ce606ac0df6db8ae to your computer and use it in GitHub Desktop.
RaspiBolt LND Mainnet: Status overview
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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