ch
This commit is contained in:
180
check_services.py
Normal file
180
check_services.py
Normal file
@@ -0,0 +1,180 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user