From 5e2f3868be30eabb4bab007a1f90b2f02fa70226 Mon Sep 17 00:00:00 2001 From: Tim Eertmoed Date: Sun, 12 Jul 2026 08:53:09 +0200 Subject: [PATCH] Einbau Restart --- srv/poe_manager/app.py | 61 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/srv/poe_manager/app.py b/srv/poe_manager/app.py index 4ab8153..e9ce29f 100644 --- a/srv/poe_manager/app.py +++ b/srv/poe_manager/app.py @@ -1,10 +1,10 @@ #u!/usr/bin/env python3 -from flask import Flask, render_template, request, redirect, url_for, flash +from flask import Flask, render_template, request, redirect, url_for, flash, jsonify from flask_login import LoginManager, login_user, login_required, logout_user, UserMixin, current_user from flask_bcrypt import Bcrypt from cryptography.fernet import Fernet from datetime import datetime -import sqlite3, glob, os, re +import sqlite3, glob, os, re, subprocess app = Flask(__name__) app.secret_key = "309cc4d5ce1fe7486ae25cbd232bbdfe6a72539c03f0127d372186dbdc0fc928" @@ -15,6 +15,7 @@ login_manager.login_view = "login" login_manager.init_app(app) DB_PATH = "/srv/poe_manager/sqlite.db" +POE_SCRIPT = "/usr/local/bin/custom/poe.sh" class User(UserMixin): def __init__(self, id_, username, is_admin): @@ -458,6 +459,62 @@ def get_log(): except Exception as e: return f"Fehler beim Lesen des Logs: {e}" +@app.route("/restart/", methods=["POST"]) +@login_required +def restart_device(mac): + + conn = sqlite3.connect("sqlite.db") + conn.row_factory = sqlite3.Row + c = conn.cursor() + + c.execute(""" + SELECT + mac, + name, + is_active + FROM devices + WHERE mac=? + """, (mac,)) + + device = c.fetchone() + conn.close() + + if not device: + return jsonify({ + "success": False, + "message": "Gerät wurde nicht gefunden." + }), 404 + + if device["is_active"] == 0: + return jsonify({ + "success": False, + "message": f"{device['name']} ist deaktiviert." + }), 400 + + try: + + subprocess.Popen( + [ + POE_SCRIPT, + "restart", + mac + ], + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL + ) + + return jsonify({ + "success": True, + "device": device["name"] + }) + + except Exception as e: + + return jsonify({ + "success": False, + "message": str(e) + }), 500 + @app.route('/logs') @login_required def logs():