Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| """ | |
| Universal Health Check Script | |
| Monitors the health of the deployed application across different platforms | |
| """ | |
| import requests | |
| import time | |
| import sys | |
| import os | |
| from urllib.parse import urlparse | |
| def check_health(url, timeout=30, retries=3): | |
| """Check if the service is healthy""" | |
| print(f"π Checking health at: {url}") | |
| for attempt in range(retries): | |
| try: | |
| response = requests.get(url, timeout=timeout) | |
| if response.status_code == 200: | |
| print(f"β Service is healthy (attempt {attempt + 1})") | |
| return True | |
| else: | |
| print(f"β οΈ Service returned status {response.status_code} (attempt {attempt + 1})") | |
| except requests.exceptions.RequestException as e: | |
| print(f"β Health check failed: {e} (attempt {attempt + 1})") | |
| if attempt < retries - 1: | |
| print(f"β³ Retrying in 5 seconds...") | |
| time.sleep(5) | |
| return False | |
| def detect_platform(): | |
| """Detect the current deployment platform""" | |
| if os.getenv('RAILWAY_ENVIRONMENT'): | |
| return 'railway' | |
| elif os.getenv('RENDER_EXTERNAL_URL'): | |
| return 'render' | |
| elif os.getenv('HEROKU_APP_NAME'): | |
| return 'heroku' | |
| elif os.getenv('HF_SPACES'): | |
| return 'huggingface' | |
| elif os.path.exists('/.dockerenv'): | |
| return 'docker' | |
| else: | |
| return 'local' | |
| def get_health_urls(): | |
| """Get health check URLs based on platform""" | |
| platform = detect_platform() | |
| print(f"π Detected platform: {platform}") | |
| urls = [] | |
| if platform == 'railway': | |
| # Railway provides environment variable for external URL | |
| external_url = os.getenv('RAILWAY_STATIC_URL') or os.getenv('RAILWAY_PUBLIC_DOMAIN') | |
| if external_url: | |
| urls.append(f"https://{external_url}") | |
| urls.append("http://localhost:8501") | |
| elif platform == 'render': | |
| external_url = os.getenv('RENDER_EXTERNAL_URL') | |
| if external_url: | |
| urls.append(external_url) | |
| urls.append("http://localhost:8501") | |
| elif platform == 'heroku': | |
| app_name = os.getenv('HEROKU_APP_NAME') | |
| if app_name: | |
| urls.append(f"https://{app_name}.herokuapp.com") | |
| urls.append("http://localhost:8501") | |
| elif platform == 'huggingface': | |
| # HF Spaces URL pattern | |
| space_id = os.getenv('SPACE_ID') | |
| if space_id: | |
| urls.append(f"https://{space_id}.hf.space") | |
| urls.append("http://localhost:7860") # HF Spaces default port | |
| elif platform == 'docker': | |
| urls.append("http://localhost:8501") | |
| urls.append("http://localhost:8001/health") # Backend health | |
| else: # local | |
| urls.append("http://localhost:8501") | |
| urls.append("http://localhost:8001/health") # Backend if running | |
| return urls | |
| def main(): | |
| """Main health check function""" | |
| print("=" * 50) | |
| print("π₯ Multi-Lingual Catalog Translator Health Check") | |
| print("=" * 50) | |
| urls = get_health_urls() | |
| if not urls: | |
| print("β No health check URLs found") | |
| sys.exit(1) | |
| all_healthy = True | |
| for url in urls: | |
| if not check_health(url): | |
| all_healthy = False | |
| print(f"β Failed: {url}") | |
| else: | |
| print(f"β Healthy: {url}") | |
| print("-" * 30) | |
| if all_healthy: | |
| print("π All services are healthy!") | |
| sys.exit(0) | |
| else: | |
| print("π₯ Some services are unhealthy!") | |
| sys.exit(1) | |
| if __name__ == "__main__": | |
| main() | |