Files
foxhunt/scripts/start.sh
2026-03-04 22:08:31 +01:00

144 lines
4.8 KiB
Bash
Executable File

#!/bin/bash
# Foxhunt HFT Trading System - Complete System Startup
# Starts 3 standalone services + databases as per FXT_PLAN.md architecture
set -euo pipefail
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${GREEN}🦊 Starting Foxhunt HFT Trading System${NC}"
echo "===================================================="
echo "Architecture: FXT CLI → 3 Standalone Services → Docker Databases"
echo ""
# Function to check if a port is available
check_port() {
local port=$1
if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null; then
return 1
else
return 0
fi
}
# Function to wait for service to be ready
wait_for_service() {
local service_name=$1
local port=$2
local max_attempts=30
local attempt=0
echo -e "${YELLOW}⏳ Waiting for $service_name on port $port...${NC}"
while [ $attempt -lt $max_attempts ]; do
if nc -z localhost $port 2>/dev/null; then
echo -e "${GREEN}$service_name is ready${NC}"
return 0
fi
attempt=$((attempt + 1))
sleep 2
done
echo -e "${RED}$service_name failed to start on port $port${NC}"
return 1
}
# Step 1: Start Docker databases
echo -e "${BLUE}🗄️ Starting Docker databases...${NC}"
if ! command -v docker-compose >/dev/null 2>&1 && ! command -v docker >/dev/null 2>&1; then
echo -e "${RED}❌ Docker/docker-compose not found. Please install Docker.${NC}"
exit 1
fi
# Use docker compose (newer) or docker-compose (older)
DOCKER_COMPOSE_CMD="docker compose"
if ! command -v docker >/dev/null 2>&1 || ! docker compose version >/dev/null 2>&1; then
DOCKER_COMPOSE_CMD="docker-compose"
fi
echo "Starting databases with $DOCKER_COMPOSE_CMD..."
$DOCKER_COMPOSE_CMD up -d
# Wait for databases to be ready
echo -e "${YELLOW}⏳ Waiting for databases to initialize...${NC}"
sleep 15
# Step 2: Set environment variables for database connections
export DATABASE_URL="postgresql://trading_service:trading_dev_password@localhost:5432/foxhunt"
export BACKTESTING_DATABASE_URL="postgresql://backtesting_service:backtesting_dev_password@localhost:5432/foxhunt_backtesting"
export ML_DATABASE_URL="postgresql://ml_service:ml_dev_password@localhost:5432/foxhunt_ml_training"
export REDIS_URL="redis://localhost:6379"
export INFLUXDB_URL="http://localhost:8086"
export RUST_LOG="info"
# Step 3: Check ports and stop conflicting services
echo -e "${BLUE}🔍 Checking service ports...${NC}"
TRADING_PORT=50051
BACKTESTING_PORT=50052
ML_TRAINING_PORT=50053
# Kill any existing services
pkill -f "trading-service" || true
pkill -f "backtesting-service" || true
pkill -f "ml-training-service" || true
sleep 2
# Step 4: Build and start the 3 standalone services
echo -e "${BLUE}🏗️ Building services...${NC}"
if ! cargo build --release --bin trading-service --bin backtesting-service -p ml_training_service; then
echo -e "${RED}❌ Failed to build services. Check compilation errors.${NC}"
exit 1
fi
echo -e "${GREEN}✅ Services built successfully${NC}"
# Step 5: Start services in background
echo -e "${BLUE}🚀 Starting standalone services...${NC}"
# Start Trading Service (port 50051)
echo "📈 Starting Trading Service..."
cargo run --release --bin trading-service &
TRADING_PID=$!
echo $TRADING_PID > .trading-service.pid
# Start Backtesting Service (port 50052)
echo "🔄 Starting Backtesting Service..."
cargo run --release -p backtesting_service &
BACKTESTING_PID=$!
echo $BACKTESTING_PID > .backtesting-service.pid
# Start ML Training Service (port 50053)
echo "🧠 Starting ML Training Service..."
cargo run --release -p ml_training_service &
ML_TRAINING_PID=$!
echo $ML_TRAINING_PID > .ml-training-service.pid
# Step 6: Wait for all services to be ready
echo -e "${YELLOW}⏳ Waiting for services to start...${NC}"
wait_for_service "Trading Service" $TRADING_PORT
wait_for_service "Backtesting Service" $BACKTESTING_PORT
wait_for_service "ML Training Service" $ML_TRAINING_PORT
# Step 7: Display system status
echo -e "${GREEN}🎉 Foxhunt HFT System is running!${NC}"
echo ""
echo "System Architecture:"
echo "├── Trading Service: localhost:$TRADING_PORT (PID: $TRADING_PID)"
echo "├── Backtesting Service: localhost:$BACKTESTING_PORT (PID: $BACKTESTING_PID)"
echo "├── ML Training Service: localhost:$ML_TRAINING_PORT (PID: $ML_TRAINING_PID)"
echo "└── Databases: PostgreSQL(5432), InfluxDB(8086), Redis(6379)"
echo ""
echo "To start FXT CLI: cargo run --release -p fxt"
echo "To stop system: ./stop.sh"
echo "To view logs: docker logs foxhunt-postgres"
echo ""
echo -e "${GREEN}System ready for FXT connection!${NC}"
# Keep services running and handle shutdown
trap 'echo -e "\n${YELLOW}🛑 Shutting down services...${NC}"; ./stop.sh; exit 0' INT
echo "Press Ctrl+C to stop all services and databases"
wait