From b719a1861920ffc90b248abf1a07cfda2efb54e2 Mon Sep 17 00:00:00 2001 From: "dr.dimitru" Date: Tue, 25 Sep 2018 21:58:36 +0300 Subject: [PATCH] v2.0.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 👷‍♂️ Codebase maintenance, minor enhancements - 🤝 Compatibility with `mongodb@3.1.*` (*native-driver*) - 👨‍💻 Regular release --- index.js | 20 ++++--- package-lock.json | 131 ++++++++++++++-------------------------------- package.json | 36 +++++++++---- test/test.js | 18 +++---- 4 files changed, 89 insertions(+), 116 deletions(-) diff --git a/index.js b/index.js index b6ab40b..fcac7c4 100644 --- a/index.js +++ b/index.js @@ -1,7 +1,7 @@ const NoOp = () => {}; const _debug = (message) => { console.trace(); - console.warn(message); + console.warn('[josk]', message); }; const prefixRegex = /(setImmediate|setTimeout|setInterval)$/; @@ -34,8 +34,16 @@ module.exports = class JoSk { } this.collection = opts.db.collection(`__JobTasks__${this.prefix}`); - this.collection.ensureIndex({uid: 1}, {background: true, unique: true}); - this.collection.ensureIndex({executeAt: 1, inProgress: 1}, {background: true}); + this.collection.createIndex({uid: 1}, {background: true, unique: true}, (indexError) => { + if (indexError) { + _debug(indexError); + } + }); + this.collection.createIndex({executeAt: 1, inProgress: 1}, {background: true}, (indexError) => { + if (indexError) { + _debug(indexError); + } + }); if (this.resetOnInit) { this.collection.updateMany({}, { @@ -205,7 +213,7 @@ module.exports = class JoSk { this.collection.insertOne({ uid: uid, delay: delay, - executeAt: new Date(+new Date() + delay), + executeAt: new Date(Date.now() + delay), isInterval: isInterval, inProgress: false }, NoOp); @@ -218,11 +226,11 @@ module.exports = class JoSk { update.delay = delay; } - if (+task.executeAt > +new Date() + delay) { + if (+task.executeAt > Date.now() + delay) { if (!update) { update = {}; } - update.executeAt = new Date(+new Date() + delay); + update.executeAt = new Date(Date.now() + delay); } if (update) { diff --git a/package-lock.json b/package-lock.json index 7fdde02..9dee7a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "josk", - "version": "2.0.0", + "version": "2.0.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -17,9 +17,9 @@ "dev": true }, "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "1.0.0", @@ -27,15 +27,11 @@ } }, "browser-stdout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", - "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "bson": { - "version": "1.0.4", - "bundled": true - }, "chai": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", @@ -57,9 +53,9 @@ "dev": true }, "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "version": "2.15.1", + "resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", "dev": true }, "concat-map": { @@ -87,9 +83,9 @@ } }, "diff": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", - "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, "escape-string-regexp": { @@ -125,15 +121,15 @@ } }, "growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "he": { @@ -161,39 +157,25 @@ "josk": { "version": "file:", "dev": true, - "requires": { - "mongodb": "3.0.1" - }, "dependencies": { "bson": { - "version": "1.0.4", + "version": "1.1.0", "bundled": true }, "mongodb": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.1.tgz", - "integrity": "sha1-J47oAGJX7CJ5hZSmJZVGgl1t4bI=", - "requires": { - "mongodb-core": "3.0.1" - } + "integrity": "sha1-J47oAGJX7CJ5hZSmJZVGgl1t4bI=" }, "mongodb-core": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.1.tgz", - "integrity": "sha1-/23Dbulv9ZaVPYCmhA1nMbyS7+0=", - "requires": { - "bson": "1.0.4", - "require_optional": "1.0.1" - } + "integrity": "sha1-/23Dbulv9ZaVPYCmhA1nMbyS7+0=" }, "require_optional": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", - "requires": { - "resolve-from": "2.0.0", - "semver": "5.5.0" - } + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==" }, "resolve-from": { "version": "2.0.0", @@ -213,18 +195,18 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "1.1.11" } }, "minimist": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, "mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { @@ -232,38 +214,22 @@ } }, "mocha": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.0.0.tgz", - "integrity": "sha512-ukB2dF+u4aeJjc6IGtPNnJXfeby5d4ZqySlIBT0OEyva/DrMjVm5HkQxKnHDLKEfEQBsEnwTg9HHhtPHJdTd8w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", "dev": true, "requires": { - "browser-stdout": "1.3.0", - "commander": "2.11.0", + "browser-stdout": "1.3.1", + "commander": "2.15.1", "debug": "3.1.0", - "diff": "3.3.1", + "diff": "3.5.0", "escape-string-regexp": "1.0.5", "glob": "7.1.2", - "growl": "1.10.3", + "growl": "1.10.5", "he": "1.1.1", + "minimatch": "3.0.4", "mkdirp": "0.5.1", - "supports-color": "4.4.0" - } - }, - "mongodb": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.1.tgz", - "integrity": "sha1-J47oAGJX7CJ5hZSmJZVGgl1t4bI=", - "requires": { - "mongodb-core": "3.0.1" - } - }, - "mongodb-core": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.1.tgz", - "integrity": "sha1-/23Dbulv9ZaVPYCmhA1nMbyS7+0=", - "requires": { - "bson": "1.0.4", - "require_optional": "1.0.1" + "supports-color": "5.4.0" } }, "ms": { @@ -293,32 +259,13 @@ "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", "dev": true }, - "require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", - "requires": { - "resolve-from": "2.0.0", - "semver": "5.5.0" - } - }, - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" - }, "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "3.0.0" } }, "type-detect": { diff --git a/package.json b/package.json index 46f68f0..5de2830 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,11 @@ { "name": "josk", - "version": "2.0.1", + "version": "2.0.2", "description": "Task and jobs runner. With support of multiple clusters and servers setup", "main": "index.js", "scripts": { "test": "mocha" }, - "repository": { - "type": "git", - "url": "git://github.com/VeliovGroup/josk.git" - }, "keywords": [ "tasks", "jobs", @@ -22,15 +18,37 @@ "job", "schedule" ], + "tags": [ + "tasks", + "jobs", + "cluster", + "scheduler", + "agent", + "agenda", + "servers", + "task", + "job", + "schedule" + ], + "repository": { + "type": "git", + "url": "git://github.com/VeliovGroup/josk.git" + }, + "bugs": { + "url": "https://github.com/VeliovGroup/josk/issues" + }, + "homepage": "https://github.com/VeliovGroup/josk", "author": "dr.dimitru (https://veliovgroup.com)", "license": "BSD-3-Clause", "engines": { "node": ">=8.9.0" }, "devDependencies": { - "mongodb": "^3.0.1", - "mocha": "^5.0.0", "chai": "^4.1.2", - "josk": "file://./" - } + "josk": "file://./", + "mocha": "^5.2.0", + "mongodb": "^3.1.6", + "pathval": "^1.1.0" + }, + "dependencies": {} } diff --git a/test/test.js b/test/test.js index 66b9592..6dcb3cf 100644 --- a/test/test.js +++ b/test/test.js @@ -29,7 +29,7 @@ const testTimeout = (delay, job) => { let taskId; taskId = job.setTimeout((ready) => ready(), delay, `taskTimeout-${delay}`); callbacks[taskId] = done; - timestamps[taskId] = [+new Date()]; + timestamps[taskId] = [Date.now()]; }); }; @@ -72,7 +72,7 @@ describe('JoSk Instance', function () { } const actual = timestamps[details.uid][1] - timestamps[details.uid][0]; - const expected = +new Date() - timestamps[details.uid][0]; + const expected = Date.now() - timestamps[details.uid][0]; const time = expected - actual; // console.log(details.uid, {actual, expected, time, emit: actual - expected}); @@ -121,10 +121,10 @@ describe('JoSk Instance', function () { this.timeout(RANDOM_GAP * 4); it('setImmediate - Execution time', function (done) { - let time = +new Date(); + let time = Date.now(); job.setImmediate((ready) => { - // console.log("IMMEDIATE", +new Date() - time, ((RANDOM_GAP * 2) + 1), +new Date() - time < ((RANDOM_GAP * 2) + 1)); - assert.equal(+new Date() - time < ((RANDOM_GAP * 2) + 1), true, 'setImmediate - executed within appropriate time'); + // console.log("IMMEDIATE", Date.now() - time, ((RANDOM_GAP * 2) + 1), Date.now() - time < ((RANDOM_GAP * 2) + 1)); + assert.equal(Date.now() - time < ((RANDOM_GAP * 2) + 1), true, 'setImmediate - executed within appropriate time'); ready(); done(); }, 'taskImmediate-0'); @@ -137,16 +137,16 @@ describe('JoSk Instance', function () { this.timeout(13000); it('setInterval', function (done) { - let time = +new Date(); + let time = Date.now(); let i = 0; const taskId = job.setInterval((ready) => { i++; if (i === 1) { - time = +new Date() - time; + time = Date.now() - time; assert.equal(time < 2500 + RANDOM_GAP && time > 2500 - RANDOM_GAP, true, 'setInterval - first run within appropriate interval'); - time = +new Date(); + time = Date.now(); } else if (i === 2) { - time = +new Date() - time; + time = Date.now() - time; // console.log('taskInterval-zombie-2500', time, time < ZOMBIE_TIME + RANDOM_GAP, ZOMBIE_TIME + RANDOM_GAP); assert.equal(time < (ZOMBIE_TIME + RANDOM_GAP), true, 'setInterval - recovered within appropriate zombieTime time-frame');