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