File size: 2,200 Bytes
dc4e6da
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/bin/bash
set -e

echo "πŸš€ Starting DocGenie API + Worker..."
echo "============================================================"
echo "πŸ”§ Configuration:"
echo "   PORT: ${PORT:-7860}"
echo "   REDIS_URL: ${REDIS_URL:0:30}..."
echo "   ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:0:20}..."
echo "============================================================"

# Function to add prefix to logs
prefix_logs() {
    local prefix=$1
    while IFS= read -r line; do
        echo "[$prefix] $line"
    done
}

# Start API server in background with log prefix
echo "🌐 Starting FastAPI server..."
uvicorn api.main:app --host 0.0.0.0 --port ${PORT:-7860} 2>&1 | prefix_logs "API" &
API_PID=$!
echo "   PID: $API_PID"

# Give API a moment to start
sleep 2

# Start RQ worker in background with log prefix
# Use timestamp + random number to ensure unique worker name across deployments
WORKER_ID="docgenie-worker-$(date +%s)-${RANDOM}"
echo "πŸ‘· Starting RQ Worker..."
rq worker ${RQ_QUEUE_NAME:-docgenie} --url $REDIS_URL --name "$WORKER_ID" --verbose 2>&1 | prefix_logs "WORKER" &
WORKER_PID=$!
echo "   PID: $WORKER_PID"

echo "============================================================"
echo "βœ“ Both processes started successfully"
echo "   API: http://0.0.0.0:${PORT:-7860}"
echo "   Worker: Connected to Redis"
echo "============================================================"

# Function to handle shutdown
shutdown() {
    echo ""
    echo "πŸ›‘ Shutting down gracefully..."
    kill -TERM $API_PID 2>/dev/null || true
    kill -TERM $WORKER_PID 2>/dev/null || true
    wait $API_PID 2>/dev/null || true
    wait $WORKER_PID 2>/dev/null || true
    echo "βœ“ Shutdown complete"
    exit 0
}

# Trap SIGTERM and SIGINT
trap shutdown SIGTERM SIGINT

# Wait for both processes - if either exits, shutdown both
while kill -0 $API_PID 2>/dev/null && kill -0 $WORKER_PID 2>/dev/null; do
    sleep 1
done

# If we get here, one process died
echo ""
echo "❌ One of the processes exited unexpectedly"
if ! kill -0 $API_PID 2>/dev/null; then
    echo "   API process died (PID: $API_PID)"
fi
if ! kill -0 $WORKER_PID 2>/dev/null; then
    echo "   Worker process died (PID: $WORKER_PID)"
fi

shutdown