Session Management (Noch leer)
Dieser Commit ist enthalten in:
@@ -86,6 +86,10 @@ def dashboard():
|
||||
""")
|
||||
active_licenses = cur.fetchone()[0]
|
||||
|
||||
# Aktive Sessions
|
||||
cur.execute("SELECT COUNT(*) FROM sessions WHERE is_active = TRUE")
|
||||
active_sessions_count = cur.fetchone()[0]
|
||||
|
||||
# Abgelaufene Lizenzen
|
||||
cur.execute("""
|
||||
SELECT COUNT(*) FROM licenses
|
||||
@@ -151,7 +155,8 @@ def dashboard():
|
||||
'full_licenses': license_types.get('full', 0),
|
||||
'test_licenses': license_types.get('test', 0),
|
||||
'recent_licenses': recent_licenses,
|
||||
'expiring_licenses': expiring_licenses
|
||||
'expiring_licenses': expiring_licenses,
|
||||
'active_sessions': active_sessions_count
|
||||
}
|
||||
|
||||
return render_template("dashboard.html", stats=stats, username=session.get('username'))
|
||||
@@ -478,5 +483,66 @@ def delete_customer(customer_id):
|
||||
|
||||
return redirect("/customers")
|
||||
|
||||
@app.route("/sessions")
|
||||
@login_required
|
||||
def sessions():
|
||||
conn = get_connection()
|
||||
cur = conn.cursor()
|
||||
|
||||
# Aktive Sessions abrufen
|
||||
cur.execute("""
|
||||
SELECT s.id, s.session_id, l.license_key, c.name, s.ip_address,
|
||||
s.user_agent, s.started_at, s.last_heartbeat,
|
||||
EXTRACT(EPOCH FROM (NOW() - s.last_heartbeat))/60 as minutes_inactive
|
||||
FROM sessions s
|
||||
JOIN licenses l ON s.license_id = l.id
|
||||
JOIN customers c ON l.customer_id = c.id
|
||||
WHERE s.is_active = TRUE
|
||||
ORDER BY s.last_heartbeat DESC
|
||||
""")
|
||||
active_sessions = cur.fetchall()
|
||||
|
||||
# Inaktive Sessions der letzten 24 Stunden
|
||||
cur.execute("""
|
||||
SELECT s.id, s.session_id, l.license_key, c.name, s.ip_address,
|
||||
s.started_at, s.ended_at,
|
||||
EXTRACT(EPOCH FROM (s.ended_at - s.started_at))/60 as duration_minutes
|
||||
FROM sessions s
|
||||
JOIN licenses l ON s.license_id = l.id
|
||||
JOIN customers c ON l.customer_id = c.id
|
||||
WHERE s.is_active = FALSE
|
||||
AND s.ended_at > NOW() - INTERVAL '24 hours'
|
||||
ORDER BY s.ended_at DESC
|
||||
LIMIT 50
|
||||
""")
|
||||
recent_sessions = cur.fetchall()
|
||||
|
||||
cur.close()
|
||||
conn.close()
|
||||
|
||||
return render_template("sessions.html",
|
||||
active_sessions=active_sessions,
|
||||
recent_sessions=recent_sessions,
|
||||
username=session.get('username'))
|
||||
|
||||
@app.route("/session/end/<int:session_id>", methods=["POST"])
|
||||
@login_required
|
||||
def end_session(session_id):
|
||||
conn = get_connection()
|
||||
cur = conn.cursor()
|
||||
|
||||
# Session beenden
|
||||
cur.execute("""
|
||||
UPDATE sessions
|
||||
SET is_active = FALSE, ended_at = NOW()
|
||||
WHERE id = %s AND is_active = TRUE
|
||||
""", (session_id,))
|
||||
|
||||
conn.commit()
|
||||
cur.close()
|
||||
conn.close()
|
||||
|
||||
return redirect("/sessions")
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run(host="0.0.0.0", port=443, ssl_context='adhoc')
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren