Setup json du BPM
This commit is contained in:
parent
d1e7e67bde
commit
3c4744eefd
2 changed files with 1287 additions and 0 deletions
1151
bpm/life-noc.json
Normal file
1151
bpm/life-noc.json
Normal file
File diff suppressed because it is too large
Load diff
136
scripts/generate_bpm.py
Executable file
136
scripts/generate_bpm.py
Executable file
|
|
@ -0,0 +1,136 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
from pathlib import Path
|
||||
import json
|
||||
import re
|
||||
import sys
|
||||
import yaml
|
||||
|
||||
|
||||
INPUT_FILE = Path("domains.yaml")
|
||||
OUTPUT_DIR = Path("bpm")
|
||||
OUTPUT_FILE = OUTPUT_DIR / "life-noc.json"
|
||||
HOST_NAME = "life-noc"
|
||||
|
||||
|
||||
def slugify(value: str) -> str:
|
||||
value = value.strip().lower()
|
||||
replacements = {
|
||||
"à": "a", "â": "a", "ä": "a",
|
||||
"ç": "c",
|
||||
"é": "e", "è": "e", "ê": "e", "ë": "e",
|
||||
"î": "i", "ï": "i",
|
||||
"ô": "o", "ö": "o",
|
||||
"ù": "u", "û": "u", "ü": "u",
|
||||
"ÿ": "y",
|
||||
"œ": "oe",
|
||||
"æ": "ae",
|
||||
"'": "",
|
||||
"’": "",
|
||||
}
|
||||
for old, new in replacements.items():
|
||||
value = value.replace(old, new)
|
||||
value = re.sub(r"[^a-z0-9\-]+", "-", value)
|
||||
value = re.sub(r"-{2,}", "-", value)
|
||||
return value.strip("-")
|
||||
|
||||
|
||||
def build_service_name(domain_slug: str, item_name: str) -> str:
|
||||
return f"{domain_slug}-{item_name.strip()}"
|
||||
|
||||
|
||||
def make_leaf_node(service_name: str) -> dict:
|
||||
return {
|
||||
"type": "service",
|
||||
"host": HOST_NAME,
|
||||
"service": service_name
|
||||
}
|
||||
|
||||
|
||||
def make_domain_process(domain_label: str, domain_slug: str, services: list[dict]) -> dict:
|
||||
leaves = []
|
||||
for item in services:
|
||||
service_name = build_service_name(domain_slug, item["name"])
|
||||
leaves.append(make_leaf_node(service_name))
|
||||
|
||||
return {
|
||||
"name": domain_label.upper(),
|
||||
"operator": "worst",
|
||||
"nodes": leaves
|
||||
}
|
||||
|
||||
|
||||
def main() -> int:
|
||||
if not INPUT_FILE.exists():
|
||||
print(f"Erreur: fichier introuvable: {INPUT_FILE}", file=sys.stderr)
|
||||
return 1
|
||||
|
||||
with INPUT_FILE.open("r", encoding="utf-8") as f:
|
||||
data = yaml.safe_load(f)
|
||||
|
||||
if not isinstance(data, dict) or "domains" not in data:
|
||||
print("Erreur: le YAML doit contenir une clé racine 'domains'.", file=sys.stderr)
|
||||
return 1
|
||||
|
||||
domains = data["domains"]
|
||||
if not isinstance(domains, dict):
|
||||
print("Erreur: 'domains' doit être un objet YAML.", file=sys.stderr)
|
||||
return 1
|
||||
|
||||
processes = []
|
||||
root_nodes = []
|
||||
|
||||
for raw_domain, services in domains.items():
|
||||
if not isinstance(services, list):
|
||||
print(f"Erreur: le domaine '{raw_domain}' doit contenir une liste.", file=sys.stderr)
|
||||
return 1
|
||||
|
||||
for idx, item in enumerate(services, start=1):
|
||||
if not isinstance(item, dict):
|
||||
print(f"Erreur: entrée invalide dans '{raw_domain}' à la position {idx}.", file=sys.stderr)
|
||||
return 1
|
||||
missing = [key for key in ("name", "date", "notes") if key not in item]
|
||||
if missing:
|
||||
print(
|
||||
f"Erreur: dans le domaine '{raw_domain}', entrée {idx}, champs manquants: {', '.join(missing)}",
|
||||
file=sys.stderr,
|
||||
)
|
||||
return 1
|
||||
|
||||
domain_slug = slugify(str(raw_domain))
|
||||
domain_label = str(raw_domain)
|
||||
|
||||
domain_process = make_domain_process(domain_label, domain_slug, services)
|
||||
processes.append(domain_process)
|
||||
|
||||
root_nodes.append({
|
||||
"type": "process",
|
||||
"name": domain_label.upper()
|
||||
})
|
||||
|
||||
root_process = {
|
||||
"name": "LIFE-NOC",
|
||||
"operator": "worst",
|
||||
"nodes": root_nodes
|
||||
}
|
||||
|
||||
bpm_document = {
|
||||
"version": 1,
|
||||
"processes": [root_process] + processes
|
||||
}
|
||||
|
||||
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
|
||||
with OUTPUT_FILE.open("w", encoding="utf-8") as f:
|
||||
json.dump(bpm_document, f, ensure_ascii=False, indent=2)
|
||||
|
||||
print(f"BPM généré: {OUTPUT_FILE}")
|
||||
print("Processus générés :")
|
||||
print(" - LIFE-NOC")
|
||||
for raw_domain in domains.keys():
|
||||
print(f" - {str(raw_domain).upper()}")
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Loading…
Reference in a new issue