monitor-visum-servers.jsā¢6.88 kB
#!/usr/bin/env node
/**
* Monitor Server Visum - Monitoraggio continuo dei server TCP e processi Visum
*/
import { spawn } from 'child_process';
console.log('š MONITOR SERVER VISUM - Avvio monitoraggio continuo...');
console.log('š Monitoraggio: Porte TCP 79xx, processi Visum, Python, Node');
console.log('ā° Refresh ogni 5 secondi...\n');
let iteration = 0;
function checkServers() {
iteration++;
console.log(`\n${'='.repeat(60)}`);
console.log(`š MONITOR #${iteration} - ${new Date().toLocaleTimeString()}`);
console.log('='.repeat(60));
// 1. Controllo porte TCP 79xx
console.log('\nš PORTE TCP 79xx (Server Visum):');
const netstat = spawn('netstat', ['-ano']);
let netstatOutput = '';
netstat.stdout.on('data', (data) => {
netstatOutput += data.toString();
});
netstat.on('close', () => {
const tcpLines = netstatOutput.split('\n').filter(line =>
line.includes(':79') && line.includes('LISTENING')
);
if (tcpLines.length === 0) {
console.log(' ā Nessun server TCP attivo su porte 79xx');
} else {
tcpLines.forEach(line => {
const parts = line.trim().split(/\s+/);
console.log(` ā
${parts[1]} - PID ${parts[4]}`);
});
}
// 2. Controllo processi Visum
setTimeout(() => {
console.log('\nš„ļø PROCESSI VISUM:');
const visumCheck = spawn('tasklist', ['/FI', 'IMAGENAME eq Visum*.exe']);
let visumOutput = '';
visumCheck.stdout.on('data', (data) => {
visumOutput += data.toString();
});
visumCheck.on('close', () => {
const visumLines = visumOutput.split('\n').filter(line =>
line.includes('Visum') && line.includes('.exe')
);
if (visumLines.length === 0) {
console.log(' ā Nessun processo Visum attivo');
} else {
visumLines.forEach(line => {
const parts = line.trim().split(/\s+/);
console.log(` ā
${parts[0]} - PID ${parts[1]} - ${parts[4]}`);
});
}
// 3. Controllo processi Python
setTimeout(() => {
console.log('\nš PROCESSI PYTHON:');
const pythonCheck = spawn('tasklist', ['/FI', 'IMAGENAME eq python.exe']);
let pythonOutput = '';
pythonCheck.stdout.on('data', (data) => {
pythonOutput += data.toString();
});
pythonCheck.on('close', () => {
const pythonLines = pythonOutput.split('\n').filter(line =>
line.includes('python.exe')
);
if (pythonLines.length === 0) {
console.log(' ā Nessun processo Python attivo');
} else {
pythonLines.forEach(line => {
const parts = line.trim().split(/\s+/);
console.log(` ā
${parts[0]} - PID ${parts[1]} - ${parts[4]}`);
});
}
// 4. Controllo processi Node
setTimeout(() => {
console.log('\nš¦ PROCESSI NODE:');
const nodeCheck = spawn('tasklist', ['/FI', 'IMAGENAME eq node.exe']);
let nodeOutput = '';
nodeCheck.stdout.on('data', (data) => {
nodeOutput += data.toString();
});
nodeCheck.on('close', () => {
const nodeLines = nodeOutput.split('\n').filter(line =>
line.includes('node.exe')
);
if (nodeLines.length === 0) {
console.log(' ā Nessun processo Node attivo');
} else {
nodeLines.forEach(line => {
const parts = line.trim().split(/\s+/);
console.log(` ā
${parts[0]} - PID ${parts[1]} - ${parts[4]}`);
});
}
// 5. Controllo registry server
setTimeout(() => {
console.log('\nš REGISTRY SERVER:');
try {
const fs = require('fs');
if (fs.existsSync('server-registry.json')) {
const registry = JSON.parse(fs.readFileSync('server-registry.json', 'utf8'));
if (Object.keys(registry).length === 0) {
console.log(' š Registry vuoto');
} else {
Object.entries(registry).forEach(([id, info]) => {
console.log(` š ${info.projectName} - Porta ${info.port} - PID ${info.pid} - ${info.status}`);
});
}
} else {
console.log(' š Nessun registry trovato');
}
} catch (e) {
console.log(' ā Errore lettura registry:', e.message);
}
}, 100);
});
}, 100);
});
}, 100);
});
}, 100);
});
}
// Avvia monitoraggio
checkServers();
const monitor = setInterval(checkServers, 5000);
// Gestione Ctrl+C
process.on('SIGINT', () => {
console.log('\n\nš Monitor terminato dall\'utente');
clearInterval(monitor);
process.exit(0);
});
console.log('š” Premi Ctrl+C per terminare il monitoraggio');