#!/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