Source code for orka.startup.backend

# OrKa: Orchestrator Kit Agents
# Copyright © 2025 Marco Somma
#
# This file is part of OrKa – https://github.com/marcosomma/orka-resoning
#
# Licensed under the Apache License, Version 2.0 (Apache 2.0).
# You may not use this file for commercial purposes without explicit permission.
#
# Full license: https://www.apache.org/licenses/LICENSE-2.0
# For commercial use, contact: marcosomma.work@gmail.com
#
# Required attribution: OrKa by Marco Somma – https://github.com/marcosomma/orka-resoning

"""
Backend Server Management
========================

This module handles OrKa backend server startup and management.
"""

import logging
import subprocess
import sys

from .config import configure_backend_environment

logger = logging.getLogger(__name__)


[docs] def start_backend(backend: str) -> subprocess.Popen: """ Start the OrKa backend server as a separate process. This function launches the OrKa server module in a subprocess, allowing it to run independently while still being monitored by this parent process. Args: backend: The backend type ('redis', 'kafka', or 'dual') Returns: subprocess.Popen: The process object representing the running backend Raises: Exception: If the backend fails to start for any reason """ logger.info("Starting Orka backend...") try: # Prepare environment variables for the backend process env = configure_backend_environment(backend) # Start the backend server with configured environment backend_proc: subprocess.Popen = subprocess.Popen( [sys.executable, "-m", "orka.server"], env=env, ) logger.info("Orka backend started.") return backend_proc except Exception as e: logger.error(f"Error starting Orka backend: {e}") raise
[docs] def terminate_backend_process(backend_proc: subprocess.Popen) -> None: """ Gracefully terminate the backend process. Args: backend_proc: The backend process to terminate """ if backend_proc and backend_proc.poll() is None: # Process is still running print("🛑 Stopping backend process...") backend_proc.terminate() try: backend_proc.wait(timeout=5) print("✅ Backend stopped gracefully") except subprocess.TimeoutExpired: print("⚠️ Force killing backend process...") backend_proc.kill() backend_proc.wait()
[docs] def is_backend_running(backend_proc: subprocess.Popen) -> bool: """ Check if the backend process is still running. Args: backend_proc: The backend process to check Returns: bool: True if the process is running, False otherwise """ return backend_proc and backend_proc.poll() is None