dubee closed pull request #162: updates to cloudant health monitoring
URL: https://github.com/apache/incubator-openwhisk-package-cloudant/pull/162
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
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 dbPrefix = process.env.DB_PREFIX;
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 @@ function init(server) {
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 @@ module.exports = function(logger, utils) {
});
};
- this.monitor = function(apikey) {
+ this.monitor = function(apikey, monitoringInterval) {
var method = 'monitor';
var auth = apikey.split(':');
@@ -63,9 +63,6 @@ module.exports = function(logger, utils) {
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 @@ module.exports = function(logger, utils) {
.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 @@ module.exports = function(logger, utils) {
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 @@ module.exports = function(logger, utils) {
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 @@ module.exports = function(logger, triggerDB, redisClient) {
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 @@ module.exports = function(logger, triggerDB, redisClient) {
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 @@ module.exports = function(logger, triggerDB, redisClient) {
};
// 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 @@ module.exports = function(logger, triggerDB, redisClient) {
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 @@ module.exports = function(logger, triggerDB, redisClient) {
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 @@ module.exports = function(logger, triggerDB, redisClient) {
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 @@ module.exports = function(logger, triggerDB, redisClient)
{
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;
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services