Files
Code_of_Conquest/api/scripts/start_workers.sh
2025-11-24 23:10:55 -06:00

99 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
# RQ Worker Startup Script
#
# This script starts RQ workers for processing background jobs.
# Workers listen on configured queues in priority order.
#
# Usage:
# ./scripts/start_workers.sh # Start all-queue worker
# ./scripts/start_workers.sh ai # Start AI-only worker
# ./scripts/start_workers.sh combat # Start combat-only worker
# ./scripts/start_workers.sh marketplace # Start marketplace-only worker
#
# Environment Variables:
# REDIS_URL - Redis connection URL (default: redis://localhost:6379/0)
# LOG_LEVEL - Logging level (default: INFO)
# WORKER_COUNT - Number of workers to start (default: 1)
set -e
# Change to API directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
API_DIR="$(dirname "$SCRIPT_DIR")"
cd "$API_DIR"
# Load environment variables if .env exists
if [ -f .env ]; then
export $(grep -v '^#' .env | xargs)
fi
# Default configuration
REDIS_URL="${REDIS_URL:-redis://localhost:6379/0}"
LOG_LEVEL="${LOG_LEVEL:-INFO}"
WORKER_COUNT="${WORKER_COUNT:-1}"
# Determine which queues to listen on
WORKER_TYPE="${1:-all}"
case "$WORKER_TYPE" in
ai)
QUEUES="ai_tasks"
WORKER_NAME="ai-worker"
;;
combat)
QUEUES="combat_tasks"
WORKER_NAME="combat-worker"
;;
marketplace)
QUEUES="marketplace_tasks"
WORKER_NAME="marketplace-worker"
;;
all|*)
QUEUES="ai_tasks,combat_tasks,marketplace_tasks"
WORKER_NAME="all-queues-worker"
;;
esac
echo "=========================================="
echo "Starting RQ Worker"
echo "=========================================="
echo "Worker Type: $WORKER_TYPE"
echo "Worker Name: $WORKER_NAME"
echo "Queues: $QUEUES"
echo "Redis URL: ${REDIS_URL//:*@/:***@}"
echo "Log Level: $LOG_LEVEL"
echo "Worker Count: $WORKER_COUNT"
echo "=========================================="
# Activate virtual environment if it exists
if [ -d "venv" ]; then
echo "Activating virtual environment..."
source venv/bin/activate
fi
# Start workers
if [ "$WORKER_COUNT" -eq 1 ]; then
# Single worker
echo "Starting single worker..."
exec rq worker \
--url "$REDIS_URL" \
--name "$WORKER_NAME" \
--logging_level "$LOG_LEVEL" \
--with-scheduler \
$QUEUES
else
# Multiple workers (use supervisord or run in background)
echo "Starting $WORKER_COUNT workers..."
for i in $(seq 1 $WORKER_COUNT); do
rq worker \
--url "$REDIS_URL" \
--name "${WORKER_NAME}-${i}" \
--logging_level "$LOG_LEVEL" \
$QUEUES &
echo "Started worker ${WORKER_NAME}-${i} (PID: $!)"
done
echo "All workers started. Press Ctrl+C to stop."
wait
fi