Add 1_interferenz_metrics_parser/src/interferenz_metrics_parser/cli.py

This commit is contained in:
Mika 2026-03-28 16:47:35 +00:00
parent 377877040a
commit 95127b4826

View file

@ -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()