var name = require('path').basename(__filename); var redis = require('redis'); var redisClient; var http = require('http'); var nsr = require('node-simple-router'); var router = nsr(); var js2xmlparser = require('js2xmlparser'); var httpServer; var config; var logger; function toArrayOfObject(obj) { var arr = []; var chips = Object.getOwnPropertyNames(obj); var chipsCount = chips.length; for (var i = 0; i < chipsCount; i++) { data = { 'name': chips[i], 'stock': obj[chips[i]], } arr.push(data); } return arr; } function formatDataAsHtml(data) { return JSON.stringify(data); } function formatData(_data, format) { data = toArrayOfObject(_data); if (format == 'xml') { return js2xmlparser('chips', {chip: data}); } else if (format == 'json') { return JSON.stringify(data); } return formatDataAsHtml(data); } function getStockKeyForDenom(denom) { return 'stock.dompul.by-denom.' + denom; } function onHttpGetByDenom(request, response) { var key = getStockKeyForDenom(request.params.denom); redisClient.hgetall(key, function(err, obj) { if (err) { response.end('Error: ' + err); return; } response.end(formatData(obj, request.params.format)); }); } function onHttpGetTotalByDenom(request, response) { var key = getStockKeyForDenom(request.params.denom); redisClient.hgetall(key, function(err, obj) { if (err) { response.end('Error: ' + err); return; } var chips = Object.getOwnPropertyNames(obj); var chipsCount = chips.length; var total = 0; for (var i = 0; i < chipsCount; i++) { total = total + parseInt(obj[chips[i]]); } response.end(total.toString()); }); } function createServer() { router.get('/realtime-report/stock/:denom/index', onHttpGetByDenom); router.get('/realtime-report/stock/:denom/index/:format', onHttpGetByDenom); router.get('/realtime-report/stock/:denom/total', onHttpGetTotalByDenom); httpServer = http.createServer(router).listen(config.httpserver.listen_port); console.log('HTTP server listens on port ' + config.httpserver.listen_port); } function start(_config, _logger) { config = _config; logger = _logger; redisClient = redis.createClient(config.globals.redis_port, config.globals.redis_host); redisClient.on("error", function (err) { logger.error(name + "- redis client error: " + err); }); logger.info('Starting http server'); createServer(); } exports.start = start;