docs & tools: Actualización de informes y scripts de migración DASUTEN

This commit is contained in:
Ricardo Monla
2026-04-20 16:25:51 -03:00
parent faf46be84b
commit 65dd92b769
44 changed files with 3822 additions and 568 deletions
@@ -12,6 +12,7 @@
require 'tiny_tds'
require 'time'
require 'json'
require 'base64'
require_relative 'lib/dasu_executor'
# Nombre del archivo con timestamp
@@ -34,6 +35,10 @@ begin
sql_user = 'UTNlarioja\\monlaricardo'
sql_host = '10.0.10.200'
smb_user = 'rmonla'
smb_server = 'srv-ns8'
smb_share = 'bkps-dasuten'
smb_path = "\\\\#{smb_server}\\#{smb_share}"
if sql_pass.empty?
puts "[!] Error: No se pudo obtener credencial de candados"
@@ -48,13 +53,23 @@ begin
)
puts "[+] Conectado a SQL Server en #{sql_host} (auth: Windows)"
# Mapear share SMB con credenciales usando net use
puts "\n[0/3] Mapeando share SMB #{smb_path}..."
sql_pass_escaped = sql_pass.gsub("'", "''")
ps_map = "net use X: #{smb_path} #{sql_pass_escaped} /user:#{smb_user} /persistent:no"
map_result = client.execute("EXEC xp_cmdshell '#{ps_map}'")
map_output = []
map_result.each { |r| map_output << r['output'] if r['output'] && !r['output'].strip.empty? }
puts " #{map_output.join("\n ")}"
puts "[+] Share mapeado en X: -> #{smb_path}"
# Crear directorio en share si no existe
puts "\n[0/2] Verificando directorio en share..."
client.execute("EXEC master.sys.xp_create_subdir 'X:\\'")
puts "\n[1/3] Verificando directorio en share..."
client.execute("EXEC master.sys.xp_create_subdir 'X:\\'").each { |r| }
puts "[+] Directorio share asegurado: X:\\"
# Generar backup comprimido directamente en share X:
puts "[1/2] Generando backup en share X: (srv-ns8)..."
puts "[2/3] Generando backup en share X: (srv-ns8)..."
start = Time.now
result = client.execute("BACKUP DATABASE sysdasuten TO DISK = '#{BACKUP_NS8}' WITH INIT, COMPRESSION, STATS=10")
@@ -63,14 +78,17 @@ begin
duracion = (Time.now - start).round(2)
puts "[+] Backup generado en #{duracion} segundos"
# Verificar archivo en share usando módulo común
puts "[2/2] Verificando archivo en share..."
file_info = DasuExecutor.get_file_info_on_fenix(client, BACKUP_NS8)
if file_info[:exists]
puts "[+] Archivo verificado: #{BACKUP_NS8} (#{file_info[:size_mb]} MB)"
# Verificar archivo en share directamente en srv-ns8 vía SSH
puts "[3/3] Verificando archivo en share..."
backup_unix = BACKUP_NS8.gsub('X:\\', '/mnt/ns8Disco2/bkps-dasuten/')
ls_result = `ssh rmonla@10.0.10.8 "ls -l '#{backup_unix}' 2>&1"`.strip
if $?.success? && ls_result.include?(File.basename(backup_unix))
# Extraer tamaño del output de ls -l
file_size = ls_result.split[4].to_i
puts "[+] Archivo verificado: #{backup_unix} (#{file_size.to_i / 1024 / 1024} MB)"
else
puts "[!] Error: No existe el archivo en #{BACKUP_NS8}"
puts "[!] Error: No existe el archivo en #{backup_unix}"
puts " SSH output: #{ls_result}"
exit 1
end