188 lines
5.9 KiB
Bash
188 lines
5.9 KiB
Bash
############# DEPENDENCIES #############
|
|
|
|
# - Debian Based OS (for now)
|
|
# - curl
|
|
# - lm-sensors
|
|
# apt update && apt install curl lm-sensors
|
|
|
|
############################################
|
|
|
|
colorize() {
|
|
local value=$1
|
|
local green_limit=$2
|
|
local yellow_limit=$3
|
|
|
|
if [ "$value" -lt "$green_limit" ]; then
|
|
echo -e "${GREEN}${value}${NC}"
|
|
elif [ "$value" -lt "$yellow_limit" ]; then
|
|
echo -e "${YELLOW}${value}${NC}"
|
|
else
|
|
echo -e "${RED}${value}${NC}"
|
|
fi
|
|
}
|
|
|
|
function dashboard_fast() {
|
|
#### CHANGABLE OPTIONS ####
|
|
ISTHISVM=0 # Change to 1 if this is a VM. This will remove the temperature bit.
|
|
MIN_CHECK_IP=30 # Change this value to set the timing cache for checking the public IP.
|
|
MIN_CHECK_UPDATE=120 # Change this value to set the timing cache for checking updates.
|
|
LOCAL_CACHE=1 # Change this value to 1 if you want to create the local cache in the ~/.bashrc.d/.dashboard_cache.
|
|
UI_SHOWS=1 # Change to 1 if cockpit has been installed. This will shows the IP and port Link.
|
|
|
|
|
|
|
|
|
|
#### Colors ####
|
|
GREEN="\e[32m"
|
|
YELLOW="\e[33m"
|
|
RED="\e[31m"
|
|
CYAN="\e[36m"
|
|
BOLD="\e[1m"
|
|
NC="\e[0m" # reset
|
|
|
|
|
|
#### Cache ####
|
|
if [ $LOCAL_CACHE -ne 1 ]; then
|
|
CACHE_DIR="/tmp/.dashboard_cache"
|
|
else
|
|
CACHE_DIR="/home/$(whoami)/.bashrc.d/.dashboard_cache"
|
|
fi
|
|
mkdir -p "$CACHE_DIR"
|
|
|
|
#### Overview ####
|
|
echo -e "${CYAN}========================================${NC}"
|
|
echo -e "${BOLD} 🖥️ SYSTEM OVERVIEW${NC}"
|
|
echo -e "${CYAN}========================================${NC}"
|
|
|
|
#### OS Informations Include ####
|
|
source /etc/os-release
|
|
|
|
|
|
#### OS info ###
|
|
echo -e "${CYAN}DISTRO:${NC} $PRETTY_NAME"
|
|
echo -e "${CYAN}ID:${NC} $ID"
|
|
echo -e "${CYAN}VERSION:${NC} $VERSION"
|
|
echo -e "${CYAN}URL:${NC} $HOME_URL"
|
|
echo -e "${CYAN}BUGS_URL:${NC} $BUG_REPORT_URL"
|
|
echo -e "${CYAN}========================================${NC}"
|
|
|
|
#### Hostname ####
|
|
echo "📛 $(hostname)"
|
|
|
|
|
|
#### Local IP ####
|
|
LOCAL_IPS=$(hostname -I 2>/dev/null | xargs)
|
|
PRIMARY_IP=$(echo "$LOCAL_IPS" | awk '{print $1}')
|
|
|
|
if [ -z "$LOCAL_IPS" ]; then
|
|
echo "🏠 Local IP: NOT AVAILABLE (no network?)"
|
|
if [ $UI_SHOWS -eq 1 ]; then echo "🌐 Web UI: NOT AVAILABLE"; fi
|
|
else
|
|
echo "🏠 Local IP: $LOCAL_IPS"
|
|
if [ $UI_SHOWS -eq 1 ]; then echo "🌐 Web UI: http://$PRIMARY_IP:9090"; fi
|
|
fi
|
|
|
|
|
|
#### Public IP ####
|
|
if [ -f "$CACHE_DIR/public_ip" ] && find "$CACHE_DIR/public_ip" -mmin -$MIN_CHECK_IP | grep -q .; then
|
|
PUBLIC_IP=$(cat "$CACHE_DIR/public_ip")
|
|
else
|
|
PUBLIC_IP=$(timeout 2 curl -s ifconfig.me 2>/dev/null)
|
|
if [ -n "$PUBLIC_IP" ]; then
|
|
echo "$PUBLIC_IP" > "$CACHE_DIR/public_ip"
|
|
fi
|
|
fi
|
|
|
|
if [ -z "$PUBLIC_IP" ]; then
|
|
echo "🌍 Public IP: NOT AVAILABLE (no internet?)"
|
|
else
|
|
echo "🌍 Public IP: $PUBLIC_IP"
|
|
fi
|
|
#echo ""
|
|
echo -e "${CYAN} .................................. ${NC}"
|
|
|
|
#### Cpu ####
|
|
LOAD=$(awk '{print $1}' /proc/loadavg)
|
|
CPU_PCT=$(awk -v l="$LOAD" -v n="$(nproc)" 'BEGIN {printf "%d", (l*100/n)}')
|
|
CPU_COLOR=$(colorize "$CPU_PCT" 50 80)
|
|
echo -e "🧠 CPU: ${CPU_COLOR}%"
|
|
|
|
|
|
#### Ram ####
|
|
read MEM_TOTAL MEM_USED <<< $(free -m | awk '/Mem:/ {print $2, $3}')
|
|
MEM_PCT=$((MEM_USED * 100 / MEM_TOTAL))
|
|
MEM_COLOR=$(colorize "$MEM_PCT" 50 80)
|
|
echo -e "💾 RAM: ${MEM_COLOR}% (${MEM_USED}/${MEM_TOTAL}MB)"
|
|
|
|
|
|
|
|
#### Diskspace ####
|
|
DISK_PCT=$(df / | awk 'NR==2 {gsub("%",""); print $5}')
|
|
DISK_COLOR=$(colorize "$DISK_PCT" 50 80)
|
|
DISK=$(df -h / | awk 'NR==2 {print $3 "/" $2}')
|
|
echo -e "📦 Disk: ${DISK} (${DISK_COLOR}%)"
|
|
|
|
|
|
|
|
#### Uptime ####
|
|
echo "⏱️ Uptime: $(awk '{printf "%dd %dh %dm", $1/86400, ($1%86400)/3600, ($1%3600)/60}' /proc/uptime)"
|
|
|
|
|
|
#### Load Avarage ####
|
|
echo "📊 Load avg: $(awk '{print $1, $2, $3}' /proc/loadavg)"
|
|
|
|
|
|
|
|
#### Updates ####
|
|
if command -v apt >/dev/null 2>&1; then
|
|
if [ -f "$CACHE_DIR/updates" ] && find "$CACHE_DIR/updates" -mmin -$MIN_CHECK_UPDATE | grep -q .; then
|
|
UPDATES=$(cat "$CACHE_DIR/updates")
|
|
else
|
|
UPDATES=$(apt list --upgradable 2>/dev/null | wc -l)
|
|
UPDATES=$((UPDATES - 1))
|
|
echo "$UPDATES" > "$CACHE_DIR/updates"
|
|
fi
|
|
|
|
## 🎨 Dinamic Color ##
|
|
if [ "$UPDATES" -eq 0 ]; then
|
|
UPD_COLOR="${GREEN}${UPDATES}${NC}"
|
|
elif [ "$UPDATES" -le 20 ]; then
|
|
UPD_COLOR="${YELLOW}${UPDATES}${NC}"
|
|
else
|
|
UPD_COLOR="${RED}${UPDATES}${NC}"
|
|
fi
|
|
|
|
echo -e "📦 Updates: $UPD_COLOR"
|
|
else
|
|
echo "📦 Updates: N/A"
|
|
fi
|
|
|
|
|
|
|
|
#### Temperature ####
|
|
if [ $ISTHISVM -ne 1 ]; then
|
|
if [ -f /sys/class/thermal/thermal_zone0/temp ]; then
|
|
TEMP_RAW=$(cat /sys/class/thermal/thermal_zone0/temp)
|
|
TEMP=$((TEMP_RAW/1000))
|
|
|
|
if [ "$TEMP" -lt 50 ]; then
|
|
TEMP_COLOR="${GREEN}${TEMP}°C${NC}"
|
|
elif [ "$TEMP" -lt 70 ]; then
|
|
TEMP_COLOR="${YELLOW}${TEMP}°C${NC}"
|
|
else
|
|
TEMP_COLOR="${RED}${TEMP}°C${NC}"
|
|
fi
|
|
|
|
echo -e "🌡️ Temp: $TEMP_COLOR"
|
|
fi
|
|
fi
|
|
|
|
echo -e "${CYAN}========================================${NC}"
|
|
}
|
|
|
|
|
|
|
|
if [[ $- == *i* ]]; then
|
|
dashboard_fast
|
|
fi
|