clawd/scripts/service-health.sh

88 lines
2.4 KiB
Bash
Executable File

#!/bin/bash
# Service Health Check — updates dashboard status
# Run manually or via heartbeat
DASHBOARD="http://localhost:9200"
ALL_OK=true
check_service() {
local name="$1"
local check="$2"
local result
result=$(eval "$check" 2>&1)
local rc=$?
if [ $rc -eq 0 ]; then
echo "$name"
else
echo "$name: $result"
ALL_OK=false
fi
}
check_http() {
local name="$1"
local url="$2"
local code
code=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 "$url" 2>&1)
if [[ "$code" =~ ^(200|301|302)$ ]]; then
echo "$name (HTTP $code)"
else
echo "$name (HTTP $code)"
ALL_OK=false
fi
}
echo "=== Service Health Check ($(date -u +%Y-%m-%dT%H:%M:%SZ)) ==="
# Systemd services
check_service "Proton Bridge" "systemctl --user is-active protonmail-bridge"
check_service "Mail Bridge" "systemctl --user is-active mail-bridge"
check_service "Message Bridge" "systemctl --user is-active message-bridge"
# HTTP endpoints
check_http "Mail Bridge API" "http://localhost:8025/health"
check_http "Dashboard" "$DASHBOARD/api/tasks"
check_http "Zurich VPS" "https://zurich.inou.com"
check_http "inou.com" "https://inou.com"
# Disk space
DISK_PCT=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')
if [ "$DISK_PCT" -gt 85 ]; then
echo "⚠️ Disk: ${DISK_PCT}% used"
ALL_OK=false
else
echo "✅ Disk: ${DISK_PCT}% used"
fi
# Memory
MEM_PCT=$(free | awk '/Mem:/ {printf "%.0f", $3/$2*100}')
if [ "$MEM_PCT" -gt 90 ]; then
echo "⚠️ Memory: ${MEM_PCT}% used"
ALL_OK=false
else
echo "✅ Memory: ${MEM_PCT}% used"
fi
# Load average
LOAD=$(cat /proc/loadavg | awk '{print $1}')
CORES=$(nproc)
LOAD_INT=${LOAD%.*}
if [ "${LOAD_INT:-0}" -gt "$CORES" ]; then
echo "⚠️ Load: $LOAD ($CORES cores)"
ALL_OK=false
else
echo "✅ Load: $LOAD ($CORES cores)"
fi
echo ""
if $ALL_OK; then
echo "Overall: ALL SYSTEMS HEALTHY ✅"
# Update dashboard
curl -s -X POST "$DASHBOARD/api/status" -H 'Content-Type: application/json' \
-d "{\"key\":\"services\",\"value\":\"All services healthy ✅ (checked $(date -u +%H:%M) UTC)\",\"type\":\"info\"}" > /dev/null
else
echo "Overall: ISSUES DETECTED ⚠️"
curl -s -X POST "$DASHBOARD/api/status" -H 'Content-Type: application/json' \
-d "{\"key\":\"services\",\"value\":\"Issues detected ⚠️ — check logs\",\"type\":\"warning\"}" > /dev/null
fi