main.py aktualisiert
This commit is contained in:
34
main.py
34
main.py
@@ -180,14 +180,48 @@ async def chat_endpoint(websocket: WebSocket):
|
|||||||
else:
|
else:
|
||||||
await websocket.send_text(f"🤖 Empfangen: {user_msg}. Soll ich etwas installieren?")
|
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):
|
async def run_remote_task(ip, user, cmd, task_name):
|
||||||
await manager.broadcast(f"🚀 KI-Task: {task_name} auf {ip}")
|
await manager.broadcast(f"🚀 KI-Task: {task_name} auf {ip}")
|
||||||
ssh_cmd = f"ssh -o StrictHostKeyChecking=no {user}@{ip} '{cmd}'"
|
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)
|
process = subprocess.Popen(ssh_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
|
||||||
|
|
||||||
for line in process.stdout:
|
for line in process.stdout:
|
||||||
await manager.broadcast(f"🛠️ {line.strip()[:80]}")
|
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.")
|
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__":
|
if __name__ == "__main__":
|
||||||
import uvicorn
|
import uvicorn
|
||||||
uvicorn.run(app, host="0.0.0.0", port=8000)
|
uvicorn.run(app, host="0.0.0.0", port=8000)
|
||||||
Reference in New Issue
Block a user