diff options
author | Evgeny Zinoviev <me@ch1p.io> | 2021-03-03 02:16:38 +0300 |
---|---|---|
committer | Evgeny Zinoviev <me@ch1p.io> | 2021-03-03 02:16:38 +0300 |
commit | 03cda643ad0e248902e18b1073240d15b0345d33 (patch) | |
tree | 1683eaadaa828463d8110b513b2f92222d5763a6 /src/jobd-master.js | |
parent | c497fd50e82cdc2928eff0bdd520db496374ba02 (diff) |
jobd-master: support pause()/continue()
Diffstat (limited to 'src/jobd-master.js')
-rwxr-xr-x | src/jobd-master.js | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/jobd-master.js b/src/jobd-master.js index 8ba0288..5839b1a 100755 --- a/src/jobd-master.js +++ b/src/jobd-master.js @@ -104,6 +104,8 @@ function initRequestHandler() { requestHandler.set('register-worker', onRegisterWorker) requestHandler.set('status', onStatus) requestHandler.set('run-manual', onRunManual) + requestHandler.set('pause', onPause) + requestHandler.set('continue', onContinue) } /** @@ -221,6 +223,73 @@ async function onRunManual(data, requestNo, connection) { ) } +/** + * @param {object} data + * @param {number} requestNo + * @param {Connection} connection + */ +function onPause(data, requestNo, connection) { + let targets + if ((targets = validateInputTargets(data, requestNo, connection)) === false) + return + + workers.pauseTargets(targets) + connection.send( + new ResponseMessage(requestNo) + .setData('ok') + ) +} + +/** + * @param {object} data + * @param {number} requestNo + * @param {Connection} connection + */ +function onContinue(data, requestNo, connection) { + let targets + if ((targets = validateInputTargets(data, requestNo, connection)) === false) + return + + workers.continueTargets(targets) + connection.send( + new ResponseMessage(requestNo) + .setData('ok') + ) +} + + +/** + * @private + * @param data + * @param requestNo + * @param connection + * @return {null|boolean|string[]} + */ +function validateInputTargets(data, requestNo, connection) { + // null means all targets + let targets = null + + if (data.targets !== undefined) { + targets = data.targets + + // validate data + try { + validateTargetsListFormat(targets) + + // note: we don't check target names here + // as in jobd + } catch (e) { + connection.send( + new ResponseMessage(requestNo) + .setError(e.message) + ) + return false + } + } + + return targets +} + function usage() { let s = `${process.argv[1]} OPTIONS |