Refactor import scripts with improved progress tracking and time formatting

This commit is contained in:
2025-01-29 13:47:33 -05:00
parent 81a724db9d
commit d60b2d4fae
2 changed files with 44 additions and 24 deletions

View File

@@ -10,9 +10,9 @@ const importPurchaseOrders = require('./import/purchase-orders');
dotenv.config({ path: path.join(__dirname, "../.env") }); dotenv.config({ path: path.join(__dirname, "../.env") });
// Constants to control which imports run // Constants to control which imports run
const IMPORT_CATEGORIES = true; const IMPORT_CATEGORIES = false;
const IMPORT_PRODUCTS = true; const IMPORT_PRODUCTS = false;
const IMPORT_ORDERS = true; const IMPORT_ORDERS = false;
const IMPORT_PURCHASE_ORDERS = true; const IMPORT_PURCHASE_ORDERS = true;
// SSH configuration // SSH configuration
@@ -67,6 +67,13 @@ function cancelImport() {
async function main() { async function main() {
const startTime = Date.now(); const startTime = Date.now();
let connections; let connections;
let completedSteps = 0;
const totalSteps = [
IMPORT_CATEGORIES,
IMPORT_PRODUCTS,
IMPORT_ORDERS,
IMPORT_PURCHASE_ORDERS
].filter(Boolean).length;
try { try {
// Initial progress update // Initial progress update
@@ -74,9 +81,9 @@ async function main() {
status: "running", status: "running",
operation: "Import process", operation: "Import process",
message: "Initializing SSH tunnel...", message: "Initializing SSH tunnel...",
current: 0, current: completedSteps,
total: 4, // Total number of major steps total: totalSteps,
elapsed: formatElapsedTime((Date.now() - startTime) / 1000) elapsed: formatElapsedTime(startTime)
}); });
connections = await setupConnections(sshConfig); connections = await setupConnections(sshConfig);
@@ -95,40 +102,42 @@ async function main() {
if (IMPORT_CATEGORIES) { if (IMPORT_CATEGORIES) {
results.categories = await importCategories(prodConnection, localConnection); results.categories = await importCategories(prodConnection, localConnection);
if (isImportCancelled) throw new Error("Import cancelled"); if (isImportCancelled) throw new Error("Import cancelled");
currentStep++; completedSteps++;
} }
if (IMPORT_PRODUCTS) { if (IMPORT_PRODUCTS) {
results.products = await importProducts(prodConnection, localConnection); results.products = await importProducts(prodConnection, localConnection);
if (isImportCancelled) throw new Error("Import cancelled"); if (isImportCancelled) throw new Error("Import cancelled");
currentStep++; completedSteps++;
} }
if (IMPORT_ORDERS) { if (IMPORT_ORDERS) {
results.orders = await importOrders(prodConnection, localConnection); results.orders = await importOrders(prodConnection, localConnection);
if (isImportCancelled) throw new Error("Import cancelled"); if (isImportCancelled) throw new Error("Import cancelled");
currentStep++; completedSteps++;
} }
if (IMPORT_PURCHASE_ORDERS) { if (IMPORT_PURCHASE_ORDERS) {
results.purchaseOrders = await importPurchaseOrders(prodConnection, localConnection); results.purchaseOrders = await importPurchaseOrders(prodConnection, localConnection);
if (isImportCancelled) throw new Error("Import cancelled"); if (isImportCancelled) throw new Error("Import cancelled");
currentStep++; completedSteps++;
} }
const endTime = Date.now(); const endTime = Date.now();
const totalElapsedSeconds = Math.round((endTime - startTime) / 1000);
outputProgress({ outputProgress({
status: "complete", status: "complete",
operation: "Import process", operation: "Import process",
message: "All imports completed successfully", message: `All imports completed successfully in ${formatElapsedTime(totalElapsedSeconds)}`,
current: 4, current: completedSteps,
total: 4, total: totalSteps,
elapsed: formatElapsedTime((endTime - startTime) / 1000), elapsed: formatElapsedTime(startTime),
timing: { timing: {
start_time: new Date(startTime).toISOString(), start_time: new Date(startTime).toISOString(),
end_time: new Date(endTime).toISOString(), end_time: new Date(endTime).toISOString(),
elapsed_time: formatElapsedTime((endTime - startTime) / 1000), elapsed_time: formatElapsedTime(startTime),
elapsed_seconds: Math.round((endTime - startTime) / 1000) elapsed_seconds: totalElapsedSeconds,
total_duration: formatElapsedTime(totalElapsedSeconds)
}, },
results results
}); });
@@ -136,20 +145,24 @@ async function main() {
return results; return results;
} catch (error) { } catch (error) {
const endTime = Date.now(); const endTime = Date.now();
const totalElapsedSeconds = Math.round((endTime - startTime) / 1000);
console.error("Error during import process:", error); console.error("Error during import process:", error);
outputProgress({ outputProgress({
status: error.message === "Import cancelled" ? "cancelled" : "error", status: error.message === "Import cancelled" ? "cancelled" : "error",
operation: "Import process", 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, error: error.message,
current: 0, current: completedSteps,
total: 4, total: totalSteps,
elapsed: formatElapsedTime((endTime - startTime) / 1000), elapsed: formatElapsedTime(startTime),
timing: { timing: {
start_time: new Date(startTime).toISOString(), start_time: new Date(startTime).toISOString(),
end_time: new Date(endTime).toISOString(), end_time: new Date(endTime).toISOString(),
elapsed_time: formatElapsedTime((endTime - startTime) / 1000), elapsed_time: formatElapsedTime(startTime),
elapsed_seconds: Math.round((endTime - startTime) / 1000) elapsed_seconds: totalElapsedSeconds,
total_duration: formatElapsedTime(totalElapsedSeconds)
} }
}); });
throw error; throw error;

View File

@@ -2,8 +2,15 @@ const fs = require('fs');
const path = require('path'); const path = require('path');
// Helper function to format elapsed time // Helper function to format elapsed time
function formatElapsedTime(startTime) { function formatElapsedTime(elapsed) {
const elapsed = Date.now() - startTime; // 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 seconds = Math.floor(elapsed / 1000);
const minutes = Math.floor(seconds / 60); const minutes = Math.floor(seconds / 60);
const hours = Math.floor(minutes / 60); const hours = Math.floor(minutes / 60);