From 23c16a2c80f0614d0b31cba363bca66e1a60687b Mon Sep 17 00:00:00 2001 From: Evgeny Zinoviev Date: Tue, 16 Mar 2021 01:06:14 +0300 Subject: jobd: add add-target()/remove-target(); code refactoring --- src/lib/data-validator.js | 58 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) (limited to 'src/lib/data-validator.js') diff --git a/src/lib/data-validator.js b/src/lib/data-validator.js index 7419b34..74827c1 100644 --- a/src/lib/data-validator.js +++ b/src/lib/data-validator.js @@ -11,6 +11,11 @@ const typeNames = { const logger = getLogger('data-validator') + +/**************************************/ +/** Common Functions **/ +/**************************************/ + /** * @param {string} expectedType * @param value @@ -69,7 +74,12 @@ function validateObjectSchema(data, schema) { } } -function validateTargetsListFormat(targets) { + +/********************************************/ +/** Request input data validators */ +/********************************************/ + +function validateInputTargetsListFormat(targets) { if (!Array.isArray(targets)) throw new Error('targets must be array') @@ -83,7 +93,51 @@ function validateTargetsListFormat(targets) { } } +function validateInputTargetAndConcurrency(data, onlyTarget = false) { + const schema = [ + ['target', 's', true], + ] + + if (!onlyTarget) { + schema.push( + ['concurrency', 'i', true] + ) + } + + validateObjectSchema(data, schema) + + if (!onlyTarget && data.concurrency <= 0) + throw new Error('Invalid concurrency value.') +} + +/** + * @param data + * @param {Worker|null} worker + * @return {null|string[]} + */ +function validateInputTargets(data, worker) { + // null means all targets + let targets = null + + if (data.targets !== undefined) { + targets = data.targets + + validateInputTargetsListFormat(targets) + + if (worker !== null) { + for (const t of targets) { + if (!worker.hasTarget(t)) + throw new Error(`invalid target '${t}'`) + } + } + } + + return targets +} + module.exports = { validateObjectSchema, - validateTargetsListFormat + validateInputTargetsListFormat, + validateInputTargetAndConcurrency, + validateInputTargets, } \ No newline at end of file -- cgit v1.2.3