test-project-analysis.mjsโข7.15 kB
// Test analisi progetto Visum giร caricato
import { spawn } from 'child_process';
console.log("๐ ANALISI PROGETTO VISUM CARICATO");
console.log("โ".repeat(40));
async function analyzeLoadedProject() {
console.log("๐ Analizzando il progetto Campoleone giร caricato...\n");
const script = `
try {
# Check if Visum is running
$visumProcess = Get-Process -Name "Visum250" -ErrorAction SilentlyContinue
if (!$visumProcess) {
Write-Host "โ Visum non รจ in esecuzione"
@{ success = $false; error = "Visum not running" } | ConvertTo-Json
exit
}
Write-Host "โ
Visum processo trovato: ID $($visumProcess.Id)"
Write-Host "๐ Finestra: $($visumProcess.MainWindowTitle)"
Write-Host ""
# Method 1: Try New-Object approach (create new instance and try to connect)
Write-Host "๐ Metodo 1: Creazione nuova istanza COM..."
try {
$visum = New-Object -ComObject "Visum.Visum"
Write-Host "โ
Oggetto COM creato"
# Try to connect to existing session
$visum.LoadVersion("2024") # Try different version
Write-Host "โ
Versione caricata"
# Check if we have network data
if ($visum.Net) {
$nodeCount = $visum.Net.Nodes.Count
$linkCount = $visum.Net.Links.Count
$zoneCount = $visum.Net.Zones.Count
Write-Host "๐ Network trovata!"
Write-Host " Nodi: $nodeCount"
Write-Host " Link: $linkCount"
Write-Host " Zone: $zoneCount"
if ($nodeCount -gt 0) {
@{
success = $true
method = "New-Object"
networkStats = @{
nodes = $nodeCount
links = $linkCount
zones = $zoneCount
}
message = "Network data found via New-Object"
} | ConvertTo-Json -Depth 3
exit
}
}
Write-Host "โ ๏ธ Network vuota con New-Object"
} catch {
Write-Host "โ New-Object fallito: $($_.Exception.Message)"
}
# Method 2: Try file-based analysis
Write-Host ""
Write-Host "๐ Metodo 2: Analisi diretta file progetto..."
$projectFile = "H:\\go\\italferr2025\\Campoleone\\100625_Versione_base_v0.3_sub_ok_priv.ver"
if (Test-Path $projectFile) {
$fileInfo = Get-Item $projectFile
Write-Host "โ
File progetto trovato:"
Write-Host " Path: $projectFile"
Write-Host " Size: $([math]::Round($fileInfo.Length / 1MB, 2)) MB"
Write-Host " Modified: $($fileInfo.LastWriteTime)"
# Try to read some basic info from the file
$fileSize = $fileInfo.Length
@{
success = $true
method = "File-based"
projectFile = $projectFile
fileSize = $fileSize
fileSizeMB = [math]::Round($fileSize / 1MB, 2)
lastModified = $fileInfo.LastWriteTime.ToString()
visumRunning = $true
processId = $visumProcess.Id
windowTitle = $visumProcess.MainWindowTitle
message = "Project file analyzed, Visum process confirmed"
} | ConvertTo-Json -Depth 3
} else {
Write-Host "โ File progetto non trovato: $projectFile"
@{
success = $false
error = "Project file not found"
processId = $visumProcess.Id
windowTitle = $visumProcess.MainWindowTitle
} | ConvertTo-Json
}
} catch {
Write-Host "โ Errore generale: $($_.Exception.Message)"
@{
success = $false
error = $_.Exception.Message
} | ConvertTo-Json
}
`;
const powershell = spawn('powershell', ['-ExecutionPolicy', 'Bypass', '-Command', script]);
let output = '';
let stderr = '';
powershell.stdout.on('data', (data) => {
const text = data.toString();
output += text;
console.log("๐ค", text.trim());
});
powershell.stderr.on('data', (data) => {
const text = data.toString();
stderr += text;
console.log("โ ๏ธ", text.trim());
});
return new Promise((resolve) => {
powershell.on('close', (code) => {
console.log(`\n๐ PowerShell chiuso con codice: ${code}`);
try {
const jsonStart = output.indexOf('{');
if (jsonStart !== -1) {
const jsonStr = output.substring(jsonStart);
const result = JSON.parse(jsonStr);
console.log("โ
Risultato analisi:", result);
resolve(result);
} else {
console.log("โ Nessun JSON trovato nell'output");
resolve({ success: false, error: 'No JSON found' });
}
} catch (e) {
console.log("โ Errore parsing JSON:", e.message);
console.log("Raw output:", output);
resolve({ success: false, error: 'JSON parse error' });
}
});
setTimeout(() => {
powershell.kill();
resolve({ success: false, error: 'Timeout' });
}, 20000);
});
}
async function suggestSolutions() {
console.log("\n๐ก SOLUZIONI ALTERNATIVE");
console.log("โ".repeat(25));
console.log("๐ง Opzioni per analisi network:");
console.log(" 1. โ
File-based: Analisi diretta file .ver");
console.log(" 2. ๐ Script Python: Usare VisumPy se disponibile");
console.log(" 3. ๐ฅ๏ธ Manual: Interfaccia Visum per export dati");
console.log(" 4. ๐ Registry: Controllare COM registration");
console.log(" 5. ๐ Alternative: Usare file di export CSV/XML");
console.log("\n๐ฏ RACCOMANDAZIONE:");
console.log(" Dato che Visum รจ visibile e il progetto รจ caricato,");
console.log(" possiamo usare l'interfaccia Visum per esportare");
console.log(" i dati di rete in formato analizzabile.");
}
async function runAnalysis() {
const result = await analyzeLoadedProject();
console.log("\n" + "โ".repeat(40));
console.log("๐ RISULTATO ANALISI");
console.log("โ".repeat(40));
if (result.success) {
console.log("๐ โ
ANALISI COMPLETATA!");
console.log(` Metodo: ${result.method}`);
if (result.networkStats) {
console.log("๐ Statistiche Network:");
console.log(` โข Nodi: ${result.networkStats.nodes}`);
console.log(` โข Link: ${result.networkStats.links}`);
console.log(` โข Zone: ${result.networkStats.zones}`);
}
if (result.projectFile) {
console.log("๐ File Progetto:");
console.log(` โข Path: ${result.projectFile}`);
console.log(` โข Size: ${result.fileSizeMB} MB`);
console.log(` โข Modified: ${result.lastModified}`);
}
console.log("๐ฅ๏ธ Visum Status:");
console.log(` โข Process ID: ${result.processId}`);
console.log(` โข Window: ${result.windowTitle || 'In caricamento...'}`);
} else {
console.log("โ ANALISI FALLITA");
console.log(` Errore: ${result.error}`);
}
await suggestSolutions();
}
runAnalysis().catch(console.error);