← 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 ═══');