mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-07-31 03:05:21 +00:00
69 lines
2.1 KiB
Bash
Executable file
69 lines
2.1 KiB
Bash
Executable file
#!/bin/bash
|
|
# system.sh — basic node health probe (disk, mem, load, zram, systemd)
|
|
# Output: JSON to stdout. No external dependencies beyond coreutils + procfs.
|
|
|
|
set -e
|
|
|
|
HOSTNAME=$(hostname)
|
|
DISK_PCT=0
|
|
DISK_TOTAL=0
|
|
DISK_FREE=0
|
|
MEM_PCT=0
|
|
MEM_TOTAL=0
|
|
MEM_FREE=0
|
|
LOAD_1M=0
|
|
LOAD_5M=0
|
|
LOAD_15M=0
|
|
UPTIME=0
|
|
ZRAM_USED=0
|
|
ZRAM_TOTAL=0
|
|
|
|
# disk usage on /
|
|
disk_info=$(df -k / 2>/dev/null | awk 'NR==2 {print $2, $4, $5}')
|
|
if [ -n "$disk_info" ]; then
|
|
DISK_TOTAL=$(echo "$disk_info" | awk '{printf "%.0f", $1/1024}')
|
|
DISK_FREE=$(echo "$disk_info" | awk '{printf "%.0f", $2/1024}')
|
|
DISK_PCT=$(echo "$disk_info" | awk '{print $3}' | tr -d '%')
|
|
fi
|
|
|
|
# memory
|
|
mem_info=$(free -m 2>/dev/null | awk 'NR==2 {print $2, $7}')
|
|
if [ -n "$mem_info" ]; then
|
|
MEM_TOTAL=$(echo "$mem_info" | awk '{print $1}')
|
|
MEM_FREE=$(echo "$mem_info" | awk '{print $2}')
|
|
if [ "$MEM_TOTAL" -gt 0 ]; then
|
|
used=$((MEM_TOTAL - MEM_FREE))
|
|
MEM_PCT=$((used * 100 / MEM_TOTAL))
|
|
fi
|
|
fi
|
|
|
|
# load average
|
|
load_info=$(awk '{print $1, $2, $3}' /proc/loadavg 2>/dev/null)
|
|
if [ -n "$load_info" ]; then
|
|
LOAD_1M=$(echo "$load_info" | awk '{printf "%.2f", $1}')
|
|
LOAD_5M=$(echo "$load_info" | awk '{printf "%.2f", $2}')
|
|
LOAD_15M=$(echo "$load_info" | awk '{printf "%.2f", $3}')
|
|
fi
|
|
|
|
# uptime in seconds
|
|
UPTIME=$(awk '{printf "%.0f", $1}' /proc/uptime 2>/dev/null || echo 0)
|
|
|
|
# zram
|
|
if command -v zramctl &>/dev/null; then
|
|
zram_info=$(zramctl --output-all --bytes 2>/dev/null | awk -F'[[:space:]]+' 'NR>1 {
|
|
used+=$3; total+=$4
|
|
} END {
|
|
printf "%.0f %.0f", used/1048576, total/1048576
|
|
}')
|
|
if [ -n "$zram_info" ]; then
|
|
ZRAM_USED=$(echo "$zram_info" | awk '{print $1}')
|
|
ZRAM_TOTAL=$(echo "$zram_info" | awk '{print $2}')
|
|
fi
|
|
fi
|
|
|
|
printf '{"node":"%s","hostname":"%s","disk":{"total_mb":%s,"free_mb":%s,"used_pct":%s},"memory":{"total_mb":%s,"free_mb":%s,"used_pct":%s},"load":{"1m":%s,"5m":%s,"15m":%s},"uptime_seconds":%s,"zram":{"used_mb":%s,"total_mb":%s}}\n' \
|
|
"$HOSTNAME" "$HOSTNAME" \
|
|
"$DISK_TOTAL" "$DISK_FREE" "$DISK_PCT" \
|
|
"$MEM_TOTAL" "$MEM_FREE" "$MEM_PCT" \
|
|
"$LOAD_1M" "$LOAD_5M" "$LOAD_15M" \
|
|
"$UPTIME" "$ZRAM_USED" "$ZRAM_TOTAL"
|