From db253fb29c201a9e88a6c9cf0dc2820fe3a92223 Mon Sep 17 00:00:00 2001 From: Mika Date: Sun, 5 Apr 2026 13:56:51 +0000 Subject: [PATCH] Add logging_tool/src/logging_tool/cli.py --- logging_tool/src/logging_tool/cli.py | 67 ++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 logging_tool/src/logging_tool/cli.py diff --git a/logging_tool/src/logging_tool/cli.py b/logging_tool/src/logging_tool/cli.py new file mode 100644 index 0000000..c1501c8 --- /dev/null +++ b/logging_tool/src/logging_tool/cli.py @@ -0,0 +1,67 @@ +import argparse +import sys +import datetime +from pathlib import Path + +from logging_tool import core + + +def _parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser( + description="CLI zur Aufnahme von Preflight-Messwerten und deren Logging." + ) + parser.add_argument("--timestamp", required=True, help="Zeitstempel des Versuchs (ISO8601).") + parser.add_argument("--measured_p", type=float, required=True, help="Gemessener Druckwert.") + parser.add_argument("--freeze_ok", required=True, help="Boolean, ob der Wert im Freeze-Bereich liegt (true/false).") + parser.add_argument("--setup_fingerprint", required=True, help="Fingerabdruck der Konfiguration.") + parser.add_argument("--policy_hash", required=True, help="Policy-Konfigurationshash.") + return parser.parse_args() + + +def _parse_boolean(value: str) -> bool: + lower_value = value.strip().lower() + if lower_value in {"true", "1", "yes", "y"}: + return True + if lower_value in {"false", "0", "no", "n"}: + return False + raise ValueError(f"Ungültiger Bool-Wert für freeze_ok: {value}") + + +def _parse_timestamp(value: str) -> datetime.datetime: + try: + # Unterstützt ISO8601-Formate + return datetime.datetime.fromisoformat(value.replace("Z", "+00:00")) + except ValueError as exc: + raise ValueError(f"Ungültiger Zeitstempel: {value}") from exc + + +def main() -> None: + args = _parse_args() + + try: + timestamp = _parse_timestamp(args.timestamp) + measured_p: float = args.measured_p + freeze_ok: bool = _parse_boolean(args.freeze_ok) + setup_fingerprint: str = args.setup_fingerprint + policy_hash: str = args.policy_hash + except Exception as err: + print(f"Eingabefehler: {err}", file=sys.stderr) + sys.exit(2) + + try: + core.log_preflight_attempt( + timestamp=timestamp, + measured_p=measured_p, + freeze_ok=freeze_ok, + setup_fingerprint=setup_fingerprint, + policy_hash=policy_hash, + ) + except Exception as err: + print(f"Fehler beim Logging: {err}", file=sys.stderr) + sys.exit(1) + else: + print("Preflight-Versuch erfolgreich geloggt.") + + +if __name__ == "__main__": + main()