#!/usr/bin/env ruby # frozen_string_literal: true # ========================================================== # adn/tools/cli/drones/dasuten_verificar-integridad_dasu-sql4.rb # ========================================================== # Dron: Verificar integridad de BD en dasu-sql4 # Flujo: DBCC CHECKDB + validaciones post-restore # Entrada: BD restaurada (pendiente verificación) # Salida: verify_complete con estado de integridad # ========================================================== require 'time' require 'json' require_relative 'lib/dasu_executor' JSON_PATH = 'C:\temp\dron_verify_output.json' puts "[*] Dron: Verificar integridad BD DASUTEN" puts " Nodo: dasu-sql4" # PowerShell script para DBCC CHECKDB ps_script = <<~'PSCMD'.strip $ErrorActionPreference = "Stop" $JSON_PATH = "C:\temp\dron_verify_output.json" $null = New-Item -ItemType Directory -Force -Path "C:\temp" Write-Host "[1/2] Ejecutando DBCC CHECKDB..." $start = Get-Date $sqlcmd = "C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\sqlcmd.exe" $checkdbSql = "DBCC CHECKDB('sysdasuten') WITH NO_INFOMSGS, ALL_ERRORMSGS" Write-Host " SQL: $checkdbSql" $checkdbOutput = & $sqlcmd -S localhost -Q $checkdbSql 2>&1 $exitoCheckdb = $LASTEXITCODE -eq 0 $duracionCheckdb = [math]::Round((New-TimeSpan -Start $start -End (Get-Date)).TotalSeconds, 2) if ($exitoCheckdb) { Write-Host "[+] CHECKDB completado en $duracionCheckdb segundos" $tieneErrores = $checkdbOutput -match 'ERROR|corrupt|damaged|inconsistency' $estadoIntegridad = if ($tieneErrores) { 'ERROR_DETECTED' } else { 'OK' } $paginasVerificadas = 0 if ($checkdbOutput -match '(\d+)\s+pages') { $paginasVerificadas = [int]$matches[1] } } else { $estadoIntegridad = 'CHECKDB_FAILED' Write-Host "[!] CHECKDB falló:" Write-Host $checkdbOutput } Write-Host "`n[2/2] Validaciones adicionales..." $bdStatusSql = "SELECT state_desc, recovery_model_desc FROM sys.databases WHERE name = 'sysdasuten'" $bdStatus = & $sqlcmd -S localhost -Q $bdStatusSql -h -1 Write-Host " Estado BD: $bdStatus" $res = @{ paso = "verify_complete" nodo = "dasu-sql4" duracion_checkdb = $duracionCheckdb estado_integridad = $estadoIntegridad paginas_verificadas = $paginasVerificadas bd_estado = $bdStatus timestamp = (Get-Date -Format "o") pipeline_completo = $true } Write-Host "`n✅ Verificación completada" Write-Host " Estado integridad: $estadoIntegridad" Write-Host " Output: $($res | ConvertTo-Json -Compress)" $res | ConvertTo-Json | Out-File -FilePath $JSON_PATH -Encoding utf8 PSCMD puts "\n[1/2] Ejecutando DBCC CHECKDB en dasu-sql4..." DasuExecutor.execute_ps_on_dasu(ps_script, output_path: JSON_PATH) puts "\n[2/2] Leyendo output JSON..." resultado = DasuExecutor.read_json_from_dasu(JSON_PATH) puts " Output: #{resultado.to_json}" puts "\n✅ Verificación completada" puts " Estado integridad: #{resultado['estado_integridad']}" puts " Páginas verificadas: #{resultado['paginas_verificadas'] || 'N/A'}" puts " Duración: #{resultado['duracion_checkdb']}s" File.write('/tmp/dron_verify_output.json', resultado.to_json) puts " JSON guardado en: /tmp/dron_verify_output.json"