From 951151121b497c3557ada97a150c439049eb8792 Mon Sep 17 00:00:00 2001 From: Mika Date: Thu, 8 Jan 2026 14:34:02 +0000 Subject: [PATCH] Add cpu_pinning_analysis/src/cpu_pinning_analysis/cli.py --- .../src/cpu_pinning_analysis/cli.py | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 cpu_pinning_analysis/src/cpu_pinning_analysis/cli.py diff --git a/cpu_pinning_analysis/src/cpu_pinning_analysis/cli.py b/cpu_pinning_analysis/src/cpu_pinning_analysis/cli.py new file mode 100644 index 0000000..091e787 --- /dev/null +++ b/cpu_pinning_analysis/src/cpu_pinning_analysis/cli.py @@ -0,0 +1,38 @@ +import argparse +import json +from pathlib import Path +from cpu_pinning_analysis import core + + +def _load_json(path: Path): + if not path.exists() or not path.is_file(): + raise FileNotFoundError(f"Datei nicht gefunden: {path}") + with path.open("r", encoding="utf-8") as f: + try: + data = json.load(f) + except json.JSONDecodeError as e: + raise ValueError(f"Ungültige JSON-Datei: {path}: {e}") + if not isinstance(data, dict): + raise ValueError(f"JSON-Struktur erwartet ein Objekt: {path}") + return data + + +def main(): + parser = argparse.ArgumentParser(description="Analyse von Latenzen für pinned vs. unpinned vCPUs.") + parser.add_argument("--pinned", required=True, help="Pfad zur JSON-Datei der pinned CPU-Messwerte.") + parser.add_argument("--unpinned", required=True, help="Pfad zur JSON-Datei der unpinned CPU-Messwerte.") + args = parser.parse_args() + + pinned_path = Path(args.pinned) + unpinned_path = Path(args.unpinned) + + pinned_data = _load_json(pinned_path) + unpinned_data = _load_json(unpinned_path) + + result = core.analyze_latencies(pinned_data, unpinned_data) + + print(json.dumps(result, indent=2, ensure_ascii=False)) + + +if __name__ == "__main__": + main() \ No newline at end of file