Files
claudetools/temp/test-nas-from-ad2.ps1
Mike Swanson 470638ff86 sync: Dataforth sync fixes, TestDataDB stability, and client scripts
Dataforth DOS:
- TestDataDB: singleton DB connection fix (crash prevention), WAL mode,
  WinSW service config, backup script, uncaught exception handlers
- Sync-FromNAS.ps1: Get-NASFileList temp file approach to avoid SSH
  stdout deadlock, *> $null output suppression, 8.3 filename filter
  for PUSH phase, backslash-escaped SCP paths, rename-to-.synced
- import.js: INSERT OR REPLACE for re-tested devices
- Full import run: 1,028,275 -> 1,632,793 records, indexes added
- Deploy script for sync fixes to AD2

Client scripts (temp/):
- BG Builders: Lesley account check, MFA phone update
- Lonestar Electrical: Kyla/Russ Google Workspace setup, 2FA bypass
- AD2 diagnostics and NAS connectivity tests

PENDING: Investigate why newest test_date is Jan 19 despite daily tests

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 06:08:31 -07:00

49 lines
2.3 KiB
PowerShell

# Test script to run ON AD2 - diagnoses NAS SSH hang issue
$SSH = "C:\Program Files\OpenSSH\ssh.exe"
$SSH_KEY = "C:\Users\sysadmin\.ssh\id_ed25519"
$NAS_USER = "root"
$NAS_IP = "192.168.0.9"
Write-Host "=== Step 1: Kill any hung SSH processes ==="
Get-Process ssh -ErrorAction SilentlyContinue | ForEach-Object {
Write-Host " Killing SSH PID $($_.Id)"
Stop-Process -Id $_.Id -Force
}
Get-Process powershell -ErrorAction SilentlyContinue | Where-Object { $_.Id -ne $PID } | ForEach-Object {
Write-Host " Other PowerShell PID $($_.Id) - CommandLine: $($_.CommandLine)"
}
Write-Host "`n=== Step 2: Basic SSH echo test ==="
$t1 = Get-Date
$r1 = & $SSH -i $SSH_KEY -o BatchMode=yes -o ConnectTimeout=10 -o StrictHostKeyChecking=accept-new "${NAS_USER}@${NAS_IP}" "echo NAS_OK" 2>&1
$d1 = (Get-Date) - $t1
Write-Host " Result: $r1 (took $($d1.TotalSeconds)s)"
Write-Host "`n=== Step 3: find with temp file redirect (the actual fix) ==="
$t2 = Get-Date
Write-Host " Running find with output to /tmp/test-list.txt..."
# This is exactly what Get-NASFileList does - output goes to file on NAS, stdout discarded
& $SSH -i $SSH_KEY -o BatchMode=yes -o ConnectTimeout=10 -o StrictHostKeyChecking=accept-new "${NAS_USER}@${NAS_IP}" "find /data/test/TS-*/LOGS -name '*.DAT' -type f -mmin -1440 > /tmp/test-list.txt 2>/dev/null" *> $null
$d2 = (Get-Date) - $t2
Write-Host " SSH returned in $($d2.TotalSeconds)s"
Write-Host "`n=== Step 4: Count files found ==="
$r3 = & $SSH -i $SSH_KEY -o BatchMode=yes -o ConnectTimeout=10 "${NAS_USER}@${NAS_IP}" "wc -l /tmp/test-list.txt; head -3 /tmp/test-list.txt" 2>&1
foreach ($line in $r3) { Write-Host " $line" }
Write-Host "`n=== Step 5: Pull file list via SCP ==="
$localTemp = "$env:TEMP\test-nas-filelist.txt"
& "C:\Program Files\OpenSSH\scp.exe" -O -i $SSH_KEY -o StrictHostKeyChecking=accept-new "${NAS_USER}@${NAS_IP}:/tmp/test-list.txt" "$localTemp" *> $null
if (Test-Path $localTemp) {
$lines = Get-Content $localTemp | Where-Object { $_.Trim() -ne '' }
Write-Host " Downloaded $($lines.Count) file paths"
Remove-Item $localTemp -ErrorAction SilentlyContinue
} else {
Write-Host " ERROR: SCP failed to download file"
}
Write-Host "`n=== Step 6: Cleanup ==="
& $SSH -i $SSH_KEY -o BatchMode=yes -o ConnectTimeout=10 "${NAS_USER}@${NAS_IP}" "rm -f /tmp/test-list.txt" 2>&1 | Out-Null
Write-Host "`n=== DONE ==="