Compare View

switch
from
...
to
 
Commits (3)

Changes

Showing 2 changed files Side-by-side Diff

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",
... ... @@ -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;