diff --git a/inventory-server/scripts/import-from-prod.js b/inventory-server/scripts/import-from-prod.js index 2c926dd..c3a90dc 100644 --- a/inventory-server/scripts/import-from-prod.js +++ b/inventory-server/scripts/import-from-prod.js @@ -10,9 +10,9 @@ const importPurchaseOrders = require('./import/purchase-orders'); dotenv.config({ path: path.join(__dirname, "../.env") }); // Constants to control which imports run -const IMPORT_CATEGORIES = true; -const IMPORT_PRODUCTS = true; -const IMPORT_ORDERS = true; +const IMPORT_CATEGORIES = false; +const IMPORT_PRODUCTS = false; +const IMPORT_ORDERS = false; const IMPORT_PURCHASE_ORDERS = true; // SSH configuration @@ -67,6 +67,13 @@ function cancelImport() { async function main() { const startTime = Date.now(); let connections; + let completedSteps = 0; + const totalSteps = [ + IMPORT_CATEGORIES, + IMPORT_PRODUCTS, + IMPORT_ORDERS, + IMPORT_PURCHASE_ORDERS + ].filter(Boolean).length; try { // Initial progress update @@ -74,9 +81,9 @@ async function main() { status: "running", operation: "Import process", message: "Initializing SSH tunnel...", - current: 0, - total: 4, // Total number of major steps - elapsed: formatElapsedTime((Date.now() - startTime) / 1000) + current: completedSteps, + total: totalSteps, + elapsed: formatElapsedTime(startTime) }); connections = await setupConnections(sshConfig); @@ -95,40 +102,42 @@ async function main() { if (IMPORT_CATEGORIES) { results.categories = await importCategories(prodConnection, localConnection); if (isImportCancelled) throw new Error("Import cancelled"); - currentStep++; + completedSteps++; } if (IMPORT_PRODUCTS) { results.products = await importProducts(prodConnection, localConnection); if (isImportCancelled) throw new Error("Import cancelled"); - currentStep++; + completedSteps++; } if (IMPORT_ORDERS) { results.orders = await importOrders(prodConnection, localConnection); if (isImportCancelled) throw new Error("Import cancelled"); - currentStep++; + completedSteps++; } if (IMPORT_PURCHASE_ORDERS) { results.purchaseOrders = await importPurchaseOrders(prodConnection, localConnection); if (isImportCancelled) throw new Error("Import cancelled"); - currentStep++; + completedSteps++; } const endTime = Date.now(); + const totalElapsedSeconds = Math.round((endTime - startTime) / 1000); outputProgress({ status: "complete", operation: "Import process", - message: "All imports completed successfully", - current: 4, - total: 4, - elapsed: formatElapsedTime((endTime - startTime) / 1000), + message: `All imports completed successfully in ${formatElapsedTime(totalElapsedSeconds)}`, + current: completedSteps, + total: totalSteps, + elapsed: formatElapsedTime(startTime), timing: { start_time: new Date(startTime).toISOString(), end_time: new Date(endTime).toISOString(), - elapsed_time: formatElapsedTime((endTime - startTime) / 1000), - elapsed_seconds: Math.round((endTime - startTime) / 1000) + elapsed_time: formatElapsedTime(startTime), + elapsed_seconds: totalElapsedSeconds, + total_duration: formatElapsedTime(totalElapsedSeconds) }, results }); @@ -136,20 +145,24 @@ async function main() { return results; } catch (error) { const endTime = Date.now(); + const totalElapsedSeconds = Math.round((endTime - startTime) / 1000); console.error("Error during import process:", error); outputProgress({ status: error.message === "Import cancelled" ? "cancelled" : "error", operation: "Import process", - message: error.message === "Import cancelled" ? "Import cancelled by user" : "Import failed", + message: error.message === "Import cancelled" + ? `Import cancelled by user after ${formatElapsedTime(totalElapsedSeconds)}` + : `Import failed after ${formatElapsedTime(totalElapsedSeconds)}`, error: error.message, - current: 0, - total: 4, - elapsed: formatElapsedTime((endTime - startTime) / 1000), + current: completedSteps, + total: totalSteps, + elapsed: formatElapsedTime(startTime), timing: { start_time: new Date(startTime).toISOString(), end_time: new Date(endTime).toISOString(), - elapsed_time: formatElapsedTime((endTime - startTime) / 1000), - elapsed_seconds: Math.round((endTime - startTime) / 1000) + elapsed_time: formatElapsedTime(startTime), + elapsed_seconds: totalElapsedSeconds, + total_duration: formatElapsedTime(totalElapsedSeconds) } }); throw error; diff --git a/inventory-server/scripts/metrics/utils/progress.js b/inventory-server/scripts/metrics/utils/progress.js index 8e81bde..6b66ceb 100644 --- a/inventory-server/scripts/metrics/utils/progress.js +++ b/inventory-server/scripts/metrics/utils/progress.js @@ -2,8 +2,15 @@ const fs = require('fs'); const path = require('path'); // Helper function to format elapsed time -function formatElapsedTime(startTime) { - const elapsed = Date.now() - startTime; +function formatElapsedTime(elapsed) { + // If elapsed is a timestamp, convert to elapsed milliseconds + if (elapsed instanceof Date || elapsed > 1000000000000) { + elapsed = Date.now() - elapsed; + } else { + // If elapsed is in seconds, convert to milliseconds + elapsed = elapsed * 1000; + } + const seconds = Math.floor(elapsed / 1000); const minutes = Math.floor(seconds / 60); const hours = Math.floor(minutes / 60);