Add calculate time tracking

This commit is contained in:
2025-02-02 21:22:46 -05:00
parent b926aba9ff
commit 5676e9094d
9 changed files with 382 additions and 48 deletions

View File

@@ -1,8 +1,11 @@
const { outputProgress, formatElapsedTime, estimateRemaining, calculateRate, logError } = require('./utils/progress');
const { getConnection } = require('./utils/db');
async function calculateBrandMetrics(startTime, totalProducts, processedCount, isCancelled = false) {
async function calculateBrandMetrics(startTime, totalProducts, processedCount = 0, isCancelled = false) {
const connection = await getConnection();
let success = false;
let processedOrders = 0;
try {
if (isCancelled) {
outputProgress({
@@ -20,9 +23,22 @@ async function calculateBrandMetrics(startTime, totalProducts, processedCount, i
elapsed_seconds: Math.round((Date.now() - startTime) / 1000)
}
});
return processedCount;
return {
processedProducts: processedCount,
processedOrders: 0,
processedPurchaseOrders: 0,
success
};
}
// Get order count that will be processed
const [orderCount] = await connection.query(`
SELECT COUNT(*) as count
FROM orders o
WHERE o.canceled = false
`);
processedOrders = orderCount[0].count;
outputProgress({
status: 'running',
operation: 'Starting brand metrics calculation',
@@ -178,7 +194,12 @@ async function calculateBrandMetrics(startTime, totalProducts, processedCount, i
}
});
if (isCancelled) return processedCount;
if (isCancelled) return {
processedProducts: processedCount,
processedOrders,
processedPurchaseOrders: 0,
success
};
// Calculate brand time-based metrics with optimized query
await connection.query(`
@@ -266,8 +287,25 @@ async function calculateBrandMetrics(startTime, totalProducts, processedCount, i
}
});
return processedCount;
// If we get here, everything completed successfully
success = true;
// Update calculate_status
await connection.query(`
INSERT INTO calculate_status (module_name, last_calculation_timestamp)
VALUES ('brand_metrics', NOW())
ON DUPLICATE KEY UPDATE last_calculation_timestamp = NOW()
`);
return {
processedProducts: processedCount,
processedOrders,
processedPurchaseOrders: 0,
success
};
} catch (error) {
success = false;
logError(error, 'Error calculating brand metrics');
throw error;
} finally {