Add report_generator/src/report_generator/cli.py
This commit is contained in:
parent
339b75d473
commit
62fa3e2966
1 changed files with 60 additions and 0 deletions
60
report_generator/src/report_generator/cli.py
Normal file
60
report_generator/src/report_generator/cli.py
Normal file
|
|
@ -0,0 +1,60 @@
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
from pathlib import Path
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from report_generator.core import generate_report
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
"""CLI entrypoint: loads drift metrics, invokes report generation, and stores the output."""
|
||||||
|
parser = argparse.ArgumentParser(description="Generate a CI drift analysis report.")
|
||||||
|
parser.add_argument(
|
||||||
|
"--input",
|
||||||
|
required=True,
|
||||||
|
help="Pfad zur JSON-Datei mit aggregierten Drift-Check-Ergebnissen.",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--threshold",
|
||||||
|
required=False,
|
||||||
|
type=float,
|
||||||
|
default=0.3,
|
||||||
|
help="WARN-Schwelle (Standard: 0.3).",
|
||||||
|
)
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
input_path = Path(args.input)
|
||||||
|
if not input_path.exists() or not input_path.is_file():
|
||||||
|
raise FileNotFoundError(f"Eingabedatei nicht gefunden: {input_path}")
|
||||||
|
|
||||||
|
# Load JSON with input validation
|
||||||
|
with input_path.open("r", encoding="utf-8") as f:
|
||||||
|
try:
|
||||||
|
data = json.load(f)
|
||||||
|
except json.JSONDecodeError as e:
|
||||||
|
raise ValueError(f"Ungültiges JSON-Format: {e}")
|
||||||
|
|
||||||
|
required_fields = ["warn_count", "total_runs"]
|
||||||
|
for field in required_fields:
|
||||||
|
if field not in data:
|
||||||
|
raise KeyError(f"Fehlendes Feld '{field}' in Eingabedatei.")
|
||||||
|
if not isinstance(data[field], int):
|
||||||
|
raise TypeError(f"Feld '{field}' muss vom Typ int sein, erhalten: {type(data[field])}.")
|
||||||
|
|
||||||
|
warn_count = data["warn_count"]
|
||||||
|
total_runs = data["total_runs"]
|
||||||
|
|
||||||
|
if total_runs <= 0:
|
||||||
|
raise ValueError("total_runs muss größer als 0 sein.")
|
||||||
|
|
||||||
|
threshold = args.threshold
|
||||||
|
|
||||||
|
report_path = generate_report(warn_count, total_runs, threshold)
|
||||||
|
|
||||||
|
# Optional: echo summary info
|
||||||
|
print(f"Bericht generiert: {report_path}")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Loading…
Reference in a new issue