Last active
November 21, 2021 12:36
-
-
Save Stadicus/ffbbd855d23cd068f7b739cae6440f4b to your computer and use it in GitHub Desktop.
Thundroid: System overview MotD
This file contains 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 | |
# by Stadicus | |
# 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>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>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 bytes' | awk '{ print $3$4 }' | sed 's/[()]//g') | |
network_tx=$(ifconfig eth0 | grep 'TX bytes' | awk '{ print $7$8 }' | sed 's/[()]//g') | |
# Bitcoin blockchain | |
btc_path=$(command -v bitcoin-cli) | |
if [ -n ${btc_path} ]; then | |
btc_title="฿itcoin" | |
chain="$(bitcoin-cli -datadir=/home/bitcoin/.bitcoin 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 behind" | |
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>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 lightning info | |
# Eclair | |
#ln_alias="$(/home/bitcoin/bin/eclair-cli getinfo | jq -r '.alias')" 2>null | |
#ln_port="$(/home/bitcoin/bin/eclair-cli getinfo | jq -r '.port')" | |
#ln_peers_total="$(/home/bitcoin/bin/eclair-cli peers | jq '. | length')" | |
#ln_peers_online="$(/home/bitcoin/bin/eclair-cli peers | jq '[.[] | select(.state=="CONNECTED")] | length')" | |
#ln_channels_total="$(/home/bitcoin/bin/eclair-cli channels | jq '. | length')" | |
#ln_channels_online="$(/home/bitcoin/bin/eclair-cli channels | jq '[.[] | select(.state=="NORMAL")] | length')" | |
# LND | |
ln_alias="$(/usr/local/bin/lncli --macaroonpath=${lnd_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert getinfo | jq -r '.alias')" 2>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_yellow} ___________ | |
${color_yellow} / ./ %s: ${color_gray}Bitcoin Core & Lightning | |
${color_yellow} / ./ %s | |
${color_yellow} / ./ ${color_gray}%s | |
${color_yellow} / ./___ | |
${color_yellow} /____ ./ %-24s %-24s %-20s | |
${color_yellow} / ./ ${color_gray}Memory ${color_ram}%-16s${color_gray}Sync ${sync_color}%-14s${color_gray} %s | |
${color_yellow} / ./ ${color_gray}SSD ${color_sd}%-16s${color_gray} %-14s %s / %s Channels online | |
${color_yellow} / ./ ${color_gray}HDD ${color_hdd}%-16s${color_gray}Public ${public_color}%-14s | |
${color_yellow} / ./ ${color_gray}Bandwith ▲ %-12s %s | |
${color_yellow} / / ${color_gray} ▼ %-12s Mempool ${mempool} tx | |
${color_yellow} /. %s | |
%s %s | |
" \ | |
"Thundroid" \ | |
"-----------------------------------------------------------------------" \ | |
"${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)" |
Thanks a lot! By the way, I noitced a typo on line 155: Ressources
btc_line2 is not displayed, right?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thansk a lot for the tutorial and scripts! I've just finished setting up my own lightning node 👍
Here are two minor things that could be improved in this script, at least these changes fixed warnings for me:
Line 56: Use the previously defined variable for the bitcoin directory:
chain="$(bitcoin-cli -datadir=${bitcoin_dir} getblockchaininfo | jq -r '.chain')"
Line 133–135: Add the
--lnddir=${lnd_dir}
so that this script can find the.lnd/tls.cert
file regardless of which user runs it.Thanks again! Glad you wrote it all up, your how to helped a lot! :D