#!/usr/bin/env python3 """ Скрипт для быстрой диагностики всех сервисов NIN Excel Parsers """ import requests import subprocess import sys from pathlib import Path def check_port(port, service_name): """Проверка доступности порта""" try: import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) result = sock.connect_ex(('localhost', port)) sock.close() if result == 0: print(f"✅ Порт {port} ({service_name}) - ОТКРЫТ") return True else: print(f"❌ Порт {port} ({service_name}) - ЗАКРЫТ") return False except Exception as e: print(f"❌ Ошибка проверки порта {port}: {e}") return False def check_service(url, service_name): """Проверка доступности HTTP сервиса""" try: response = requests.get(url, timeout=3) if response.status_code == 200: print(f"✅ {service_name} ({url}) - ДОСТУПЕН") return True else: print(f"⚠️ {service_name} ({url}) - ОТВЕЧАЕТ, но статус {response.status_code}") return True except requests.exceptions.ConnectionError: print(f"❌ {service_name} ({url}) - НЕ ДОСТУПЕН (Connection Error)") return False except requests.exceptions.Timeout: print(f"⚠️ {service_name} ({url}) - ТАЙМАУТ") return False except Exception as e: print(f"❌ {service_name} ({url}) - ОШИБКА: {e}") return False def check_docker(): """Проверка Docker""" try: result = subprocess.run(["docker", "--version"], capture_output=True, text=True) if result.returncode == 0: print(f"✅ Docker: {result.stdout.strip()}") return True else: print("❌ Docker не работает") return False except FileNotFoundError: print("❌ Docker не установлен") return False except Exception as e: print(f"❌ Ошибка проверки Docker: {e}") return False def check_docker_containers(): """Проверка Docker контейнеров""" try: result = subprocess.run(["docker", "ps"], capture_output=True, text=True) if result.returncode == 0: if "minio" in result.stdout.lower(): print("✅ MinIO контейнер запущен") return True else: print("⚠️ MinIO контейнер не найден") return False else: print("❌ Не удалось проверить Docker контейнеры") return False except Exception as e: print(f"❌ Ошибка проверки контейнеров: {e}") return False def check_python_packages(): """Проверка Python пакетов""" required_packages = ['fastapi', 'streamlit', 'pandas', 'minio', 'uvicorn'] missing_packages = [] print("\n🔍 Проверка Python пакетов:") for package in required_packages: try: __import__(package) print(f"✅ {package}") except ImportError: print(f"❌ {package}") missing_packages.append(package) if missing_packages: print(f"\n⚠️ Отсутствуют пакеты: {', '.join(missing_packages)}") print("Установите: pip install -r requirements.txt") return False return True def main(): """Основная функция диагностики""" print("🔍 ДИАГНОСТИКА NIN Excel Parsers API") print("=" * 50) # Проверка Python пакетов packages_ok = check_python_packages() print("\n🔍 Проверка Docker:") docker_ok = check_docker() if docker_ok: containers_ok = check_docker_containers() else: containers_ok = False print("\n🔍 Проверка портов:") port_8000_ok = check_port(8000, "FastAPI") port_8501_ok = check_port(8501, "Streamlit") port_9000_ok = check_port(9000, "MinIO API") port_9001_ok = check_port(9001, "MinIO Console") print("\n🔍 Проверка HTTP сервисов:") fastapi_ok = check_service("http://localhost:8000/", "FastAPI") streamlit_ok = check_service("http://localhost:8501/", "Streamlit") minio_console_ok = check_service("http://localhost:9001/", "MinIO Console") print("\n" + "=" * 50) print("📊 РЕЗУЛЬТАТЫ ДИАГНОСТИКИ:") print("=" * 50) # Подсчет результатов total_checks = 8 passed_checks = sum([ packages_ok, docker_ok, containers_ok, port_8000_ok, port_8501_ok, port_9000_ok, port_9001_ok, fastapi_ok ]) print(f"✅ Пройдено: {passed_checks}/{total_checks}") if passed_checks == total_checks: print("\n🎉 Все сервисы работают корректно!") print("📍 Доступные URL:") print(" • Streamlit: http://localhost:8501") print(" • FastAPI: http://localhost:8000") print(" • API Docs: http://localhost:8000/docs") print(" • MinIO: http://localhost:9001") else: print(f"\n⚠️ Проблемы обнаружены в {total_checks - passed_checks} сервисах") if not packages_ok: print("\n🔧 РЕШЕНИЕ: Установите зависимости") print("pip install -r requirements.txt") if not docker_ok: print("\n🔧 РЕШЕНИЕ: Запустите Docker Desktop") if not containers_ok: print("\n🔧 РЕШЕНИЕ: Запустите MinIO") print("docker-compose up -d minio") if not port_8000_ok: print("\n🔧 РЕШЕНИЕ: Запустите FastAPI сервер") print("python run_dev.py") if not port_8501_ok: print("\n🔧 РЕШЕНИЕ: Запустите Streamlit") print("python run_streamlit.py") print("\n🚀 Для автоматического запуска используйте:") print("python start_demo.py") print("\n🔍 Для пошагового запуска используйте:") print("python run_manual.py") if __name__ == "__main__": main()