Update app.py
This commit is contained in:
parent
5115092072
commit
d49e6d0f0c
1 changed files with 71 additions and 1 deletions
72
app.py
72
app.py
|
|
@ -5,6 +5,7 @@ import requests
|
||||||
import re
|
import re
|
||||||
from jinja2 import Template
|
from jinja2 import Template
|
||||||
from flask import Flask, render_template_string, jsonify, url_for, redirect, render_template, request, abort
|
from flask import Flask, render_template_string, jsonify, url_for, redirect, render_template, request, abort
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
app = Flask(__name__)
|
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.bgp_dampening import parse_dampened_data, generate_dampened_json
|
||||||
from modules.firewall import parse_firewall_data
|
from modules.firewall import parse_firewall_data
|
||||||
from modules.visual_route import generate_visual_route_graph
|
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
|
@app.context_processor
|
||||||
def inject_hostname():
|
def inject_hostname():
|
||||||
|
|
@ -310,4 +312,72 @@ def firewall_json():
|
||||||
|
|
||||||
return jsonify({"ipv4": ipv4_rulesets, "ipv6": ipv6_rulesets})
|
return jsonify({"ipv4": ipv4_rulesets, "ipv6": ipv6_rulesets})
|
||||||
except Exception as e:
|
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)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue