dev #2
@@ -444,36 +444,43 @@ def logs():
|
||||
return render_template('logs.html', log_content=log_content, log_name=os.path.basename(latest_log), interval=interval)
|
||||
|
||||
def load_device_status():
|
||||
"""
|
||||
Liest das aktuellste rpi-Logfile und extrahiert den letzten Status jedes Devices.
|
||||
Gibt ein Dictionary zurück: {Device-Name: 'online'/'offline'}
|
||||
"""
|
||||
status = {}
|
||||
|
||||
# Devices aus DB laden (Name → MAC)
|
||||
conn = sqlite3.connect("sqlite.db")
|
||||
conn.row_factory = sqlite3.Row
|
||||
devices = conn.execute("SELECT mac, name FROM devices").fetchall()
|
||||
name_to_mac = {d['name']: d['mac'] for d in devices}
|
||||
conn.close()
|
||||
|
||||
# Logfile
|
||||
log_files = glob.glob("/var/log/rpi-*.log")
|
||||
if not log_files:
|
||||
return status
|
||||
|
||||
latest_log = max(log_files, key=os.path.getctime)
|
||||
|
||||
# Jede Zeile des Logs lesen
|
||||
with open(latest_log, "r") as f:
|
||||
lines = f.readlines()
|
||||
|
||||
# Regex für Ping-Ergebnisse
|
||||
online_re = re.compile(r"(\S+) ist erreichbar!")
|
||||
offline_re = re.compile(r"(\S+) ist nicht erreichbar!")
|
||||
|
||||
for line in lines:
|
||||
with open(latest_log, "r") as f:
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
m_online = online_re.search(line)
|
||||
m_offline = offline_re.search(line)
|
||||
if m_online:
|
||||
status[m_online.group(1)] = 'online'
|
||||
name = m_online.group(1)
|
||||
mac = name_to_mac.get(name)
|
||||
if mac:
|
||||
status[mac] = 'online'
|
||||
elif m_offline:
|
||||
status[m_offline.group(1)] = 'offline'
|
||||
name = m_offline.group(1)
|
||||
mac = name_to_mac.get(name)
|
||||
if mac:
|
||||
status[mac] = 'offline'
|
||||
|
||||
return status
|
||||
|
||||
|
||||
@app.route("/users", methods=["GET", "POST"])
|
||||
@login_required
|
||||
def users():
|
||||
|
||||
Reference in New Issue
Block a user