adding phase 5 init framework, added deployment ease scripts
This commit is contained in:
@@ -219,3 +219,105 @@ def edit_config(filename):
|
||||
logger.error(f"Error loading config for edit: {e}")
|
||||
flash(f"Error loading config: {str(e)}", 'error')
|
||||
return redirect(url_for('main.configs'))
|
||||
|
||||
|
||||
@bp.route('/alerts')
|
||||
@login_required
|
||||
def alerts():
|
||||
"""
|
||||
Alerts history page - shows all alerts.
|
||||
|
||||
Returns:
|
||||
Rendered alerts template
|
||||
"""
|
||||
from flask import request, current_app
|
||||
from web.models import Alert, AlertRule, Scan
|
||||
from web.utils.pagination import paginate
|
||||
|
||||
# Get query parameters for filtering
|
||||
page = request.args.get('page', 1, type=int)
|
||||
per_page = 20
|
||||
severity = request.args.get('severity')
|
||||
alert_type = request.args.get('alert_type')
|
||||
acknowledged = request.args.get('acknowledged')
|
||||
|
||||
# Build query
|
||||
query = current_app.db_session.query(Alert).join(Scan, isouter=True)
|
||||
|
||||
# Apply filters
|
||||
if severity:
|
||||
query = query.filter(Alert.severity == severity)
|
||||
if alert_type:
|
||||
query = query.filter(Alert.alert_type == alert_type)
|
||||
if acknowledged is not None:
|
||||
ack_bool = acknowledged == 'true'
|
||||
query = query.filter(Alert.acknowledged == ack_bool)
|
||||
|
||||
# Order by severity and date
|
||||
query = query.order_by(Alert.severity.desc(), Alert.created_at.desc())
|
||||
|
||||
# Paginate using utility function
|
||||
pagination = paginate(query, page=page, per_page=per_page)
|
||||
alerts = pagination.items
|
||||
|
||||
# Get unique alert types for filter dropdown
|
||||
try:
|
||||
alert_types = current_app.db_session.query(Alert.alert_type).distinct().all()
|
||||
alert_types = [at[0] for at in alert_types] if alert_types else []
|
||||
except Exception:
|
||||
alert_types = []
|
||||
|
||||
return render_template(
|
||||
'alerts.html',
|
||||
alerts=alerts,
|
||||
pagination=pagination,
|
||||
current_severity=severity,
|
||||
current_alert_type=alert_type,
|
||||
current_acknowledged=acknowledged,
|
||||
alert_types=alert_types
|
||||
)
|
||||
|
||||
|
||||
@bp.route('/alerts/rules')
|
||||
@login_required
|
||||
def alert_rules():
|
||||
"""
|
||||
Alert rules management page.
|
||||
|
||||
Returns:
|
||||
Rendered alert rules template
|
||||
"""
|
||||
import os
|
||||
from flask import current_app
|
||||
from web.models import AlertRule
|
||||
|
||||
# Get all alert rules with error handling
|
||||
try:
|
||||
rules = current_app.db_session.query(AlertRule).order_by(
|
||||
AlertRule.name.nullslast(),
|
||||
AlertRule.rule_type
|
||||
).all()
|
||||
except Exception as e:
|
||||
logger.error(f"Error fetching alert rules: {e}")
|
||||
rules = []
|
||||
|
||||
# Ensure rules is always a list
|
||||
if rules is None:
|
||||
rules = []
|
||||
|
||||
# Get list of available config files
|
||||
configs_dir = '/app/configs'
|
||||
config_files = []
|
||||
|
||||
try:
|
||||
if os.path.exists(configs_dir):
|
||||
config_files = [f for f in os.listdir(configs_dir) if f.endswith(('.yaml', '.yml'))]
|
||||
config_files.sort()
|
||||
except Exception as e:
|
||||
logger.error(f"Error listing config files: {e}")
|
||||
|
||||
return render_template(
|
||||
'alert_rules.html',
|
||||
rules=rules,
|
||||
config_files=config_files
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user