ajout du suivi utilisateur
This commit is contained in:
71
app.py
71
app.py
@@ -20,6 +20,7 @@ from werkzeug.security import check_password_hash, generate_password_hash
|
||||
from config_manager import ConfigManager
|
||||
from monitor import SystemMonitor
|
||||
from alerter import EmailAlerter
|
||||
from user_monitor import UserMonitor
|
||||
|
||||
# --- Init ---
|
||||
config = ConfigManager()
|
||||
@@ -53,6 +54,7 @@ login_manager.login_message = "Veuillez vous connecter."
|
||||
# Services
|
||||
alerter = EmailAlerter(config)
|
||||
monitor = SystemMonitor(config, alerter)
|
||||
user_monitor = UserMonitor(config)
|
||||
|
||||
|
||||
class AdminUser(UserMixin):
|
||||
@@ -312,6 +314,72 @@ def toggle_monitoring():
|
||||
return redirect(url_for("dashboard"))
|
||||
|
||||
|
||||
@app.route("/users")
|
||||
@login_required
|
||||
def users():
|
||||
return render_template("users.html")
|
||||
|
||||
|
||||
@app.route("/api/users")
|
||||
@login_required
|
||||
def api_users():
|
||||
cache = user_monitor.data
|
||||
if cache.get("error"):
|
||||
return jsonify({"error": cache["error"]})
|
||||
if cache.get("no_files"):
|
||||
return jsonify({"no_files": True})
|
||||
users_list = [
|
||||
{
|
||||
"login": u["login"],
|
||||
"status": u["status"],
|
||||
"last_action_time": u["last_action_time"].strftime("%H:%M:%S") if u.get("last_action_time") else None,
|
||||
"last_action_label": u.get("last_action_label", ""),
|
||||
"action_count_24h": u.get("action_count_24h", 0),
|
||||
"connected_since": u["connected_since"].strftime("%H:%M") if u.get("connected_since") else None,
|
||||
"explicit_logout": u.get("explicit_logout", False),
|
||||
}
|
||||
for u in cache.get("users", {}).values()
|
||||
]
|
||||
return jsonify({"users": users_list, "hourly": cache.get("hourly", [])})
|
||||
|
||||
|
||||
@app.route("/api/users/activity/weekly")
|
||||
@login_required
|
||||
def api_users_weekly():
|
||||
return jsonify({"weekly": user_monitor.get_weekly_activity()})
|
||||
|
||||
|
||||
@app.route("/settings/amadea-log-path", methods=["POST"])
|
||||
@login_required
|
||||
def update_amadea_log_path():
|
||||
path = request.form.get("amadea_log_path", "").strip()
|
||||
if not path:
|
||||
flash("Le chemin ne peut pas etre vide.", "danger")
|
||||
return redirect(url_for("settings"))
|
||||
config.set("amadea_log_path", path)
|
||||
flash("Chemin des logs Amadea mis a jour.", "success")
|
||||
return redirect(url_for("settings"))
|
||||
|
||||
|
||||
@app.route("/settings/user-thresholds", methods=["POST"])
|
||||
@login_required
|
||||
def update_user_thresholds():
|
||||
try:
|
||||
active = int(request.form["active_minutes"])
|
||||
inactive = int(request.form["inactive_minutes"])
|
||||
if active < 1 or inactive < 1:
|
||||
flash("Les seuils doivent etre d'au moins 1 minute.", "danger")
|
||||
return redirect(url_for("settings"))
|
||||
if active >= inactive:
|
||||
flash("Le seuil 'actif' doit etre inferieur au seuil 'inactif'.", "danger")
|
||||
return redirect(url_for("settings"))
|
||||
config.set("user_status_thresholds", {"active_minutes": active, "inactive_minutes": inactive})
|
||||
flash("Seuils utilisateurs mis a jour.", "success")
|
||||
except (ValueError, KeyError) as e:
|
||||
flash(f"Erreur: {e}", "danger")
|
||||
return redirect(url_for("settings"))
|
||||
|
||||
|
||||
def check_port_available(port):
|
||||
"""Verifie si un port est disponible."""
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
||||
@@ -341,6 +409,9 @@ def main():
|
||||
# Collecte initiale
|
||||
monitor.collect_metrics()
|
||||
|
||||
user_monitor.start()
|
||||
user_monitor.parse_logs()
|
||||
|
||||
print("[Supervision] Monitoring actif")
|
||||
|
||||
app.run(host="0.0.0.0", port=port, debug=False)
|
||||
|
||||
Reference in New Issue
Block a user