Commit 9f7140a41e435a46d1ef5c445123fb27ff650e71

Authored by Adhidarma Hadiwinoto
1 parent cb55eb268e
Exists in master

kurangi limit cache reverseUrls

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

1 var oracledb = require('oracledb'); 1 var oracledb = require('oracledb');
2 var LRU = require('lru-cache'); 2 var LRU = require('lru-cache');
3 3
4 var config = require("./config.json"); 4 var config = require("./config.json");
5 var logger = console; 5 var logger = console;
6 6
7 var oraCon; 7 var oraCon;
8 8
9 var reverseUrlCache = LRU({max: 30, maxAge: 60 * 1000}); 9 var reverseUrlCache = LRU({max: 20, maxAge: 60 * 1000});
10 10
11 function init(options) { 11 function init(options) {
12 if (options && options.logger) { 12 if (options && options.logger) {
13 logger = options.logger; 13 logger = options.logger;
14 } 14 }
15 } 15 }
16 16
17 function connectToOracle(callback) { 17 function connectToOracle(callback) {
18 oracledb.getConnection(config.oracle, function(err, connection) { 18 oracledb.getConnection(config.oracle, function(err, connection) {
19 if (err) { 19 if (err) {
20 logger.warn('Can not connect to oracle db: ' + err); 20 logger.warn('Can not connect to oracle db: ' + err);
21 process.exit(1); 21 process.exit(1);
22 } 22 }
23 23
24 oraCon = connection; 24 oraCon = connection;
25 logger.info("Oracle db connected") 25 logger.info("Oracle db connected")
26 26
27 if (callback) { 27 if (callback) {
28 callback(null, oraCon); 28 callback(null, oraCon);
29 } 29 }
30 }) 30 })
31 } 31 }
32 32
33 function getTransactionIdFromMessage(message) { 33 function getTransactionIdFromMessage(message) {
34 try { 34 try {
35 var matches = message.match(/ID=(\d+)/); 35 var matches = message.match(/ID=(\d+)/);
36 return matches[1]; 36 return matches[1];
37 } 37 }
38 catch(err) { 38 catch(err) {
39 return '0'; 39 return '0';
40 } 40 }
41 } 41 }
42 42
43 function getReverseUrlFromDb(msisdn, callback) { 43 function getReverseUrlFromDb(msisdn, callback) {
44 oraCon.execute( 44 oraCon.execute(
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", 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",
46 [msisdn], 46 [msisdn],
47 function(err, result) { 47 function(err, result) {
48 if (err) { 48 if (err) {
49 logger.warn('Error retrieving reverse url from oracle: ' + err); 49 logger.warn('Error retrieving reverse url from oracle: ' + err);
50 callback(err); 50 callback(err);
51 return; 51 return;
52 } 52 }
53 53
54 var rowCount = result.rows.length; 54 var rowCount = result.rows.length;
55 55
56 var retval = []; 56 var retval = [];
57 for (var i = 0; i < rowCount; i++) { 57 for (var i = 0; i < rowCount; i++) {
58 retval.push(result.rows[i][1]); 58 retval.push(result.rows[i][1]);
59 } 59 }
60 60
61 if (retval.length) { 61 if (retval.length) {
62 reverseUrlCache.set(msisdn, retval); 62 reverseUrlCache.set(msisdn, retval);
63 } 63 }
64 64
65 callback(null, retval); 65 callback(null, retval);
66 } 66 }
67 ); 67 );
68 } 68 }
69 69
70 function getReverseUrl(msisdn, callback) { 70 function getReverseUrl(msisdn, callback) {
71 var urls = reverseUrlCache.get(msisdn); 71 var urls = reverseUrlCache.get(msisdn);
72 72
73 if (!urls) { 73 if (!urls) {
74 getReverseUrlFromDb(msisdn, callback); 74 getReverseUrlFromDb(msisdn, callback);
75 } else { 75 } else {
76 logger.verbose('Got cache hit on reverse url for ' + msisdn);
76 callback(null, retval); 77 callback(null, retval);
77 } 78 }
78 } 79 }
79 80
80 function getRequestIdFromResponseMessage(message) { 81 function getRequestIdFromResponseMessage(message) {
81 try { 82 try {
82 var tokens = message.split('.'); 83 var tokens = message.split('.');
83 return tokens[4]; 84 return tokens[4];
84 } 85 }
85 catch(err) { 86 catch(err) {
86 return; 87 return;
87 } 88 }
88 89
89 } 90 }
90 91
91 exports.init = init; 92 exports.init = init;
92 exports.connectToOracle = connectToOracle; 93 exports.connectToOracle = connectToOracle;
93 exports.getReverseUrl = getReverseUrl; 94 exports.getReverseUrl = getReverseUrl;
94 exports.getTransactionIdFromMessage = getTransactionIdFromMessage; 95 exports.getTransactionIdFromMessage = getTransactionIdFromMessage;
95 exports.getRequestIdFromResponseMessage = getRequestIdFromResponseMessage; 96 exports.getRequestIdFromResponseMessage = getRequestIdFromResponseMessage;
96 97