main.py aktualisiert

This commit is contained in:
2026-03-06 10:14:30 +00:00
parent d4155ea949
commit 89d41e0343

52
main.py
View File

@@ -7,6 +7,7 @@ import asyncio
import openai import openai
import re import re
import httpx import httpx
import subprocess
from google import genai from google import genai
from google.genai import types from google.genai import types
import json import json
@@ -211,38 +212,53 @@ async def check_and_update_node(node_id: int):
if not node: if not node:
conn.close() conn.close()
return "Node nicht gefunden" return "Node nicht gefunden"
# Dieser geniale Einzeiler holt uns Architektur, Docker-Status und das OS # Wir bauen den Befehl kompakt zusammen
check_cmd = """ # Nutze im Grep nun doppelte Anführungszeichen, um Konflikte zu vermeiden
arch=$(uname -m); check_cmd = (
dock=$(command -v docker >/dev/null 2>&1 && echo 1 || echo 0); 'arch=$(uname -m); '
os=$(grep '^ID=' /etc/os-release 2>/dev/null | cut -d= -f2 | tr -d '"'); 'dock=$(command -v docker >/dev/null 2>&1 && echo 1 || echo 0); '
[ -z "$os" ] && os=$(uname -s); 'os=$(grep "^ID=" /etc/os-release 2>/dev/null | cut -d= -f2 | tr -d \'"\'); '
vnc=$(command -v vncserver >/dev/null 2>&1 && echo 1 || echo 0); '[ -z "$os" ] && os=$(uname -s); '
echo "$arch|$dock|$os|$vnc" 'vnc=$(command -v vncserver >/dev/null 2>&1 && echo 1 || echo 0); '
""" 'echo "$arch|$dock|$os|$vnc"'
)
ssh_cmd = f"ssh -o StrictHostKeyChecking=no -o ConnectTimeout=3 {node['user']}@{node['ip']} '{check_cmd}'"
# WICHTIG: Als Liste übergeben, damit kein f-String Quoting nötig ist!
ssh_args = [
"ssh",
"-o", "StrictHostKeyChecking=no",
"-o", "ConnectTimeout=3",
f"{node['user']}@{node['ip']}",
check_cmd
]
try: try:
output = subprocess.check_output(ssh_cmd, shell=True).decode().strip() # Kein shell=True mehr nötig
output = subprocess.check_output(ssh_args, stderr=subprocess.STDOUT).decode().strip()
# Debugging: Falls doch was schief geht, sehen wir es im Log
if "|" not in output:
raise ValueError(f"Unerwarteter Output: {output}")
arch, dock, os_name, vnc = output.split('|') arch, dock, os_name, vnc = output.split('|')
status = "Docker Aktiv" if dock == "1" else "Bereit (Kein Docker)" status = "Docker Aktiv" if dock == "1" else "Bereit (Kein Docker)"
conn.execute(''' conn.execute('''
UPDATE nodes UPDATE nodes
SET status=?, arch=?, docker=?, os=?, vnc=? SET status=?, arch=?, docker=?, os=?, vnc=?
WHERE id=? WHERE id=?
''', (status, arch, int(dock), os_name, int(vnc), node_id)) ''', (status, arch, int(dock), os_name, int(vnc), node_id))
conn.commit() conn.commit()
conn.close()
return status return status
except Exception as e: except Exception as e:
print(f"Fehler bei Node {node_id} ({node['ip']}): {e}")
conn.execute("UPDATE nodes SET status='Offline/Fehler' WHERE id=?", (node_id,)) conn.execute("UPDATE nodes SET status='Offline/Fehler' WHERE id=?", (node_id,))
conn.commit() conn.commit()
conn.close()
return "Offline/Fehler" return "Offline/Fehler"
finally:
conn.close()
# --- Routen --- # --- Routen ---