srv/poe_manager/app.py aktualisiert
This commit is contained in:
@@ -122,44 +122,46 @@ def index():
|
||||
c.execute("SELECT mac, name, is_active FROM devices ORDER BY name ASC")
|
||||
devices = c.fetchall()
|
||||
|
||||
# Intervall aus DB (Minuten) laden
|
||||
# Intervall laden
|
||||
c.execute("SELECT value FROM settings WHERE key='interval'")
|
||||
row = c.fetchone()
|
||||
interval = int(row[0]) if row else 5 # Default 5 Minuten
|
||||
interval = int(row[0]) if row else 5
|
||||
conn.close()
|
||||
|
||||
# Status aus letztem Log ermitteln
|
||||
import glob, os
|
||||
# Neu: Status und "zuletzt online" ermitteln
|
||||
log_files = glob.glob("/var/log/rpi-*.log")
|
||||
status_dict = {}
|
||||
last_seen_dict = {}
|
||||
|
||||
if log_files:
|
||||
latest_log = max(log_files, key=os.path.getctime)
|
||||
with open(latest_log, "r") as f:
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
lines = f.readlines()
|
||||
|
||||
for dev in devices:
|
||||
# prüfen, ob Name enthalten ist und Statusphrase
|
||||
last_status = None
|
||||
last_time = None
|
||||
|
||||
for line in reversed(lines): # von unten nach oben lesen
|
||||
if f"{dev[1]} ist erreichbar!" in line:
|
||||
status_dict[dev[0]] = "online"
|
||||
last_status = "online"
|
||||
last_time = line.split(" ")[0] + " " + line.split(" ")[1]
|
||||
break
|
||||
elif f"{dev[1]} ist nicht erreichbar!" in line:
|
||||
status_dict[dev[0]] = "offline"
|
||||
last_status = "offline"
|
||||
last_time = line.split(" ")[0] + " " + line.split(" ")[1]
|
||||
break
|
||||
|
||||
last_seen_dict = {}
|
||||
if last_status:
|
||||
status_dict[dev[0]] = last_status
|
||||
if last_status == "offline":
|
||||
last_seen_dict[dev[0]] = [f"Zuletzt online: {last_time}", dev[1]]
|
||||
else:
|
||||
status_dict[dev[0]] = "unbekannt"
|
||||
|
||||
for dev in devices:
|
||||
# Status aus Log ermitteln
|
||||
status_dict[dev[0]] = "offline" if f"{dev[1]} ist nicht erreichbar!" in open(max(glob.glob('/var/log/rpi-*.log'), key=os.path.getctime)).read() else "online"
|
||||
|
||||
# Last Seen nur, wenn offline
|
||||
if status_dict[dev[0]] == "offline":
|
||||
last_seen = get_last_seen(dev[1]) # dev[1] = Device Name
|
||||
if last_seen:
|
||||
last_seen_dict[dev[0]] = last_seen
|
||||
|
||||
|
||||
# Template rendern mit Devices, Status und Intervall
|
||||
return render_template("index.html", devices=devices, status=status_dict, last_seen=last_seen_dict, interval=interval)
|
||||
|
||||
|
||||
@app.route("/settings", methods=["GET", "POST"])
|
||||
@login_required
|
||||
def settings():
|
||||
|
||||
Reference in New Issue
Block a user