Commit 4e5599d778d20304e6d32d7d2723419f2fb2439b

Authored by Adhidarma Hadiwinoto
1 parent 1a631d48d6
Exists in master

html data

Showing 1 changed file with 20 additions and 2 deletions Inline Diff

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