- Reset master to upstream/main (16,697 commits) - Overlay 2,271 local-only files (skills, tools, workspace, configs, apps) - Restore IDENTITY.md and USER.md templates - Build verified, gateway running, Discord working Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
115 lines
3.6 KiB
Bash
115 lines
3.6 KiB
Bash
#!/usr/bin/env bash
|
|
# Jarvis System Health Monitor
|
|
# Checks all infrastructure and reports issues proactively
|
|
|
|
set -euo pipefail
|
|
|
|
# Color codes
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[1;33m'
|
|
GREEN='\033[0;32m'
|
|
NC='\033[0m' # No Color
|
|
|
|
ISSUES=()
|
|
WARNINGS=()
|
|
OK_COUNT=0
|
|
|
|
check() {
|
|
local name="$1"
|
|
local cmd="$2"
|
|
|
|
if eval "$cmd" &>/dev/null; then
|
|
echo -e "${GREEN}✓${NC} $name"
|
|
((OK_COUNT++))
|
|
else
|
|
echo -e "${RED}✗${NC} $name"
|
|
ISSUES+=("$name")
|
|
fi
|
|
}
|
|
|
|
check_warn() {
|
|
local name="$1"
|
|
local cmd="$2"
|
|
|
|
if eval "$cmd" &>/dev/null; then
|
|
echo -e "${GREEN}✓${NC} $name"
|
|
((OK_COUNT++))
|
|
else
|
|
echo -e "${YELLOW}⚠${NC} $name"
|
|
WARNINGS+=("$name")
|
|
fi
|
|
}
|
|
|
|
echo "=== JARVIS SYSTEM HEALTH CHECK ==="
|
|
echo ""
|
|
|
|
# Core Services
|
|
echo "📡 Core Infrastructure:"
|
|
check "Gateway (192.168.1.220:18789)" "timeout 5 curl -sfk https://192.168.1.220:18789/"
|
|
check "Kanban API (192.168.1.220:5003)" "timeout 5 curl -sf http://192.168.1.220:5003/api/tasks?limit=1"
|
|
check_warn "Voice Surface (192.168.1.220:3030)" "timeout 5 curl -sf http://192.168.1.220:3030/"
|
|
check_warn "Kamoer Pump (192.168.1.220:5000)" "timeout 5 curl -sf http://192.168.1.220:5000/"
|
|
echo ""
|
|
|
|
# Smart Home
|
|
echo "🏠 Smart Home:"
|
|
check "Home Assistant (192.168.1.24:8123)" "timeout 5 curl -sf http://192.168.1.24:8123/"
|
|
check_warn "Chromecast (192.168.1.25)" "ping -c 1 -W 2 192.168.1.25"
|
|
check_warn "Roborock (192.168.1.247)" "ping -c 1 -W 2 192.168.1.247"
|
|
check_warn "Shelly Gas (192.168.1.202)" "ping -c 1 -W 2 192.168.1.202"
|
|
echo ""
|
|
|
|
# Network Infrastructure
|
|
echo "🌐 Network:"
|
|
check_warn "Synology NAS (192.168.1.133)" "ping -c 1 -W 2 192.168.1.133"
|
|
check_warn "Office Server (192.168.1.112)" "ping -c 1 -W 2 192.168.1.112"
|
|
check_warn "UniFi Controller (192.168.1.78)" "timeout 5 curl -sfk https://192.168.1.78:8443/"
|
|
check_warn "HP Printer (192.168.1.6)" "ping -c 1 -W 2 192.168.1.6"
|
|
echo ""
|
|
|
|
# Databases
|
|
echo "💾 Databases:"
|
|
check_warn "MariaDB (direct access)" "timeout 3 mariadb -h 127.0.0.1 -u root -e 'SELECT 1' 2>/dev/null || timeout 3 mariadb -h 192.168.1.220 -e 'SELECT 1' 2>/dev/null"
|
|
echo ""
|
|
|
|
# Raspberry Pi (192.168.1.24)
|
|
echo "🥧 Raspberry Pi:"
|
|
check "SSH access (192.168.1.24)" "timeout 5 ssh -o ConnectTimeout=3 192.168.1.24 'echo ok' 2>/dev/null"
|
|
check_warn "Disk usage < 90%" "timeout 5 ssh -o ConnectTimeout=3 192.168.1.24 'df -h / | tail -1 | awk \"{print \$5}\" | sed \"s/%//\"' | awk '{if (\$1 < 90) exit 0; else exit 1}' 2>/dev/null"
|
|
check_warn "Memory available > 200MB" "timeout 5 ssh -o ConnectTimeout=3 192.168.1.24 'free -m | grep Mem | awk \"{print \$7}\"' | awk '{if (\$1 > 200) exit 0; else exit 1}' 2>/dev/null"
|
|
echo ""
|
|
|
|
# Messaging Channels
|
|
echo "💬 Messaging:"
|
|
check "Discord channel" "timeout 10 openclaw channels status --probe 2>&1 | grep -q discord"
|
|
echo ""
|
|
|
|
# Summary
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|
|
if [ ${#ISSUES[@]} -eq 0 ] && [ ${#WARNINGS[@]} -eq 0 ]; then
|
|
echo -e "${GREEN}✅ All systems operational${NC} ($OK_COUNT checks passed)"
|
|
exit 0
|
|
else
|
|
echo "📊 Summary: $OK_COUNT OK, ${#WARNINGS[@]} warnings, ${#ISSUES[@]} critical"
|
|
echo ""
|
|
|
|
if [ ${#ISSUES[@]} -gt 0 ]; then
|
|
echo -e "${RED}❌ CRITICAL ISSUES:${NC}"
|
|
for issue in "${ISSUES[@]}"; do
|
|
echo " - $issue"
|
|
done
|
|
echo ""
|
|
fi
|
|
|
|
if [ ${#WARNINGS[@]} -gt 0 ]; then
|
|
echo -e "${YELLOW}⚠️ WARNINGS:${NC}"
|
|
for warn in "${WARNINGS[@]}"; do
|
|
echo " - $warn"
|
|
done
|
|
echo ""
|
|
fi
|
|
|
|
exit 1
|
|
fi
|