Files
Redflag/docs/4_LOG/November_2025/implementation/HYBRID_HEARTBEAT_IMPLEMENTATION.md

1.9 KiB

Hybrid Heartbeat Implementation

Status: Partially Implemented (Simplification Needed)

Problem: Heartbeat mode bypasses regular check-in flow, preventing scheduled scans from running.

Current State:

  • Agent in heartbeat mode (every 5 seconds)
  • Scheduler loads 0 jobs (because it processes jobs during regular check-ins)
  • 4 subsystems configured: enabled=true, auto_run=true, interval=5 minutes
  • Jobs are 14+ minutes overdue but not being created

Root Cause: Heartbeat endpoint only updates status, doesn't trigger command creation like regular check-ins.

Changes Made:

  1. Added scheduler field to AgentHandler struct
  2. Added scheduler import to agents.go
  3. Updated NewAgentHandler to accept scheduler parameter
  4. Added checkAndCreateScheduledCommands() method
  5. Added createSubsystemCommand() method
  6. Modified GetCommands to call scheduled commands during heartbeat
  7. Updated main.go to pass scheduler to AgentHandler

Build Issues:

  • Handler initialization order conflicts (agentHandler used before scheduler created)
  • Over-engineered implementation violates "less is more" principle

Next Steps: Simplify to use existing GetDueSubsystems() method directly without passing scheduler around.

Key Files Modified:

  • /aggregator-server/internal/api/handlers/agents.go
  • /aggregator-server/cmd/server/main.go

Logging Format:

[Heartbeat] Created X scheduled commands for agent UUID
[Heartbeat] Failed to create command for subsystem: error
[Heartbeat] Failed to update next run time: error

Design Principles:

  • Reuses existing safeguards (backpressure, rate limiting, idempotency)
  • Only triggers during heartbeat mode (rapid polling enabled)
  • Errors logged but don't fail requests (enhancement, not core functionality)

Implementation follows DEVELOPMENT_ETHOS.md principles - errors logged, security maintained, resilient design.