main.py aktualisiert
This commit is contained in:
44
main.py
44
main.py
@@ -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 ---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user