Fixes and enhancements for calculate metrics script

This commit is contained in:
2025-01-12 18:13:05 -05:00
parent 4d3f956a03
commit 35105f9474
3 changed files with 337 additions and 60 deletions

View File

@@ -141,8 +141,12 @@ router.get('/calculate-metrics/progress', (req, res) => {
'Access-Control-Allow-Credentials': 'true'
});
// Send an initial message to test the connection
res.write('data: {"status":"running","operation":"Initializing connection..."}\n\n');
// Send current progress if it exists
if (importProgress) {
res.write(`data: ${JSON.stringify(importProgress)}\n\n`);
} else {
res.write('data: {"status":"running","operation":"Initializing connection..."}\n\n');
}
// Add this client to the calculate-metrics set
calculateMetricsClients.add(res);
@@ -168,6 +172,21 @@ router.get('/status', (req, res) => {
});
});
// Add calculate-metrics status endpoint
router.get('/calculate-metrics/status', (req, res) => {
console.log('Calculate metrics status endpoint hit');
const calculateMetrics = require('../../scripts/calculate-metrics');
const progress = calculateMetrics.getProgress();
// Only consider it active if both the process is running and we have progress
const isActive = !!activeImport && !!progress;
res.json({
active: isActive,
progress: isActive ? progress : null
});
});
// Route to update CSV files
router.post('/update', async (req, res, next) => {
if (activeImport) {
@@ -532,6 +551,20 @@ router.post('/reset-metrics', async (req, res) => {
}
});
// Add calculate-metrics status endpoint
router.get('/calculate-metrics/status', (req, res) => {
const calculateMetrics = require('../../scripts/calculate-metrics');
const progress = calculateMetrics.getProgress();
// Only consider it active if both the process is running and we have progress
const isActive = !!activeImport && !!progress;
res.json({
active: isActive,
progress: isActive ? progress : null
});
});
// Add calculate-metrics endpoint
router.post('/calculate-metrics', async (req, res) => {
if (activeImport) {
@@ -554,16 +587,18 @@ router.post('/calculate-metrics', async (req, res) => {
try {
// Try to parse as JSON
const jsonData = JSON.parse(output);
sendProgressToClients(calculateMetricsClients, {
importProgress = {
status: 'running',
...jsonData
});
...jsonData.progress
};
sendProgressToClients(calculateMetricsClients, importProgress);
} catch (e) {
// If not JSON, send as plain progress
sendProgressToClients(calculateMetricsClients, {
importProgress = {
status: 'running',
progress: output
});
};
sendProgressToClients(calculateMetricsClients, importProgress);
}
});
@@ -574,15 +609,17 @@ router.post('/calculate-metrics', async (req, res) => {
try {
// Try to parse as JSON
const jsonData = JSON.parse(error);
sendProgressToClients(calculateMetricsClients, {
importProgress = {
status: 'error',
...jsonData
});
...jsonData.progress
};
sendProgressToClients(calculateMetricsClients, importProgress);
} catch {
sendProgressToClients(calculateMetricsClients, {
importProgress = {
status: 'error',
error
});
};
sendProgressToClients(calculateMetricsClients, importProgress);
}
});
@@ -590,22 +627,24 @@ router.post('/calculate-metrics', async (req, res) => {
activeImport.on('close', (code, signal) => {
wasCancelled = signal === 'SIGTERM' || code === 143;
activeImport = null;
importProgress = null;
if (code === 0 || wasCancelled) {
if (wasCancelled) {
sendProgressToClients(calculateMetricsClients, {
importProgress = {
status: 'cancelled',
operation: 'Operation cancelled'
});
};
sendProgressToClients(calculateMetricsClients, importProgress);
} else {
sendProgressToClients(calculateMetricsClients, {
importProgress = {
status: 'complete',
operation: 'Metrics calculation complete'
});
};
sendProgressToClients(calculateMetricsClients, importProgress);
}
resolve();
} else {
importProgress = null;
reject(new Error(`Metrics calculation process exited with code ${code}`));
}
});