main.py aktualisiert

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

44
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
@@ -212,22 +213,35 @@ async def check_and_update_node(node_id: int):
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
arch, dock, os_name, vnc = output.split('|') 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('|')
status = "Docker Aktiv" if dock == "1" else "Bereit (Kein Docker)" status = "Docker Aktiv" if dock == "1" else "Bereit (Kein Docker)"
conn.execute(''' conn.execute('''
@@ -236,13 +250,15 @@ async def check_and_update_node(node_id: int):
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 ---