Commit 4e5599d778d20304e6d32d7d2723419f2fb2439b
1 parent
1a631d48d6
Exists in
master
html data
Showing 1 changed file with 20 additions and 2 deletions Inline Diff
httpserver.js
1 | var name = require('path').basename(__filename); | 1 | var name = require('path').basename(__filename); |
2 | 2 | ||
3 | var redis = require('redis'); | 3 | var redis = require('redis'); |
4 | var redisClient; | 4 | var redisClient; |
5 | 5 | ||
6 | var http = require('http'); | 6 | var http = require('http'); |
7 | var nsr = require('node-simple-router'); | 7 | var nsr = require('node-simple-router'); |
8 | var router = nsr(); | 8 | var router = nsr(); |
9 | 9 | ||
10 | var js2xmlparser = require('js2xmlparser'); | 10 | var js2xmlparser = require('js2xmlparser'); |
11 | 11 | ||
12 | var httpServer; | 12 | var httpServer; |
13 | var config; | 13 | var config; |
14 | var logger; | 14 | var logger; |
15 | 15 | ||
16 | 16 | ||
17 | function toArrayOfObject(obj) { | 17 | function toArrayOfObject(obj) { |
18 | var arr = []; | 18 | var arr = []; |
19 | 19 | ||
20 | var chips = Object.getOwnPropertyNames(obj); | 20 | var chips = Object.getOwnPropertyNames(obj); |
21 | var chipsCount = chips.length; | 21 | var chipsCount = chips.length; |
22 | 22 | ||
23 | for (var i = 0; i < chipsCount; i++) { | 23 | for (var i = 0; i < chipsCount; i++) { |
24 | data = { | 24 | data = { |
25 | 'name': chips[i], | 25 | 'name': chips[i], |
26 | 'stock': obj[chips[i]], | 26 | 'stock': obj[chips[i]], |
27 | } | 27 | } |
28 | 28 | ||
29 | arr.push(data); | 29 | arr.push(data); |
30 | } | 30 | } |
31 | return arr; | 31 | return arr; |
32 | } | 32 | } |
33 | 33 | ||
34 | function formatDataAsHtml(data) { | 34 | function formatDataAsHtml(data) { |
35 | return JSON.stringify(data); | 35 | var total = 0; |
36 | var result = '<html><table><tr><th>DOMPUL</th><th>STOCK</th></tr>'; | ||
37 | |||
38 | var count = data.length; | ||
39 | for (var i = 0; i < count; i++) { | ||
40 | result += '<tr>'; | ||
41 | result += '<td>'; | ||
42 | result += data[i]['name']; | ||
43 | result += '</td>'; | ||
44 | result += '<td style="text-align: right;">'; | ||
45 | result += data[i]['stock']; | ||
46 | result += '</td>'; | ||
47 | result += '</tr>'; | ||
48 | |||
49 | total += parseInt(data[i]['stock']); | ||
50 | } | ||
51 | result += '<tr><td style="font-weight: bold;">TOTAL</td><td style="font-weight: bold; text-align: right;">' + total + '</td></tr>'; | ||
52 | result += '</table></html>'; | ||
53 | return result; | ||
36 | } | 54 | } |
37 | 55 | ||
38 | function formatData(_data, format) { | 56 | function formatData(_data, format) { |
39 | data = toArrayOfObject(_data); | 57 | data = toArrayOfObject(_data); |
40 | if (format == 'xml') { | 58 | if (format == 'xml') { |
41 | return js2xmlparser('chips', {chip: data}); | 59 | return js2xmlparser('chips', {chip: data}); |
42 | } | 60 | } |
43 | else if (format == 'json') { | 61 | else if (format == 'json') { |
44 | return JSON.stringify(data); | 62 | return JSON.stringify(data); |
45 | } | 63 | } |
46 | 64 | ||
47 | return formatDataAsHtml(data); | 65 | return formatDataAsHtml(data); |
48 | } | 66 | } |
49 | 67 | ||
50 | function getStockKeyForDenom(denom) { | 68 | function getStockKeyForDenom(denom) { |
51 | return 'stock.dompul.by-denom.' + denom; | 69 | return 'stock.dompul.by-denom.' + denom; |
52 | } | 70 | } |
53 | 71 | ||
54 | function onHttpGetByDenom(request, response) { | 72 | function onHttpGetByDenom(request, response) { |
55 | var key = getStockKeyForDenom(request.params.denom); | 73 | var key = getStockKeyForDenom(request.params.denom); |
56 | 74 | ||
57 | redisClient.hgetall(key, function(err, obj) { | 75 | redisClient.hgetall(key, function(err, obj) { |
58 | 76 | ||
59 | if (err) { | 77 | if (err) { |
60 | response.end('Error: ' + err); | 78 | response.end('Error: ' + err); |
61 | return; | 79 | return; |
62 | } | 80 | } |
63 | 81 | ||
64 | response.end(formatData(obj, request.params.format)); | 82 | response.end(formatData(obj, request.params.format)); |
65 | }); | 83 | }); |
66 | } | 84 | } |
67 | 85 | ||
68 | function onHttpGetTotalByDenom(request, response) { | 86 | function onHttpGetTotalByDenom(request, response) { |
69 | var key = getStockKeyForDenom(request.params.denom); | 87 | var key = getStockKeyForDenom(request.params.denom); |
70 | 88 | ||
71 | redisClient.hgetall(key, function(err, obj) { | 89 | redisClient.hgetall(key, function(err, obj) { |
72 | 90 | ||
73 | if (err) { | 91 | if (err) { |
74 | response.end('Error: ' + err); | 92 | response.end('Error: ' + err); |
75 | return; | 93 | return; |
76 | } | 94 | } |
77 | 95 | ||
78 | var chips = Object.getOwnPropertyNames(obj); | 96 | var chips = Object.getOwnPropertyNames(obj); |
79 | var chipsCount = chips.length; | 97 | var chipsCount = chips.length; |
80 | var total = 0; | 98 | var total = 0; |
81 | 99 | ||
82 | for (var i = 0; i < chipsCount; i++) { | 100 | for (var i = 0; i < chipsCount; i++) { |
83 | total = total + parseInt(obj[chips[i]]); | 101 | total = total + parseInt(obj[chips[i]]); |
84 | } | 102 | } |
85 | response.end(total.toString()); | 103 | response.end(total.toString()); |
86 | }); | 104 | }); |
87 | } | 105 | } |
88 | 106 | ||
89 | 107 | ||
90 | function createServer() { | 108 | function createServer() { |
91 | router.get('/realtime-report/stock/:denom/index', onHttpGetByDenom); | 109 | router.get('/realtime-report/stock/:denom/index', onHttpGetByDenom); |
92 | router.get('/realtime-report/stock/:denom/index/:format', onHttpGetByDenom); | 110 | router.get('/realtime-report/stock/:denom/index/:format', onHttpGetByDenom); |
93 | router.get('/realtime-report/stock/:denom/total', onHttpGetTotalByDenom); | 111 | router.get('/realtime-report/stock/:denom/total', onHttpGetTotalByDenom); |
94 | 112 | ||
95 | httpServer = http.createServer(router).listen(config.httpserver.listen_port); | 113 | httpServer = http.createServer(router).listen(config.httpserver.listen_port); |
96 | console.log('HTTP server listens on port ' + config.httpserver.listen_port); | 114 | console.log('HTTP server listens on port ' + config.httpserver.listen_port); |
97 | } | 115 | } |
98 | 116 | ||
99 | function start(_config, _logger) { | 117 | function start(_config, _logger) { |
100 | config = _config; | 118 | config = _config; |
101 | logger = _logger; | 119 | logger = _logger; |
102 | 120 | ||
103 | redisClient = redis.createClient(config.globals.redis_port, config.globals.redis_host); | 121 | redisClient = redis.createClient(config.globals.redis_port, config.globals.redis_host); |
104 | 122 | ||
105 | redisClient.on("error", function (err) { | 123 | redisClient.on("error", function (err) { |
106 | logger.error(name + "- redis client error: " + err); | 124 | logger.error(name + "- redis client error: " + err); |
107 | }); | 125 | }); |
108 | 126 | ||
109 | 127 | ||
110 | logger.info('Starting http server'); | 128 | logger.info('Starting http server'); |
111 | 129 | ||
112 | createServer(); | 130 | createServer(); |
113 | } | 131 | } |
114 | 132 | ||
115 | exports.start = start; | 133 | exports.start = start; |
116 | 134 |