Start the background trigger daemon loop. Called from FastAPI startup.
()
| 286 | |
| 287 | |
| 288 | async def start_trigger_daemon(): |
| 289 | """Start the background trigger daemon loop. Called from FastAPI startup.""" |
| 290 | logger.info("⚡ Trigger Daemon started (15s tick, heartbeat every ~60s)") |
| 291 | _heartbeat_counter = 0 |
| 292 | while True: |
| 293 | try: |
| 294 | await _tick() |
| 295 | except Exception as e: |
| 296 | logger.error(f"Trigger Daemon error: {e}") |
| 297 | import traceback |
| 298 | traceback.print_exc() |
| 299 | |
| 300 | # Run heartbeat check every 4th tick (~60 seconds) |
| 301 | _heartbeat_counter += 1 |
| 302 | if _heartbeat_counter >= 4: |
| 303 | _heartbeat_counter = 0 |
| 304 | _cleanup_stale_invoke_cache() |
| 305 | try: |
| 306 | from app.services.heartbeat import _heartbeat_tick |
| 307 | await _heartbeat_tick() |
| 308 | except Exception as e: |
| 309 | logger.error(f"Heartbeat tick error: {e}") |
| 310 | |
| 311 | await asyncio.sleep(TICK_INTERVAL) |
no test coverage detected