Apply gemini suggested calculate improvements

This commit is contained in:
2025-02-10 15:20:22 -05:00
parent 09f7103472
commit 90379386d6
8 changed files with 211 additions and 250 deletions

View File

@@ -5,7 +5,8 @@ async function calculateTimeAggregates(startTime, totalProducts, processedCount
const connection = await getConnection();
let success = false;
const BATCH_SIZE = 5000;
let myProcessedProducts = 0; // Track products processed *within this module*
try {
// Get last calculation timestamp
const [lastCalc] = await connection.query(`
@@ -15,17 +16,7 @@ async function calculateTimeAggregates(startTime, totalProducts, processedCount
`);
const lastCalculationTime = lastCalc[0]?.last_calculation_timestamp || '1970-01-01';
// Get total count of products needing updates
if (!totalProducts) {
const [productCount] = await connection.query(`
SELECT COUNT(DISTINCT p.pid) as count
FROM products p
LEFT JOIN orders o ON p.pid = o.pid AND o.updated > ?
WHERE p.updated > ?
OR o.pid IS NOT NULL
`, [lastCalculationTime, lastCalculationTime]);
totalProducts = productCount[0].count;
}
// We now receive totalProducts as an argument, so we don't need to query for it here.
if (totalProducts === 0) {
console.log('No products need time aggregate updates');
@@ -41,7 +32,7 @@ async function calculateTimeAggregates(startTime, totalProducts, processedCount
outputProgress({
status: 'cancelled',
operation: 'Time aggregates calculation cancelled',
current: processedCount,
current: processedCount, // Use passed-in value
total: totalProducts,
elapsed: formatElapsedTime(startTime),
remaining: null,
@@ -54,7 +45,7 @@ async function calculateTimeAggregates(startTime, totalProducts, processedCount
}
});
return {
processedProducts: processedCount,
processedProducts: myProcessedProducts, // Return only what *this* module processed
processedOrders: 0,
processedPurchaseOrders: 0,
success
@@ -64,7 +55,7 @@ async function calculateTimeAggregates(startTime, totalProducts, processedCount
outputProgress({
status: 'running',
operation: 'Starting time aggregates calculation',
current: processedCount,
current: processedCount, // Use passed-in value
total: totalProducts,
elapsed: formatElapsedTime(startTime),
remaining: estimateRemaining(startTime, processedCount, totalProducts),
@@ -253,17 +244,17 @@ async function calculateTimeAggregates(startTime, totalProducts, processedCount
await connection.query('DROP TEMPORARY TABLE IF EXISTS temp_time_aggregates');
lastPid = batch[batch.length - 1].pid;
processedCount += batch.length;
myProcessedProducts += batch.length; // Increment *this module's* count
outputProgress({
status: 'running',
operation: 'Processing time aggregates batch',
current: processedCount,
current: processedCount + myProcessedProducts, // Show cumulative progress
total: totalProducts,
elapsed: formatElapsedTime(startTime),
remaining: estimateRemaining(startTime, processedCount, totalProducts),
rate: calculateRate(startTime, processedCount),
percentage: ((processedCount / totalProducts) * 100).toFixed(1),
remaining: estimateRemaining(startTime, processedCount + myProcessedProducts, totalProducts),
rate: calculateRate(startTime, processedCount + myProcessedProducts),
percentage: (((processedCount + myProcessedProducts) / totalProducts) * 100).toFixed(1),
timing: {
start_time: new Date(startTime).toISOString(),
end_time: new Date().toISOString(),
@@ -274,7 +265,7 @@ async function calculateTimeAggregates(startTime, totalProducts, 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)
@@ -283,7 +274,7 @@ async function calculateTimeAggregates(startTime, totalProducts, processedCount
`);
return {
processedProducts: processedCount,
processedProducts: myProcessedProducts, // Return only what *this* module processed
processedOrders: 0,
processedPurchaseOrders: 0,
success