summaryrefslogtreecommitdiff
path: root/lib/workers/historyUpdater.js
diff options
context:
space:
mode:
authorWu Cheng-Han2016-11-07 21:30:53 +0800
committerWu Cheng-Han2016-11-07 21:30:53 +0800
commitb5920fbbd1ceb595456da18f7d458b63d1a960bf (patch)
tree6d2b97cce6503728db28a7acea23028c9c47edb4 /lib/workers/historyUpdater.js
parent4ccfdfa538d2fd7e9ee63e937435a7f6fc622c12 (diff)
Add workers for history to leverage CPU intensive work loading
Diffstat (limited to '')
-rw-r--r--lib/workers/historyUpdater.js66
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