From 95127b4826359f9f09d698c9f1c9e619aa0226aa Mon Sep 17 00:00:00 2001 From: Mika Date: Sat, 28 Mar 2026 16:47:35 +0000 Subject: [PATCH] Add 1_interferenz_metrics_parser/src/interferenz_metrics_parser/cli.py --- .../src/interferenz_metrics_parser/cli.py | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 1_interferenz_metrics_parser/src/interferenz_metrics_parser/cli.py diff --git a/1_interferenz_metrics_parser/src/interferenz_metrics_parser/cli.py b/1_interferenz_metrics_parser/src/interferenz_metrics_parser/cli.py new file mode 100644 index 0000000..948e246 --- /dev/null +++ b/1_interferenz_metrics_parser/src/interferenz_metrics_parser/cli.py @@ -0,0 +1,51 @@ +import argparse +import json +from pathlib import Path +import sys +from typing import Any + +from interferenz_metrics_parser.core import parse_interference_logs + +def main() -> None: + """CLI Entry point for Interference Metrics Parser. + + Parses command-line arguments, invokes the parsing core, and outputs JSON to stdout. + """ + parser = argparse.ArgumentParser( + description="Parst eine Log-Datei mit Interferenzdaten und gibt strukturierte Metriken als JSON aus." + ) + parser.add_argument( + "--input", + required=True, + help="Pfad zur JSON-Logdatei mit Interferenzdaten.", + type=str, + ) + + args = parser.parse_args() + log_file_path = Path(args.input) + + # Input validation + if not log_file_path.exists(): + print(f"Fehler: Datei nicht gefunden: {log_file_path}", file=sys.stderr) + sys.exit(1) + if not log_file_path.is_file(): + print(f"Fehler: Pfad ist keine Datei: {log_file_path}", file=sys.stderr) + sys.exit(1) + + try: + parsed_data = parse_interference_logs(str(log_file_path)) + except Exception as exc: # noqa: BLE001 - allgemeine Fehlermeldung für CLI + print(f"Fehler beim Verarbeiten der Datei: {exc}", file=sys.stderr) + sys.exit(1) + + # Convert data models to JSON-compatible structures + def to_json_obj(item: Any) -> Any: + if hasattr(item, "__dict__"): + return item.__dict__ + return item + + json_output = json.dumps([to_json_obj(item) for item in parsed_data], indent=2, ensure_ascii=False) + print(json_output) + +if __name__ == "__main__": + main()