diff options
author | Wu Cheng-Han | 2016-11-07 21:30:53 +0800 |
---|---|---|
committer | Wu Cheng-Han | 2016-11-07 21:30:53 +0800 |
commit | b5920fbbd1ceb595456da18f7d458b63d1a960bf (patch) | |
tree | 6d2b97cce6503728db28a7acea23028c9c47edb4 /lib/workers | |
parent | 4ccfdfa538d2fd7e9ee63e937435a7f6fc622c12 (diff) |
Add workers for history to leverage CPU intensive work loading
Diffstat (limited to '')
-rw-r--r-- | lib/workers/historyUpdater.js | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/lib/workers/historyUpdater.js b/lib/workers/historyUpdater.js new file mode 100644 index 00000000..df80e92d --- /dev/null +++ b/lib/workers/historyUpdater.js @@ -0,0 +1,66 @@ +// external modules +var async = require('async'); + +// core +var config = require("../config.js"); +var logger = require("../logger.js"); +var models = require("../models"); + +process.on('message', function (data) { + if (!data || !data.msg || data.msg !== 'update history' || !data.caches) return process.exit(); + var caches = data.caches; + async.each(Object.keys(caches), function (key, callback) { + var cache = caches[key]; + if (config.debug) logger.info("history updater found dirty history: " + key); + var history = parseHistoryToArray(cache); + finishUpdateHistory(key, history, function (err, count) { + if (err) return callback(err, null); + if (!count) return callback(null, null); + process.send({ + msg: 'check', + userid: key + }); + return callback(null, null); + }); + }, function (err) { + if (err) logger.error('history updater error', err); + process.exit(); + }); +}); + +function finishUpdateHistory(userid, history, callback) { + models.User.update({ + history: JSON.stringify(history) + }, { + where: { + id: userid + } + }).then(function (count) { + return callback(null, count); + }).catch(function (err) { + return callback(err, null); + }); +} + +function parseHistoryToArray(history) { + var _history = []; + Object.keys(history).forEach(function (key) { + var item = history[key]; + _history.push(item); + }); + return _history; +} + +function parseHistoryToObject(history) { + var _history = {}; + for (var i = 0, l = history.length; i < l; i++) { + var item = history[i]; + _history[item.id] = item; + } + return _history; +} + +module.exports = { + parseHistoryToArray: parseHistoryToArray, + parseHistoryToObject: parseHistoryToObject +};
\ No newline at end of file |