- Refactor executeCheck to return checkResult struct with metrics map - Add ping check kind (ICMP reachability via system ping, macOS+Linux) - Add ssh-script check kind (remote host exec via SSH, allowlisted scripts) - Add threshold evaluation (warn/crit per metric from check config JSONB) - Add inode tracking to disk check - All 4 existing checks now return structured metrics - 17 check scripts: cpu, memory, load, swap, disk_usage, disk_smart, updates, zfs, process, uptime, oom, journal, time, fd, docker_health, caddy_error_rate, backup_freshness - Auto-deploy via tools/setup-checks.sh -> checks/install.sh on git pull - Add ping to OpenAPI CheckKind enum and generated Go types
27 lines
896 B
Bash
27 lines
896 B
Bash
#!/usr/bin/env bash
|
|
# disk_usage_check.sh — disk usage and inode usage per mountpoint.
|
|
set -euo pipefail
|
|
|
|
MOUNTS=$(df -k 2>/dev/null | awk 'NR>1 && $1 ~ /^\// && $NF !~ /^\/(snap|dev|proc|sys|run|private)/ {print $NF}' || true)
|
|
FIRST=1
|
|
|
|
echo -n '{"health":"healthy","metrics":{'
|
|
for m in $MOUNTS; do
|
|
LINE=$(df -k "$m" 2>/dev/null | awk 'NR==2 {print $3, $4, $5, $7}' | tr -d '%' || true)
|
|
if [ -z "$LINE" ]; then continue; fi
|
|
USED=$(echo "$LINE" | awk '{print $1}')
|
|
FREE=$(echo "$LINE" | awk '{print $2}')
|
|
PCT=$(echo "$LINE" | awk '{print $3}')
|
|
|
|
INODE_LINE=$(df -i "$m" 2>/dev/null | awk 'NR==2 {print $5}' | tr -d '%' || echo "0")
|
|
INODE_PCT="${INODE_LINE:-0}"
|
|
|
|
KEY=$(echo "$m" | sed 's|/|_|g' | sed 's|^_||')
|
|
[ -z "$KEY" ] && KEY="root"
|
|
|
|
if [ $FIRST -eq 0 ]; then echo -n ','; fi
|
|
FIRST=0
|
|
echo -n "\"disk_${KEY}_pct\":$PCT,\"inode_${KEY}_pct\":$INODE_PCT"
|
|
done
|
|
echo '}}'
|