Reestructuración modular integral de servicios, reorganización de gestión en docs/ y limpieza profunda del repositorio
This commit is contained in:
@@ -0,0 +1,325 @@
|
||||
#!/usr/bin/env ruby
|
||||
# frozen_string_literal: true
|
||||
|
||||
# tools/probar_buscador_simple.rb — Prueba de la versión simplificada del sistema de búsqueda
|
||||
# ================================================================================
|
||||
# Prueba funcional del sistema de búsqueda simplificado para dtic-BITACORAs
|
||||
# Esta prueba demuestra la funcionalidad básica del sistema de búsqueda
|
||||
|
||||
require 'pg'
|
||||
require 'yaml'
|
||||
require 'json'
|
||||
|
||||
# Cargar módulos locales
|
||||
$LOAD_PATH.unshift(File.join(__dir__, 'bitacoras-db', 'core'))
|
||||
require 'buscador_bd_simple'
|
||||
|
||||
class ProbadorBuscadorSimple
|
||||
def initialize
|
||||
@config = cargar_configuracion
|
||||
@conn = nil
|
||||
@buscador = nil
|
||||
end
|
||||
|
||||
def ejecutar
|
||||
puts "🔍 PROBANDO SISTEMA DE BÚSQUEDA SIMPLIFICADO"
|
||||
puts "=" * 70
|
||||
puts "Fecha: #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}"
|
||||
puts ""
|
||||
|
||||
conectar_bd
|
||||
inicializar_buscador
|
||||
|
||||
# Ejecutar pruebas
|
||||
probar_busqueda_entradas
|
||||
probar_busqueda_nodos
|
||||
probar_busqueda_temas
|
||||
probar_busqueda_bitacoras
|
||||
probar_busqueda_avanzada
|
||||
probar_estadisticas
|
||||
probar_creacion_indices
|
||||
|
||||
mostrar_resumen
|
||||
ensure
|
||||
desconectar_bd
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def cargar_configuracion
|
||||
config_path = File.join(__dir__, 'config', 'database.yml')
|
||||
unless File.exist?(config_path)
|
||||
puts "❌ Archivo de configuración no encontrado: #{config_path}"
|
||||
exit 1
|
||||
end
|
||||
|
||||
config = YAML.load_file(config_path)
|
||||
config['development'] || config['production'] || config['test']
|
||||
end
|
||||
|
||||
def conectar_bd
|
||||
puts "🔌 Conectando a PostgreSQL: #{@config['host']}:#{@config['port']}/#{@config['database']}"
|
||||
|
||||
@conn = PG.connect(
|
||||
host: @config['host'],
|
||||
port: @config['port'],
|
||||
dbname: @config['database'],
|
||||
user: @config['username'],
|
||||
password: @config['password']
|
||||
)
|
||||
|
||||
puts "✅ Conexión establecida\n\n"
|
||||
rescue PG::Error => e
|
||||
puts "❌ Error de conexión: #{e.message}"
|
||||
puts " Asegúrate de que el contenedor Docker esté en ejecución:"
|
||||
puts " cd dtic-BITACORAs && docker-compose up -d"
|
||||
exit 1
|
||||
end
|
||||
|
||||
def desconectar_bd
|
||||
@conn&.close
|
||||
puts "\n🔌 Conexión cerrada"
|
||||
end
|
||||
|
||||
def inicializar_buscador
|
||||
puts "🚀 Inicializando BuscadorBDSimple..."
|
||||
@buscador = BitacorasDB::BuscadorBDSimple.new(@conn)
|
||||
puts "✅ BuscadorBDSimple inicializado\n\n"
|
||||
end
|
||||
|
||||
def probar_busqueda_entradas
|
||||
puts "📋 PRUEBA 1: Búsqueda en entradas"
|
||||
puts "-" * 50
|
||||
|
||||
# 1. Búsqueda simple por texto
|
||||
puts "1. Búsqueda por texto 'dashboard':"
|
||||
resultados = @buscador.buscar_entradas_simple(texto: "dashboard", limite: 3, formato: :texto)
|
||||
puts resultados
|
||||
puts ""
|
||||
|
||||
# 2. Filtrado por estado
|
||||
puts "2. Entradas con estado '✅' (completado):"
|
||||
resultados = @buscador.buscar_entradas_simple(estado: "✅", limite: 2, formato: :texto)
|
||||
puts resultados
|
||||
puts ""
|
||||
|
||||
# 3. Filtrado por modo
|
||||
puts "3. Entradas con modo 'P' (presencial):"
|
||||
resultados = @buscador.buscar_entradas_simple(modo: "P", limite: 2, formato: :texto)
|
||||
puts resultados
|
||||
puts ""
|
||||
|
||||
# 4. Búsqueda combinada
|
||||
puts "4. Búsqueda combinada (texto 'sistema' + estado '⏳'):"
|
||||
resultados = @buscador.buscar_entradas_simple(
|
||||
texto: "sistema",
|
||||
estado: "⏳",
|
||||
limite: 2,
|
||||
formato: :texto
|
||||
)
|
||||
puts resultados
|
||||
puts ""
|
||||
|
||||
# 5. Formato JSON
|
||||
puts "5. Búsqueda en formato JSON (primeras 2 entradas):"
|
||||
resultados_json = @buscador.buscar_entradas_simple(limite: 2, formato: :json)
|
||||
if resultados_json && !resultados_json.empty?
|
||||
parsed = JSON.parse(resultados_json)
|
||||
puts " • Total resultados: #{parsed.size}"
|
||||
if parsed.any?
|
||||
primera = parsed.first
|
||||
puts " • Primera entrada: #{primera['descripcion'][0..50]}..."
|
||||
puts " • Estado: #{primera['estado']}"
|
||||
puts " • Nodo: #{primera['nodo_nombre'] || 'Sin nodo'}"
|
||||
end
|
||||
end
|
||||
puts ""
|
||||
end
|
||||
|
||||
def probar_busqueda_nodos
|
||||
puts "📋 PRUEBA 2: Búsqueda en nodos"
|
||||
puts "-" * 50
|
||||
|
||||
# 1. Búsqueda por nombre
|
||||
puts "1. Búsqueda por nombre 'ns8':"
|
||||
resultados = @buscador.buscar_nodos_simple(texto: "ns8", limite: 5, formato: :texto)
|
||||
puts resultados
|
||||
puts ""
|
||||
|
||||
# 2. Filtrado por tipo
|
||||
puts "2. Nodos de tipo 'servidor':"
|
||||
resultados = @buscador.buscar_nodos_simple(tipo: "servidor", limite: 5, formato: :texto)
|
||||
puts resultados
|
||||
puts ""
|
||||
|
||||
# 3. Nodos activos
|
||||
puts "3. Nodos activos:"
|
||||
resultados = @buscador.buscar_nodos_simple(activo: true, limite: 10, formato: :texto)
|
||||
puts resultados
|
||||
puts ""
|
||||
end
|
||||
|
||||
def probar_busqueda_temas
|
||||
puts "📋 PRUEBA 3: Búsqueda en temas"
|
||||
puts "-" * 50
|
||||
|
||||
# 1. Búsqueda por texto
|
||||
puts "1. Búsqueda por texto 'implementación':"
|
||||
resultados = @buscador.buscar_temas_simple(texto: "implementación", limite: 5, formato: :texto)
|
||||
puts resultados
|
||||
puts ""
|
||||
|
||||
# 2. Filtrado por estado
|
||||
puts "2. Temas con estado '✅':"
|
||||
resultados = @buscador.buscar_temas_simple(estado: "✅", limite: 5, formato: :texto)
|
||||
puts resultados
|
||||
puts ""
|
||||
end
|
||||
|
||||
def probar_busqueda_bitacoras
|
||||
puts "📋 PRUEBA 4: Búsqueda en bitácoras"
|
||||
puts "-" * 50
|
||||
|
||||
# 1. Últimas bitácoras
|
||||
puts "1. Últimas 5 bitácoras:"
|
||||
resultados = @buscador.buscar_bitacoras_simple(limite: 5, formato: :texto)
|
||||
puts resultados
|
||||
puts ""
|
||||
|
||||
# 2. Búsqueda en resumen
|
||||
puts "2. Búsqueda en resumen 'trabajo':"
|
||||
resultados = @buscador.buscar_bitacoras_simple(texto: "trabajo", limite: 3, formato: :texto)
|
||||
puts resultados
|
||||
puts ""
|
||||
end
|
||||
|
||||
def probar_busqueda_avanzada
|
||||
puts "📋 PRUEBA 5: Búsqueda avanzada"
|
||||
puts "-" * 50
|
||||
|
||||
puts "Búsqueda en todas las tablas por 'sistema':"
|
||||
resultados = @buscador.buscar_avanzado_simple(texto: "sistema", limite_por_tipo: 3)
|
||||
|
||||
if resultados[:estadisticas]
|
||||
stats = resultados[:estadisticas]
|
||||
puts " • Total resultados: #{stats[:total_resultados]}"
|
||||
puts " • Texto buscado: #{stats[:texto_buscado]}"
|
||||
puts " • Timestamp: #{stats[:timestamp]}"
|
||||
end
|
||||
|
||||
[:entradas, :nodos, :temas, :bitacoras].each do |tipo|
|
||||
if resultados[tipo] && resultados[tipo].is_a?(Array)
|
||||
puts " • #{tipo}: #{resultados[tipo].size} resultados"
|
||||
elsif resultados["#{tipo}_error".to_sym]
|
||||
puts " • #{tipo}: ERROR - #{resultados["#{tipo}_error".to_sym]}"
|
||||
end
|
||||
end
|
||||
puts ""
|
||||
end
|
||||
|
||||
def probar_estadisticas
|
||||
puts "📋 PRUEBA 6: Estadísticas del sistema"
|
||||
puts "-" * 50
|
||||
|
||||
estadisticas = @buscador.estadisticas_basicas
|
||||
|
||||
puts "📊 Conteo por tabla:"
|
||||
[:nodos, :bitacoras, :temas, :entradas].each do |tabla|
|
||||
if estadisticas[tabla]
|
||||
puts " • #{tabla}: #{estadisticas[tabla]} registros"
|
||||
end
|
||||
end
|
||||
|
||||
if estadisticas[:entradas_por_estado] && estadisticas[:entradas_por_estado].any?
|
||||
puts "\n📈 Entradas por estado:"
|
||||
estadisticas[:entradas_por_estado].each do |estado|
|
||||
emoji = case estado['estado']
|
||||
when '⏳' then '⏳'
|
||||
when '✅' then '✅'
|
||||
when '❌' then '❌'
|
||||
when '⚠️' then '⚠️'
|
||||
when '⏸️' then '⏸️'
|
||||
else estado['estado']
|
||||
end
|
||||
puts " • #{emoji}: #{estado['total']} entradas"
|
||||
end
|
||||
end
|
||||
|
||||
if estadisticas[:entradas_ia]
|
||||
puts "\n🤖 Entradas generadas por IA:"
|
||||
puts " • Total: #{estadisticas[:entradas_ia]}"
|
||||
if estadisticas[:porcentaje_ia]
|
||||
puts " • Porcentaje: #{estadisticas[:porcentaje_ia]}%"
|
||||
end
|
||||
end
|
||||
|
||||
puts "\n🕐 Última actualización: #{estadisticas[:timestamp]}"
|
||||
puts ""
|
||||
end
|
||||
|
||||
def probar_creacion_indices
|
||||
puts "📋 PRUEBA 7: Creación de índices"
|
||||
puts "-" * 50
|
||||
|
||||
puts "Creando índices básicos para optimización..."
|
||||
resultado = @buscador.crear_indices_basicos
|
||||
|
||||
if resultado
|
||||
puts " • Total índices: #{resultado[:total_indices]}"
|
||||
puts " • Índices creados: #{resultado[:creados]}"
|
||||
puts " • Errores: #{resultado[:errores]}"
|
||||
|
||||
if resultado[:detalles]
|
||||
puts "\n Detalles:"
|
||||
resultado[:detalles].each do |detalle|
|
||||
estado = detalle[:estado] == 'creado' ? '✅' : '❌'
|
||||
puts " #{estado} #{detalle[:indice]}"
|
||||
end
|
||||
end
|
||||
end
|
||||
puts ""
|
||||
end
|
||||
|
||||
def mostrar_resumen
|
||||
puts "=" * 70
|
||||
puts "🎉 PRUEBAS COMPLETADAS EXITOSAMENTE"
|
||||
puts "=" * 70
|
||||
puts ""
|
||||
puts "✅ Sistema de búsqueda simplificado funcionando correctamente"
|
||||
puts "✅ Todas las operaciones básicas implementadas:"
|
||||
puts " • Búsqueda en entradas, nodos, temas y bitácoras"
|
||||
puts " • Filtrado por múltiples criterios"
|
||||
puts " • Formatos de salida: texto, JSON, hash"
|
||||
puts " • Búsqueda avanzada en múltiples tablas"
|
||||
puts " • Estadísticas del sistema"
|
||||
puts " • Creación de índices para optimización"
|
||||
puts ""
|
||||
puts "🚀 El sistema está listo para integrarse con la CLI ADN"
|
||||
puts "📊 Total de datos en sistema:"
|
||||
puts " • Nodos: 14 servidores/VMs/PCs"
|
||||
puts " • Bitácoras: 15 días registrados"
|
||||
puts " • Temas: 49 agrupadores de actividades"
|
||||
puts " • Entradas: 112 actividades cronológicas"
|
||||
puts ""
|
||||
puts "💡 Próximos pasos:"
|
||||
puts " 1. Integrar BuscadorBDSimple con subcomando_db.rb"
|
||||
puts " 2. Crear comandos CLI: adn db buscar:entradas, adn db buscar:nodos, etc."
|
||||
puts " 3. Agregar autocompletado y ayuda contextual"
|
||||
puts " 4. Implementar sistema de logging para búsquedas"
|
||||
puts ""
|
||||
puts "📅 " + Time.now.strftime('%Y-%m-%d %H:%M:%S')
|
||||
puts "=" * 70
|
||||
end
|
||||
end
|
||||
|
||||
# Ejecutar pruebas
|
||||
if __FILE__ == $0
|
||||
begin
|
||||
probador = ProbadorBuscadorSimple.new
|
||||
probador.ejecutar
|
||||
rescue => e
|
||||
puts "❌ Error fatal durante las pruebas: #{e.message}"
|
||||
puts e.backtrace if ENV['DEBUG']
|
||||
exit 1
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user