From eb6b753b5b3dc7976fc1823de1b3f071daf77205 Mon Sep 17 00:00:00 2001 From: Esben Petersen Date: Tue, 17 Oct 2017 12:57:34 +0200 Subject: [PATCH] add busy flag --- bin/pdf-bot.js | 24 +++++++++++++++++++----- package.json | 2 +- src/queue.js | 12 +++++++++++- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/bin/pdf-bot.js b/bin/pdf-bot.js index 07e1713..7ccce25 100755 --- a/bin/pdf-bot.js +++ b/bin/pdf-bot.js @@ -310,6 +310,11 @@ program .action(function (url) { openConfig() + var isBusy = queue.isBusy() + if (isBusy) { + return + } + var maxTries = configuration.queue.generationMaxTries var retryStrategy = configuration.queue.generationRetryStrategy var parallelism = configuration.queue.parallelism @@ -319,25 +324,34 @@ program if (jobs.length > 0) { var chunks = chunk(jobs, parallelism) - function runNextChunk(i = 1) { + function runNextChunk(k = 1) { if (chunks.length === 0) { + queue.setIsBusy(false) process.exit(0) } else { var chunk = chunks.shift() - console.log('Running chunk %s, %s chunks left', i, chunks.length) + console.log('Running chunk %s, %s chunks left', k, chunks.length) var promises = [] for(var i in chunk) { promises.push(processJob(chunk[i], configuration, false)) } - Promise.all(promises).then(function(){ - runNextChunk(i + 1) - }) + Promise.all(promises) + .then(function(){ + runNextChunk(k + 1) + }) + .catch(function(){ + queue.setIsBusy(false) + process.exit(1) + }) } } console.log('Found %s jobs, divided into %s chunks', jobs.length, chunks.length) + + queue.setIsBusy(true) + runNextChunk() } }) diff --git a/package.json b/package.json index 1c49e3a..a186cb0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pdf-bot", - "version": "0.4.1", + "version": "0.4.2", "author": "Esben Petersen ", "homepage": "https://github.com/esbenp/pdf-bot", "license": "MIT", diff --git a/src/queue.js b/src/queue.js index 03fa03a..b7170e1 100644 --- a/src/queue.js +++ b/src/queue.js @@ -28,8 +28,10 @@ function createQueue (path, options = {}, initialValue = []) { getNext: createQueueMethod(getNext), getAllUnfinished: createQueueMethod(getAllUnfinished), getNextWithoutSuccessfulPing: createQueueMethod(getNextWithoutSuccessfulPing), + isBusy: createQueueMethod(isBusy), processJob: createQueueMethod(processJob), - purge: createQueueMethod(purge) + purge: createQueueMethod(purge), + setIsBusy: createQueueMethod(setIsBusy) } } @@ -170,6 +172,10 @@ function getNextWithoutSuccessfulPing (db, shouldWait, maxTries = 5) { .value()[0] } +function isBusy (db) { + return db.get('is_busy').value() || false +} + function purge (db, failed = false, pristine = false, maxTries = 5) { var query = db.get('queue').slice(0) @@ -199,6 +205,10 @@ function purge (db, failed = false, pristine = false, maxTries = 5) { } } +function setIsBusy(db, isBusy) { + return db.set('is_busy', isBusy).write() +} + // ========== // PROCESSING // ==========