UNPKG

@alienfast/sidekiq-client

Version:
101 lines (77 loc) 3.37 kB
'use strict'; 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;