diff --git a/main.py b/main.py index dda5af8..83a3ffc 100644 --- a/main.py +++ b/main.py @@ -180,14 +180,48 @@ async def chat_endpoint(websocket: WebSocket): else: await websocket.send_text(f"🤖 Empfangen: {user_msg}. Soll ich etwas installieren?") +# --- Status in DB aktualisieren Helper --- +def update_node_status(ip, new_status): + conn = get_db() + conn.execute('UPDATE nodes SET status = ? WHERE ip = ?', (new_status, ip)) + conn.commit() + conn.close() + +# --- Erweiterter Remote-Task --- async def run_remote_task(ip, user, cmd, task_name): await manager.broadcast(f"🚀 KI-Task: {task_name} auf {ip}") ssh_cmd = f"ssh -o StrictHostKeyChecking=no {user}@{ip} '{cmd}'" process = subprocess.Popen(ssh_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True) + for line in process.stdout: await manager.broadcast(f"🛠️ {line.strip()[:80]}") + + # WICHTIG: Wenn Docker installiert wurde, Status ändern! + if "docker" in task_name.lower(): + update_node_status(ip, "Docker Aktiv") + await manager.broadcast(f"✨ Datenbank aktualisiert: {ip} ist nun 'Docker Aktiv'") + await manager.broadcast(f"✅ {task_name} fertig.") +# --- Neuer Endpunkt: Manueller Refresh-Check --- +@app.get("/refresh_status/{node_id}") +async def refresh_status(node_id: int): + conn = get_db() + node = conn.execute('SELECT * FROM nodes WHERE id = ?', (node_id,)).fetchone() + conn.close() + + if node: + # Kurzer Check via SSH + check_cmd = "command -v docker >/dev/null 2>&1 && echo 'Docker Aktiv' || echo 'Bereit (Kein Docker)'" + ssh_cmd = f"ssh -o StrictHostKeyChecking=no {node['user']}@{node['ip']} \"{check_cmd}\"" + try: + result = subprocess.check_output(ssh_cmd, shell=True, timeout=5).decode().strip() + update_node_status(node['ip'], result) + except: + update_node_status(node['ip'], "Offline/Fehler") + + return RedirectResponse(url="/", status_code=303) + if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000) \ No newline at end of file