88 lines
2.4 KiB
Bash
Executable File
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
|