#!/bin/bash # Entrypoint script for Foxhunt HFT Trading System # Used only for development/testing - production runs on bare metal set -e # Function to wait for service availability wait_for_service() { local host=$1 local port=$2 local service=$3 echo "Waiting for $service at $host:$port..." while ! nc -z "$host" "$port"; do sleep 1 done echo "$service is ready!" } # Wait for required services if running in Docker if [ "$FOXHUNT_ENV" = "docker" ] || [ "$FOXHUNT_WAIT_FOR_SERVICES" = "true" ]; then # Parse DATABASE_URL if provided if [ -n "$DATABASE_URL" ]; then DB_HOST=$(echo "$DATABASE_URL" | sed -n 's/.*@\([^:]*\):.*/\1/p') DB_PORT=$(echo "$DATABASE_URL" | sed -n 's/.*:\([0-9]*\)\/.*/\1/p') wait_for_service "${DB_HOST:-postgres}" "${DB_PORT:-5432}" "PostgreSQL" fi # Wait for Redis if configured if [ -n "$REDIS_URL" ]; then REDIS_HOST=$(echo "$REDIS_URL" | sed -n 's/.*@\([^:]*\):.*/\1/p') REDIS_PORT=$(echo "$REDIS_URL" | sed -n 's/.*:\([0-9]*\).*/\1/p') wait_for_service "${REDIS_HOST:-redis}" "${REDIS_PORT:-6379}" "Redis" fi # Wait for InfluxDB if configured if [ -n "$INFLUXDB_URL" ]; then INFLUX_HOST=$(echo "$INFLUXDB_URL" | sed -n 's/.*\/\/\([^:]*\):.*/\1/p') INFLUX_PORT=$(echo "$INFLUXDB_URL" | sed -n 's/.*:\([0-9]*\).*/\1/p') wait_for_service "${INFLUX_HOST:-influxdb}" "${INFLUX_PORT:-8086}" "InfluxDB" fi fi # Run database migrations if enabled if [ "$FOXHUNT_RUN_MIGRATIONS" = "true" ]; then echo "Running database migrations..." # Migration command would go here echo "Migrations complete!" fi # Configure GPU if available and enabled if [ "$FOXHUNT_GPU_ENABLED" = "auto" ] || [ "$FOXHUNT_GPU_ENABLED" = "true" ]; then if command -v nvidia-smi > /dev/null 2>&1; then echo "GPU detected, configuring CUDA..." export CUDA_VISIBLE_DEVICES=${CUDA_VISIBLE_DEVICES:-0} nvidia-smi else echo "No GPU detected, running CPU-only mode" export FOXHUNT_GPU_ENABLED=false fi fi # Performance tuning for production if [ "$FOXHUNT_ENV" = "production" ]; then echo "Applying production performance tuning..." # Set CPU affinity if specified if [ -n "$FOXHUNT_CPU_AFFINITY" ]; then taskset -c "$FOXHUNT_CPU_AFFINITY" "$@" fi # Increase file descriptor limits ulimit -n 65536 # Set thread pool size based on CPU cores if not specified if [ "$FOXHUNT_THREAD_POOL_SIZE" = "0" ]; then export FOXHUNT_THREAD_POOL_SIZE=$(nproc) fi fi # Execute the main application echo "Starting Foxhunt HFT Trading System..." echo "Environment: $FOXHUNT_ENV" echo "HTTP Port: $FOXHUNT_HTTP_PORT" echo "gRPC Port: $FOXHUNT_GRPC_PORT" echo "GPU Enabled: $FOXHUNT_GPU_ENABLED" exec "$@"