Refactor import scripts with improved progress tracking and time formatting
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user