16 lines
990 B
Python
16 lines
990 B
Python
#!/usr/bin/env python3
|
|
import sys,yaml,glob
|
|
out=sys.argv[1]
|
|
patterns=["monitoring/prometheus/rules/**/*.yml","monitoring/prometheus/rules/**/*.yaml","**/prometheus/rules/**/*.yml","**/prometheus/rules/**/*.yaml"]
|
|
files=sorted({f for p in patterns for f in glob.glob(p,recursive=True)})
|
|
lines=["# Prometheus Rules","", "| File | Group | Alert | Expr | For | Labels | Annotations |","|---|---|---|---|---|---|---|"]
|
|
if not files:
|
|
open(out,'w').write("# Prometheus Rules\n\nNo Prometheus rule files were found.\n"); sys.exit(0)
|
|
for fp in files:
|
|
try:data=yaml.safe_load(open(fp)) or {}
|
|
except Exception as e: raise SystemExit(f"Malformed YAML in {fp}: {e}")
|
|
for g in data.get('groups',[]) or []:
|
|
for r in g.get('rules',[]) or []:
|
|
lines.append(f"| {fp} | {g.get('name','')} | {r.get('alert','')} | {str(r.get('expr','')).replace('|','\\|')} | {r.get('for','')} | {r.get('labels',{})} | {r.get('annotations',{})} |")
|
|
open(out,'w').write('\n'.join(lines)+'\n')
|