← back to Butlr
scripts/diagnose-wss.js
30 lines
#!/usr/bin/env node
const { execSync } = require('child_process');
console.log('═══ DIAGNOSE WSS v3 ═══\n');
function run(cmd) {
try { return execSync(cmd, { encoding: 'utf8', maxBuffer: 5_000_000 }).trim(); }
catch (e) { return `<err: ${e.message.split('\n')[0]}>`; }
}
console.log('── pm2 butlr logs around 00:30 (last 800 lines, grep US33rQWN/stream/upgrade) ──');
const logs = run('pm2 logs butlr --lines 800 --nostream --raw 2>&1');
const lines = logs.split('\n');
const hits = lines.filter(l =>
/US33rQWN|listen-bridge|stream|upgrade|handleUpgrade|listener|ws.*open|ws.*close|mulaw|pcm/i.test(l)
);
console.log(hits.slice(-50).join('\n'));
console.log('\n── any WS errors in last 800 lines? ──');
const errs = lines.filter(l => /\bws\b.*error|websocket.*error|ECONNRESET|EPIPE|stream.*error/i.test(l));
console.log(errs.slice(-15).join('\n') || '(none)');
console.log('\n── nginx error log: did upgrade fail anywhere? ──');
console.log(run('tail -200 /var/log/nginx/butlr.error.log 2>/dev/null | tail -20'));
console.log('\n── PCM/MP3 file for US33rQWN? ──');
console.log(run('ls -la /root/public-projects/butlr/data/recordings/US33rQWN.* 2>/dev/null'));
console.log('\n═══ END ═══');