Files
python_parser/check_services.py
2025-09-01 18:57:39 +03:00

185 lines
6.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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()