const db = require('../db/knex'); const { runWorker, resetStaleProcessingJobs, } = require('../api_v1/scanner/faceScanWorker'); 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( `[runFaceScanWorker] ${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( '[runFaceScanWorker] errore:', error.stack || error.message || error, ); process.exitCode = 1; }) .finally(async () => { await db.destroy(); });