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 'lib/workers')
| -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  | 
