diff --git a/srv/poe_manager/app.py b/srv/poe_manager/app.py index d694755..3b867d9 100644 --- a/srv/poe_manager/app.py +++ b/srv/poe_manager/app.py @@ -47,7 +47,7 @@ def get_devices(): Liefert eine Liste aller Devices aus der Datenbank als Dictionaries. """ conn = get_db_connection() - devices = conn.execute("SELECT mac, rpi_ip, port, name, switch_hostname FROM devices").fetchall() + devices = conn.execute("SELECT mac, rpi_ip, port, name, switch_hostname, is_active FROM devices").fetchall() conn.close() return devices @@ -150,14 +150,19 @@ def devices(): if not current_user.is_admin: flash("Zugriff verweigert!") return redirect(url_for('devices')) + mac = request.form['mac'] rpi_ip = request.form['rpi_ip'] port = request.form['port'] name = request.form['name'] switch_hostname = request.form['switch_hostname'] + is_active = 1 if 'is_active' in request.form else 0 + try: - conn.execute("INSERT INTO devices (mac, rpi_ip, port, name, switch_hostname) VALUES (?, ?, ?, ?, ?)", - (mac, rpi_ip, port, name, switch_hostname)) + conn.execute(""" + INSERT INTO devices (mac, rpi_ip, port, name, switch_hostname, is_active) + VALUES (?, ?, ?, ?, ?, ?) + """, (mac, rpi_ip, port, name, switch_hostname, is_active)) conn.commit() flash(f"Gerät {name} hinzugefügt.") except sqlite3.IntegrityError: @@ -168,18 +173,21 @@ def devices(): if not current_user.is_admin: flash("Zugriff verweigert!") return redirect(url_for('devices')) + old_mac = request.form['old_mac'] mac = request.form['mac'] rpi_ip = request.form['rpi_ip'] port = request.form['port'] name = request.form['name'] switch_hostname = request.form['switch_hostname'] + is_active = 1 if 'is_active' in request.form else 0 + try: conn.execute(""" UPDATE devices - SET mac=?, rpi_ip=?, port=?, name=?, switch_hostname=? + SET mac=?, rpi_ip=?, port=?, name=?, switch_hostname=?, is_active=? WHERE mac=? - """, (mac, rpi_ip, port, name, switch_hostname, old_mac)) + """, (mac, rpi_ip, port, name, switch_hostname, is_active, old_mac)) conn.commit() flash(f"Gerät {name} aktualisiert.") except sqlite3.IntegrityError: @@ -196,10 +204,12 @@ def devices(): flash(f"Gerät {del_mac} gelöscht.") devices = conn.execute(""" - SELECT devices.mac, devices.rpi_ip, devices.port, devices.name, switches.hostname AS switch_hostname + SELECT devices.mac, devices.rpi_ip, devices.port, devices.name, devices.is_active, + switches.hostname AS switch_hostname FROM devices JOIN switches ON devices.switch_hostname = switches.hostname """).fetchall() + conn.close() interval_min = get_interval_seconds() // 60 return render_template('devices.html', devices=devices, switches=switches) diff --git a/srv/poe_manager/generate_ips.py b/srv/poe_manager/generate_ips.py index 60ec98f..53409ec 100644 --- a/srv/poe_manager/generate_ips.py +++ b/srv/poe_manager/generate_ips.py @@ -11,8 +11,16 @@ def generate_ips_list(): # Alle Switches laden switches = {row['hostname']: row for row in conn.execute("SELECT hostname, ip, username, password FROM switches")} - # Alle Geräte laden - devices = conn.execute("SELECT mac, rpi_ip, port, name, switch_hostname FROM devices").fetchall() +# # Alle Geräte laden +# devices = conn.execute("SELECT mac, rpi_ip, port, name, switch_hostname FROM devices").fetchall() +# conn.close() + + # Nur aktive Geräte laden + devices = conn.execute(""" + SELECT mac, rpi_ip, port, name, switch_hostname + FROM devices + WHERE is_active=1 + """).fetchall() conn.close() tmp = tempfile.NamedTemporaryFile(delete=False, mode='w', prefix='ips_', suffix='.list') diff --git a/srv/poe_manager/sqlite.db b/srv/poe_manager/sqlite.db index 39a3341..5b21479 100644 Binary files a/srv/poe_manager/sqlite.db and b/srv/poe_manager/sqlite.db differ diff --git a/srv/poe_manager/static/css/style.css b/srv/poe_manager/static/css/style.css index 3ef38c5..2ad9bdf 100644 --- a/srv/poe_manager/static/css/style.css +++ b/srv/poe_manager/static/css/style.css @@ -53,7 +53,7 @@ pre { } .content-wrapper { - max-width: 1024px; + max-width: 1080px; margin-left: auto; margin-right: auto; } @@ -102,3 +102,50 @@ pre { font-size: 0.9em; color: gray; } + +/* Tabelle anpassen */ +.custom-table input, +.custom-table select { + height: 28px; + padding: 0.25rem 0.5rem; + font-size: 0.9rem; +} + +/* Spaltenbreiten */ +.custom-table .col-small { + width: 100px; /* Hostname, Port */ +} + +.custom-table .col-ip { + width: 120px; /* IP-Adresse schmaler */ +} + +.custom-table .col-mac { + width: 120px; /* MAC-Adresse schmaler */ +} + +/* Checkbox sichtbar auch bei disabled */ +.checkbox-visible:disabled { + opacity: 1; /* nicht ausgegraut */ + cursor: not-allowed; +} + +/* Aktiv-Label für Neues Gerät */ +label.text-white { + color: white !important; +} + + +.checkbox-visible:not(:checked) { + accent-color: #dc3545; /* rot wenn unchecked */ +} +.checkbox-visible:disabled { + cursor: not-allowed; + opacity: 1; /* verhindert Ausgrauen */ +} + +.custom-actions { + gap: 0.5rem; /* horizontaler Abstand zwischen Buttons */ + margin: auto 0; + background: #fff; +} diff --git a/srv/poe_manager/templates/devices.html b/srv/poe_manager/templates/devices.html index 71f7539..f5d8d7d 100644 --- a/srv/poe_manager/templates/devices.html +++ b/srv/poe_manager/templates/devices.html @@ -3,22 +3,14 @@

Devices

-{% with messages = get_flashed_messages() %} - {% if messages %} -
- {% for message in messages %}{{ message }}
{% endfor %} -
- {% endif %} -{% endwith %} - {% if current_user.is_admin %}

Neues Gerät hinzufügen

-
-
-
-
+
+
+
+
+
+ + +
{% endif %} - +
- - - + + + - + + {% if current_user.is_admin %}{% endif %} {% for d in devices %} - {% if current_user.is_admin %} - - - + + + + - - + + {% if current_user.is_admin %} + + {% endif %} - {% else %} - - - - - - {% endif %} {% endfor %}
HostnameIP-AdresseMAC-AdresseHostnameIP-AdresseMAC-Adresse SwitchPortPortAktivAktionen
+ + + + + + - {% for sw in switches %} - + + + + + + + {{ d['name'] }}{{ d['rpi_ip'] }}{{ d['mac'] }}{{ d['switch_hostname'] }}{{ d['port'] }}
+ + {% endblock %}