Organized the application into separate frontend and backend directories for cleaner deployment and better separation of concerns. Frontend Directory (frontend/): - index.html: Single-page web interface (renamed from web_ui.html) - README.md: Frontend deployment guide - Total size: ~113 KB (self-contained) - Smart base path detection (works at / or /ai_qc/) - No configuration changes required Backend Directory (backend/): - All Python files (api_server.py, llm_config.py, etc.) - visual_qc_apps/: 33 QC check modules - profiles/: 6 QC profile configurations - brand_guidelines/: Reference asset storage - config/: Environment configurations - scripts/: Deployment automation - uploads/, output/: Data directories - requirements.txt, ai_qc.service, apache_config.conf - Complete documentation New Documentation: - FOLDER_STRUCTURE.md: Comprehensive guide to new structure - frontend/README.md: Frontend deployment instructions - backend/BACKEND_README.md: Backend deployment guide Deployment Mapping: - frontend/ → /var/www/html/ai_qc/ (web root) - backend/ → /opt/ai_qc/ (application directory) Benefits: - Clear separation of concerns - Backend code not in web-accessible directory - Independent frontend/backend updates - Matches server's existing patterns (/opt/veo3, /opt/voice2text) - Industry-standard architecture - Easy to deploy and maintain Original files preserved in root directory for reference. Ready for production deployment following MIGRATION_GUIDE.md. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
167 lines
No EOL
4.7 KiB
Bash
Executable file
167 lines
No EOL
4.7 KiB
Bash
Executable file
#!/bin/bash
|
|
# Script to test the Visual AI QC system before deployment
|
|
|
|
set -e # Exit on any error
|
|
|
|
echo "==========================================="
|
|
echo " Visual AI QC - System Testing"
|
|
echo "==========================================="
|
|
|
|
# Get the script directory and app root
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
APP_DIR="$(dirname "$SCRIPT_DIR")"
|
|
|
|
echo "Testing directory: $APP_DIR"
|
|
|
|
# Change to app directory
|
|
cd "$APP_DIR"
|
|
|
|
# Determine Python command
|
|
if command -v python3 &> /dev/null; then
|
|
PYTHON_CMD=python3
|
|
elif command -v python &> /dev/null; then
|
|
PYTHON_CMD=python
|
|
else
|
|
echo "ERROR: Python not found!"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Using Python: $PYTHON_CMD"
|
|
|
|
# Test 1: Python syntax check
|
|
echo ""
|
|
echo "Test 1: Python syntax validation"
|
|
echo "================================"
|
|
find . -name "*.py" -not -path "./venv/*" | while read -r file; do
|
|
echo "Checking: $file"
|
|
$PYTHON_CMD -m py_compile "$file" || {
|
|
echo "ERROR: Syntax error in $file"
|
|
exit 1
|
|
}
|
|
done
|
|
echo "✅ All Python files have valid syntax"
|
|
|
|
# Test 2: Core module imports
|
|
echo ""
|
|
echo "Test 2: Core module imports"
|
|
echo "=========================="
|
|
$PYTHON_CMD -c "
|
|
try:
|
|
import api_server
|
|
import llm_config
|
|
import profile_config
|
|
import jwt_validator
|
|
import auth_middleware
|
|
print('✅ All core modules imported successfully')
|
|
except Exception as e:
|
|
print(f'ERROR: Core module import failed: {e}')
|
|
exit(1)
|
|
"
|
|
|
|
# Test 3: Profile system validation
|
|
echo ""
|
|
echo "Test 3: Profile system validation"
|
|
echo "================================="
|
|
$PYTHON_CMD -c "
|
|
from profile_config import get_profile
|
|
profiles = ['general_check', 'unilever_key_visual', 'unilever_packaging', 'diageo_key_visual', 'diageo_packaging', 'inclusive_accessibility']
|
|
for p in profiles:
|
|
try:
|
|
profile = get_profile(p)
|
|
enabled_checks = profile.get_enabled_checks()
|
|
print(f'✅ {profile.name} ({len(enabled_checks)} checks)')
|
|
except Exception as e:
|
|
print(f'ERROR: Profile {p} failed to load: {e}')
|
|
exit(1)
|
|
"
|
|
|
|
# Test 4: QC module validation
|
|
echo ""
|
|
echo "Test 4: QC module validation"
|
|
echo "============================"
|
|
$PYTHON_CMD -c "
|
|
import os
|
|
import importlib.util
|
|
import sys
|
|
|
|
qc_apps_dir = 'visual_qc_apps'
|
|
error_count = 0
|
|
|
|
for item in os.listdir(qc_apps_dir):
|
|
item_path = os.path.join(qc_apps_dir, item)
|
|
if os.path.isdir(item_path) and not item.startswith('__'):
|
|
app_file = os.path.join(item_path, 'app.py')
|
|
if os.path.exists(app_file):
|
|
try:
|
|
spec = importlib.util.spec_from_file_location(f'{item}.app', app_file)
|
|
module = importlib.util.module_from_spec(spec)
|
|
spec.loader.exec_module(module)
|
|
print(f'✅ {item}/app.py')
|
|
except Exception as e:
|
|
print(f'ERROR: {item}/app.py - {e}')
|
|
error_count += 1
|
|
|
|
if error_count > 0:
|
|
print(f'ERROR: {error_count} QC modules failed to load')
|
|
sys.exit(1)
|
|
else:
|
|
print(f'✅ All QC modules loaded successfully')
|
|
"
|
|
|
|
# Test 5: Configuration validation
|
|
echo ""
|
|
echo "Test 5: Configuration validation"
|
|
echo "==============================="
|
|
if [ ! -f "config.env" ] && [ ! -f "config/production.env" ] && [ ! -f "config/development.env" ]; then
|
|
echo "ERROR: No configuration files found!"
|
|
exit 1
|
|
fi
|
|
|
|
# Check for required environment variables
|
|
$PYTHON_CMD -c "
|
|
import os
|
|
from dotenv import load_dotenv
|
|
|
|
# Try to load any available config
|
|
if os.path.exists('config/development.env'):
|
|
load_dotenv('config/development.env')
|
|
elif os.path.exists('config/production.env'):
|
|
load_dotenv('config/production.env')
|
|
elif os.path.exists('config.env'):
|
|
load_dotenv('config.env')
|
|
|
|
required_vars = ['OPENAI_API_KEY', 'GOOGLE_API_KEY', 'AZURE_TENANT_ID', 'AZURE_CLIENT_ID']
|
|
missing_vars = []
|
|
|
|
for var in required_vars:
|
|
if not os.environ.get(var):
|
|
missing_vars.append(var)
|
|
|
|
if missing_vars:
|
|
print(f'ERROR: Missing required environment variables: {missing_vars}')
|
|
exit(1)
|
|
else:
|
|
print('✅ All required environment variables are set')
|
|
"
|
|
|
|
# Test 6: Brand guidelines database
|
|
echo ""
|
|
echo "Test 6: Brand guidelines database"
|
|
echo "================================"
|
|
$PYTHON_CMD -c "
|
|
try:
|
|
from brand_guidelines_db import BrandGuidelinesDB
|
|
brand_db = BrandGuidelinesDB()
|
|
brands = brand_db.get_all_brands()
|
|
print(f'✅ Brand guidelines database loaded ({len(brands)} brands)')
|
|
except Exception as e:
|
|
print(f'ERROR: Brand guidelines database failed: {e}')
|
|
exit(1)
|
|
"
|
|
|
|
# Final summary
|
|
echo ""
|
|
echo "==========================================="
|
|
echo "🎉 ALL TESTS PASSED!"
|
|
echo "The system is ready for deployment."
|
|
echo "===========================================" |