in provider/lib/health.js [63:118]
this.monitor = function(apikey, monitoringInterval) {
var method = 'monitor';
if (triggerName) {
monitorStatus = Object.assign({}, utils.monitorStatus);
utils.monitorStatus = {};
var monitorStatusSize = Object.keys(monitorStatus).length;
if (monitorStatusSize < 5) {
//we have a failure in one of the stages
var stageFailed = monitorStages[monitorStatusSize - 2];
monitorStatus[stageFailed] = 'failed';
}
var existingTriggerID = `:_:${triggerName}`;
var existingCanaryID = canaryDocID;
//delete the trigger
var triggerData = {
apikey: apikey,
uri: utils.uriHost + '/api/v1/namespaces/_/triggers/' + triggerName,
triggerID: existingTriggerID
};
deleteTrigger(triggerData, 0);
//delete the canary doc
deleteDocFromDB(existingCanaryID, 0);
}
//create new trigger and canary doc
var docSuffix = utils.worker + utils.host + '_' + Date.now();
triggerName = 'pluggable_provider_' + docSuffix;
canaryDocID = 'canary_' + docSuffix;
//update status monitor object
utils.monitorStatus.triggerName = triggerName;
utils.monitorStatus.triggerType = 'changes';
var triggerURL = utils.uriHost + '/api/v1/namespaces/_/triggers/' + triggerName;
var triggerID = `:_:${triggerName}`;
createTrigger(triggerURL, apikey)
.then(info => {
logger.info(method, triggerID, info);
var newTrigger = createCloudantTrigger(triggerID, apikey);
utils.createTrigger(newTrigger);
setTimeout(function () {
var canaryDoc = {
isCanaryDoc: true,
host: utils.host
};
createDocInDB(canaryDocID, canaryDoc);
}, monitoringInterval / 3);
})
.catch(err => {
logger.error(method, triggerID, err);
});
};