Add enhanced distribution chart debugging functions
- Add testDistributionUpdate() for backend data integration testing - Add testSimulationFlow() for complete simulation monitoring - Enhance testDistributionChart() with comprehensive diagnostics - These functions help isolate the specific failure point for the wealth distribution histogram issue - Can be called from browser console for production debugging
This commit is contained in:
@@ -21,6 +21,127 @@ window.testWebSocket = async function() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enhanced distribution update test function
|
||||||
|
* Call from browser console: testDistributionUpdate()
|
||||||
|
*/
|
||||||
|
window.testDistributionUpdate = async function() {
|
||||||
|
debugLog('=== ENHANCED DISTRIBUTION UPDATE TEST ===');
|
||||||
|
|
||||||
|
// Test 1: Check current state
|
||||||
|
debugLog('Current state check', {
|
||||||
|
chartExists: !!charts.distribution,
|
||||||
|
canvasExists: !!document.getElementById('distributionChart'),
|
||||||
|
simulationId: currentSimulation.id,
|
||||||
|
distributionData: currentSimulation.data.distribution
|
||||||
|
});
|
||||||
|
|
||||||
|
// Test 2: Try to fetch distribution from backend directly
|
||||||
|
try {
|
||||||
|
const debugResponse = await fetch('/debug');
|
||||||
|
const debugData = await debugResponse.json();
|
||||||
|
debugLog('Backend debug data', debugData.distribution_test);
|
||||||
|
|
||||||
|
if (debugData.distribution_test) {
|
||||||
|
// Test updating chart with backend data
|
||||||
|
const testData = debugData.distribution_test;
|
||||||
|
if (charts.distribution && testData.labels && testData.counts) {
|
||||||
|
debugLog('Testing with backend debug data', testData);
|
||||||
|
charts.distribution.data.labels = testData.labels;
|
||||||
|
charts.distribution.data.datasets[0].data = testData.counts;
|
||||||
|
charts.distribution.update();
|
||||||
|
debugLog('✅ Backend debug data update: SUCCESS');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
debugLog('❌ Backend debug test failed', error);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test 3: Check canvas rendering
|
||||||
|
const canvas = document.getElementById('distributionChart');
|
||||||
|
if (canvas) {
|
||||||
|
debugLog('Canvas properties', {
|
||||||
|
width: canvas.width,
|
||||||
|
height: canvas.height,
|
||||||
|
clientWidth: canvas.clientWidth,
|
||||||
|
clientHeight: canvas.clientHeight,
|
||||||
|
style: canvas.style.cssText
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
debugLog('=== ENHANCED TEST COMPLETE ===');
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test simulation flow for distribution data
|
||||||
|
* Call from browser console: testSimulationFlow()
|
||||||
|
*/
|
||||||
|
window.testSimulationFlow = async function() {
|
||||||
|
debugLog('=== SIMULATION FLOW TEST ===');
|
||||||
|
|
||||||
|
// Test 1: Create test simulation
|
||||||
|
try {
|
||||||
|
const testParams = {
|
||||||
|
r_rate: 0.05,
|
||||||
|
g_rate: 0.03,
|
||||||
|
num_agents: 20,
|
||||||
|
iterations: 50,
|
||||||
|
initial_capital: 1000,
|
||||||
|
initial_consumption: 1000
|
||||||
|
};
|
||||||
|
|
||||||
|
debugLog('Creating test simulation', testParams);
|
||||||
|
const createResponse = await fetch('/api/simulation', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify(testParams)
|
||||||
|
});
|
||||||
|
|
||||||
|
const createData = await createResponse.json();
|
||||||
|
debugLog('Test simulation created', createData);
|
||||||
|
|
||||||
|
if (createData.simulation_id) {
|
||||||
|
// Test 2: Start simulation and monitor
|
||||||
|
debugLog('Starting test simulation');
|
||||||
|
const startResponse = await fetch(`/api/simulation/${createData.simulation_id}/start`, {
|
||||||
|
method: 'POST'
|
||||||
|
});
|
||||||
|
|
||||||
|
if (startResponse.ok) {
|
||||||
|
debugLog('Test simulation started, monitoring for 5 seconds...');
|
||||||
|
|
||||||
|
// Monitor for updates
|
||||||
|
let monitorCount = 0;
|
||||||
|
const monitorInterval = setInterval(async () => {
|
||||||
|
try {
|
||||||
|
const dataResponse = await fetch(`/api/simulation/${createData.simulation_id}/data?include_distribution=true`);
|
||||||
|
const simData = await dataResponse.json();
|
||||||
|
|
||||||
|
debugLog(`Monitor ${monitorCount}`, {
|
||||||
|
iteration: simData.latest_snapshot?.iteration,
|
||||||
|
hasDistribution: !!simData.distribution,
|
||||||
|
distribution: simData.distribution
|
||||||
|
});
|
||||||
|
|
||||||
|
monitorCount++;
|
||||||
|
if (monitorCount >= 5) {
|
||||||
|
clearInterval(monitorInterval);
|
||||||
|
debugLog('Test monitoring complete');
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
debugLog('Monitor error', error);
|
||||||
|
clearInterval(monitorInterval);
|
||||||
|
}
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
debugLog('❌ Simulation flow test failed', error);
|
||||||
|
}
|
||||||
|
|
||||||
|
debugLog('=== SIMULATION FLOW TEST STARTED ===');
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Production debugging test function
|
* Production debugging test function
|
||||||
* Call from browser console: testDistributionChart()
|
* Call from browser console: testDistributionChart()
|
||||||
|
Reference in New Issue
Block a user