AutoBackups/check_everything_api.py

168 lines
6.2 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
"""
Test Everything API Status - No Fallback
Script para verificar el estado de la API de Everything sin usar fallback
"""
import sys
from pathlib import Path
# Agregar el directorio src al path
current_dir = Path(__file__).parent
src_dir = current_dir / "src"
sys.path.insert(0, str(src_dir))
from models.config_model import Config
from models.project_model import ProjectManager
from services.project_discovery_service import ProjectDiscoveryService
def print_section(title):
"""Imprimir una sección con formato"""
print(f"\n{'='*60}")
print(f" {title}")
print(f"{'='*60}")
def print_status_item(label, value, status=None):
"""Imprimir un item de estado con formato"""
if status is None:
status = "" if value else ""
print(f"{status} {label}: {value}")
def main():
"""Función principal"""
print_section("VERIFICACIÓN DE EVERYTHING API - SIN FALLBACK")
try:
# Cargar configuración
print("📋 Cargando configuración...")
config = Config()
print("✅ Configuración cargada")
# Inicializar Project Manager
print("📁 Inicializando Project Manager...")
project_manager = ProjectManager()
print("✅ Project Manager inicializado")
# Inicializar Project Discovery Service
print("🔍 Inicializando Project Discovery Service...")
discovery_service = ProjectDiscoveryService(config, project_manager)
print("✅ Project Discovery Service inicializado")
# Verificar estado de Everything API
print_section("ESTADO DE EVERYTHING API")
status = discovery_service.check_everything_api_status()
print_status_item("Habilitado en configuración", status["enabled_in_config"])
print_status_item("Ruta DLL", status["dll_path"], "📄")
print_status_item("DLL existe", status["dll_exists"])
print_status_item("Searcher inicializado", status["searcher_initialized"])
print_status_item("Everything disponible", status["everything_available"])
if status["error_message"]:
print_status_item("Error", status["error_message"], "")
# Mostrar diagnóstico detallado si está disponible
if status["everything_diagnosis"]:
print_section("DIAGNÓSTICO DETALLADO")
diagnosis = status["everything_diagnosis"]
for key, value in diagnosis.items():
if key == "exception":
print_status_item("Excepción", value, "⚠️")
else:
formatted_key = key.replace("_", " ").title()
print_status_item(formatted_key, value, "")
# Test de búsqueda si Everything está disponible
if status["everything_available"]:
print_section("TEST DE BÚSQUEDA")
print("🔍 Ejecutando test de búsqueda de archivos .s7p...")
test_result = discovery_service.test_everything_api_search()
print_status_item("Test exitoso", test_result["success"])
print_status_item("Consulta", test_result["test_query"], "📝")
print_status_item(
"Archivos encontrados", test_result["results_count"], "📊"
)
print_status_item(
"Tiempo de ejecución (ms)", test_result["execution_time_ms"], "⏱️"
)
if test_result["error_message"]:
print_status_item("Error en test", test_result["error_message"], "")
# Mostrar algunos resultados
if test_result["results"]:
print("\n📋 Primeros resultados encontrados:")
for i, result in enumerate(test_result["results"][:5], 1):
print(f" {i}. {result}")
if test_result["results_count"] > 5:
remaining = test_result["results_count"] - 5
print(f" ... y {remaining} más")
# Test de descubrimiento sin fallback
print_section("TEST DE DESCUBRIMIENTO SIN FALLBACK")
print("🔍 Ejecutando descubrimiento usando SOLO Everything API...")
all_projects = []
observation_dirs = [
obs_dir
for obs_dir in config.observation_directories
if (obs_dir.get("enabled", True) and obs_dir.get("type") == "siemens_s7")
]
if not observation_dirs:
print("⚠️ No hay directorios de observación de Siemens S7")
else:
for obs_dir in observation_dirs:
print(f"📁 Escaneando: {obs_dir['path']}")
projects = discovery_service.discover_s7_projects_everything_only(
obs_dir
)
all_projects.extend(projects)
print(f" ✅ Encontrados {len(projects)} proyectos")
print_status_item("Total de proyectos encontrados", len(all_projects), "📊")
# Mostrar algunos proyectos
if all_projects:
print("\n📋 Proyectos encontrados:")
for i, project in enumerate(all_projects[:5], 1):
print(f" {i}. {project.name} ({project.path})")
if len(all_projects) > 5:
remaining = len(all_projects) - 5
print(f" ... y {remaining} más")
print_section("RESUMEN")
if status["everything_available"]:
print("✅ Everything API está funcionando correctamente")
projects_count = len(all_projects)
print(f"📊 Se encontraron {projects_count} proyectos sin fallback")
else:
print("❌ Everything API no está disponible")
if not status["enabled_in_config"]:
print("💡 Sugerencia: Habilitar Everything API en config")
elif not status["dll_exists"]:
print("💡 Sugerencia: Verificar que el DLL existe")
elif not status["searcher_initialized"]:
print("💡 Sugerencia: Verificar inicialización del searcher")
else:
print("💡 Sugerencia: Verificar que Everything esté ejecutándose")
except Exception as e:
print(f"\n❌ Error durante la verificación: {e}")
return 1
return 0
if __name__ == "__main__":
sys.exit(main())