updates to cloudant health monitoring (#162)
diff --git a/provider/app.js b/provider/app.js
index 0bfd33d..fc9149d 100644
--- a/provider/app.js
+++ b/provider/app.js
@@ -35,7 +35,7 @@
var databaseName = dbPrefix + constants.TRIGGER_DB_SUFFIX;
var redisUrl = process.env.REDIS_URL;
var monitoringAuth = process.env.MONITORING_AUTH;
-var monitoringInterval = process.env.MONITORING_INTERVAL;
+var monitoringInterval = process.env.MONITORING_INTERVAL || constants.MONITOR_INTERVAL;
var filterDDName = '_design/' + constants.FILTERS_DESIGN_DOC;
var viewDDName = '_design/' + constants.VIEWS_DESIGN_DOC;
@@ -219,8 +219,8 @@
if (monitoringAuth) {
setInterval(function () {
- providerHealth.monitor(monitoringAuth);
- }, monitoringInterval || constants.MONITOR_INTERVAL);
+ providerHealth.monitor(monitoringAuth, monitoringInterval);
+ }, monitoringInterval);
}
})
.catch(err => {
diff --git a/provider/lib/health.js b/provider/lib/health.js
index eb2832d..b13d6ad 100644
--- a/provider/lib/health.js
+++ b/provider/lib/health.js
@@ -45,7 +45,7 @@
});
};
- this.monitor = function(apikey) {
+ this.monitor = function(apikey, monitoringInterval) {
var method = 'monitor';
var auth = apikey.split(':');
@@ -63,9 +63,6 @@
var existingTriggerID = `:_:${triggerName}`;
var existingCanaryID = canaryDocID;
- //delete trigger feed from database
- healthMonitor.deleteDocFromDB(existingTriggerID, 0);
-
//delete the trigger
var uri = utils.uriHost + '/api/v1/namespaces/_/triggers/' + triggerName;
healthMonitor.deleteTrigger(existingTriggerID, uri, auth, 0);
@@ -89,7 +86,14 @@
.then(info => {
logger.info(method, triggerID, info);
var newTrigger = healthMonitor.createCloudantTrigger(triggerID, apikey);
- healthMonitor.createDocInDB(triggerID, newTrigger);
+ utils.createTrigger(newTrigger);
+ setTimeout(function () {
+ var canaryDoc = {
+ isCanaryDoc: true,
+ host: utils.host
+ };
+ healthMonitor.createDocInDB(canaryDocID, canaryDoc);
+ }, monitoringInterval / 3);
})
.catch(err => {
logger.error(method, triggerID, err);
@@ -114,6 +118,8 @@
filter: constants.MONITOR_DESIGN_DOC + '/' + constants.DOCS_FOR_MONITOR,
query_params: {host: utils.host},
maxTriggers: 1,
+ triggersLeft: 1,
+ since: 'now',
worker: utils.worker,
monitor: utils.host
};
@@ -151,15 +157,6 @@
utils.db.insert(doc, docID, function (err) {
if (!err) {
logger.info(method, docID, 'was successfully inserted');
- if (doc.monitor) {
- setTimeout(function () {
- var canaryDoc = {
- isCanaryDoc: true,
- host: utils.host
- };
- healthMonitor.createDocInDB(canaryDocID, canaryDoc);
- }, 1000 * 60);
- }
}
else {
logger.error(method, docID, err);
diff --git a/provider/lib/utils.js b/provider/lib/utils.js
index 7906c36..3e38e1a 100644
--- a/provider/lib/utils.js
+++ b/provider/lib/utils.js
@@ -73,6 +73,9 @@
feed.on('confirm', function () {
logger.info(method, 'Added cloudant data trigger', dataTrigger.id, 'listening for changes in database', dataTrigger.dbname);
+ if (utils.isMonitoringTrigger(dataTrigger.monitor, dataTrigger.id)) {
+ utils.monitorStatus.triggerStarted = "success";
+ }
resolve(dataTrigger.id);
});
});
@@ -100,8 +103,7 @@
maxTriggers: maxTriggers,
triggersLeft: maxTriggers,
filter: newTrigger.filter,
- query_params: newTrigger.query_params,
- monitor: newTrigger.monitor
+ query_params: newTrigger.query_params
};
return trigger;
@@ -157,7 +159,7 @@
};
// Delete a trigger: stop listening for changes and remove it.
- this.deleteTrigger = function(triggerIdentifier) {
+ this.deleteTrigger = function(triggerIdentifier, isMonitoringTrigger) {
var method = 'deleteTrigger';
if (utils.triggers[triggerIdentifier]) {
@@ -167,6 +169,10 @@
delete utils.triggers[triggerIdentifier];
logger.info(method, 'trigger', triggerIdentifier, 'successfully deleted from memory');
+
+ if (utils.isMonitoringTrigger(isMonitoringTrigger, triggerIdentifier)) {
+ utils.monitorStatus.triggerStopped = "success";
+ }
}
};
@@ -192,8 +198,13 @@
utils.monitorStatus.triggerFired = "success";
}
if (dataTrigger.triggersLeft === 0) {
- utils.disableTrigger(triggerId, undefined, 'Automatically disabled after reaching max triggers');
- logger.warn(method, 'no more triggers left, disabled', triggerId);
+ if (dataTrigger.monitor) {
+ utils.deleteTrigger(triggerId, dataTrigger.monitor);
+ }
+ else {
+ utils.disableTrigger(triggerId, undefined, 'Automatically disabled after reaching max triggers');
+ logger.warn(method, 'no more triggers left, disabled', triggerId);
+ }
}
})
.catch(err => {
@@ -276,7 +287,7 @@
var triggerIdentifier = trigger.id;
var doc = trigger.doc;
- if (!(triggerIdentifier in utils.triggers) && !doc.monitor) {
+ if (!(triggerIdentifier in utils.triggers)) {
//check if trigger still exists in whisk db
var triggerObj = utils.parseQName(triggerIdentifier);
var host = 'https://' + utils.routerHost + ':' + 443;
@@ -336,20 +347,14 @@
if (utils.triggers[triggerIdentifier]) {
if (doc.status && doc.status.active === false) {
utils.deleteTrigger(triggerIdentifier);
- if (utils.isMonitoringTrigger(doc.monitor, triggerIdentifier)) {
- utils.monitorStatus.triggerStopped = "success";
- }
}
}
else {
//ignore changes to disabled triggers
- if ((!doc.status || doc.status.active === true) && (!doc.monitor || doc.monitor === utils.host)) {
+ if (!doc.status || doc.status.active === true) {
utils.createTrigger(utils.initTrigger(doc))
.then(triggerIdentifier => {
logger.info(method, triggerIdentifier, 'created successfully');
- if (utils.isMonitoringTrigger(doc.monitor, triggerIdentifier)) {
- utils.monitorStatus.triggerStarted = "success";
- }
})
.catch(err => {
var message = 'Automatically disabled after receiving exception on create trigger: ' + err;