index.js
2.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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);