@yhiot/logger
Version:
物联网日志队列读写系统,后端目前支持redis
278 lines (221 loc) • 7.81 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = createRedis;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _redis = _interopRequireDefault(require("redis"));
var _bluebird = _interopRequireDefault(require("bluebird"));
var _console = _interopRequireDefault(require("console"));
_bluebird.default.promisifyAll(_redis.default);
var DEFAULT_KEY = 'logger';
var DEFAULT_TIMEOUT = 1; // 单位为秒
function createRedis(url) {
var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_KEY;
var timeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_TIMEOUT;
var $r = _redis.default.createClient(url);
function send(_x, _x2, _x3, _x4) {
return _send.apply(this, arguments);
}
function _send() {
_send = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(module, event, data, createdAt) {
var needSend, result;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
needSend = JSON.stringify({
module: module,
event: event,
data: data,
createdAt: createdAt
});
_context.next = 3;
return $r.LPUSHAsync(key, needSend);
case 3:
result = _context.sent;
return _context.abrupt("return", result);
case 5:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return _send.apply(this, arguments);
}
function _receive(_x5, _x6) {
return _receive2.apply(this, arguments);
}
function _receive2() {
_receive2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(key, timeout) {
var data, result;
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
data = null;
_context2.next = 3;
return $r.BRPOPAsync(key, timeout);
case 3:
result = _context2.sent;
// console.log('receive result:', result);
if (result && result.length > 1) {
if (result[1]) {
try {
data = JSON.parse(result[1]);
} catch (error) {
_console.default.log('_receive error!', error);
}
}
} // console.log('_receive:', data);
return _context2.abrupt("return", data);
case 6:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
return _receive2.apply(this, arguments);
}
function receive() {
return _receive3.apply(this, arguments);
}
function _receive3() {
_receive3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
var callback,
empty,
msgcount,
data,
_args3 = arguments;
return _regenerator.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
callback = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : null;
if (!(callback && typeof callback === 'function')) {
_context3.next = 31;
break;
}
// 回调函数模式, 进入死循环.
createRedis.prototype.stopStatus = false;
empty = 0;
msgcount = 0;
case 5:
if (createRedis.prototype.stopStatus) {
_context3.next = 28;
break;
}
_context3.next = 8;
return _receive(key, timeout);
case 8:
data = _context3.sent;
if (empty > 0 && empty % 60 === 0) {
_console.default.debug("empty:".concat(empty, " continue"));
}
if (msgcount > 0 && msgcount % 60 === 0) {
_console.default.debug("msgcount:".concat(msgcount, " continue"));
}
if (!data) {
_context3.next = 24;
break;
}
if (empty > 0) {
_console.default.debug("empty:".concat(empty, ", new data receive, reset"));
empty = 0;
}
msgcount++;
_context3.prev = 14;
_context3.next = 17;
return callback(data.module, data.event, data.data, data.createdAt);
case 17:
_context3.next = 22;
break;
case 19:
_context3.prev = 19;
_context3.t0 = _context3["catch"](14);
_console.default.log('error receive callback!', _context3.t0);
case 22:
_context3.next = 26;
break;
case 24:
if (msgcount > 0) {
_console.default.debug("msgcount:".concat(msgcount, ", empty reach, reset"));
msgcount = 0;
}
empty++;
case 26:
_context3.next = 5;
break;
case 28:
return _context3.abrupt("return", null);
case 31:
_context3.next = 33;
return _receive(key, timeout);
case 33:
return _context3.abrupt("return", _context3.sent);
case 34:
case "end":
return _context3.stop();
}
}
}, _callee3, null, [[14, 19]]);
}));
return _receive3.apply(this, arguments);
}
function stop() {
return _stop.apply(this, arguments);
}
function _stop() {
_stop = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
return _regenerator.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
createRedis.prototype.stopStatus = true;
_context4.next = 3;
return $r.quitAsync();
case 3:
return _context4.abrupt("return", createRedis.prototype.stopStatus);
case 4:
case "end":
return _context4.stop();
}
}
}, _callee4);
}));
return _stop.apply(this, arguments);
}
function clear() {
return _clear.apply(this, arguments);
}
function _clear() {
_clear = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {
return _regenerator.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
_context5.next = 2;
return $r.delAsync(key);
case 2:
return _context5.abrupt("return", _context5.sent);
case 3:
case "end":
return _context5.stop();
}
}
}, _callee5);
}));
return _clear.apply(this, arguments);
}
return {
send: send,
receive: receive,
stop: stop,
clear: clear
};
}
createRedis.prototype.stopStatus = false;