Ultima attività 1 month ago

nuno ha revisionato questo gist 1 month ago. Vai alla revisione

1 file changed, 42 insertions

gistfile1.txt(file creato)

@@ -0,0 +1,42 @@
1 + def rule_list_data(rules_dir, meta_dir):
2 + """Return all rule data including base rules and extends"""
3 + import glob
4 +
5 + # Count peers per rule from meta files
6 + rule_peer_counts = {}
7 + for f in glob.glob(f"{meta_dir}/*.meta"):
8 + try:
9 + with open(f) as mf:
10 + meta = json.load(mf)
11 + rule = meta.get('rule', '')
12 + if rule:
13 + rule_peer_counts[rule] = rule_peer_counts.get(rule, 0) + 1
14 + except:
15 + pass
16 +
17 + # Read all rules — both normal and base
18 + rule_files = (
19 + sorted(glob.glob(f"{rules_dir}/*.rule")) +
20 + sorted(glob.glob(f"{rules_dir}/base/*.rule"))
21 + )
22 +
23 + for rule_file in rule_files:
24 + is_base = '/base/' in rule_file
25 + try:
26 + with open(rule_file) as f:
27 + r = json.load(f)
28 + name = r.get('name', '')
29 + desc = r.get('desc', '')
30 + group = r.get('group', '')
31 + extends = ','.join(r.get('extends', []))
32 + # Use resolved rule for counts
33 + resolved = _rule_resolve_internal(rules_dir, name)
34 + n_allows = len(resolved.get('allow_ips', [])) + \
35 + len(resolved.get('allow_ports', []))
36 + n_blocks = len(resolved.get('block_ips', [])) + \
37 + len(resolved.get('block_ports', []))
38 + peer_count = rule_peer_counts.get(name, 0)
39 + rule_files_data.sort(key=lambda x: (x['is_base'], x['group'] == '', x['group'], x['name']))
40 + print(f"{name}|{desc}|{n_allows}|{n_blocks}|{peer_count}|{extends}|{is_base}|{group}")
41 + except:
42 + pass
Più nuovi Più vecchi