89 lines
2.4 KiB
JavaScript
89 lines
2.4 KiB
JavaScript
const path = require('path');
|
|
const { spawn } = require('child_process');
|
|
|
|
function outputProgress(data) {
|
|
if (!data.status) {
|
|
data = {
|
|
status: 'running',
|
|
...data
|
|
};
|
|
}
|
|
console.log(JSON.stringify(data));
|
|
}
|
|
|
|
function runScript(scriptPath) {
|
|
return new Promise((resolve, reject) => {
|
|
const child = spawn('node', [scriptPath], {
|
|
stdio: ['inherit', 'pipe', 'pipe']
|
|
});
|
|
|
|
let output = '';
|
|
|
|
child.stdout.on('data', (data) => {
|
|
const lines = data.toString().split('\n');
|
|
lines.filter(line => line.trim()).forEach(line => {
|
|
try {
|
|
console.log(line); // Pass through the JSON output
|
|
output += line + '\n';
|
|
} catch (e) {
|
|
console.log(line); // If not JSON, just log it directly
|
|
}
|
|
});
|
|
});
|
|
|
|
child.stderr.on('data', (data) => {
|
|
console.error(data.toString());
|
|
});
|
|
|
|
child.on('close', (code) => {
|
|
if (code !== 0) {
|
|
reject(new Error(`Script ${scriptPath} exited with code ${code}`));
|
|
} else {
|
|
resolve(output);
|
|
}
|
|
});
|
|
|
|
child.on('error', (err) => {
|
|
reject(err);
|
|
});
|
|
});
|
|
}
|
|
|
|
async function fullUpdate() {
|
|
try {
|
|
// Step 1: Import from Production
|
|
outputProgress({
|
|
operation: 'Starting full update',
|
|
message: 'Step 1/2: Importing from production...'
|
|
});
|
|
await runScript(path.join(__dirname, 'import-from-prod.js'));
|
|
|
|
// Step 2: Calculate Metrics
|
|
outputProgress({
|
|
operation: 'Import complete',
|
|
message: 'Step 2/2: Calculating metrics...'
|
|
});
|
|
await runScript(path.join(__dirname, 'calculate-metrics.js'));
|
|
|
|
outputProgress({
|
|
status: 'complete',
|
|
operation: 'Full update complete',
|
|
message: 'Successfully completed import and metrics calculation'
|
|
});
|
|
} catch (error) {
|
|
outputProgress({
|
|
status: 'error',
|
|
operation: 'Full update failed',
|
|
error: error.message,
|
|
stack: error.stack
|
|
});
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
// Run if called directly
|
|
if (require.main === module) {
|
|
fullUpdate();
|
|
}
|
|
|
|
module.exports = fullUpdate;
|