1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#!/bin/env python3
import csv
import getopt
import os
import sys
NB_BARS = 20
output_format = "md"
def key_f (element: tuple[str, str, int, int, float, str]):
return element[3]
opts, args = getopt.getopt(sys.argv[1:], 'c')
for optname, optval in opts:
if optname == '-c':
output_format = "csv"
out = list[tuple[str, str, int, int, float, str]]()
asn_ln_map = dict[str, str]()
route_map = dict[str, set[str]]()
rpki_enabled_set = set[str]()
with open(args[0]) as f:
for line in f:
r = line.split('\t')
asn_ln_map[r[0].strip()] = r[1].strip()
with open(args[1]) as f:
for line in f:
r = line.split('\t')
asn = r[0].strip()
s = route_map.get(asn)
route_map[asn] = set[str](r[1].split())
with open(args[2]) as f:
for line in f:
rpki_enabled_set.add(line.strip())
for asn, v in route_map.items():
nb_total = len(v)
if nb_total == 0:
continue
nb_rpki_enabled = 0
for prefix in v:
if prefix in rpki_enabled_set:
nb_rpki_enabled += 1
localname = asn_ln_map.get(asn, '')
ratio = nb_rpki_enabled / nb_total
nb_i = int(NB_BARS * ratio)
nb_e = NB_BARS - nb_i
bars = '█' * nb_i + '▒' * nb_e
out.append(( asn, localname, nb_rpki_enabled, nb_total, ratio, bars ))
out.sort(key = key_f, reverse = True)
if output_format == 'md':
print(
'''| ASN | Name | RPKI | Total | % | Bars |
|-|-|-:|-:|-:|-|'''
)
for r in out:
print(
"| %s | %s | %d | %d | %.2f%% | %s |" %
( r[0], r[1], r[2], r[3], r[4] * 100, r[5] ))
elif output_format == 'csv':
w = csv.writer(sys.stdout)
w.writerow([ 'ASN', 'Name', 'RPKI', 'Total', '%' ])
for row in out:
w.writerow(row[:5])
else:
os.abort()
|