"""Logs centralises des watchdogs.""" from flask import Blueprint, render_template, request, jsonify from flask_login import login_required from app_new.extensions import db from app_new.core.models.maintenance import WatchdogLog logs_bp = Blueprint('logs', __name__, url_prefix='/logs', template_folder='templates') @logs_bp.route('/') @login_required def index(): """Page de logs centralises.""" page = request.args.get('page', 1, type=int) per_page = 100 level = request.args.get('level', '') watchdog = request.args.get('watchdog', '') query = WatchdogLog.query if level: query = query.filter_by(level=level) if watchdog: query = query.filter_by(watchdog_name=watchdog) pagination = query.order_by(WatchdogLog.created_at.desc()).paginate( page=page, per_page=per_page, error_out=False ) watchdogs = db.session.query(WatchdogLog.watchdog_name).distinct().order_by(WatchdogLog.watchdog_name).all() watchdogs = [w[0] for w in watchdogs] return render_template('logs/index.html', pagination=pagination, watchdogs=watchdogs, filters={'level': level, 'watchdog': watchdog}) @logs_bp.route('/api/recent') @login_required def api_recent(): """API JSON des logs recents.""" limit = min(request.args.get('limit', 50, type=int), 500) level = request.args.get('level', '') watchdog = request.args.get('watchdog', '') query = WatchdogLog.query if level: query = query.filter_by(level=level) if watchdog: query = query.filter_by(watchdog_name=watchdog) logs = query.order_by(WatchdogLog.created_at.desc()).limit(limit).all() return jsonify([{ 'id': log.id, 'watchdog_name': log.watchdog_name, 'level': log.level, 'message': log.message, 'created_at': log.created_at.isoformat() if log.created_at else None } for log in logs])