aboutsummaryrefslogtreecommitdiff
path: root/src/jobd-master.js
diff options
context:
space:
mode:
authorEvgeny Zinoviev <me@ch1p.io>2021-03-03 02:16:38 +0300
committerEvgeny Zinoviev <me@ch1p.io>2021-03-03 02:16:38 +0300
commit03cda643ad0e248902e18b1073240d15b0345d33 (patch)
tree1683eaadaa828463d8110b513b2f92222d5763a6 /src/jobd-master.js
parentc497fd50e82cdc2928eff0bdd520db496374ba02 (diff)
jobd-master: support pause()/continue()
Diffstat (limited to 'src/jobd-master.js')
-rwxr-xr-xsrc/jobd-master.js69
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