gateway/modules/workflows/automation/subAutomationSchedule.py

65 lines
2.3 KiB
Python

# Copyright (c) 2025 Patrick Motsch
# All rights reserved.
"""
Automation Lifecycle Manager.
Handles startup and shutdown of scheduled automations.
Note: This module is NOT for feature container lifecycle - it only manages
the automation scheduler (loading/syncing scheduled automation events).
"""
import logging
from modules.features.automation.mainAutomation import getAutomationServices
logger = logging.getLogger(__name__)
def start(eventUser) -> bool:
"""
Start automation scheduler and sync scheduled events.
All operations are synchronous (DB access, scheduler registration).
Args:
eventUser: System-level event user for background operations (provided by app.py)
"""
if not eventUser:
logger.warning("Automation: No event user provided, skipping automation sync")
return True
try:
from modules.workflows.automation import syncAutomationEvents
from modules.shared.callbackRegistry import callbackRegistry
# Get services for event user (provides access to interfaces)
services = getAutomationServices(eventUser, mandateId=None, featureInstanceId=None)
# Register callback for automation changes
def onAutomationChanged(chatInterface):
"""Callback triggered when automations are created/updated/deleted."""
eventServices = getAutomationServices(eventUser, mandateId=None, featureInstanceId=None)
syncAutomationEvents(eventServices, eventUser)
callbackRegistry.register('automation.changed', onAutomationChanged)
logger.info("Automation: Registered change callback")
# Initial sync on startup
syncAutomationEvents(services, eventUser)
logger.info("Automation: Scheduled events synced on startup")
except Exception as e:
logger.error(f"Automation: Error setting up events on startup: {str(e)}")
return False
return True
def stop(eventUser) -> bool:
"""
Stop automation scheduler.
Args:
eventUser: System-level event user (provided by app.py)
"""
# Callbacks will remain registered (acceptable for shutdown)
logger.info("Automation: Scheduler stopped (callbacks cleaned up on shutdown)")
return True