delete dead triggers on init (#70)

diff --git a/provider/lib/utils.js b/provider/lib/utils.js
index c9f026d..bf758ab 100644
--- a/provider/lib/utils.js
+++ b/provider/lib/utils.js
@@ -214,23 +214,46 @@
         logger.info(tid, that.module, method, 'Initializing all cloudant triggers from database.');
 
         triggerDB.list({include_docs: true}, function(err, body) {
-            if(!err) {
+            if (!err) {
                 body.rows.forEach(function(trigger) {
-                    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 if trigger still exists in whisk db
+                    var triggerObj = that.parseQName(trigger.doc.id, ':');
+                    var host = 'https://' + routerHost +':'+ 443;
+                    var triggerURL = host + '/api/v1/namespaces/' + triggerObj.namespace + '/triggers/' + triggerObj.name;
+                    var auth = trigger.doc.apikey.split(':');
 
-                    // 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);
-                    } else {
-                      logger.info(tid, method, 'found a trigger with no triggers left to fire off.');
-                    }
+                    logger.info(tid, method, "Checking if trigger", trigger.doc.id, "still exists");
+                    request({
+                        method: 'get',
+                        url: triggerURL,
+                        auth: {
+                            user: auth[0],
+                            pass: auth[1]
+                        }
+                    }, function(error, response, body) {
+                        //delete from database if trigger no longer exists (404)
+                        if (!error && response.statusCode === 404) {
+                            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);
+                            } else {
+                                logger.info(tid, method, 'found a trigger with no triggers left to fire off.');
+                            }
+                        }
+                    });
                 });
             } else {
                 logger.error(tid, method, 'could not get latest state from database');
@@ -274,9 +297,9 @@
         var method = 'deleteTriggerFromDB';
 
         triggerDB.get(id, function(err, body) {
-            if(!err) {
+            if (!err) {
                 triggerDB.destroy(body._id, body._rev, function(err, body) {
-                    if(err) {
+                    if (err) {
                         logger.error(tid, 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.' } );
@@ -353,10 +376,10 @@
             },
             json: form
         }, function(error, response, body) {
-            if(dataTrigger) {
+            if (dataTrigger) {
                 logger.info(tid, method, 'done http request, STATUS', response ? response.statusCode : response);
                 logger.info(tid, method, 'done http request, body', body);
-                if(error || response.statusCode >= 400) {
+                if (error || response.statusCode >= 400) {
                     dataTrigger.retriesLeft--;
 
                     // only manage trigger fires if they are not infinite
@@ -370,11 +393,11 @@
                     logger.info(tid, method, 'fired', id, 'with body', body, dataTrigger.triggersLeft, 'triggers left');
                 }
 
-                if(dataTrigger.triggersLeft === 0 || dataTrigger.retriesLeft === 0) {
-                    if(dataTrigger.triggersLeft === 0) {
+                if (dataTrigger.triggersLeft === 0 || dataTrigger.retriesLeft === 0) {
+                    if (dataTrigger.triggersLeft === 0) {
                         logger.info(tid, 'onTick', 'no more triggers left, deleting');
                     }
-                    if(dataTrigger.retriesLeft === 0) {
+                    if (dataTrigger.retriesLeft === 0) {
                         logger.info(tid, 'onTick', 'too many retries, deleting');
                     }