83 lines
2.3 KiB
Bash
Raw Normal View History

2025-08-31 14:58:03 -06:00
API_URL="https://status.netsyms.net/api/push/"
PUSH_KEY=""
2025-08-31 14:58:03 -06:00
DISK_FULL_ALERT_PERCENT_THRESHOLD=85
2025-08-31 16:20:40 -06:00
CPU_USAGE_PERCENT_THRESHOLD=60
MEM_USAGE_PERCENT_THRESHOLD=80
2025-08-31 14:58:03 -06:00
# ZFS health
echo -n "Checking ZFS health: "
ZFS_STATUS=$(zpool status -x | grep -q "all pools are healthy" && echo "OK" || zpool status -x)
echo "$ZFS_STATUS"
2025-08-31 14:58:03 -06:00
# Disk usage
echo -n "Checking disk usage: "
DISKS_STATUS="OK"
2025-08-31 14:58:03 -06:00
USAGES=()
while read -r output;
do
partition=$(echo "$output" | awk '{ print $2 }')
percent=$(echo "$output" | awk '{ print $1 }' | cut -d'%' -f1)
if [ $percent -ge $DISK_FULL_ALERT_PERCENT_THRESHOLD ]; then
USAGES+=("$partition: $percent% > $DISK_FULL_ALERT_PERCENT_THRESHOLD%")
DISKS_STATUS="NOTOK"
2025-08-31 14:58:03 -06:00
fi
done <<< $(df | grep -vE "^Filesystem|tmpfs|cdrom" | awk '{ print $5 " " $1 }')
USAGETEXT=$(IFS=","; echo "${USAGES[*]}")
if [[ "$DISKS_STATUS" != "OK" ]]; then
DISKS_STATUS="$USAGETEXT"
fi
echo "$DISKS_STATUS"
# CPU usage percentage
# Calculated from system load, average over past 5 minutes
echo -n "Checking CPU load: "
SYSTEM_LOAD=$(uptime | awk '{print $11}' | cut -d "," -f 1)
CPU_COUNT=$(nproc)
CPU_PERCENT=$(awk -v l=$SYSTEM_LOAD -v c=$CPU_COUNT 'BEGIN {printf "%.2f\n", (l/c)*100}')
CPU_STATUS="OK"
if [[ $CPU_PERCENT > $CPU_USAGE_PERCENT_THRESHOLD ]]; then
CPU_STATUS="$CPU_PERCENT% > $CPU_USAGE_PERCENT_THRESHOLD%"
fi
echo "$CPU_STATUS"
2025-08-31 16:20:40 -06:00
# Memory usage percentage
echo -n "Checking memory usage: "
MEM_STATUS="OK"
MEM_PCT=$(free -m | awk 'NR==2{ print $3*100/$2 }')
if [[ $MEM_PCT > $MEM_USAGE_PERCENT_THRESHOLD ]]; then
MEM_STATUS="$MEM_PCT% > $MEM_USAGE_PERCENT_THRESHOLD%"
fi
#
# Put it all together
#
IS_OK=1
ERROR_MESSAGES=()
if [[ $ZFS_STATUS != "OK" ]]; then
IS_OK=0
ERROR_MESSAGES+=("ZFS alert: $ZFS_STATUS")
fi
if [[ $DISKS_STATUS != "OK" ]]; then
IS_OK=0
ERROR_MESSAGES+=("Disk usage alert: $DISKS_STATUS")
fi
if [[ $CPU_STATUS != "OK" ]]; then
IS_OK=0
ERROR_MESSAGES+=("CPU usage alert: $CPU_STATUS")
fi
2025-08-31 16:20:40 -06:00
if [[ $MEM_STATUS != "OK" ]]; then
IS_OK=0
ERROR_MESSAGES+=("Memory usage alert: $MEM_STATUS")
fi
echo -n "Sending status: "
if [[ $IS_OK == "1" ]]; then
echo "OK"
curl -s -o /dev/null -G "$API_URL$PUSH_KEY?status=up&msg=OK"
2025-08-31 14:58:03 -06:00
else
ERROR_STRING=$(IFS=";"; echo "${ERROR_MESSAGES[*]}")
echo $ERROR_STRING
curl -s -o /dev/null -G --data-urlencode "status=down" --data-urlencode "msg=$ERROR_STRING" "$API_URL$PUSH_KEY"
2025-08-31 14:58:03 -06:00
fi