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 re
import httpx
import subprocess
from google import genai
from google.genai import types
import json
@@ -212,22 +213,35 @@ async def check_and_update_node(node_id: int):
conn.close()
return "Node nicht gefunden"
# Dieser geniale Einzeiler holt uns Architektur, Docker-Status und das OS
check_cmd = """
arch=$(uname -m);
dock=$(command -v docker >/dev/null 2>&1 && echo 1 || echo 0);
os=$(grep '^ID=' /etc/os-release 2>/dev/null | cut -d= -f2 | tr -d '"');
[ -z "$os" ] && os=$(uname -s);
vnc=$(command -v vncserver >/dev/null 2>&1 && echo 1 || echo 0);
echo "$arch|$dock|$os|$vnc"
"""
# Wir bauen den Befehl kompakt zusammen
# Nutze im Grep nun doppelte Anführungszeichen, um Konflikte zu vermeiden
check_cmd = (
'arch=$(uname -m); '
'dock=$(command -v docker >/dev/null 2>&1 && echo 1 || echo 0); '
'os=$(grep "^ID=" /etc/os-release 2>/dev/null | cut -d= -f2 | tr -d \'"\'); '
'[ -z "$os" ] && os=$(uname -s); '
'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:
output = subprocess.check_output(ssh_cmd, shell=True).decode().strip()
arch, dock, os_name, vnc = output.split('|')
# 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('|')
status = "Docker Aktiv" if dock == "1" else "Bereit (Kein Docker)"
conn.execute('''
@@ -236,13 +250,15 @@ async def check_and_update_node(node_id: int):
WHERE id=?
''', (status, arch, int(dock), os_name, int(vnc), node_id))
conn.commit()
conn.close()
return status
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.commit()
conn.close()
return "Offline/Fehler"
finally:
conn.close()
# --- Routen ---