cli.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. from __future__ import annotations
  2. import argparse
  3. import json
  4. import logging
  5. from supply_infra.pipeline.reconciler import PipelineReconciler, reconcile_once
  6. from supply_infra.pipeline.run_service import (
  7. get_pipeline_run,
  8. submit_pipeline_run,
  9. )
  10. from supply_infra.pipeline.worker import PipelineWorker
  11. def _parser() -> argparse.ArgumentParser:
  12. parser = argparse.ArgumentParser(description="SupplyAgent durable pipeline control")
  13. sub = parser.add_subparsers(dest="command", required=True)
  14. submit = sub.add_parser("submit")
  15. submit.add_argument("--biz-dt")
  16. submit.add_argument("--reason")
  17. inspect = sub.add_parser("inspect")
  18. inspect.add_argument("--run-id", required=True)
  19. sub.add_parser("worker")
  20. sub.add_parser("reconciler")
  21. sub.add_parser("reconcile-once")
  22. return parser
  23. def main() -> None:
  24. logging.basicConfig(
  25. level=logging.INFO,
  26. format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
  27. )
  28. args = _parser().parse_args()
  29. if args.command == "submit":
  30. result = submit_pipeline_run(
  31. biz_dt=args.biz_dt,
  32. trigger_type="cli",
  33. trigger_source="cli",
  34. trigger_reason=args.reason,
  35. ).to_dict()
  36. print(json.dumps(result, ensure_ascii=False))
  37. return
  38. if args.command == "inspect":
  39. result = get_pipeline_run(args.run_id)
  40. print(json.dumps(result, ensure_ascii=False, default=str))
  41. raise SystemExit(0 if result is not None else 1)
  42. if args.command == "worker":
  43. PipelineWorker().run_forever()
  44. return
  45. if args.command == "reconciler":
  46. PipelineReconciler().run_forever()
  47. return
  48. print(json.dumps(reconcile_once(), ensure_ascii=False))
  49. if __name__ == "__main__":
  50. main()