mirror of
https://github.com/awslabs/amazon-bedrock-agentcore-samples.git
synced 2025-09-08 20:50:46 +00:00
271 lines
6.8 KiB
Bash
Executable File
271 lines
6.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Integrated Start Script for AgentCore Code Interpreter
|
|
# Includes automatic setup if dependencies are missing
|
|
|
|
echo "🚀 AgentCore Code Interpreter - Starting Application"
|
|
echo "============================================================"
|
|
|
|
# Function to check if setup is needed
|
|
check_setup_needed() {
|
|
local setup_needed=false
|
|
|
|
# Check virtual environment
|
|
if [ ! -d "venv" ]; then
|
|
echo "📦 Virtual environment not found"
|
|
setup_needed=true
|
|
fi
|
|
|
|
# Check Python dependencies
|
|
if [ -d "venv" ]; then
|
|
source venv/bin/activate
|
|
if ! python -c "import strands, bedrock_agentcore, fastapi" 2>/dev/null; then
|
|
echo "📦 Python dependencies missing"
|
|
setup_needed=true
|
|
fi
|
|
deactivate 2>/dev/null || true
|
|
fi
|
|
|
|
# Check frontend dependencies
|
|
if [ ! -d "frontend/node_modules" ]; then
|
|
echo "📦 Frontend dependencies not found"
|
|
setup_needed=true
|
|
fi
|
|
|
|
# Check .env file
|
|
if [ ! -f ".env" ]; then
|
|
echo "⚙️ Configuration file (.env) not found"
|
|
setup_needed=true
|
|
fi
|
|
|
|
if [ "$setup_needed" = true ]; then
|
|
return 0 # Setup needed
|
|
else
|
|
return 1 # Setup not needed
|
|
fi
|
|
}
|
|
|
|
# Function to run setup
|
|
run_setup() {
|
|
echo "🔧 Running automatic setup..."
|
|
|
|
# Check if Python is installed
|
|
if ! command -v python3 &> /dev/null; then
|
|
echo "❌ Python 3 is required but not installed. Please install Python 3.8 or higher."
|
|
exit 1
|
|
fi
|
|
|
|
# Check if Node.js is installed
|
|
if ! command -v node &> /dev/null; then
|
|
echo "❌ Node.js is required but not installed. Please install Node.js 16 or higher."
|
|
exit 1
|
|
fi
|
|
|
|
# Create virtual environment for Python backend
|
|
if [ ! -d "venv" ]; then
|
|
echo "📦 Creating Python virtual environment..."
|
|
python3 -m venv venv
|
|
fi
|
|
|
|
source venv/bin/activate
|
|
|
|
# Install Python dependencies
|
|
echo "📦 Installing Python dependencies..."
|
|
pip install --upgrade pip -q
|
|
pip install -r requirements.txt -q
|
|
|
|
# Install Node.js dependencies for frontend
|
|
if [ ! -d "frontend/node_modules" ]; then
|
|
echo "📦 Installing Node.js dependencies..."
|
|
cd frontend
|
|
npm install --silent
|
|
cd ..
|
|
fi
|
|
|
|
# Create .env file if it doesn't exist
|
|
if [ ! -f .env ]; then
|
|
echo "⚙️ Creating .env file..."
|
|
if [ -f .env.example ]; then
|
|
cp .env.example .env
|
|
else
|
|
cat > .env << EOF
|
|
# AWS Configuration (choose one method)
|
|
AWS_PROFILE=default
|
|
AWS_REGION=us-east-1
|
|
|
|
# Application Configuration
|
|
BACKEND_HOST=0.0.0.0
|
|
BACKEND_PORT=8000
|
|
REACT_APP_API_URL=http://localhost:8000
|
|
EOF
|
|
fi
|
|
echo "📝 Please configure your AWS credentials in .env file"
|
|
fi
|
|
|
|
# Run setup verification
|
|
echo "✅ Verifying setup..."
|
|
if python tests/verify_setup.py > /dev/null 2>&1; then
|
|
echo "✅ Setup verification successful"
|
|
else
|
|
echo "⚠️ Setup verification had warnings (continuing anyway)"
|
|
fi
|
|
|
|
deactivate
|
|
echo "✅ Setup completed successfully"
|
|
}
|
|
|
|
# Function to check if backend is ready
|
|
check_backend() {
|
|
local max_attempts=30
|
|
local attempt=1
|
|
|
|
echo "🔍 Waiting for backend to be ready..."
|
|
|
|
while [ $attempt -le $max_attempts ]; do
|
|
if curl -s http://localhost:8000/health > /dev/null 2>&1; then
|
|
echo "✅ Backend is ready!"
|
|
return 0
|
|
fi
|
|
|
|
if [ $attempt -eq 1 ]; then
|
|
echo "⏳ Backend starting up..."
|
|
elif [ $((attempt % 5)) -eq 0 ]; then
|
|
echo "⏳ Still waiting... (${attempt}s)"
|
|
fi
|
|
|
|
sleep 2
|
|
attempt=$((attempt + 1))
|
|
done
|
|
|
|
echo "❌ Backend failed to start after 60 seconds"
|
|
echo "🔧 Check logs: tail -f backend.log"
|
|
echo "🔧 Run diagnostics: python tests/verify_setup.py"
|
|
return 1
|
|
}
|
|
|
|
# Function to start backend
|
|
start_backend() {
|
|
echo "🚀 Starting backend server..."
|
|
|
|
# Kill any existing backend processes
|
|
lsof -ti:8000 | xargs kill -9 2>/dev/null || true
|
|
sleep 2
|
|
|
|
# Start backend
|
|
(
|
|
source venv/bin/activate
|
|
cd backend
|
|
|
|
# Check if main.py exists
|
|
if [ ! -f "main.py" ]; then
|
|
echo "❌ backend/main.py not found"
|
|
exit 1
|
|
fi
|
|
|
|
# Start the backend with error logging
|
|
python main.py 2>&1 | tee ../backend.log &
|
|
BACKEND_PID=$!
|
|
echo $BACKEND_PID > ../backend.pid
|
|
echo "📝 Backend started with PID: $BACKEND_PID"
|
|
)
|
|
}
|
|
|
|
# Function to start frontend
|
|
start_frontend() {
|
|
echo "🚀 Starting frontend server..."
|
|
|
|
# Kill any existing frontend processes
|
|
lsof -ti:3000 | xargs kill -9 2>/dev/null || true
|
|
sleep 2
|
|
|
|
cd frontend
|
|
|
|
# Check if package.json exists
|
|
if [ ! -f "package.json" ]; then
|
|
echo "❌ frontend/package.json not found"
|
|
exit 1
|
|
fi
|
|
|
|
# Start the frontend
|
|
npm start 2>&1 | tee ../frontend.log &
|
|
FRONTEND_PID=$!
|
|
echo $FRONTEND_PID > ../frontend.pid
|
|
echo "📝 Frontend started with PID: $FRONTEND_PID"
|
|
cd ..
|
|
}
|
|
|
|
# Function to cleanup on exit
|
|
cleanup() {
|
|
echo ""
|
|
echo "🛑 Shutting down servers..."
|
|
|
|
# Kill backend
|
|
if [ -f backend.pid ]; then
|
|
BACKEND_PID=$(cat backend.pid)
|
|
kill $BACKEND_PID 2>/dev/null || true
|
|
rm -f backend.pid
|
|
fi
|
|
|
|
# Kill frontend
|
|
if [ -f frontend.pid ]; then
|
|
FRONTEND_PID=$(cat frontend.pid)
|
|
kill $FRONTEND_PID 2>/dev/null || true
|
|
rm -f frontend.pid
|
|
fi
|
|
|
|
# Kill any remaining processes on ports
|
|
lsof -ti:8000 | xargs kill -9 2>/dev/null || true
|
|
lsof -ti:3000 | xargs kill -9 2>/dev/null || true
|
|
|
|
echo "✅ Cleanup completed"
|
|
exit 0
|
|
}
|
|
|
|
# Set up signal handlers
|
|
trap cleanup SIGINT SIGTERM
|
|
|
|
# Main execution
|
|
main() {
|
|
# Check if setup is needed and run it
|
|
if check_setup_needed; then
|
|
echo "🔧 Setup required. Running automatic setup..."
|
|
run_setup
|
|
echo ""
|
|
else
|
|
echo "✅ Setup verified. Starting application..."
|
|
fi
|
|
|
|
# Start backend
|
|
start_backend
|
|
|
|
# Wait for backend to be ready
|
|
if ! check_backend; then
|
|
echo "❌ Cannot start frontend without backend"
|
|
cleanup
|
|
exit 1
|
|
fi
|
|
|
|
# Start frontend
|
|
start_frontend
|
|
|
|
echo ""
|
|
echo "🎉 Application started successfully!"
|
|
echo "📊 Backend: http://localhost:8000"
|
|
echo "🌐 Frontend: http://localhost:3000"
|
|
echo ""
|
|
echo "📋 Logs:"
|
|
echo " Backend: tail -f backend.log"
|
|
echo " Frontend: tail -f frontend.log"
|
|
echo ""
|
|
echo "Press Ctrl+C to stop the application"
|
|
echo ""
|
|
|
|
# Wait for user interrupt
|
|
while true; do
|
|
sleep 1
|
|
done
|
|
}
|
|
|
|
# Run main function
|
|
main
|