Add modules/bgp_dampening.py
This commit is contained in:
parent
ca7c114937
commit
192a1ce9af
1 changed files with 70 additions and 0 deletions
70
modules/bgp_dampening.py
Normal file
70
modules/bgp_dampening.py
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
import collections.abc
|
||||
import re
|
||||
|
||||
def parse_dampened_data(raw_json_data, ip_version):
|
||||
dampened_paths = []
|
||||
summary_string = ""
|
||||
|
||||
if not raw_json_data or not raw_json_data.get("success") or "data" not in raw_json_data:
|
||||
return {"paths": [], "summary": "Displayed 0 routes and 0 total paths"}
|
||||
|
||||
text_data = raw_json_data["data"]
|
||||
|
||||
if not isinstance(text_data, str) or not text_data.strip():
|
||||
return {"paths": [], "summary": "Displayed 0 routes and 0 total paths"}
|
||||
|
||||
current_prefix = None
|
||||
lines = text_data.split('\n')
|
||||
|
||||
for line in lines:
|
||||
stripped_line = line.strip()
|
||||
|
||||
if stripped_line.startswith("Displayed"):
|
||||
summary_string = stripped_line
|
||||
continue
|
||||
|
||||
if not stripped_line or stripped_line.startswith("BGP table") or stripped_line.startswith("Default") or \
|
||||
stripped_line.startswith("Status codes") or stripped_line.startswith("Nexthop codes") or \
|
||||
stripped_line.startswith("Origin codes") or stripped_line.startswith("RPKI") or \
|
||||
"Network" in stripped_line:
|
||||
continue
|
||||
|
||||
parts = line.split()
|
||||
if len(parts) < 4:
|
||||
continue
|
||||
|
||||
path_info = {
|
||||
"metric": "N/A",
|
||||
"local_pref": "N/A",
|
||||
"weight": "N/A",
|
||||
"ip_version": ip_version
|
||||
}
|
||||
|
||||
is_new_prefix = '/' in parts[1]
|
||||
|
||||
try:
|
||||
if is_new_prefix:
|
||||
current_prefix = parts[1]
|
||||
path_info["status"] = parts[0]
|
||||
path_info["prefix"] = current_prefix
|
||||
path_info["from"] = parts[2]
|
||||
path_info["suppress_remain"] = parts[3]
|
||||
path_info["path"] = ' '.join(parts[4:])
|
||||
dampened_paths.append(path_info)
|
||||
elif current_prefix:
|
||||
path_info["status"] = parts[0]
|
||||
path_info["prefix"] = current_prefix
|
||||
path_info["from"] = parts[1]
|
||||
path_info["suppress_remain"] = parts[2]
|
||||
path_info["path"] = ' '.join(parts[3:])
|
||||
dampened_paths.append(path_info)
|
||||
except IndexError:
|
||||
continue
|
||||
|
||||
if not summary_string and not dampened_paths:
|
||||
summary_string = "Displayed 0 routes and 0 total paths"
|
||||
|
||||
return {"paths": dampened_paths, "summary": summary_string}
|
||||
|
||||
def generate_dampened_json(ipv4_data, ipv6_data):
|
||||
return {"ipv4": ipv4_data, "ipv6": ipv6_data}
|
||||
Loading…
Add table
Add a link
Reference in a new issue