httpserver.js 1.89 KB
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 formatData(data, format) {
    if (format == 'xml') {
        return js2xmlparser('stock', data);
    }
    return JSON.stringify(data);
}

function onHttpGetByDenom(request, response) {
    var key = 'stock.dompul.by-denom.' + request.params.denom;
    
    redisClient.hgetall(key, function(err, obj) {
        
        if (err) {
            response.end();
            return;
        }
        
        if (request.params.total != true) {
            response.end(formatData(obj, request.params.format));
            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/stock/:denom/index/:format', onHttpGetByDenom);
    
    router.get('/realtime/stock/denoms/:denom/total', function(req, res) {
        req.params.total = true;
        onHttpGetByDenom(req, res);
    });
    
    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;