180 lines
6.4 KiB
Python
180 lines
6.4 KiB
Python
#!/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("docker-compose up -d fastapi")
|
||
|
||
if not port_8501_ok:
|
||
print("\n🔧 РЕШЕНИЕ: Запустите Streamlit")
|
||
print("docker-compose up -d streamlit")
|
||
|
||
if __name__ == "__main__":
|
||
main() |