Compare View
Commits (2)
Changes
Showing 2 changed files Inline Diff
gateway/resend-delay.js
1 | "use strict"; | 1 | "use strict"; |
2 | 2 | ||
3 | var LRU = require('lru-cache'); | 3 | var LRU = require('lru-cache'); |
4 | 4 | ||
5 | const config = require('./config'); | 5 | const config = require('./config'); |
6 | const logger = require('./logger'); | 6 | const logger = require('./logger'); |
7 | 7 | ||
8 | var topupRequest; | 8 | var topupRequest; |
9 | var resendHandlers = LRU({max: 2000, maxAge: 1000 * 3600 * 36}); | 9 | var resendHandlers = LRU({max: 2000, maxAge: 1000 * 3600 * 36}); |
10 | 10 | ||
11 | function init(options) { | 11 | function init(options) { |
12 | if (options && options.request) { | 12 | if (options && options.request) { |
13 | request = options.request; | 13 | request = options.request; |
14 | } else { | 14 | } else { |
15 | logger.warn('Undefined options.request, terminating....'); | 15 | logger.warn('Undefined options.request, terminating....'); |
16 | process.exit(1); | 16 | process.exit(1); |
17 | } | 17 | } |
18 | } | 18 | } |
19 | 19 | ||
20 | function cancel(task) { | 20 | function cancel(task) { |
21 | var requestId; | 21 | var requestId; |
22 | if (typeof task === 'string') { | 22 | if (typeof task === 'string') { |
23 | requestId = task; | 23 | requestId = task; |
24 | } else { | 24 | } else { |
25 | requestId = task.requestId; | 25 | requestId = task.requestId; |
26 | } | 26 | } |
27 | 27 | ||
28 | if (!requestId) { | 28 | if (!requestId) { |
29 | return; | 29 | return; |
30 | } | 30 | } |
31 | 31 | ||
32 | var oldHandler = resendHandlers.get(requestId); | 32 | var oldHandler = resendHandlers.get(requestId); |
33 | if (!oldHandler) { | 33 | if (!oldHandler) { |
34 | return; | 34 | return; |
35 | } | 35 | } |
36 | 36 | ||
37 | logger.verbose('Canceling resend delay', {task: oldHandler.task}); | 37 | logger.verbose('Canceling resend delay', {task: oldHandler.task}); |
38 | 38 | ||
39 | try { | 39 | try { |
40 | if (oldHandler.handler) { | 40 | if (oldHandler.handler) { |
41 | clearTimeout(oldHandler.handler); | 41 | clearTimeout(oldHandler.handler); |
42 | } | 42 | } |
43 | } | 43 | } |
44 | catch(e) {}; | 44 | catch(e) {}; |
45 | 45 | ||
46 | try { | 46 | try { |
47 | resendHandlers.del(requestId); | 47 | resendHandlers.del(requestId); |
48 | } | 48 | } |
49 | catch(e) {}; | 49 | catch(e) {}; |
50 | } | 50 | } |
51 | 51 | ||
52 | function register(task) { | 52 | function register(task) { |
53 | if (!task.requestId) { | 53 | if (!task.requestId) { |
54 | logger.warn('Invalid task on resendDelay') | 54 | logger.warn('Invalid task on resendDelay') |
55 | return; | 55 | return; |
56 | } | 56 | } |
57 | 57 | ||
58 | if (!config || !config.auto_resend || !Number(config.auto_resend.delay_ms) || !Number(config.auto_resend.retry_max)) { | 58 | if (!config || !config.auto_resend || !Number(config.auto_resend.delay_ms) || !Number(config.auto_resend.retry_max)) { |
59 | return; | 59 | return; |
60 | } | 60 | } |
61 | 61 | ||
62 | var retry = config.auto_resend.retry_max; | 62 | var retry = config.auto_resend.retry_max; |
63 | var oldHandler = resendHandlers.get(task.requestId); | 63 | var oldHandler = resendHandlers.get(task.requestId); |
64 | if (oldHandler) { | 64 | if (oldHandler) { |
65 | retry = oldHandler.retry - 1; | 65 | retry = oldHandler.retry - 1; |
66 | cancel(task); | 66 | cancel(task); |
67 | } | 67 | } |
68 | 68 | ||
69 | if (retry <= 0) { | 69 | if (retry <= 0) { |
70 | logger.verbose('Resend delay retry exceeded', {task: task}); | 70 | logger.verbose('Resend delay retry exceeded', {task: task}); |
71 | cancel(task); | 71 | cancel(task); |
72 | return; | 72 | return; |
73 | } | 73 | } |
74 | 74 | ||
75 | logger.verbose('Registering resend delay task request', {task: task, delay_ms: config.auto_resend.delay_ms, retry: retry}); | 75 | logger.verbose('Registering resend delay task request', {task: task, delay_ms: config.auto_resend.delay_ms, retry: retry}); |
76 | var handlerData = { | 76 | var handlerData = { |
77 | handler: setTimeout(request, config.auto_resend.delay_ms, task), | 77 | handler: setTimeout(request, config.auto_resend.delay_ms, task), |
78 | task: task, | 78 | task: task, |
79 | retry: retry | 79 | retry: retry |
80 | } | 80 | } |
81 | 81 | ||
82 | resendHandlers.set(task.requestId, handlerData); | 82 | resendHandlers.set(task.requestId, handlerData); |
83 | } | 83 | } |
84 | 84 | ||
85 | exports.init = init; | 85 | exports.init = init; |
86 | exports.cancel = cancel; | 86 | exports.cancel = cancel; |
87 | exports.register = register; | 87 | exports.register = register; |
88 | 88 |
package.json
1 | { | 1 | { |
2 | "name": "komodo-sdk", | 2 | "name": "komodo-sdk", |
3 | "version": "1.6.5", | 3 | "version": "1.6.6", |
4 | "description": "SDK for Komodo", | 4 | "description": "SDK for Komodo", |
5 | "main": "index.js", | 5 | "main": "index.js", |
6 | "scripts": { | 6 | "scripts": { |
7 | "test": "mocha", | 7 | "test": "mocha", |
8 | "postversion": "git push && git push --tags" | 8 | "postversion": "git push && git push --tags" |
9 | }, | 9 | }, |
10 | "repository": { | 10 | "repository": { |
11 | "type": "git", | 11 | "type": "git", |
12 | "url": "git@gitlab.kodesumber.com:komodo/komodo-sdk.git" | 12 | "url": "git@gitlab.kodesumber.com:komodo/komodo-sdk.git" |
13 | }, | 13 | }, |
14 | "keywords": [ | 14 | "keywords": [ |
15 | "ppob", | 15 | "ppob", |
16 | "payment", | 16 | "payment", |
17 | "komodo" | 17 | "komodo" |
18 | ], | 18 | ], |
19 | "author": "Adhidarma Hadiwinoto <gua@adhisimon.org>", | 19 | "author": "Adhidarma Hadiwinoto <gua@adhisimon.org>", |
20 | "license": "ISC", | 20 | "license": "ISC", |
21 | "dependencies": { | 21 | "dependencies": { |
22 | "lru-cache": "^4.1.1", | 22 | "lru-cache": "^4.1.1", |
23 | "request": "^2.81.0", | 23 | "request": "^2.81.0", |
24 | "strftime": "^0.10.0", | 24 | "strftime": "^0.10.0", |
25 | "winston": "^2.3.1", | 25 | "winston": "^2.3.1", |
26 | "winston-daily-rotate-file": "^1.4.6" | 26 | "winston-daily-rotate-file": "^1.4.6" |
27 | } | 27 | } |
28 | } | 28 | } |
29 | 29 |