galleria_photo_face_rknn_op.../tools/runGeocodeWorker.js
2026-10-03 12:16:58 +02:00

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();
});