Commit 48871022e41a34b958336f963b5a813eb4ffccbb
1 parent
f456f6ed9c
Exists in
master
less verbose
Showing 1 changed file with 0 additions and 1 deletions Inline Diff
resend-delay.js
1 | var LRU = require('lru-cache'); | 1 | var LRU = require('lru-cache'); |
2 | var winston = require('winston'); | 2 | var winston = require('winston'); |
3 | 3 | ||
4 | var logger; | 4 | var logger; |
5 | var topupRequest; | 5 | var topupRequest; |
6 | var resendHandlers = LRU({max: 2000, maxAge: 1000 * 3600 * 36}); | 6 | var resendHandlers = LRU({max: 2000, maxAge: 1000 * 3600 * 36}); |
7 | 7 | ||
8 | function init(options) { | 8 | function init(options) { |
9 | if (!options) { | 9 | if (!options) { |
10 | console.log('Undefined options, terminating....'); | 10 | console.log('Undefined options, terminating....'); |
11 | process.exit(1); | 11 | process.exit(1); |
12 | } | 12 | } |
13 | 13 | ||
14 | if (options.config) { | 14 | if (options.config) { |
15 | config = options.config; | 15 | config = options.config; |
16 | } else { | 16 | } else { |
17 | console.log('Undefined options.config, terminating....') | 17 | console.log('Undefined options.config, terminating....') |
18 | process.exit(1); | 18 | process.exit(1); |
19 | } | 19 | } |
20 | 20 | ||
21 | if (options.topupRequest) { | 21 | if (options.topupRequest) { |
22 | topupRequest = options.topupRequest; | 22 | topupRequest = options.topupRequest; |
23 | } else { | 23 | } else { |
24 | console.log('Undefined options.topupRequest, terminating....') | 24 | console.log('Undefined options.topupRequest, terminating....') |
25 | process.exit(1); | 25 | process.exit(1); |
26 | } | 26 | } |
27 | 27 | ||
28 | if (options.logger) { | 28 | if (options.logger) { |
29 | logger = options.logger; | 29 | logger = options.logger; |
30 | } else { | 30 | } else { |
31 | logger = new winston.Logger({ | 31 | logger = new winston.Logger({ |
32 | transports: [ | 32 | transports: [ |
33 | new (winston.transports.Console)() | 33 | new (winston.transports.Console)() |
34 | ] | 34 | ] |
35 | }); | 35 | }); |
36 | } | 36 | } |
37 | } | 37 | } |
38 | 38 | ||
39 | function cancel(task) { | 39 | function cancel(task) { |
40 | var requestId; | 40 | var requestId; |
41 | if (typeof task === 'string') { | 41 | if (typeof task === 'string') { |
42 | requestId = task; | 42 | requestId = task; |
43 | } else { | 43 | } else { |
44 | requestId = task.requestId; | 44 | requestId = task.requestId; |
45 | } | 45 | } |
46 | 46 | ||
47 | if (!requestId) { | 47 | if (!requestId) { |
48 | logger.warn('Invalid task on cancelResendDelay'); | ||
49 | return; | 48 | return; |
50 | } | 49 | } |
51 | 50 | ||
52 | var oldHandler = resendHandlers.get(requestId); | 51 | var oldHandler = resendHandlers.get(requestId); |
53 | if (!oldHandler) { | 52 | if (!oldHandler) { |
54 | return; | 53 | return; |
55 | } | 54 | } |
56 | 55 | ||
57 | logger.verbose('Canceling resend delay', {task: oldHandler.task}); | 56 | logger.verbose('Canceling resend delay', {task: oldHandler.task}); |
58 | 57 | ||
59 | try { | 58 | try { |
60 | if (oldHandler.handler) { | 59 | if (oldHandler.handler) { |
61 | clearTimeout(oldHandler.handler); | 60 | clearTimeout(oldHandler.handler); |
62 | } | 61 | } |
63 | } | 62 | } |
64 | catch(e) {}; | 63 | catch(e) {}; |
65 | 64 | ||
66 | try { | 65 | try { |
67 | resendHandlers.del(requestId); | 66 | resendHandlers.del(requestId); |
68 | } | 67 | } |
69 | catch(e) {}; | 68 | catch(e) {}; |
70 | } | 69 | } |
71 | 70 | ||
72 | function register(task) { | 71 | function register(task) { |
73 | if (!task.requestId) { | 72 | if (!task.requestId) { |
74 | logger.warn('Invalid task on resendDelay') | 73 | logger.warn('Invalid task on resendDelay') |
75 | return; | 74 | return; |
76 | } | 75 | } |
77 | 76 | ||
78 | if (!config || !config.globals || !Number(config.globals.auto_resend_delay_secs || !Number(config.globals.auto_resend_delay_max))) { | 77 | if (!config || !config.globals || !Number(config.globals.auto_resend_delay_secs || !Number(config.globals.auto_resend_delay_max))) { |
79 | return; | 78 | return; |
80 | } | 79 | } |
81 | 80 | ||
82 | var retry = config.globals.auto_resend_delay_max; | 81 | var retry = config.globals.auto_resend_delay_max; |
83 | var oldHandler = resendHandlers.get(task.requestId); | 82 | var oldHandler = resendHandlers.get(task.requestId); |
84 | if (oldHandler) { | 83 | if (oldHandler) { |
85 | retry = oldHandler.retry - 1; | 84 | retry = oldHandler.retry - 1; |
86 | cancel(task); | 85 | cancel(task); |
87 | } | 86 | } |
88 | 87 | ||
89 | if (retry <= 0) { | 88 | if (retry <= 0) { |
90 | logger.verbose('Resend delay retry exceeded', {task: task}); | 89 | logger.verbose('Resend delay retry exceeded', {task: task}); |
91 | cancel(task); | 90 | cancel(task); |
92 | return; | 91 | return; |
93 | } | 92 | } |
94 | 93 | ||
95 | logger.verbose('Registering resend delay task request', {task: task, delay: config.globals.auto_resend_delay_secs, retry: retry}); | 94 | logger.verbose('Registering resend delay task request', {task: task, delay: config.globals.auto_resend_delay_secs, retry: retry}); |
96 | var handlerData = { | 95 | var handlerData = { |
97 | handler: setTimeout(topupRequest, config.globals.auto_resend_delay_secs * 1000, task), | 96 | handler: setTimeout(topupRequest, config.globals.auto_resend_delay_secs * 1000, task), |
98 | task: task, | 97 | task: task, |
99 | retry: retry | 98 | retry: retry |
100 | } | 99 | } |
101 | 100 | ||
102 | resendHandlers.set(task.requestId, handlerData); | 101 | resendHandlers.set(task.requestId, handlerData); |
103 | } | 102 | } |
104 | 103 | ||
105 | 104 | ||
106 | exports.init = init; | 105 | exports.init = init; |
107 | exports.cancel = cancel; | 106 | exports.cancel = cancel; |
108 | exports.register = register; | 107 | exports.register = register; |
109 | 108 |