85 lines
1.9 KiB
Python
85 lines
1.9 KiB
Python
"""Rules main entry point."""
|
|
|
|
import logging
|
|
import signal
|
|
import sys
|
|
import time
|
|
from typing import NoReturn
|
|
|
|
from apscheduler.schedulers.background import BackgroundScheduler
|
|
|
|
# Configure logging
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
|
)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
# Global scheduler instance
|
|
scheduler: BackgroundScheduler | None = None
|
|
|
|
|
|
def rule_tick() -> None:
|
|
"""Example job that runs every minute.
|
|
|
|
This is a placeholder for actual rule evaluation logic.
|
|
"""
|
|
logger.info("Rule tick")
|
|
|
|
|
|
def shutdown_handler(signum: int, frame: object) -> NoReturn:
|
|
"""Handle shutdown signals gracefully.
|
|
|
|
Args:
|
|
signum: Signal number
|
|
frame: Current stack frame
|
|
"""
|
|
logger.info(f"Received signal {signum}, shutting down...")
|
|
if scheduler:
|
|
scheduler.shutdown(wait=True)
|
|
logger.info("Scheduler stopped")
|
|
sys.exit(0)
|
|
|
|
|
|
def main() -> None:
|
|
"""Run the rules application."""
|
|
global scheduler
|
|
|
|
logger.info("Rules engine starting...")
|
|
|
|
# Register signal handlers
|
|
signal.signal(signal.SIGINT, shutdown_handler)
|
|
signal.signal(signal.SIGTERM, shutdown_handler)
|
|
|
|
# Initialize scheduler
|
|
scheduler = BackgroundScheduler()
|
|
|
|
# Add example job - runs every minute
|
|
scheduler.add_job(
|
|
rule_tick,
|
|
'interval',
|
|
minutes=1,
|
|
id='rule_tick',
|
|
name='Rule Tick Job'
|
|
)
|
|
|
|
# Start scheduler
|
|
scheduler.start()
|
|
logger.info("Scheduler started with rule_tick job (every 1 minute)")
|
|
|
|
# Run initial tick immediately
|
|
rule_tick()
|
|
|
|
# Keep the application running
|
|
try:
|
|
while True:
|
|
time.sleep(1)
|
|
except KeyboardInterrupt:
|
|
logger.info("KeyboardInterrupt received, shutting down...")
|
|
scheduler.shutdown(wait=True)
|
|
logger.info("Scheduler stopped")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|