Commit cb55eb268e00465115d69aaff61ce97b2cdb6fab

Authored by Adhidarma Hadiwinoto
1 parent 0ae77a92f0
Exists in master

lru-cache untuk reverseUrlCache

Showing 2 changed files with 19 additions and 1 deletions Inline Diff

1 var oracledb = require('oracledb'); 1 var oracledb = require('oracledb');
2 var LRU = require('lru-cache');
2 3
3 var config = require("./config.json"); 4 var config = require("./config.json");
4 var logger = console; 5 var logger = console;
5 6
6 var oraCon; 7 var oraCon;
7 8
9 var reverseUrlCache = LRU({max: 30, maxAge: 60 * 1000});
10
8 function init(options) { 11 function init(options) {
9 if (options && options.logger) { 12 if (options && options.logger) {
10 logger = options.logger; 13 logger = options.logger;
11 } 14 }
12 } 15 }
13 16
14 function connectToOracle(callback) { 17 function connectToOracle(callback) {
15 oracledb.getConnection(config.oracle, function(err, connection) { 18 oracledb.getConnection(config.oracle, function(err, connection) {
16 if (err) { 19 if (err) {
17 logger.warn('Can not connect to oracle db: ' + err); 20 logger.warn('Can not connect to oracle db: ' + err);
18 process.exit(1); 21 process.exit(1);
19 } 22 }
20 23
21 oraCon = connection; 24 oraCon = connection;
22 logger.info("Oracle db connected") 25 logger.info("Oracle db connected")
23 26
24 if (callback) { 27 if (callback) {
25 callback(null, oraCon); 28 callback(null, oraCon);
26 } 29 }
27 }) 30 })
28 } 31 }
29 32
30 function getTransactionIdFromMessage(message) { 33 function getTransactionIdFromMessage(message) {
31 try { 34 try {
32 var matches = message.match(/ID=(\d+)/); 35 var matches = message.match(/ID=(\d+)/);
33 return matches[1]; 36 return matches[1];
34 } 37 }
35 catch(err) { 38 catch(err) {
36 return '0'; 39 return '0';
37 } 40 }
38 } 41 }
39 42
40 function getReverseUrl(msisdn, callback) { 43 function getReverseUrlFromDb(msisdn, callback) {
41 oraCon.execute( 44 oraCon.execute(
42 "SELECT trim(A.MSISDN) MSISDN, trim(B.REVERSE_URL) REVERSE_URL FROM T_STORE_USER_MSISDN A, T_STORE_USER B WHERE A.STORE_ID = B.STORE_ID AND A.USER_NAME = B.USER_NAME AND B.REVERSE_URL IS NOT NULL AND A.MSISDN = :msisdn", 45 "SELECT trim(A.MSISDN) MSISDN, trim(B.REVERSE_URL) REVERSE_URL FROM T_STORE_USER_MSISDN A, T_STORE_USER B WHERE A.STORE_ID = B.STORE_ID AND A.USER_NAME = B.USER_NAME AND B.REVERSE_URL IS NOT NULL AND A.MSISDN = :msisdn",
43 [msisdn], 46 [msisdn],
44 function(err, result) { 47 function(err, result) {
45 if (err) { 48 if (err) {
46 logger.warn('Error retrieving reverse url from oracle: ' + err); 49 logger.warn('Error retrieving reverse url from oracle: ' + err);
47 callback(err); 50 callback(err);
48 return; 51 return;
49 } 52 }
50 53
51 var rowCount = result.rows.length; 54 var rowCount = result.rows.length;
52 55
53 var retval = []; 56 var retval = [];
54 for (var i = 0; i < rowCount; i++) { 57 for (var i = 0; i < rowCount; i++) {
55 retval.push(result.rows[i][1]); 58 retval.push(result.rows[i][1]);
56 } 59 }
57 60
61 if (retval.length) {
62 reverseUrlCache.set(msisdn, retval);
63 }
64
58 callback(null, retval); 65 callback(null, retval);
59 } 66 }
60 ); 67 );
61 } 68 }
62 69
70 function getReverseUrl(msisdn, callback) {
71 var urls = reverseUrlCache.get(msisdn);
72
73 if (!urls) {
74 getReverseUrlFromDb(msisdn, callback);
75 } else {
76 callback(null, retval);
77 }
78 }
79
63 function getRequestIdFromResponseMessage(message) { 80 function getRequestIdFromResponseMessage(message) {
64 try { 81 try {
65 var tokens = message.split('.'); 82 var tokens = message.split('.');
66 return tokens[4]; 83 return tokens[4];
67 } 84 }
68 catch(err) { 85 catch(err) {
69 return; 86 return;
70 } 87 }
71 88
72 } 89 }
73 90
74 exports.init = init; 91 exports.init = init;
75 exports.connectToOracle = connectToOracle; 92 exports.connectToOracle = connectToOracle;
76 exports.getReverseUrl = getReverseUrl; 93 exports.getReverseUrl = getReverseUrl;
77 exports.getTransactionIdFromMessage = getTransactionIdFromMessage; 94 exports.getTransactionIdFromMessage = getTransactionIdFromMessage;
78 exports.getRequestIdFromResponseMessage = getRequestIdFromResponseMessage; 95 exports.getRequestIdFromResponseMessage = getRequestIdFromResponseMessage;
79 96
1 { 1 {
2 "name": "sate24-neoxmlin", 2 "name": "sate24-neoxmlin",
3 "version": "1.0.0", 3 "version": "1.0.0",
4 "description": "Drop-in replacement for ST24 XML-RPC in", 4 "description": "Drop-in replacement for ST24 XML-RPC in",
5 "main": "index.js", 5 "main": "index.js",
6 "scripts": { 6 "scripts": {
7 "test": "mocha" 7 "test": "mocha"
8 }, 8 },
9 "repository": { 9 "repository": {
10 "type": "git", 10 "type": "git",
11 "url": "git@gitlab.kodesumber.com:reload97/sate24-neoxmlin.git" 11 "url": "git@gitlab.kodesumber.com:reload97/sate24-neoxmlin.git"
12 }, 12 },
13 "keywords": [ 13 "keywords": [
14 "r97", 14 "r97",
15 "reload97", 15 "reload97",
16 "st24", 16 "st24",
17 "ppob", 17 "ppob",
18 "xmlrpc", 18 "xmlrpc",
19 "xmlin" 19 "xmlin"
20 ], 20 ],
21 "author": "Adhidarma Hadiwinoto <me@adhisimon.org>", 21 "author": "Adhidarma Hadiwinoto <me@adhisimon.org>",
22 "license": "ISC", 22 "license": "ISC",
23 "dependencies": { 23 "dependencies": {
24 "lru-cache": "^4.0.1",
24 "oracledb": "^1.9.3", 25 "oracledb": "^1.9.3",
25 "request": "^2.72.0", 26 "request": "^2.72.0",
26 "strftime": "^0.9.2", 27 "strftime": "^0.9.2",
27 "winston": "^2.2.0", 28 "winston": "^2.2.0",
28 "winston-daily-rotate-file": "^1.1.1", 29 "winston-daily-rotate-file": "^1.1.1",
29 "xml2js": "^0.4.16", 30 "xml2js": "^0.4.16",
30 "xmlrpc": "^1.3.1" 31 "xmlrpc": "^1.3.1"
31 }, 32 },
32 "devDependencies": { 33 "devDependencies": {
33 "should": "^9.0.0" 34 "should": "^9.0.0"
34 } 35 }
35 } 36 }
36 37