fix: improve health check validation with retries and diagnostics

- Add retry logic (up to 15 attempts over 30 seconds)
- Add comprehensive diagnostics on failure
- Test endpoint from inside container to isolate networking issues
- Show recent logs if health check fails
- Better error messages for troubleshooting
This commit is contained in:
2025-10-31 13:58:20 -04:00
parent 357e561b1f
commit cfa2428393

View File

@@ -172,23 +172,60 @@ echo ""
# Step 6: Test health endpoint # Step 6: Test health endpoint
echo "Step 6: Testing health endpoint..." echo "Step 6: Testing health endpoint..."
# Wait a bit more for API to be ready # Wait for API to be ready with retries
sleep 5 echo "Waiting for API to be ready (up to 30 seconds)..."
MAX_RETRIES=15
RETRY_COUNT=0
API_READY=false
if curl -f http://localhost:8080/health &> /dev/null; then while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
if curl -f -s http://localhost:8080/health &> /dev/null; then
API_READY=true
break
fi
RETRY_COUNT=$((RETRY_COUNT + 1))
echo " Attempt $RETRY_COUNT/$MAX_RETRIES..."
sleep 2
done
if [ "$API_READY" = true ]; then
print_status 0 "Health endpoint responding" print_status 0 "Health endpoint responding"
# Get health details # Get health details
HEALTH_DATA=$(curl -s http://localhost:8080/health) HEALTH_DATA=$(curl -s http://localhost:8080/health)
echo "Health response: $HEALTH_DATA" echo "Health response: $HEALTH_DATA"
else else
print_status 1 "Health endpoint not responding" print_status 1 "Health endpoint not responding after $MAX_RETRIES attempts"
print_warning "This could indicate:" print_warning "Diagnostics:"
echo " - API server failed to start"
echo " - Port 8080 is already in use" # Check if container is still running
echo " - MCP services failed to initialize" if docker ps | grep -q ai-trader; then
echo " ✓ Container is running"
else
echo " ✗ Container has stopped"
fi
# Check if port is listening
if docker exec ai-trader netstat -tuln 2>/dev/null | grep -q ":8080"; then
echo " ✓ Port 8080 is listening inside container"
else
echo " ✗ Port 8080 is NOT listening inside container"
fi
# Try curl from inside container
echo " Testing from inside container..."
INTERNAL_TEST=$(docker exec ai-trader curl -f -s http://localhost:8080/health 2>&1)
if [ $? -eq 0 ]; then
echo " ✓ Health endpoint works inside container: $INTERNAL_TEST"
echo " ✗ Issue is with port mapping or host networking"
else
echo " ✗ Health endpoint doesn't work inside container: $INTERNAL_TEST"
echo " ✗ API server may not have started correctly"
fi
echo "" echo ""
echo "Check logs with: docker logs ai-trader" echo "Recent logs:"
docker logs ai-trader 2>&1 | tail -20
fi fi
echo "" echo ""