Update app.py

This commit is contained in:
Blackwhitebear8 2025-09-17 20:03:54 +02:00
parent 5115092072
commit d49e6d0f0c

72
app.py
View file

@ -5,6 +5,7 @@ import requests
import re
from jinja2 import Template
from flask import Flask, render_template_string, jsonify, url_for, redirect, render_template, request, abort
from datetime import datetime, timedelta
app = Flask(__name__)
@ -20,6 +21,7 @@ from modules.bfd import parse_bfd_peers_data
from modules.bgp_dampening import parse_dampened_data, generate_dampened_json
from modules.firewall import parse_firewall_data
from modules.visual_route import generate_visual_route_graph
from modules.database import get_peer_history, get_total_routes_history, get_unique_peers
@app.context_processor
def inject_hostname():
@ -310,4 +312,72 @@ def firewall_json():
return jsonify({"ipv4": ipv4_rulesets, "ipv6": ipv6_rulesets})
except Exception as e:
return jsonify({"error": "Failed to retrieve firewall data.", "details": str(e)}), 500
return jsonify({"error": "Failed to retrieve firewall data.", "details": str(e)}), 500
@app.route('/bgp/peer/<string:ip_version>/<path:neighbor_ip>/graph')
def bgp_peer_graph_page(ip_version, neighbor_ip):
if ip_version not in ['ipv4', 'ipv6']:
abort(404)
return render_template('bgp_peer_graph.html',
neighbor_ip=neighbor_ip,
ip_version=ip_version)
@app.route('/bgp/peer/<path:neighbor_ip>/history')
def bgp_peer_history_data(neighbor_ip):
time_range = request.args.get('range', '24h')
end_date = datetime.utcnow()
if time_range == '7d':
start_date = end_date - timedelta(days=7)
elif time_range == '30d':
start_date = end_date - timedelta(days=30)
elif time_range == '90d':
start_date = end_date - timedelta(days=90)
else:
start_date = end_date - timedelta(hours=24)
history_data = get_peer_history(neighbor_ip, start_date.isoformat(), end_date.isoformat())
labels = [item['timestamp'] for item in history_data]
received_data = [item['prefixes_received'] for item in history_data]
sent_data = [item['prefixes_sent'] for item in history_data]
return jsonify({
"labels": labels,
"received": received_data,
"sent": sent_data
})
@app.route('/bgp/history')
def history_page():
peers = get_unique_peers()
return render_template('history.html', peers=peers)
@app.route('/history/api/total-routes')
def total_routes_history_data():
time_range = request.args.get('range', '24h')
end_date = datetime.utcnow()
if time_range == '7d':
start_date = end_date - timedelta(days=7)
elif time_range == '30d':
start_date = end_date - timedelta(days=30)
else:
start_date = end_date - timedelta(hours=24)
history_data = get_total_routes_history(start_date.isoformat(), end_date.isoformat())
response_data = {
"labels": sorted(list(set([item['timestamp'] for item in history_data]))),
"ipv4_routes": [],
"ipv6_routes": []
}
ipv4_map = {item['timestamp']: item['total_routes'] for item in history_data if item['ip_version'] == 'ipv4'}
ipv6_map = {item['timestamp']: item['total_routes'] for item in history_data if item['ip_version'] == 'ipv6'}
for label in response_data["labels"]:
response_data["ipv4_routes"].append(ipv4_map.get(label, None))
response_data["ipv6_routes"].append(ipv6_map.get(label, None))
return jsonify(response_data)