diff --git a/artifact_1_bandwidth_analysis/src/artifact_1_bandwidth_analysis/cli.py b/artifact_1_bandwidth_analysis/src/artifact_1_bandwidth_analysis/cli.py new file mode 100644 index 0000000..cc9ed6a --- /dev/null +++ b/artifact_1_bandwidth_analysis/src/artifact_1_bandwidth_analysis/cli.py @@ -0,0 +1,49 @@ +import argparse +import json +from pathlib import Path +from typing import Any + +from artifact_1_bandwidth_analysis.core import analyze_bandwidth + + +def _load_json(path: Path) -> list[dict[str, Any]]: + if not path.exists(): + raise FileNotFoundError(f"Eingabedatei nicht gefunden: {path}") + with path.open('r', encoding='utf-8') as f: + data = json.load(f) + if not isinstance(data, list): + raise ValueError(f"Erwartete eine JSON-Liste in {path}") + for entry in data: + if not isinstance(entry, dict): + raise ValueError(f"Ungültiger Eintrag in {path}, erwartet dict, bekam {type(entry)}") + if 'worker_id' not in entry or 'timestamp' not in entry: + raise ValueError(f"Fehlende Felder in Eintrag: {entry}") + return data + + +def main() -> None: + parser = argparse.ArgumentParser(description="Analyse der Bandbreite und des Bandzentrums für Affinitätsmodi.") + parser.add_argument("--enforced", required=True, help="Pfad zur JSON-Datei mit Daten im enforced-Modus.") + parser.add_argument("--randomized", required=True, help="Pfad zur JSON-Datei mit Daten im randomized-Modus.") + parser.add_argument("--out", required=False, help="Pfad zur Ausgabe-JSON-Datei.") + + args = parser.parse_args() + + path_enforced = Path(args.enforced) + path_randomized = Path(args.randomized) + path_out = Path(args.out) if args.out else Path("output/band_analysis_result.json") + + data_enforced = _load_json(path_enforced) + data_randomized = _load_json(path_randomized) + + result = analyze_bandwidth(data_enforced, data_randomized) + + path_out.parent.mkdir(parents=True, exist_ok=True) + with path_out.open('w', encoding='utf-8') as f: + json.dump(result, f, indent=2) + + print(f"Analyse abgeschlossen. Ergebnisse gespeichert unter: {path_out}") + + +if __name__ == "__main__": + main()