test-json-communication.mjsโข5.94 kB
// DIAGNOSI: Test della comunicazione JSON con il processo Python persistente
import { PersistentVisumController } from "./build/persistent-visum-controller.js";
console.log("๐ DIAGNOSI: Comunicazione JSON Process Python");
console.log("=".repeat(60));
const controller = PersistentVisumController.getInstance();
async function diagnosisTest() {
try {
console.log("\n1๏ธโฃ Avviando processo persistente...");
const startResult = await controller.startPersistentVisumProcess();
if (!startResult.success) {
console.error("โ Impossibile avviare processo:", startResult.message);
return;
}
console.log(`โ
Processo avviato con ${startResult.nodes} nodi`);
console.log("\n2๏ธโฃ Test comunicazione JSON semplice...");
// Test 1: Network Stats (รจ riuscito prima)
console.log(" ๐ Test Network Stats...");
const statsStart = Date.now();
const statsResult = await controller.getNetworkStats();
const statsTime = Date.now() - statsStart;
console.log(` Risultato: ${statsResult.success ? 'โ
' : 'โ'} (${statsTime}ms)`);
if (statsResult.success) {
console.log(` Nodi: ${statsResult.result?.nodes}`);
console.log(` Persistente: ${statsResult.result?.persistent}`);
} else {
console.log(` Errore: ${statsResult.error}`);
}
// Test 2: Comando semplice personalizzato
console.log("\n ๐งช Test comando semplice...");
const simpleStart = Date.now();
const simpleResult = await controller.executeCustomCode(`
# Test semplice per diagnosi
result = {
'test': 'simple',
'success': True,
'nodes': visum.Net.Nodes.Count,
'timestamp': time.time()
}
`, "Test semplice");
const simpleTime = Date.now() - simpleStart;
console.log(` Risultato: ${simpleResult.success ? 'โ
' : 'โ'} (${simpleTime}ms)`);
if (simpleResult.success) {
console.log(` Test: ${simpleResult.result?.test}`);
console.log(` Nodi: ${simpleResult.result?.nodes}`);
} else {
console.log(` Errore: ${simpleResult.error}`);
}
// Test 3: Comando che potrebbe causare problemi
console.log("\n โ ๏ธ Test comando complesso...");
const complexStart = Date.now();
const complexResult = await controller.executeCustomCode(`
# Test complesso - potrebbe causare timeout
try:
# Operazione che potrebbe bloccarsi
nodes = visum.Net.Nodes
count = nodes.Count
# Test iterazione semplice
result = {
'test': 'complex',
'success': True,
'totalNodes': count,
'sample': [], # Non facciamo iterazioni complesse
'method': 'count_only'
}
except Exception as e:
result = {
'test': 'complex',
'success': False,
'error': str(e)
}
`, "Test complesso");
const complexTime = Date.now() - complexStart;
console.log(` Risultato: ${complexResult.success ? 'โ
' : 'โ'} (${complexTime}ms)`);
if (complexResult.success) {
console.log(` Test: ${complexResult.result?.test}`);
console.log(` Metodo: ${complexResult.result?.method}`);
} else {
console.log(` Errore: ${complexResult.error}`);
}
// Test 4: Health check
console.log("\n ๐ฉบ Test health check...");
const healthStart = Date.now();
const healthResult = await controller.checkInstanceHealth();
const healthTime = Date.now() - healthStart;
console.log(` Risultato: ${healthResult.success ? 'โ
' : 'โ'} (${healthTime}ms)`);
if (healthResult.success) {
console.log(` Richieste: ${healthResult.result?.requestCount}`);
console.log(` Progetto: ${healthResult.result?.projectLoaded ? 'Sร' : 'NO'}`);
} else {
console.log(` Errore: ${healthResult.error}`);
}
console.log("\n3๏ธโฃ Analisi problemi comunicazione:");
console.log(" " + "=".repeat(50));
const tests = [
{ name: "Network Stats", result: statsResult, time: statsTime },
{ name: "Comando Semplice", result: simpleResult, time: simpleTime },
{ name: "Comando Complesso", result: complexResult, time: complexTime },
{ name: "Health Check", result: healthResult, time: healthTime }
];
let successCount = 0;
let timeoutCount = 0;
tests.forEach((test, i) => {
const status = test.result.success ? 'โ
' : 'โ';
const timeStatus = test.time < 1000 ? 'โก' : test.time > 30000 ? '๐' : 'โณ';
console.log(` ${i+1}. ${test.name}: ${status} ${timeStatus} (${test.time}ms)`);
if (test.result.success) successCount++;
if (test.time > 30000) timeoutCount++;
if (!test.result.success && test.result.error?.includes('timeout')) {
console.log(` ๐จ TIMEOUT: ${test.result.error}`);
}
});
console.log(`\n ๐ Successi: ${successCount}/${tests.length}`);
console.log(` โฐ Timeout: ${timeoutCount}/${tests.length}`);
if (timeoutCount > 0) {
console.log("\n๐จ PROBLEMA IDENTIFICATO:");
console.log(" - Comunicazione JSON si blocca dopo primo comando");
console.log(" - Possibile problema nel parsing delle risposte");
console.log(" - Il processo Python non risponde correttamente");
} else if (successCount === tests.length) {
console.log("\nโ
COMUNICAZIONE FUNZIONANTE:");
console.log(" - Tutti i test sono passati");
console.log(" - La comunicazione JSON รจ robusta");
}
await controller.shutdown();
console.log("\n๐ Processo terminato per diagnosi");
} catch (error) {
console.error("\n๐ ERRORE CRITICO nella diagnosi:");
console.error(error);
}
}
// Esegui diagnosi
diagnosisTest().then(() => {
console.log("\n๐ Diagnosi completata");
process.exit(0);
}).catch(error => {
console.error("๐ Diagnosi fallita:", error);
process.exit(1);
});