httpserver.js
2.7 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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
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;