SDR-Arena / scripts /start_services.sh
behavior-in-the-wild's picture
Deploy SDR-Arena leaderboard
f9e2361 verified
#!/bin/bash
# DR-Bench - Start WebSearch Service
#
# This starts the Brightdata-based WebSearch microservice needed
# for running benchmarks.
#
# Prerequisites:
# - Python 3.11+
# - Brightdata API token (set BRIGHTDATA_API_TOKEN in .env)
# - pip install -r services/websearch/requirements.txt
#
# Usage:
# ./scripts/start_services.sh # Start websearch service
# ./scripts/start_services.sh stop # Stop websearch service
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
# Colors
GREEN='\033[0;32m'
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m'
log() { echo -e "${BLUE}[$(date +'%H:%M:%S')]${NC} $1"; }
success() { echo -e "${GREEN}[$(date +'%H:%M:%S')] $1${NC}"; }
error() { echo -e "${RED}[$(date +'%H:%M:%S')] $1${NC}"; }
# Load .env
if [ -f "$PROJECT_ROOT/.env" ]; then
set -a
source "$PROJECT_ROOT/.env"
set +a
fi
WEBSEARCH_PORT=${WEBSEARCH_PORT:-8002}
PID_FILE="$PROJECT_ROOT/.websearch.pid"
LOG_FILE="$PROJECT_ROOT/logs/websearch.log"
start_websearch() {
log "Starting WebSearch service on port $WEBSEARCH_PORT..."
mkdir -p "$PROJECT_ROOT/logs" "$PROJECT_ROOT/data"
export WEBSEARCH_DB_PATH="$PROJECT_ROOT/data/websearch_cache.db"
cd "$PROJECT_ROOT/services/websearch"
nohup python -m uvicorn api:app --host 0.0.0.0 --port $WEBSEARCH_PORT > "$LOG_FILE" 2>&1 &
echo $! > "$PID_FILE"
sleep 2
if kill -0 $(cat "$PID_FILE") 2>/dev/null; then
success "WebSearch service started (PID: $(cat $PID_FILE))"
echo " URL: http://localhost:$WEBSEARCH_PORT"
echo " Docs: http://localhost:$WEBSEARCH_PORT/docs"
echo " Logs: $LOG_FILE"
else
error "WebSearch service failed to start. Check $LOG_FILE"
exit 1
fi
}
stop_websearch() {
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if kill -0 $PID 2>/dev/null; then
kill $PID
rm "$PID_FILE"
success "WebSearch service stopped (PID: $PID)"
else
rm "$PID_FILE"
log "WebSearch service was not running"
fi
else
log "No PID file found"
fi
}
status_websearch() {
if [ -f "$PID_FILE" ] && kill -0 $(cat "$PID_FILE") 2>/dev/null; then
success "WebSearch: Running (PID: $(cat $PID_FILE)) on port $WEBSEARCH_PORT"
else
error "WebSearch: Not running"
fi
}
case "${1:-start}" in
start) start_websearch ;;
stop) stop_websearch ;;
restart) stop_websearch; sleep 1; start_websearch ;;
status) status_websearch ;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac