Update app.py
This commit is contained in:
parent
5115092072
commit
d49e6d0f0c
1 changed files with 71 additions and 1 deletions
70
app.py
70
app.py
|
|
@ -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():
|
||||
|
|
@ -311,3 +313,71 @@ 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
|
||||
|
||||
@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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue