AutoBackups/test_everything_api.py

251 lines
9.1 KiB
Python
Raw Permalink 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
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))
# Imports del proyecto
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())
# Test without Everything API
print("2. Testing WITHOUT Everything API:")
print("-" * 40)
config.set("everything_api.enabled", False)
discovery_service = ProjectDiscoveryService(config, project_manager)
start_time = time.time()
projects_without_api = discovery_service.discover_projects()
time_without_api = time.time() - start_time
print(f"Found {len(projects_without_api)} projects in {time_without_api:.2f}s")
for project in projects_without_api[:5]: # Show first 5 projects
print(f" - {project.name} ({project.type}) at {project.path}")
if len(projects_without_api) > 5:
print(f" ... and {len(projects_without_api) - 5} more projects")
print()
# Compare results
print("3. COMPARISON:")
print("-" * 40)
print(f"Projects with API: {len(projects_with_api)}")
print(f"Projects without API: {len(projects_without_api)}")
print(f"Time with API: {time_with_api:.2f}s")
print(f"Time without API: {time_without_api:.2f}s")
if time_with_api > 0 and time_without_api > 0:
speedup = time_without_api / time_with_api
print(f"Speed improvement: {speedup:.2f}x")
# Check if projects are the same
paths_with_api = set(p.path for p in projects_with_api)
paths_without_api = set(p.path for p in projects_without_api)
missing_with_api = paths_without_api - paths_with_api
extra_with_api = paths_with_api - paths_without_api
if missing_with_api:
print(f"\nProjects MISSING when using API ({len(missing_with_api)}):")
for path in sorted(missing_with_api)[:10]:
print(f" - {path}")
if len(missing_with_api) > 10:
print(f" ... and {len(missing_with_api) - 10} more")
if extra_with_api:
print(f"\nEXTRA projects when using API ({len(extra_with_api)}):")
for path in sorted(extra_with_api)[:10]:
print(f" - {path}")
if len(extra_with_api) > 10:
print(f" ... and {len(extra_with_api) - 10} more")
if not missing_with_api and not extra_with_api:
print("\n✅ SAME projects found with both methods!")
elif len(missing_with_api) == 0 and len(extra_with_api) == 0:
print("\n✅ IDENTICAL results with both methods!")
else:
msg = (
f"\n⚠️ DIFFERENT results: {len(missing_with_api)} missing, "
f"{len(extra_with_api)} extra with API"
)
print(msg)
return {
"with_api": len(projects_with_api),
"without_api": len(projects_without_api),
"time_with_api": time_with_api,
"time_without_api": time_without_api,
"missing_with_api": len(missing_with_api),
"extra_with_api": len(extra_with_api),
}
if __name__ == "__main__":
try:
results = test_project_discovery()
except Exception as e:
print(f"❌ Error during testing: {e}")
import traceback
traceback.print_exc()
sys.exit(1)