191 lines
8.9 KiB
Ruby
191 lines
8.9 KiB
Ruby
#!/usr/bin/env ruby
|
|
# frozen_string_literal: true
|
|
|
|
# tools/agregar_hitos_dashboard.rb — Script simple para agregar hitos al dashboard P2601
|
|
# ================================================================================
|
|
# Este script agrega hitos adicionales al dashboard P2601 de forma manual y controlada.
|
|
# Es una versión simplificada que evita problemas de parsing complejo.
|
|
|
|
require 'fileutils'
|
|
|
|
# Hitos adicionales para agregar (formato simplificado)
|
|
HITOS_ADICIONALES = <<~HTML
|
|
<!-- Hitos adicionales agregados automáticamente - #{Time.now.strftime('%Y-%m-%d %H:%M')} -->
|
|
<div class="tl-item">
|
|
<div class="tl-dot pending"></div>
|
|
<div class="tl-content">
|
|
<div class="tl-header"><span class="tl-id">BKP02</span><span class="tl-date">Pendiente</span></div>
|
|
<div class="tl-title">🔒 Backup Automático de VMs en Proxmox</div>
|
|
<div class="tl-desc">Configurar backups automáticos VZDump programados para DC y SQL Server. Establecer retención de 7 días, almacenamiento en NAS/SMB compartido.</div>
|
|
<div class="tl-tags"><span class="tag tag-remote">Remoto: ~2h</span><span class="tag tag-phys">Requiere acceso físico</span></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="tl-item">
|
|
<div class="tl-dot pending"></div>
|
|
<div class="tl-content">
|
|
<div class="tl-header"><span class="tl-id">DB02</span><span class="tl-date">Pendiente</span></div>
|
|
<div class="tl-title">🗄️ Backup Automático de Base de Datos sysdasuten</div>
|
|
<div class="tl-desc">Configurar jobs de SQL Server Agent para backup diario completo y log cada 15 minutos. Verificar restauración periódica en ambiente de pruebas.</div>
|
|
<div class="tl-tags"><span class="tag tag-remote">Remoto: ~2h</span><span class="tag">SQL Agent</span></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="tl-item">
|
|
<div class="tl-dot pending"></div>
|
|
<div class="tl-content">
|
|
<div class="tl-header"><span class="tl-id">MON01</span><span class="tl-date">Pendiente</span></div>
|
|
<div class="tl-title">📊 Monitoreo de Recursos del Hipervisor</div>
|
|
<div class="tl-desc">Implementar sistema de monitoreo básico para CPU, RAM, almacenamiento y red de srv-dasu. Alertas por email/Telegram para recursos críticos.</div>
|
|
<div class="tl-tags"><span class="tag tag-remote">Remoto: ~3h</span><span class="tag">Herramientas ADN</span></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="tl-item">
|
|
<div class="tl-dot pending"></div>
|
|
<div class="tl-content">
|
|
<div class="tl-header"><span class="tl-id">DOC01</span><span class="tl-date">Pendiente</span></div>
|
|
<div class="tl-title">📋 Documentación Operativa del Sistema</div>
|
|
<div class="tl-desc">Crear manual de operaciones: procedimientos de backup/restore, acceso remoto, resolución de problemas comunes, contactos de soporte, diagramas de red.</div>
|
|
<div class="tl-tags"><span class="tag tag-remote">Remoto: ~6h</span><span class="tag">Herramientas ADN</span><span class="tag">Git</span></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="tl-item">
|
|
<div class="tl-dot pending"></div>
|
|
<div class="tl-content">
|
|
<div class="tl-header"><span class="tl-id">PERF01</span><span class="tl-date">Pendiente</span></div>
|
|
<div class="tl-title">⚡ Pruebas de Rendimiento del Sistema</div>
|
|
<div class="tl-desc">Realizar pruebas de carga simulada en sistema DASUTEN. Medir tiempos de respuesta, consumo de recursos, identificar cuellos de botella. Generar reporte de performance.</div>
|
|
<div class="tl-tags"><span class="tag tag-phys">Físico: 2h</span><span class="tag tag-remote">Remoto: ~2h</span><span class="tag">SQL Profiler</span></div>
|
|
</div>
|
|
</div>
|
|
HTML
|
|
|
|
def main
|
|
puts "🔄 AGREGANDO HITOS AL DASHBOARD P2601"
|
|
puts "=" * 60
|
|
|
|
# Ruta del dashboard
|
|
dashboard_path = '/home/rmonla/Documentos/GitHub/dtic-srv-NS8/dashboard/index.html'
|
|
|
|
# Verificar que el archivo existe
|
|
unless File.exist?(dashboard_path)
|
|
puts "❌ Error: No se encuentra el dashboard en #{dashboard_path}"
|
|
exit 1
|
|
end
|
|
|
|
# Leer contenido actual
|
|
puts "📖 Leyendo dashboard actual..."
|
|
contenido = File.read(dashboard_path)
|
|
puts "✅ Dashboard leído (#{contenido.length} bytes, #{contenido.lines.count} líneas)"
|
|
|
|
# Crear backup
|
|
backup_path = "#{dashboard_path}.backup_#{Time.now.strftime('%Y%m%d_%H%M%S')}"
|
|
puts "💾 Creando backup en: #{backup_path}"
|
|
File.write(backup_path, contenido)
|
|
puts "✅ Backup creado exitosamente"
|
|
|
|
# Buscar el lugar donde insertar los hitos (antes del cierre del div .timeline)
|
|
# Buscamos el último </div> antes del footer
|
|
if contenido.include?('</div><!-- Timeline de Hitos -->')
|
|
puts "📍 Marcador de timeline encontrado"
|
|
marcador = '</div><!-- Timeline de Hitos -->'
|
|
elsif contenido.include?('</div>\n <div class="footer">')
|
|
puts "📍 Marcador antes del footer encontrado"
|
|
marcador = '</div>\n <div class="footer">'
|
|
else
|
|
# Buscar el patrón: cierre de timeline y luego footer
|
|
timeline_end_index = contenido.index('</div>\n <div class="footer">')
|
|
if timeline_end_index
|
|
puts "📍 Patrón timeline->footer encontrado"
|
|
marcador = '</div>\n <div class="footer">'
|
|
else
|
|
puts "⚠️ No se encontró marcador específico, usando búsqueda genérica"
|
|
# Buscar el último </div> antes del footer
|
|
footer_index = contenido.index('<div class="footer">')
|
|
if footer_index
|
|
# Retroceder para encontrar el </div> anterior
|
|
prev_div_index = contenido.rindex('</div>', footer_index)
|
|
if prev_div_index
|
|
marcador = contenido[prev_div_index..prev_div_index+5] # '</div>'
|
|
puts "📍 Último </div> antes del footer encontrado"
|
|
else
|
|
puts "❌ No se pudo encontrar lugar para insertar hitos"
|
|
exit 1
|
|
end
|
|
else
|
|
puts "❌ No se encontró el footer del dashboard"
|
|
exit 1
|
|
end
|
|
end
|
|
end
|
|
|
|
# Insertar los hitos antes del marcador
|
|
puts "✏️ Insertando #{HITOS_ADICIONALES.lines.count} líneas de hitos adicionales..."
|
|
nuevo_contenido = contenido.gsub(marcador) do |match|
|
|
"#{HITOS_ADICIONALES}\n\n #{match}"
|
|
end
|
|
|
|
# Verificar que se insertó correctamente
|
|
if nuevo_contenido.length > contenido.length
|
|
lineas_agregadas = nuevo_contenido.lines.count - contenido.lines.count
|
|
puts "✅ #{lineas_agregadas} líneas agregadas al dashboard"
|
|
puts "📊 Nuevo tamaño: #{nuevo_contenido.length} bytes (#{nuevo_contenido.lines.count} líneas)"
|
|
else
|
|
puts "⚠️ No se detectaron cambios en el contenido"
|
|
puts " Intentando método alternativo..."
|
|
|
|
# Método alternativo: insertar antes del footer
|
|
footer_start = '<div class="footer">'
|
|
if nuevo_contenido.include?(footer_start)
|
|
nuevo_contenido = nuevo_contenido.gsub(footer_start) do |match|
|
|
"#{HITOS_ADICIONALES}\n\n #{match}"
|
|
end
|
|
puts "✅ Hitos insertados antes del footer"
|
|
else
|
|
puts "❌ No se pudo insertar los hitos"
|
|
exit 1
|
|
end
|
|
end
|
|
|
|
# Guardar el archivo actualizado
|
|
puts "💾 Guardando dashboard actualizado..."
|
|
File.write(dashboard_path, nuevo_contenido)
|
|
puts "✅ Dashboard actualizado exitosamente"
|
|
|
|
# Verificación rápida
|
|
puts "\n🔍 VERIFICACIÓN RÁPIDA:"
|
|
puts " • Archivo original: #{contenido.lines.count} líneas"
|
|
puts " • Archivo nuevo: #{nuevo_contenido.lines.count} líneas"
|
|
puts " • Diferencia: #{nuevo_contenido.lines.count - contenido.lines.count} líneas agregadas"
|
|
|
|
# Mostrar algunos de los hitos agregados
|
|
puts "\n📋 HITOS AGREGADOS:"
|
|
puts " 1. 🔒 BKP02 - Backup Automático de VMs en Proxmox"
|
|
puts " 2. 🗄️ DB02 - Backup Automático de Base de Datos sysdasuten"
|
|
puts " 3. 📊 MON01 - Monitoreo de Recursos del Hipervisor"
|
|
puts " 4. 📋 DOC01 - Documentación Operativa del Sistema"
|
|
puts " 5. ⚡ PERF01 - Pruebas de Rendimiento del Sistema"
|
|
|
|
puts "\n🚀 PRÓXIMOS PASOS:"
|
|
puts " 1. Verificar dashboard en: https://ns8.frlr.utn.edu.ar/bitacoras/p2601"
|
|
puts " 2. Revisar que los hitos se muestren correctamente"
|
|
puts " 3. Actualizar estado según progreso real del proyecto"
|
|
puts " 4. Usar herramientas ADN para seguimiento automático"
|
|
puts " 5. Registrar cambios en bitácora del proyecto"
|
|
|
|
puts "\n📅 #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}"
|
|
puts "=" * 60
|
|
end
|
|
|
|
if __FILE__ == $0
|
|
begin
|
|
main
|
|
rescue => e
|
|
puts "❌ Error: #{e.message}"
|
|
puts e.backtrace if ENV['DEBUG']
|
|
exit 1
|
|
end
|
|
end
|