45 lines
1.5 KiB
Bash
45 lines
1.5 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# verify-agent-fleet.sh - Check the status of stability agents across the fleet
|
||
|
|
|
||
|
|
REDIS_HOST="100.108.208.3"
|
||
|
|
REDIS_PORT="6379"
|
||
|
|
|
||
|
|
echo "--- Homelab Agent Fleet Status ---"
|
||
|
|
|
||
|
|
# Check if redis-cli is available
|
||
|
|
if ! command -v redis-cli &> /dev/null; then
|
||
|
|
echo "Error: redis-cli not found. Please install it or run this on a node with Redis access."
|
||
|
|
echo "Expected Redis: $REDIS_HOST:$REDIS_PORT"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
NODES=$(redis-cli -h "$REDIS_HOST" -p "$REDIS_PORT" --raw KEYS 'homelab:nodes:*' | sed 's/homelab:nodes://')
|
||
|
|
|
||
|
|
if [[ -z "$NODES" ]]; then
|
||
|
|
echo "No nodes found in Redis."
|
||
|
|
exit 0
|
||
|
|
fi
|
||
|
|
|
||
|
|
printf "%-15s | %-10s | %-20s | %-10s\n" "NODE" "STATUS" "LAST HEARTBEAT" "DOCKER"
|
||
|
|
printf "%s\n" "--------------------------------------------------------------------------------"
|
||
|
|
|
||
|
|
for NODE in $NODES; do
|
||
|
|
DATA=$(redis-cli -h "$REDIS_HOST" -p "$REDIS_PORT" HGETALL "homelab:nodes:$NODE")
|
||
|
|
|
||
|
|
# Simple parser for HGETALL output (alternating key/value)
|
||
|
|
STATUS=$(echo "$DATA" | grep -A 1 "status" | tail -n 1)
|
||
|
|
HEARTBEAT=$(echo "$DATA" | grep -A 1 "timestamp" | tail -n 1)
|
||
|
|
CHECKS=$(echo "$DATA" | grep -A 1 "checks" | tail -n 1)
|
||
|
|
|
||
|
|
DOCKER_STATUS="unknown"
|
||
|
|
if [[ "$CHECKS" == *"docker"* ]]; then
|
||
|
|
DOCKER_STATUS=$(echo "$CHECKS" | jq -r '.docker.status' 2>/dev/null || echo "error")
|
||
|
|
fi
|
||
|
|
|
||
|
|
printf "%-15s | %-10s | %-20s | %-10s\n" "$NODE" "$STATUS" "$HEARTBEAT" "$DOCKER_STATUS"
|
||
|
|
done
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "Events (last 5):"
|
||
|
|
redis-cli -h "$REDIS_HOST" -p "$REDIS_PORT" XREVRANGE homelab:events + - COUNT 5
|