annator-command-center / scripts /legacy /start_backend_old.py
techprotrade's picture
Deploy ATOM FastAPI command center runtime (part 6)
383cb38 verified
Raw
History Blame Contribute Delete
5.26 kB
#!/usr/bin/env python3
"""
ATOM Platform Backend Startup Script
Simplified, reliable startup with proper error handling
"""
import os
from pathlib import Path
import signal
import subprocess
import sys
import time
def check_python_version():
"""Check if Python version is compatible"""
if sys.version_info < (3, 8):
print("❌ Python 3.8 or higher is required")
print(f" Current version: {sys.version}")
return False
print(f"✅ Python version: {sys.version.split()[0]}")
return True
def check_required_packages():
"""Check if required packages are installed"""
required_packages = [
'fastapi',
'uvicorn',
'requests',
'pydantic'
]
missing_packages = []
for package in required_packages:
try:
__import__(package)
except ImportError:
missing_packages.append(package)
if missing_packages:
print("❌ Missing required packages:")
for package in missing_packages:
print(f" - {package}")
print("\nInstall with: pip install fastapi uvicorn requests pydantic")
return False
print("✅ Required packages installed")
return True
def check_environment():
"""Check environment variables"""
env_vars = {
'DATABASE_URL': 'sqlite:///atom_data.db',
'SECRET_KEY': 'atom-dev-secret-key',
'DEBUG': 'true'
}
for var, default in env_vars.items():
if not os.getenv(var):
os.environ[var] = default
print("✅ Environment variables configured")
return True
def setup_directories():
"""Create necessary directories"""
directories = [
'./data',
'./data/atom_memory',
'./logs',
'./temp'
]
for directory in directories:
Path(directory).mkdir(parents=True, exist_ok=True)
print("✅ Directories created")
return True
def check_backend_file():
"""Check if main backend file exists"""
backend_file = './main_api_app.py'
if not Path(backend_file).exists():
print(f"❌ Backend file not found: {backend_file}")
return False
print("✅ Backend file found")
return True
def start_backend():
"""Start the backend server"""
print("\n🚀 Starting ATOM Backend...")
# Import after checking dependencies
try:
from main_api_app import app
import uvicorn
# Configuration
host = os.getenv('HOST', '0.0.0.0')
port = int(os.getenv('PORT', '5058'))
debug = os.getenv('DEBUG', 'false').lower() == 'true'
print(f" Host: {host}")
print(f" Port: {port}")
print(f" Debug: {debug}")
# Start server
config = uvicorn.Config(
app=app,
host=host,
port=port,
log_level="info" if not debug else "debug",
reload=debug
)
server = uvicorn.Server(config)
# Setup signal handlers
def signal_handler(sig, frame):
print("\n🛑 Shutting down backend...")
server.should_exit = True
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
print(f"✅ Backend starting at http://{host}:{port}")
print(" API Documentation: http://{host}:{port}/docs")
print(" Press Ctrl+C to stop")
server.run()
except ImportError as e:
print(f"❌ Failed to import backend: {e}")
return False
except Exception as e:
print(f"❌ Failed to start backend: {e}")
return False
return True
def show_startup_info():
"""Show startup information"""
print("\n🔧 ATOM Platform Backend")
print("=" * 40)
print("📍 Current Directory: {}".format(os.getcwd()))
print("🐍 Python Path: {}".format(sys.executable))
# Show config info
db_url = os.getenv('DATABASE_URL', 'sqlite:///atom_data.db')
port = os.getenv('PORT', '5058')
debug = os.getenv('DEBUG', 'false')
print("⚙️ Configuration:")
print(f" Database: {db_url}")
print(f" Port: {port}")
print(f" Debug: {debug}")
def main():
"""Main startup function"""
print("🌟 ATOM Platform Backend Starting...")
# Pre-startup checks
checks = [
("Python Version", check_python_version),
("Required Packages", check_required_packages),
("Environment", check_environment),
("Directories", setup_directories),
("Backend File", check_backend_file)
]
all_passed = True
for check_name, check_func in checks:
print(f"\n🔍 Checking {check_name}...")
if not check_func():
all_passed = False
break
if not all_passed:
print("\n❌ Startup checks failed. Please fix the issues above.")
sys.exit(1)
# Show startup info
show_startup_info()
# Start backend
if not start_backend():
print("\n❌ Backend startup failed.")
sys.exit(1)
print("\n✅ Backend stopped gracefully.")
if __name__ == "__main__":
main()