Commit 9f7140a41e435a46d1ef5c445123fb27ff650e71
1 parent
cb55eb268e
Exists in
master
kurangi limit cache reverseUrls
Showing 1 changed file with 2 additions and 1 deletions Inline Diff
neoxmlinutil.js
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 |