index.js 2.14 KB
var name = 'Store DOMPUL stock';
var logger = require('winston');
logger.info('Starting ' + name);

logger.info('Parsing config file');
var iniparser = require('iniparser');
var config = iniparser.parseSync('./config.ini');

logger.info('Creating redis clients for ' + config.globals.redis_host + ':' + config.globals.redis_port);
var redis = require('redis');
var redisClient = redis.createClient(config.globals.redis_port, config.globals.redis_host);
var redisSubscriber = redis.createClient(config.globals.redis_port, config.globals.redis_host);

redisSubscriber.on('message', function(channel, message) {
    if (channel == config.channels.dompul_proxy_topup) {
        var params = JSON.parse(message);
        
        if (params['resp_code'] != '00') return;
        if (params['ussd_msg'].indexOf('$SN=;OK') >= 0) return;
        
        redisClient.hset('stock.dompul.by-denom.' + params['ussd_nom'], params['ussd_chipinfo'], parseInt(params['ussd_stok']));
        redisClient.hset('stock.dompul.by-chipinfo.' + params['ussd_chipinfo'], params['ussd_nom'], parseInt(params['ussd_stok']));
        
        var key = 'stock.dompul.by-denom.' + params['ussd_nom'];

        redisClient.hgetall(key, function(err, obj) {
            var chips = Object.getOwnPropertyNames(obj);
            var chipsCount = chips.length;
            
            var total = 0;
            var nonEmptyChipsCount = 0;

            for (var i = 0; i < chipsCount; i++) {
                var stock = parseInt(obj[chips[i]]);
                if (stock > 0) {
                    nonEmptyChipsCount++;
                }
                
                total = total + stock;
            }
            
            logger.info(
                'XL' + params['ussd_nom'] 
                + ' ' 
                + params['ussd_chipinfo'] + ': ' + parseInt(params['ussd_stok'])
                + '; Total ' + total + ' in ' + nonEmptyChipsCount + ' chips');
        });
    }
});


logger.info('Subscribing redis channel');
redisSubscriber.subscribe(config.channels.dompul_proxy_topup);
logger.info('Waiting for redis message');

var httpserver = require('./httpserver.js');
httpserver.start(config, logger);