@alienfast/sidekiq-client
Version:
Node sidekiq client.
101 lines (77 loc) • 3.37 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _redis = require('redis');
var _redis2 = _interopRequireDefault(_redis);
var _bluebird = require('bluebird');
var _bluebird2 = _interopRequireDefault(_bluebird);
var _generateJobId = require('./generateJobId');
var _generateJobId2 = _interopRequireDefault(_generateJobId);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
// Prepare the redis interface
_bluebird2.default.promisifyAll(_redis2.default.RedisClient.prototype);
/**
*
* {
* "class": "SomeWorker",
* "jid": "b4a577edbccf1d805744efa9", // 12-byte random number as 24 char hex string
* "args": [1, "arg", true],
* "created_at": 1234567890,
* "enqueued_at": 1234567890
* }
*/
class SidkiqClient {
/**
* Convenience routine to create the promisified redis client
* @param options
* @see https://github.com/NodeRedis/node_redis#promises
*/
static redisCreateClient(options) {
return _redis2.default.createClient(options);
}
constructor(redisClient) {
this.redisClient = redisClient;
if (!this.redisClient) {
throw new ReferenceError('Expected non-null "redisClient" connection object');
}
}
enqueue(jobRequest, at = null) {
var _this = this;
return _asyncToGenerator(function* () {
const jobId = yield (0, _generateJobId2.default)();
const now = new Date().getTime() / 1000;
const job = _extends({
jid: jobId,
created_at: now,
enqueued_at: now
}, jobRequest);
if (!job.queue) {
job.queue = 'default';
}
if (job.retry === undefined) {
job.retry = true;
}
// @see https://github.com/mperham/sidekiq/blob/master/lib/sidekiq/client.rb#L191
if (at) {
// Push job scheduled to run at specific time
job.at = at.getTime() / 1000;
//
// ruby: conn.zadd('schedule', payloads)
const enqueueResponse = yield _this.redisClient.zaddAsync('schedule', [job.at, JSON.stringify(job)]);
return enqueueResponse;
} else {
// ensure the queue exists
// ruby: conn.sadd('queues', q)
const queueAdd = yield _this.redisClient.saddAsync('queues', job.queue); // eslint-disable-line no-unused-vars
// push the job
// ruby: conn.lpush("queue:#{q}", to_push)
const enqueueResponse = yield _this.redisClient.lpushAsync(`queue:${job.queue}`, [job.enqueued_at, JSON.stringify(job)]);
return enqueueResponse;
}
})();
}
}
exports.default = SidkiqClient;