326 lines
9.7 KiB
Ruby
326 lines
9.7 KiB
Ruby
#!/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__, 'adn', '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
|