#!/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\",\"status\":\"pending\",\"priority\":-999,\"created\":\"$(date -Iseconds)\",\"command\":\"echo ok\"}" > "$INJECT" echo "$(date +%H:%M): injection task recreated" >> $LOG fi