Commit 1a631d48d6aa1ac4f1515a148284ad95f0e29191
1 parent
408d15fe30
Exists in
master
fix format
Showing 2 changed files with 33 additions and 4 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 | 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 |
package.json
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 |