relax trigger delete on specific firing errors (#74)
diff --git a/provider/Logger.js b/provider/Logger.js
index 1ee6ca3..bef4241 100644
--- a/provider/Logger.js
+++ b/provider/Logger.js
@@ -12,7 +12,7 @@
},
formatter: function(options) {
// Return string will be passed to logger.
- return '[' + options.timestamp() +'] ['+ options.level.toUpperCase() +'] '+ options.message;
+ return '[' + options.timestamp() +'] ['+ options.level.toUpperCase() +'] [??] [cloudantTrigger] ' + options.message;
}
})
],
@@ -25,7 +25,7 @@
function getMessage(argsObject) {
var args = Array.prototype.slice.call(argsObject);
- args.splice(0, 2);
+ args.shift();
args.forEach(function(arg, i) {
if (_.isObject(args[i])) {
args[i] = JSON.stringify(args[i]);
@@ -36,16 +36,16 @@
// FORMAT: s"[$time] [$category] [$id] [$componentName] [$name] $message"
module.exports = {
- info: function(tid, name) {
- logger.info('['+tid+']', '['+name+']', getMessage(arguments));
+ info: function(name) {
+ logger.info('['+name+']', getMessage(arguments));
},
- warn: function(tid, name) {
- logger.warn('['+tid+']', '['+name+']', getMessage(arguments));
+ warn: function(name) {
+ logger.warn('['+name+']', getMessage(arguments));
},
- error: function(tid, name) {
- logger.error('['+tid+']', '['+name+']', getMessage(arguments));
+ error: function(name) {
+ logger.error('['+name+']', getMessage(arguments));
},
- debug: function(tid, name) {
- logger.debug('['+tid+']', '['+name+']', getMessage(arguments));
+ debug: function(name) {
+ logger.debug('['+name+']', getMessage(arguments));
}
};
diff --git a/provider/app.js b/provider/app.js
index c6845cb..0b83a2c 100644
--- a/provider/app.js
+++ b/provider/app.js
@@ -22,15 +22,10 @@
app.use(bodyParser.urlencoded({ extended: false }));
app.set('port', process.env.PORT || 8080);
-// TODO: Setup a proper Transaction ID
-var tid = "??";
// Whisk API Router Host
var routerHost = process.env.ROUTER_HOST || 'localhost';
-// Support includeDocs=true for triggers who existed before the removal of includeDocs
-var supportIncludeDocs = process.env.SUPPORT_INCLUDE_DOCS || 'false';
-
// Maximum number of times to retry the invocation of an action
// before deleting the associated trigger
var retriesBeforeDelete = constants.RETRIES_BEFORE_DELETE;
@@ -44,7 +39,6 @@
var dbUsername = process.env.DB_USERNAME;
var dbPassword = process.env.DB_PASSWORD;
var dbHost = process.env.DB_HOST;
-var dbPort = process.env.DB_PORT;
var dbProtocol = process.env.DB_PROTOCOL;
var dbPrefix = process.env.DB_PREFIX;
var databaseName = dbPrefix + constants.TRIGGER_DB_SUFFIX;
@@ -53,18 +47,18 @@
// Create the Provider Server
var server = http.createServer(app);
server.listen(app.get('port'), function(){
- logger.info(tid, 'server.listen', 'Express server listening on port ' + app.get('port'));
+ logger.info('server.listen', 'Express server listening on port ' + app.get('port'));
});
function createDatabase (nanop) {
- logger.info(tid, 'createDatabase', 'creating the trigger database');
+ logger.info('createDatabase', 'creating the trigger database');
return new Promise(function(resolve, reject) {
nanop.db.create(databaseName, function (err, body) {
if (!err) {
- logger.info(tid, databaseName, ' database for triggers was created.');
+ logger.info('createDatabase', 'created trigger database:', databaseName);
}
else {
- logger.info(tid, databaseName, 'failed to create the trigger database. it might already exist ',err);
+ logger.info('createDatabase', 'failed to create trigger database:', databaseName, err);
}
var db = nanop.db.use(databaseName);
var only_triggers = {
@@ -98,7 +92,7 @@
}
function createTriggerDb () {
- logger.info('url is ' + dbProtocol + '://' + dbUsername + ':' + dbPassword + '@' + dbHost);
+ logger.info('createTriggerDb', 'database url is ' + dbProtocol + '://' + dbUsername + ':' + dbPassword + '@' + dbHost);
var nanop = require('nano')(dbProtocol + '://' + dbUsername + ':' + dbPassword + '@' + dbHost);
if (nanop !== null) {
return createDatabase (nanop);
@@ -114,20 +108,20 @@
if (server !== null) {
var address = server.address();
if (address === null) {
- logger.error(tid, 'init', 'Error initializing server. Perhaps port is already in use.');
+ logger.error('init', 'Error initializing server. Perhaps port is already in use.');
process.exit(-1);
}
}
createTriggerDb()
.then(nanoDb => {
- logger.info(tid, 'init', 'trigger storage database details: ', nanoDb);
+ logger.info('init', 'trigger storage database details:', nanoDb);
- var providerUtils = new ProviderUtils(tid, logger, app, retriesBeforeDelete, nanoDb, routerHost, supportIncludeDocs);
- var providerRAS = new ProviderRAS(tid, logger, providerUtils);
- var providerHealth = new ProviderHealth(tid, logger, providerUtils);
- var providerUpdate = new ProviderUpdate(tid, logger, providerUtils);
- var providerDelete = new ProviderDelete(tid, logger, providerUtils);
+ var providerUtils = new ProviderUtils(logger, app, retriesBeforeDelete, nanoDb, routerHost);
+ var providerRAS = new ProviderRAS(logger);
+ var providerHealth = new ProviderHealth(logger, providerUtils);
+ var providerUpdate = new ProviderUpdate(logger, providerUtils);
+ var providerDelete = new ProviderDelete(logger, providerUtils);
// RAS Endpoint
app.get(providerRAS.endPoint, providerRAS.ras);
@@ -144,7 +138,7 @@
providerUtils.initAllTriggers();
}).catch(err => {
- logger.error(tid, 'init', 'an error occurred creating database:', err);
+ logger.error('init', 'an error occurred creating database:', err);
});
}
diff --git a/provider/lib/delete.js b/provider/lib/delete.js
index a7d89a7..330b4f1 100644
--- a/provider/lib/delete.js
+++ b/provider/lib/delete.js
@@ -1,6 +1,6 @@
var request = require('request');
-module.exports = function(tid, logger, utils) {
+module.exports = function(logger, utils) {
// Test Endpoint
this.endPoint = '/cloudanttriggers/:id';
@@ -9,7 +9,7 @@
this.delete = function (req, res) {
var method = 'DELETE /cloudanttriggers';
- logger.info(tid, method);
+ logger.info(method);
var id = req.params.id;
var args = typeof req.body === 'object' ? req.body : JSON.parse(req.body);
@@ -34,7 +34,7 @@
}
else {
var errorMsg = 'Cloudant data trigger ' + id + ' cannot be deleted.';
- logger.error(tid, method, errorMsg, error);
+ logger.error(method, errorMsg, error);
if (error) {
res.status(400).json({
message: errorMsg,
diff --git a/provider/lib/health.js b/provider/lib/health.js
index ea417c9..690dc71 100644
--- a/provider/lib/health.js
+++ b/provider/lib/health.js
@@ -1,4 +1,4 @@
-module.exports = function(tid, logger, providerUtils) {
+module.exports = function(logger, providerUtils) {
// Health Endpoint
this.endPoint = '/health';
diff --git a/provider/lib/update.js b/provider/lib/update.js
index 28c9907..6fca646 100644
--- a/provider/lib/update.js
+++ b/provider/lib/update.js
@@ -1,6 +1,6 @@
var request = require('request');
-module.exports = function(tid, logger, utils) {
+module.exports = function(logger, utils) {
// Test Endpoint
this.endPoint = '/cloudanttriggers/:id';
@@ -10,16 +10,16 @@
var method = 'PUT /cloudanttriggers';
- logger.info(tid, method);
+ logger.info(method);
var args = typeof req.body === 'object' ? req.body : JSON.parse(req.body);
if (args.maxTriggers > utils.triggersLimit) {
- logger.warn(tid, method, 'maxTriggers > ' + utils.triggersLimit + ' is not allowed');
+ logger.warn(method, 'maxTriggers > ' + utils.triggersLimit + ' is not allowed');
res.status(400).json({
error: 'maxTriggers > ' + utils.triggersLimit + ' is not allowed'
});
return;
} else if (!args.callback || !args.callback.action || !args.callback.action.name) {
- logger.warn(tid, method, 'Your callback is unknown for cloudant trigger:', args.callback);
+ logger.warn(method, 'Your callback is unknown for cloudant trigger:', args.callback);
res.status(400).json({
error: 'Your callback is unknown for cloudant trigger.'
});
@@ -32,7 +32,7 @@
var triggerURL = host + '/api/v1/namespaces/' + triggerObj.namespace + '/triggers/' + triggerObj.name;
var auth = args.apikey.split(':');
- logger.info(tid, method, 'Checking if user has access rights to create a trigger');
+ logger.info(method, 'Checking if user has access rights to create a trigger');
request({
method: 'get',
url: triggerURL,
@@ -43,7 +43,7 @@
}, function(error, response, body) {
if (error || response.statusCode >= 400) {
var errorMsg = 'Trigger authentication request failed.';
- logger.error(tid, method, errorMsg, error);
+ logger.error(method, errorMsg, error);
if (error) {
res.status(400).json({
message: errorMsg,
@@ -61,13 +61,13 @@
else {
var id = req.params.id;
var trigger = utils.initTrigger(args, id);
- // 10 is number of retries to create a trigger.
- utils.createTrigger(trigger, 10)
+ // number of retries to create a trigger.
+ utils.createTrigger(trigger, utils.retriesBeforeDelete)
.then(function (newTrigger) {
- logger.info(tid, method, 'Trigger was added and database is confirmed.', newTrigger);
+ logger.info(method, 'Trigger was added and database is confirmed.', newTrigger);
utils.addTriggerToDB(newTrigger, res);
}, function (err) {
- logger.error(tid, method, 'Trigger could not be created.', err);
+ logger.error(method, 'Trigger could not be created.', err);
utils.deleteTrigger(id);
res.status(400).json({
message: 'Trigger could not be created.',
diff --git a/provider/lib/utils.js b/provider/lib/utils.js
index 8c5db12..f3f49e7 100644
--- a/provider/lib/utils.js
+++ b/provider/lib/utils.js
@@ -2,35 +2,28 @@
var request = require('request');
var constants = require('./constants.js');
+
module.exports = function(
- tid,
logger,
app,
retriesBeforeDelete,
triggerDB,
- routerHost,
- supportIncludeDocs
+ routerHost
) {
- this.tid = tid;
this.logger = logger;
this.app = app;
this.retriesBeforeDelete = retriesBeforeDelete;
this.triggerDB = triggerDB;
this.routerHost = routerHost;
- this.logger.info (tid, 'utils', 'received database to store triggers: ' + triggerDB);
-
// this is the default trigger fire limit (in the event that is was not set during trigger creation)
this.defaultTriggerFireLimit = constants.DEFAULT_TRIGGER_COUNT;
- // maximum number of times to create a trigger
- this.retryCount = constants.RETRIES_BEFORE_DELETE;
-
// Log HTTP Requests
app.use(function(req, res, next) {
if (req.url.indexOf('/cloudanttriggers') === 0) {
- logger.info(tid, 'HttpRequest', req.method, req.url);
+ logger.info('HttpRequest', req.method, req.url);
}
next();
});
@@ -38,9 +31,6 @@
this.module = 'utils';
this.triggers = {};
- // we need a way of know if the triggers should fire without max fire constraint (ie fire infinite times)
- this.unlimitedTriggerFires = false;
-
var that = this;
// Add a trigger: listen for changes and dispatch.
@@ -74,47 +64,30 @@
dbURL = dbURL + ':' + dataTrigger.port;
}
- logger.info(tid, method,'found trigger url: ', dbURL);
+ logger.info(method, 'found trigger url:', dbURL);
nanoConnection = require('nano')(dbURL);
try {
-
var triggeredDB = nanoConnection.use(dataTrigger.dbname);
- var includeDocs = false;
- if (supportIncludeDocs === 'true' && (dataTrigger.includeDoc === true || dataTrigger.includeDoc === 'true')) {
- includeDocs = true;
- }
// Listen for changes on this database.
- var feed = triggeredDB.follow({since: sinceToUse, include_docs: includeDocs});
+ var feed = triggeredDB.follow({since: sinceToUse, include_docs: false});
dataTrigger.feed = feed;
that.triggers[dataTrigger.id] = dataTrigger;
feed.on('change', function (change) {
+ logger.info(method, 'Trigger', dataTrigger.id, 'got change from', dataTrigger.dbname, change);
+
var triggerHandle = that.triggers[dataTrigger.id];
+ if (triggerHandle) {
+ logger.info(method, triggerHandle.triggersLeft, 'triggers left for', dataTrigger.id);
- logger.info(tid, method, 'Got change from', dataTrigger.dbname, change, triggerHandle);
- logger.info(tid, method, 'Found triggerHandle', triggerHandle);
-
- if (triggerHandle && triggerHandle.retriesLeft > 0) {
-
- logger.info(tid, method, 'triggers left:', triggerHandle.triggersLeft);
- logger.info(tid, method, 'retries left:', triggerHandle.retriesLeft);
-
- if (triggerHandle.triggersLeft === -1) {
- logger.info(tid, method, 'found a trigger fire limit set to -1. setting it to fire infinitely many times');
- that.unlimitedTriggerFires = true;
- } else {
- that.unlimitedTriggerFires = false;
- }
-
- if (that.unlimitedTriggerFires || triggerHandle.triggersLeft > 0) {
+ if (triggerHandle.maxTriggers === -1 || triggerHandle.triggersLeft > 0) {
try {
- logger.info(tid, method, 'found a valid trigger. lets fire this trigger', triggerHandle);
that.fireTrigger(dataTrigger.id, change);
} catch (e) {
- logger.error(tid, method, 'Exception occurred in callback', e);
+ logger.error(method, 'Exception occurred while firing the trigger', e);
}
}
}
@@ -125,22 +98,21 @@
return new Promise(function(resolve, reject) {
feed.on('error', function (err) {
- logger.error(tid, method,'Error occurred for trigger', dataTrigger.id, '(db ' + dataTrigger.dbname + '):', err);
- // revive the feed if an error occured for now
- // the user should be in charge of removing the feeds
- logger.info(tid, "attempting to recreate trigger", dataTrigger.id);
+ logger.error(method,'Error occurred for trigger', dataTrigger.id, '(db ' + dataTrigger.dbname + '):', err);
+ // revive the feed if an error occurred for now
that.deleteTrigger(dataTrigger.id);
dataTrigger.since = "now";
if (retryCount > 0) {
+ logger.info(method, 'attempting to recreate trigger', dataTrigger.id);
+ logger.info(method, 'Retry Count:', (retryCount - 1));
that.createTrigger(dataTrigger, (retryCount - 1))
.then(function(trigger) {
- logger.error(tid, method, "Retry Count:", (retryCount - 1));
resolve(trigger);
}, function(err) {
reject(err);
});
} else {
- logger.error(tid, method, "Trigger's feed produced too many errors. Deleting the trigger", dataTrigger.id, '(db ' + dataTrigger.dbname + ')');
+ logger.error(method, "Trigger's feed produced too many errors. Deleting the trigger", dataTrigger.id, '(db ' + dataTrigger.dbname + ')');
reject({
error: err,
message: "Trigger's feed produced too many errors. Deleting the trigger " + dataTrigger.id
@@ -149,14 +121,14 @@
});
feed.on('confirm', function (dbObj) {
- logger.info(tid, method, 'Added cloudant data trigger', dataTrigger.id, 'listening for changes in database', dataTrigger.dbname);
+ logger.info(method, 'Added cloudant data trigger', dataTrigger.id, 'listening for changes in database', dataTrigger.dbname);
resolve(dataTrigger);
});
});
} catch (err) {
- logger.info('caught an exception: ' + err);
+ logger.info(method, 'caught an exception:', err);
return Promise.reject(err);
}
@@ -167,23 +139,23 @@
var method = 'initTrigger';
// validate parameters here
- logger.info(tid, method, 'create has received the following request args', JSON.stringify(obj));
+ logger.info(method, 'create has received the following request args', JSON.stringify(obj));
// if the trigger creation request has not set the max trigger fire limit
// we will set it here (default value can be updated in ./constants.js)
if (!obj.maxTriggers) {
- logger.info(tid, method, 'maximum trigger fires has not been set by requester. setting it to the default value of infinity.');
- logger.info(tid, method, 'setting trigger fire limit', that.defaultTriggerFireLimit);
+ logger.info(method, 'maximum trigger fires has not been set by requester. setting it to the default value of infinity.');
+ logger.info(method, 'setting trigger fire limit', that.defaultTriggerFireLimit);
obj.maxTriggers = that.defaultTriggerFireLimit;
} else {
- logger.info(tid, method, 'maximum trigger fires has been set to:', obj.maxTriggers);
+ logger.info(method, 'maximum trigger fires has been set to:', obj.maxTriggers);
}
// if we find that includeDoc is set to true we should warn user here
// (note: this will only be the set for old feeds. we no longer allow
// this to be set for newly created feeds).
if (obj.includeDoc && (obj.includeDoc === true || obj.includeDoc.toString().trim().toLowerCase() === 'true')) {
- logger.warn(tid, method, 'cloudant trigger feed: includeDoc parameter is no longer supported.');
+ logger.warn(method, 'cloudant trigger feed: includeDoc parameter is no longer supported.');
}
var trigger = {
@@ -200,8 +172,7 @@
since: obj.since,
callback: obj.callback,
maxTriggers: obj.maxTriggers,
- triggersLeft: obj.maxTriggers,
- retriesLeft: retriesBeforeDelete
+ triggersLeft: obj.maxTriggers
};
return trigger;
@@ -211,7 +182,7 @@
this.initAllTriggers = function () {
var method = 'initAllTriggers';
- logger.info(tid, that.module, method, 'Initializing all cloudant triggers from database.');
+ logger.info(method, 'Initializing all cloudant triggers from database.');
triggerDB.view('filters', 'only_triggers', {include_docs: true}, function(err, body) {
if (!err) {
@@ -223,7 +194,7 @@
var triggerURL = host + '/api/v1/namespaces/' + triggerObj.namespace + '/triggers/' + triggerObj.name;
var auth = trigger.doc.apikey.split(':');
- logger.info(tid, method, "Checking if trigger", trigger.doc.id, "still exists");
+ logger.info(method, 'Checking if trigger', trigger.doc.id, 'still exists');
request({
method: 'get',
url: triggerURL,
@@ -234,29 +205,29 @@
}, function(error, response, body) {
//delete from database if trigger no longer exists (404)
if (!error && response.statusCode === 404) {
+ logger.info(method, 'Trigger', trigger.doc.id, 'no longer exists');
that.deleteTriggerFromDB(trigger.doc.id);
}
else {
var cloudantTrigger = that.initTrigger(trigger.doc, trigger.doc.id);
- if (cloudantTrigger.triggersLeft === -1) {
- logger.info(tid, method, 'found a trigger fire limit set to -1. setting it to fire infinitely many times');
- that.unlimitedTriggerFires = true;
- } else {
- that.unlimitedTriggerFires = false;
- }
-
// check here for triggers left if none left end here, and don't create
- if (that.unlimitedTriggerFires || cloudantTrigger.triggersLeft > 0) {
- that.createTrigger(cloudantTrigger, that.retryCount);
+ if (cloudantTrigger.maxTriggers === -1 || cloudantTrigger.triggersLeft > 0) {
+ that.createTrigger(cloudantTrigger, retriesBeforeDelete)
+ .then(function (newTrigger) {
+ logger.info(method, 'Trigger was added.', newTrigger);
+ }, function (err) {
+ //if feed was not recreated then delete from trigger database
+ that.deleteTriggerFromDB(cloudantTrigger.id);
+ });
} else {
- logger.info(tid, method, 'found a trigger with no triggers left to fire off.');
+ logger.info(method, 'found a trigger with no triggers left to fire off.');
}
}
});
});
} else {
- logger.error(tid, method, 'could not get latest state from database');
+ logger.error(method, 'could not get latest state from database');
}
});
@@ -267,12 +238,11 @@
var method = 'deleteTrigger';
var trigger = that.triggers[id];
if (trigger) {
- logger.info(tid, method, 'Stopped cloudant trigger',
- id, 'listening for changes in database', trigger.dbname);
+ logger.info(method, 'Stopped cloudant trigger', id, 'listening for changes in database', trigger.dbname);
trigger.feed.stop();
delete that.triggers[id];
} else {
- logger.info(tid, method, 'trigger', id, 'could not be found in the trigger list.');
+ logger.info(method, 'trigger', id, 'could not be found in the trigger list.');
return false;
}
};
@@ -282,7 +252,7 @@
var method = 'addTriggerToDB';
triggerDB.insert(_.omit(trigger, 'feed'), trigger.id, function(err, body) {
if(!err) {
- logger.info(tid, method, 'trigger', trigger.id, 'was inserted into db.');
+ logger.info(method, 'trigger', trigger.id, 'was inserted into db.');
res.status(200).json(_.omit(trigger, 'feed'));
} else {
that.deleteTrigger(trigger.id);
@@ -300,13 +270,13 @@
if (!err) {
triggerDB.destroy(body._id, body._rev, function(err, body) {
if (err) {
- logger.error(tid, method, 'there was an error while deleting', id, 'from database');
+ logger.error(method, 'there was an error while deleting', id, 'from database');
if (res) {
res.status(err.statusCode).json({ error: 'Cloudant data trigger ' + id + 'cannot be deleted.' } );
}
} else {
that.deleteTrigger(id);
- logger.info(tid, method, 'cloudant trigger', id, ' is successfully deleted');
+ logger.info(method, 'cloudant trigger', id, ' is successfully deleted');
if (res) {
res.send('Deleted cloudant trigger ' + id);
}
@@ -314,13 +284,13 @@
});
} else {
if (err.statusCode === 404) {
- logger.info(tid, method, 'there was no trigger with id', id, 'in database.', err.error);
+ logger.info(method, 'there was no trigger with id', id, 'in database.', err.error);
if (res) {
- res.status(200).json({ message: 'there was no trigger with id ' + id + ' in database.' } );
+ res.status(404).json({ message: 'there was no trigger with id ' + id + ' in database.' } );
res.end();
}
} else {
- logger.error(tid, method, 'there was an error while getting', id, 'from database', err);
+ logger.error(method, 'there was an error while getting', id, 'from database', err);
if (res) {
res.status(err.statusCode).json({ error: 'Cloudant data trigger ' + id + ' cannot be deleted.' } );
}
@@ -337,7 +307,6 @@
var apikey = dataTrigger.apikey;
var triggerName = dataTrigger.callback.action.name;
var triggerObj = that.parseQName(triggerName);
- logger.info(tid, method, 'fireTrigger: change =', change);
var form = change;
// pass the fire trigger both the change and an object containing
@@ -353,19 +322,11 @@
}
form.dbname = dataTrigger.dbname;
- logger.info(tid, method, 'fireTrigger: form =', form);
- logger.info(tid, method, 'for trigger', id, 'invoking action', triggerName, 'with db update', JSON.stringify(form));
+ logger.info(method, 'firing trigger', triggerName, 'with db update', JSON.stringify(form));
var host = 'https://' + routerHost + ':' + 443;
var uri = host + '/api/v1/namespaces/' + triggerObj.namespace + '/triggers/' + triggerObj.name;
var auth = apikey.split(':');
- logger.info(tid, method, uri, auth, form);
-
- // only manage trigger fires if they are not infinite
- if (!that.unlimitedTriggerFires) {
- logger.info(tid, method, 'found a trigger fire limit set to -1. setting it to fire infinitely many times');
- dataTrigger.triggersLeft--;
- }
request({
method: 'post',
@@ -377,34 +338,27 @@
json: form
}, function(error, response, body) {
if (dataTrigger) {
- logger.info(tid, method, 'done http request, STATUS', response ? response.statusCode : response);
- logger.info(tid, method, 'done http request, body', body);
+ logger.info(method, 'done http request, STATUS', response ? response.statusCode : response);
if (error || response.statusCode >= 400) {
- dataTrigger.retriesLeft--;
-
- // only manage trigger fires if they are not infinite
- if (!that.unlimitedTriggerFires) {
- dataTrigger.triggersLeft++; // setting the counter back to where it used to be
+ logger.error(method, 'there was an error invoking', id, response ? response.statusCode : response, error, body);
+ if (!error && [408, 429, 500, 503].indexOf(response.statusCode) === -1) {
+ //delete dead triggers
+ that.deleteTriggerFromDB(dataTrigger.id);
}
-
- logger.error(tid, method, 'there was an error invoking', id, response ? response.statusCode : response, error, body);
} else {
- dataTrigger.retriesLeft = that.retriesBeforeDelete; // reset retry counter
- logger.info(tid, method, 'fired', id, 'with body', body, dataTrigger.triggersLeft, 'triggers left');
- }
+ // only manage trigger fires if they are not infinite
+ if (dataTrigger.maxTriggers !== -1) {
+ dataTrigger.triggersLeft--;
+ }
+ logger.info(method, 'fired', id, 'with body', body, dataTrigger.triggersLeft, 'triggers left');
- if (dataTrigger.triggersLeft === 0 || dataTrigger.retriesLeft === 0) {
if (dataTrigger.triggersLeft === 0) {
- logger.info(tid, 'onTick', 'no more triggers left, deleting');
+ logger.info('onTick', 'no more triggers left, deleting');
+ that.deleteTriggerFromDB(dataTrigger.id);
}
- if (dataTrigger.retriesLeft === 0) {
- logger.info(tid, 'onTick', 'too many retries, deleting');
- }
-
- that.deleteTriggerFromDB(dataTrigger.id);
}
} else {
- logger.info(tid, method, 'trigger', id, 'was deleted between invocations');
+ logger.info(method, 'trigger', id, 'was deleted between invocations');
}
});
};