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