main_sentinel.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import time
  2. import json
  3. import argparse
  4. from vs_types import GroupConfig
  5. from gco_wrapper import GCOWrapper
  6. from sentinel import SentinelGCO
  7. from logger_setup import setup_app_logger
  8. def load_config(path: str):
  9. with open(path, "r", encoding="utf-8") as f:
  10. return json.load(f)
  11. def main():
  12. # ===== 1️⃣ 命令行参数 =====
  13. parser = argparse.ArgumentParser(description="Sentinel Runner")
  14. parser.add_argument(
  15. "-c", "--config",
  16. type=str,
  17. required=False,
  18. default="config/config.json",
  19. help="Path to config.json"
  20. )
  21. args = parser.parse_args()
  22. # ===== 2️⃣ logger =====
  23. app_logger = setup_app_logger("Sentinel")
  24. app_logger.info("Sentinel Logger is ready! All VSC macros are hooked.")
  25. # ===== 3️⃣ 读取配置 =====
  26. cfg_data = load_config(args.config)
  27. redis_conf = cfg_data.get('redis')
  28. groups_conf = cfg_data.get('group_list')
  29. wrappers = []
  30. # ===== 4️⃣ 启动 groups =====
  31. for item in groups_conf:
  32. cfg = GroupConfig.from_json(item)
  33. if not cfg.enable:
  34. app_logger.info(f"Group [{cfg.identifier}] is disabled. Skipping.")
  35. continue
  36. app_logger.info(f"Starting wrapper for group [{cfg.identifier}]...")
  37. wrapper = GCOWrapper(
  38. gco_class=SentinelGCO,
  39. gco_cfg=cfg,
  40. redis_conf=redis_conf
  41. )
  42. wrapper.load()
  43. wrapper.start()
  44. wrappers.append(wrapper)
  45. app_logger.info(
  46. f"Successfully started {len(wrappers)} Sentinel groups. Press Ctrl+C to stop."
  47. )
  48. # ===== 5️⃣ keep alive =====
  49. try:
  50. while True:
  51. time.sleep(1)
  52. except KeyboardInterrupt:
  53. app_logger.info("Shutting down Sentinels...")
  54. for wrapper in wrappers:
  55. wrapper.stop()
  56. if __name__ == "__main__":
  57. main()