153 lines
2.5 KiB
JavaScript
153 lines
2.5 KiB
JavaScript
const db = require('../db/knex');
|
|
|
|
const {
|
|
runWorker,
|
|
resetStaleProcessingJobs,
|
|
} = require(
|
|
'../api_v1/scanner/geocodeWorker'
|
|
);
|
|
|
|
function parseArguments(argv) {
|
|
const options = {
|
|
maxJobs: null,
|
|
resetStaleMinutes: 30,
|
|
};
|
|
|
|
for (
|
|
let index = 0;
|
|
index < argv.length;
|
|
index += 1
|
|
) {
|
|
const argument = argv[index];
|
|
|
|
if (argument === '--max-jobs') {
|
|
const value = argv[index + 1];
|
|
|
|
if (value == null) {
|
|
throw new Error(
|
|
'Valore mancante dopo --max-jobs',
|
|
);
|
|
}
|
|
|
|
options.maxJobs = Number(value);
|
|
index += 1;
|
|
continue;
|
|
}
|
|
|
|
if (
|
|
argument
|
|
=== '--reset-stale-minutes'
|
|
) {
|
|
const value = argv[index + 1];
|
|
|
|
if (value == null) {
|
|
throw new Error(
|
|
'Valore mancante dopo '
|
|
+ '--reset-stale-minutes',
|
|
);
|
|
}
|
|
|
|
options.resetStaleMinutes =
|
|
Number(value);
|
|
|
|
index += 1;
|
|
continue;
|
|
}
|
|
|
|
throw new Error(
|
|
`Argomento sconosciuto: ${argument}`,
|
|
);
|
|
}
|
|
|
|
if (
|
|
options.maxJobs !== null
|
|
&& (
|
|
!Number.isInteger(options.maxJobs)
|
|
|| options.maxJobs <= 0
|
|
)
|
|
) {
|
|
throw new Error(
|
|
'--max-jobs deve essere '
|
|
+ 'un intero positivo',
|
|
);
|
|
}
|
|
|
|
if (
|
|
!Number.isFinite(
|
|
options.resetStaleMinutes
|
|
)
|
|
|| options.resetStaleMinutes <= 0
|
|
) {
|
|
throw new Error(
|
|
'--reset-stale-minutes '
|
|
+ 'deve essere positivo',
|
|
);
|
|
}
|
|
|
|
return options;
|
|
}
|
|
|
|
async function main() {
|
|
const options = parseArguments(
|
|
process.argv.slice(2),
|
|
);
|
|
|
|
let stopRequested = false;
|
|
|
|
const requestStop = (signal) => {
|
|
if (stopRequested) {
|
|
return;
|
|
}
|
|
|
|
stopRequested = true;
|
|
|
|
console.log(
|
|
`[runGeocodeWorker] ${signal}: `
|
|
+ 'arresto dopo il job corrente',
|
|
);
|
|
};
|
|
|
|
process.on(
|
|
'SIGINT',
|
|
() => requestStop('SIGINT'),
|
|
);
|
|
|
|
process.on(
|
|
'SIGTERM',
|
|
() => requestStop('SIGTERM'),
|
|
);
|
|
|
|
const resetJobs =
|
|
await resetStaleProcessingJobs(
|
|
options.resetStaleMinutes,
|
|
);
|
|
|
|
console.log({
|
|
stale_jobs_reset: resetJobs,
|
|
max_jobs: options.maxJobs,
|
|
});
|
|
|
|
const result = await runWorker({
|
|
maxJobs: options.maxJobs,
|
|
shouldStop: () => stopRequested,
|
|
});
|
|
|
|
console.log(
|
|
JSON.stringify(result, null, 2),
|
|
);
|
|
}
|
|
|
|
main()
|
|
.catch((error) => {
|
|
console.error(
|
|
'[runGeocodeWorker] errore:',
|
|
error.stack
|
|
|| error.message
|
|
|| error,
|
|
);
|
|
|
|
process.exitCode = 1;
|
|
})
|
|
.finally(async () => {
|
|
await db.destroy();
|
|
});
|