Comparing version 1.0.4 to 1.0.5
@@ -0,5 +1,7 @@ | ||
const uuid = require('uuid'); | ||
class Task { | ||
constructor(name) { | ||
this._name = name; | ||
this.id = null; | ||
this.id = uuid(); | ||
this.type = null; | ||
@@ -32,6 +34,6 @@ this._workerId = null; | ||
} | ||
Task.TYPE_SPAWN = "spawn"; | ||
Task.TYPE_FORK = "fork"; | ||
Task.TYPE_EXEC_FILE = "exec_file"; | ||
Task.TYPE_EXEC = "exec"; | ||
Task.TYPE_SPAWN = 'spawn'; | ||
Task.TYPE_FORK = 'fork'; | ||
Task.TYPE_EXEC_FILE = 'exec_file'; | ||
Task.TYPE_EXEC = 'exec'; | ||
module.exports = Task; |
const uuid = require('uuid'); | ||
const EventEmitter = require('events'); | ||
const debug = require('debug')('Thekdar:main'); | ||
const util = require('util'); | ||
const BetterQueue = require('better-queue'); | ||
const events = require('./events'); | ||
const util = require('util'); | ||
const Task = require('./Task'); | ||
const Worker = require('./Worker'); | ||
const debug = require('debug')('Thekdar:main'); | ||
const differenceInMinutes = require('date-fns/difference_in_minutes'); | ||
class Thekdar extends EventEmitter { | ||
constructor() { | ||
constructor(options = {}) { | ||
super(); | ||
@@ -22,4 +24,31 @@ // All workers | ||
this._pluggins = []; | ||
this._queue = new BetterQueue(this.handleQueue.bind(this), { | ||
concurrent: 1, | ||
id: 'id', | ||
filo: true, | ||
maxRetries: 1, | ||
retryDelay: 5000, | ||
maxTimeout: 15000, | ||
...(options.queue || {}), | ||
}); | ||
} | ||
handleQueue(task, callback) { | ||
try { | ||
const worker = this._getFreeWorker(task); | ||
if (!worker) { | ||
return callback('No worker found.'); | ||
} | ||
const taskId = task.id; | ||
this._tasks.set(taskId, task); | ||
task.setWorkerId(worker.getId()); | ||
worker.addTask(this._tasks.get(taskId)); | ||
this._workerTaskLookup.get(worker.getId()).push(task.getId()); | ||
this.emit('add', { worker }); | ||
this.emit('info', { type: 'task:new', task, worker }); | ||
return callback(null, worker); | ||
} catch (error) { | ||
return callback(error); | ||
} | ||
} | ||
stop() { | ||
@@ -44,3 +73,3 @@ this._pluggins.forEach(plugin => { | ||
} | ||
addTask(task, workerAddressIndex = -1) { | ||
addTask(task, callback = () => null) { | ||
if (!task) { | ||
@@ -52,22 +81,6 @@ throw new Error('Please provide task object instance of Task Class'); | ||
} | ||
const taskId = uuid(); | ||
task.setId(taskId); | ||
try { | ||
const worker = this._getFreeWorker(task, workerAddressIndex); | ||
if (!worker) { | ||
debug('No Worker found.'); | ||
return null; | ||
} | ||
this._tasks.set(taskId, task); | ||
task.setWorkerId(worker.getId()); | ||
worker.addTask(this._tasks.get(taskId)); | ||
this._workerTaskLookup.get(worker.getId()).push(task.getId()); | ||
this.emit('add', { worker }); | ||
this.emit('info', { type: 'task:new', task, worker }); | ||
debug(`New task added, previous task count ${this._tasks.size}`); | ||
return worker; | ||
} catch (error) { | ||
debug(error); | ||
throw error; | ||
} | ||
this._queue.push(task, (err, result) => { | ||
callback(err, result); | ||
}); | ||
} | ||
@@ -97,2 +110,3 @@ | ||
} | ||
_getFreeWorker(task, workerTaskLength = 0) { | ||
@@ -99,0 +113,0 @@ if (workerTaskLength === this._maxTaskPerWorker) { |
@@ -14,3 +14,3 @@ const Thekdar = require('../index'); | ||
task.setType(Task.TYPE_FORK); | ||
thekdar.addTask(task); | ||
thekdar.addTask(task, () => null); | ||
thekdar.setMaxTaskPerWorker(10); | ||
@@ -17,0 +17,0 @@ for (let [workerId, works] of thekdar._workerTaskLookup) { |
{ | ||
"name": "thekdar", | ||
"version": "1.0.4", | ||
"version": "1.0.5", | ||
"description": "", | ||
@@ -13,5 +13,7 @@ "main": "index.js", | ||
"dependencies": { | ||
"better-queue": "^3.8.7", | ||
"date-fns": "^1.29.0", | ||
"debug": "^3.1.0", | ||
"respawn": "^2.5.0", | ||
"uuid": "^3.1.0" | ||
"uuid": "^3.2.1" | ||
}, | ||
@@ -18,0 +20,0 @@ "devDependencies": { |
18984
561
5
+ Addedbetter-queue@^3.8.7
+ Addeddate-fns@^1.29.0
+ Addedbetter-queue@3.8.12(transitive)
+ Addedbetter-queue-memory@1.0.4(transitive)
+ Addeddate-fns@1.30.1(transitive)
+ Addednode-eta@0.9.0(transitive)
+ Addeduuid@9.0.1(transitive)
Updateduuid@^3.2.1