Commit 1a631d48d6aa1ac4f1515a148284ad95f0e29191

Authored by Adhidarma Hadiwinoto
1 parent 408d15fe30
Exists in master

fix format

Showing 2 changed files with 33 additions and 4 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 function formatData(data, format) { 16
17 if (format == 'xml') { 17 function toArrayOfObject(obj) {
18 return js2xmlparser('stock', data); 18 var arr = [];
19
20 var chips = Object.getOwnPropertyNames(obj);
21 var chipsCount = chips.length;
22
23 for (var i = 0; i < chipsCount; i++) {
24 data = {
25 'name': chips[i],
26 'stock': obj[chips[i]],
27 }
28
29 arr.push(data);
19 } 30 }
31 return arr;
32 }
33
34 function formatDataAsHtml(data) {
20 return JSON.stringify(data); 35 return JSON.stringify(data);
21 } 36 }
22 37
38 function formatData(_data, format) {
39 data = toArrayOfObject(_data);
40 if (format == 'xml') {
41 return js2xmlparser('chips', {chip: data});
42 }
43 else if (format == 'json') {
44 return JSON.stringify(data);
45 }
46
47 return formatDataAsHtml(data);
48 }
49
23 function getStockKeyForDenom(denom) { 50 function getStockKeyForDenom(denom) {
24 return 'stock.dompul.by-denom.' + denom; 51 return 'stock.dompul.by-denom.' + denom;
25 } 52 }
26 53
27 function onHttpGetByDenom(request, response) { 54 function onHttpGetByDenom(request, response) {
28 var key = getStockKeyForDenom(request.params.denom); 55 var key = getStockKeyForDenom(request.params.denom);
29 56
30 redisClient.hgetall(key, function(err, obj) { 57 redisClient.hgetall(key, function(err, obj) {
31 58
32 if (err) { 59 if (err) {
33 response.end('Error: ' + err); 60 response.end('Error: ' + err);
34 return; 61 return;
35 } 62 }
36 63
37 response.end(formatData(obj, request.params.format)); 64 response.end(formatData(obj, request.params.format));
38 }); 65 });
39 } 66 }
40 67
41 function onHttpGetTotalByDenom(request, response) { 68 function onHttpGetTotalByDenom(request, response) {
42 var key = getStockKeyForDenom(request.params.denom); 69 var key = getStockKeyForDenom(request.params.denom);
43 70
44 redisClient.hgetall(key, function(err, obj) { 71 redisClient.hgetall(key, function(err, obj) {
45 72
46 if (err) { 73 if (err) {
47 response.end('Error: ' + err); 74 response.end('Error: ' + err);
48 return; 75 return;
49 } 76 }
50 77
51 var chips = Object.getOwnPropertyNames(obj); 78 var chips = Object.getOwnPropertyNames(obj);
52 var chipsCount = chips.length; 79 var chipsCount = chips.length;
53 var total = 0; 80 var total = 0;
54 81
55 for (var i = 0; i < chipsCount; i++) { 82 for (var i = 0; i < chipsCount; i++) {
56 total = total + parseInt(obj[chips[i]]); 83 total = total + parseInt(obj[chips[i]]);
57 } 84 }
58 response.end(total.toString()); 85 response.end(total.toString());
59 }); 86 });
60 } 87 }
61 88
62 89
63 function createServer() { 90 function createServer() {
64 router.get('/realtime-report/stock/:denom/index', onHttpGetByDenom); 91 router.get('/realtime-report/stock/:denom/index', onHttpGetByDenom);
65 router.get('/realtime-report/stock/:denom/index/:format', onHttpGetByDenom); 92 router.get('/realtime-report/stock/:denom/index/:format', onHttpGetByDenom);
66 router.get('/realtime-report/stock/:denom/total', onHttpGetTotalByDenom); 93 router.get('/realtime-report/stock/:denom/total', onHttpGetTotalByDenom);
67 94
68 httpServer = http.createServer(router).listen(config.httpserver.listen_port); 95 httpServer = http.createServer(router).listen(config.httpserver.listen_port);
69 console.log('HTTP server listens on port ' + config.httpserver.listen_port); 96 console.log('HTTP server listens on port ' + config.httpserver.listen_port);
70 } 97 }
71 98
72 function start(_config, _logger) { 99 function start(_config, _logger) {
73 config = _config; 100 config = _config;
74 logger = _logger; 101 logger = _logger;
75 102
76 redisClient = redis.createClient(config.globals.redis_port, config.globals.redis_host); 103 redisClient = redis.createClient(config.globals.redis_port, config.globals.redis_host);
77 104
78 redisClient.on("error", function (err) { 105 redisClient.on("error", function (err) {
79 logger.error(name + "- redis client error: " + err); 106 logger.error(name + "- redis client error: " + err);
80 }); 107 });
81 108
82 109
83 logger.info('Starting http server'); 110 logger.info('Starting http server');
84 111
85 createServer(); 112 createServer();
86 } 113 }
87 114
88 exports.start = start; 115 exports.start = start;
89 116
1 { 1 {
2 "name": "store-dompul-stock", 2 "name": "store-dompul-stock",
3 "version": "0.0.1", 3 "version": "0.0.1",
4 "description": "Store DOMPUL stock in Redis", 4 "description": "Store DOMPUL stock in Redis",
5 "main": "index.js", 5 "main": "index.js",
6 "scripts": { 6 "scripts": {
7 "start": "node index.js", 7 "start": "node index.js",
8 "test": "mocha" 8 "test": "mocha"
9 }, 9 },
10 "repository": { 10 "repository": {
11 "type": "git", 11 "type": "git",
12 "url": "git@gitlab.kodesumber.com:reload97/store-dompul-stock.git" 12 "url": "git@gitlab.kodesumber.com:reload97/store-dompul-stock.git"
13 }, 13 },
14 "keywords": [ 14 "keywords": [
15 "Reload97", 15 "Reload97",
16 "ST24", 16 "ST24",
17 "PPOB", 17 "PPOB",
18 "Server", 18 "Server",
19 "Pulsa" 19 "Pulsa"
20 ], 20 ],
21 "author": "Adhidarma Hadiwinoto", 21 "author": "Adhidarma Hadiwinoto",
22 "license": "BSD", 22 "license": "BSD",
23 "dependencies": { 23 "dependencies": {
24 "redis": "~0.12.1", 24 "redis": "~0.12.1",
25 "hiredis": "~0.3.0", 25 "hiredis": "~0.3.0",
26 "iniparser": "~1.0.5", 26 "iniparser": "~1.0.5",
27 "winston": "~1.0.0", 27 "winston": "~1.0.0",
28 "node-simple-router": "~0.9.4-2", 28 "node-simple-router": "~0.9.4-2",
29 "js2xmlparser": "~0.1.9" 29 "js2xmlparser": "~0.1.9",
30 "xml": "~1.0.0",
31 "xmlbuilder": "~2.6.2"
30 } 32 }
31 } 33 }
32 34