73 lines
2.1 KiB
Ruby
73 lines
2.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# tools/adn/db/cli/exportar_todo.rb
|
|
# ==========================================
|
|
# Exporta TODAS las bitácoras de la DB a archivos .md
|
|
# Uso: ruby tools/adn/db/cli/exportar_todo.rb [--dir DIRECTORIO]
|
|
# — o vía enjambre —
|
|
# ./tools/adn/run db exportar:md --todo
|
|
|
|
require 'date'
|
|
require 'optparse'
|
|
require_relative '../core/bitacora_db'
|
|
require_relative '../exporters/md_exporter'
|
|
|
|
module BitacorasDB
|
|
module CLI
|
|
class ExportarTodo
|
|
def initialize(bitacoras_dir, logger = nil)
|
|
@bitacoras_dir = bitacoras_dir
|
|
@logger = logger || default_logger
|
|
@resultados = { ok: 0, error: 0 }
|
|
end
|
|
|
|
def ejecutar
|
|
@logger.info("Exportando todas las bitácoras de DB a MD...")
|
|
|
|
BitacorasDB::BitacoraDB.with_connection do |db|
|
|
bitacoras = db.list_bitacoras(limit: 500)
|
|
|
|
if bitacoras.empty?
|
|
@logger.info("No hay bitácoras en la base de datos.")
|
|
return
|
|
end
|
|
|
|
exporter = BitacorasDB::Exporters::MDExporter.new(db, @logger)
|
|
|
|
bitacoras.each do |b|
|
|
fecha = b['fecha'].to_s
|
|
fecha = fecha.split('T').first if fecha.include?('T')
|
|
archivo = File.join(@bitacoras_dir, "#{fecha}.md")
|
|
|
|
if exporter.exportar_bitacora(fecha, archivo)
|
|
@resultados[:ok] += 1
|
|
else
|
|
@resultados[:error] += 1
|
|
end
|
|
end
|
|
end
|
|
|
|
@logger.info("📊 Exportación masiva completada:")
|
|
@logger.info(" ✅ Exitosas: #{@resultados[:ok]}")
|
|
@logger.info(" ❌ Errores: #{@resultados[:error]}") if @resultados[:error] > 0
|
|
end
|
|
|
|
private
|
|
|
|
def default_logger
|
|
Class.new do
|
|
def info(msg); puts "[INFO] #{msg}"; end
|
|
def error(msg); puts "[ERROR] #{msg}"; end
|
|
def exito(msg); puts "[OK] #{msg}"; end
|
|
end.new
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
# Ejecución directa
|
|
if __FILE__ == $0
|
|
bitacoras_dir = File.expand_path('../../../docs/bitacoras', __dir__)
|
|
BitacorasDB::CLI::ExportarTodo.new(bitacoras_dir).ejecutar
|
|
end
|