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);