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 calculateCategoryMetrics(startTime, totalProducts, processedCount
const connection = await getConnection();
let success = false;
const BATCH_SIZE = 5000;
let myProcessedProducts = 0; // Not *directly* processing products, but tracking categories
try {
// Get last calculation timestamp
const [lastCalc] = await connection.query(`
@@ -28,12 +29,12 @@ async function calculateCategoryMetrics(startTime, totalProducts, processedCount
OR o.id IS NOT NULL
)
`, [lastCalculationTime, lastCalculationTime]);
const totalCategories = categoryCount[0].count;
const totalCategories = categoryCount[0].count; // Track total *categories*
if (totalCategories === 0) {
console.log('No categories need metric updates');
return {
processedProducts: 0,
processedProducts: 0, // Not directly processing products
processedOrders: 0,
processedPurchaseOrders: 0,
success: true
@@ -44,12 +45,12 @@ async function calculateCategoryMetrics(startTime, totalProducts, processedCount
outputProgress({
status: 'cancelled',
operation: 'Category metrics calculation cancelled',
current: processedCount,
total: totalCategories,
current: processedCount, // Use passed-in value
total: totalCategories, // Report total *categories*
elapsed: formatElapsedTime(startTime),
remaining: null,
rate: calculateRate(startTime, processedCount),
percentage: ((processedCount / totalCategories) * 100).toFixed(1),
percentage: ((processedCount / totalCategories) * 100).toFixed(1), // Base on categories
timing: {
start_time: new Date(startTime).toISOString(),
end_time: new Date().toISOString(),
@@ -57,7 +58,7 @@ async function calculateCategoryMetrics(startTime, totalProducts, processedCount
}
});
return {
processedProducts: processedCount,
processedProducts: 0, // Not directly processing products
processedOrders: 0,
processedPurchaseOrders: 0,
success
@@ -67,12 +68,12 @@ async function calculateCategoryMetrics(startTime, totalProducts, processedCount
outputProgress({
status: 'running',
operation: 'Starting category metrics calculation',
current: processedCount,
total: totalCategories,
current: processedCount, // Use passed-in value
total: totalCategories, // Report total *categories*
elapsed: formatElapsedTime(startTime),
remaining: estimateRemaining(startTime, processedCount, totalCategories),
rate: calculateRate(startTime, processedCount),
percentage: ((processedCount / totalCategories) * 100).toFixed(1),
percentage: ((processedCount / totalCategories) * 100).toFixed(1), // Base on categories
timing: {
start_time: new Date(startTime).toISOString(),
end_time: new Date().toISOString(),
@@ -82,6 +83,7 @@ async function calculateCategoryMetrics(startTime, totalProducts, processedCount
// Process in batches
let lastCatId = 0;
let processedCategories = 0; // Track processed categories
while (true) {
if (isCancelled) break;
@@ -247,17 +249,17 @@ async function calculateCategoryMetrics(startTime, totalProducts, processedCount
await connection.query('DROP TEMPORARY TABLE IF EXISTS temp_sales_stats');
lastCatId = batch[batch.length - 1].cat_id;
processedCount += batch.length;
processedCategories += batch.length; // Increment processed *categories*
outputProgress({
status: 'running',
operation: 'Processing category metrics batch',
current: processedCount,
total: totalCategories,
current: processedCount + processedCategories, // Use cumulative category count
total: totalCategories, // Report total *categories*
elapsed: formatElapsedTime(startTime),
remaining: estimateRemaining(startTime, processedCount, totalCategories),
rate: calculateRate(startTime, processedCount),
percentage: ((processedCount / totalCategories) * 100).toFixed(1),
remaining: estimateRemaining(startTime, processedCount + processedCategories, totalCategories),
rate: calculateRate(startTime, processedCount + processedCategories),
percentage: (((processedCount + processedCategories) / totalCategories) * 100).toFixed(1), // Base on categories
timing: {
start_time: new Date(startTime).toISOString(),
end_time: new Date().toISOString(),
@@ -268,7 +270,7 @@ async function calculateCategoryMetrics(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)
@@ -277,7 +279,7 @@ async function calculateCategoryMetrics(startTime, totalProducts, processedCount
`);
return {
processedProducts: processedCount,
processedProducts: 0, // Not directly processing products
processedOrders: 0,
processedPurchaseOrders: 0,
success