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)" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
btc_line2 is not displayed, right?