Fix random test failure and other minor cleanup (#134)

diff --git a/provider/lib/health.js b/provider/lib/health.js
index 9157e82..5255a5a 100644
--- a/provider/lib/health.js
+++ b/provider/lib/health.js
@@ -11,6 +11,8 @@
     var triggerName;
     var monitorStatus;
     var alarmTypes = ['interval', 'date', 'cron'];
+    var alarmTypeIndex = 0;
+    var monitorStages = ['triggerStarted', 'triggerFired', 'triggerStopped'];
     var healthMonitor = this;
 
     // Health Logic
@@ -49,6 +51,14 @@
 
         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 existingID = `${apikey}/_/${triggerName}`;
 
             //delete trigger feed from database
@@ -60,45 +70,40 @@
                 triggerID: existingID
             };
             utils.sanitizer.deleteTrigger(dataTrigger, auth, 0)
-                .then((info) => {
-                    logger.info(method, existingID, info);
-                })
-                .catch(err => {
-                    logger.error(method, existingID, err);
-                });
+            .then((info) => {
+                logger.info(method, existingID, info);
+            })
+            .catch(err => {
+                logger.error(method, existingID, err);
+            });
+
+            var existingAlarmIndex = alarmTypes.indexOf(monitorStatus.triggerType);
+            alarmTypeIndex = existingAlarmIndex !== 2 ? existingAlarmIndex + 1 : 0;
         }
 
         //create new alarm trigger
         triggerName = 'alarms_' + utils.worker + utils.host + '_' + Date.now();
-
-        var triggerURL = utils.uriHost + '/api/v1/namespaces/_/triggers/' + triggerName;
-        var triggerID = `${apikey}/_/${triggerName}`;
-        healthMonitor.createTrigger(triggerURL, auth)
-            .then((info) => {
-                logger.info(method, triggerID, info);
-                var newTrigger = healthMonitor.createAlarmTrigger(triggerID, triggerName, apikey);
-                healthMonitor.createTriggerInDB(triggerID, newTrigger);
-            })
-            .catch(err => {
-                logger.error(method, triggerID, err);
-            });
-    };
-
-    this.createAlarmTrigger = function(triggerID, triggerName, apikey) {
-        var method = 'createAlarmTrigger';
-
-        var existingTypeIndex = -1;
-        if (monitorStatus && alarmTypes.indexOf(monitorStatus.triggerType) !== 2) {
-            existingTypeIndex = alarmTypes.indexOf(monitorStatus.triggerType);
-        }
-        var alarmType = alarmTypes[existingTypeIndex + 1];
+        var alarmType = alarmTypes[alarmTypeIndex];
 
         //update status monitor object
         utils.monitorStatus.triggerName = triggerName;
         utils.monitorStatus.triggerType = alarmType;
-        utils.monitorStatus.triggerStarted = false;
-        utils.monitorStatus.triggerFired = false;
-        utils.monitorStatus.triggerUpdated = false;
+
+        var triggerURL = utils.uriHost + '/api/v1/namespaces/_/triggers/' + triggerName;
+        var triggerID = `${apikey}/_/${triggerName}`;
+        healthMonitor.createTrigger(triggerURL, auth)
+        .then((info) => {
+            logger.info(method, triggerID, info);
+            var newTrigger = healthMonitor.createAlarmTrigger(triggerID, apikey, alarmType);
+            healthMonitor.createTriggerInDB(triggerID, newTrigger);
+        })
+        .catch(err => {
+            logger.error(method, triggerID, err);
+        });
+    };
+
+    this.createAlarmTrigger = function(triggerID, apikey, alarmType) {
+        var method = 'createAlarmTrigger';
 
         var newTrigger = {
             apikey: apikey,
diff --git a/provider/lib/utils.js b/provider/lib/utils.js
index a428a46..3200189 100644
--- a/provider/lib/utils.js
+++ b/provider/lib/utils.js
@@ -165,7 +165,7 @@
         var method = 'handleFiredTrigger';
 
         if (isMonitorTrigger) {
-            utils.monitorStatus.triggerFired = true;
+            utils.monitorStatus.triggerFired = "success";
         }
 
         var triggerIdentifier = dataTrigger.triggerID;
@@ -343,10 +343,10 @@
 
                 if (utils.triggers[triggerIdentifier]) {
                     if (doc.status && doc.status.active === false) {
-                        if (doc.monitor && doc.monitor === utils.host) {
-                            utils.monitorStatus.triggerUpdated = true;
-                        }
                         utils.stopTrigger(triggerIdentifier);
+                        if (doc.monitor && doc.monitor === utils.host) {
+                            utils.monitorStatus.triggerStopped = "success";
+                        }
                     }
                 }
                 else {
@@ -358,7 +358,7 @@
                             logger.info(method, triggerIdentifier, 'created successfully');
 
                             if (doc.monitor && doc.monitor === utils.host) {
-                                utils.monitorStatus.triggerStarted = true;
+                                utils.monitorStatus.triggerStarted = "success";
                             }
 
                             if (cachedTrigger.intervalHandle && utils.shouldFireTrigger(cachedTrigger)) {
diff --git a/tests/src/test/scala/system/packages/AlarmsFeedTests.scala b/tests/src/test/scala/system/packages/AlarmsFeedTests.scala
index 59c4b0a..56e7e74 100644
--- a/tests/src/test/scala/system/packages/AlarmsFeedTests.scala
+++ b/tests/src/test/scala/system/packages/AlarmsFeedTests.scala
@@ -83,11 +83,10 @@
     }
 
     it should "return error message when alarm action does not include cron parameter" in withAssetCleaner(wskprops) {
-
         (wp, assetHelper) =>
             implicit val wskprops = wp // shadow global props and make implicit
-            val triggerName = s"dummyCloudantTrigger-${System.currentTimeMillis}"
-            val packageName = "dummyCloudantPackage"
+            val triggerName = s"dummyAlarmsTrigger-${System.currentTimeMillis}"
+            val packageName = "dummyAlarmsPackage"
             val feed = "alarm"
 
             // the package alarms should be there
@@ -112,11 +111,10 @@
     }
 
     it should "return error message when alarms once action does not include date parameter" in withAssetCleaner(wskprops) {
-
         (wp, assetHelper) =>
             implicit val wskprops = wp // shadow global props and make implicit
-            val triggerName = s"dummyCloudantTrigger-${System.currentTimeMillis}"
-            val packageName = "dummyCloudantPackage"
+            val triggerName = s"dummyAlarmsTrigger-${System.currentTimeMillis}"
+            val packageName = "dummyAlarmsPackage"
             val feed = "once"
 
             // the package alarms should be there
@@ -141,11 +139,10 @@
     }
 
     it should "return error message when alarm action includes invalid cron parameter" in withAssetCleaner(wskprops) {
-
         (wp, assetHelper) =>
             implicit val wskprops = wp // shadow global props and make implicit
-            val triggerName = s"dummyCloudantTrigger-${System.currentTimeMillis}"
-            val packageName = "dummyCloudantPackage"
+            val triggerName = s"dummyAlarmsTrigger-${System.currentTimeMillis}"
+            val packageName = "dummyAlarmsPackage"
             val feed = "alarm"
 
             // the package alarms should be there
@@ -173,11 +170,10 @@
     }
 
     it should "return error message when alarms once action includes an invalid date parameter" in withAssetCleaner(wskprops) {
-
         (wp, assetHelper) =>
             implicit val wskprops = wp // shadow global props and make implicit
-            val triggerName = s"dummyCloudantTrigger-${System.currentTimeMillis}"
-            val packageName = "dummyCloudantPackage"
+            val triggerName = s"dummyAlarmsTrigger-${System.currentTimeMillis}"
+            val packageName = "dummyAlarmsPackage"
             val feed = "once"
 
             // the package alarms should be there
@@ -203,11 +199,10 @@
     }
 
     it should "return error message when alarms once action date parameter is not a future date" in withAssetCleaner(wskprops) {
-
         (wp, assetHelper) =>
             implicit val wskprops = wp // shadow global props and make implicit
-            val triggerName = s"dummyCloudantTrigger-${System.currentTimeMillis}"
-            val packageName = "dummyCloudantPackage"
+            val triggerName = s"dummyAlarmsTrigger-${System.currentTimeMillis}"
+            val packageName = "dummyAlarmsPackage"
             val feed = "once"
 
             // the package alarms should be there
@@ -235,11 +230,10 @@
     }
 
     it should "return error message when alarms startDate parameter is not a future date" in withAssetCleaner(wskprops) {
-
         (wp, assetHelper) =>
             implicit val wskprops = wp // shadow global props and make implicit
-            val triggerName = s"dummyCloudantTrigger-${System.currentTimeMillis}"
-            val packageName = "dummyCloudantPackage"
+            val triggerName = s"dummyAlarmsTrigger-${System.currentTimeMillis}"
+            val packageName = "dummyAlarmsPackage"
             val feed = "alarm"
 
             // the package alarms should be there
@@ -267,11 +261,10 @@
     }
 
     it should "return error message when alarms stopDate parameter is not greater than startDate" in withAssetCleaner(wskprops) {
-
         (wp, assetHelper) =>
             implicit val wskprops = wp // shadow global props and make implicit
-            val triggerName = s"dummyCloudantTrigger-${System.currentTimeMillis}"
-            val packageName = "dummyCloudantPackage"
+            val triggerName = s"dummyAlarmsTrigger-${System.currentTimeMillis}"
+            val packageName = "dummyAlarmsPackage"
             val feed = "alarm"
 
             // the package alarms should be there
@@ -284,7 +277,7 @@
                 (pkg, name) => pkg.bind("/whisk.system/alarms", name)
             }
 
-            val stopDate = System.currentTimeMillis + 5000
+            val stopDate = System.currentTimeMillis + 30000
             val startDate = stopDate
 
             // create trigger with feed
@@ -301,11 +294,10 @@
     }
 
     it should "return error message when interval action does not include minutes parameter" in withAssetCleaner(wskprops) {
-
         (wp, assetHelper) =>
             implicit val wskprops = wp // shadow global props and make implicit
-            val triggerName = s"dummyCloudantTrigger-${System.currentTimeMillis}"
-            val packageName = "dummyCloudantPackage"
+            val triggerName = s"dummyAlarmsTrigger-${System.currentTimeMillis}"
+            val packageName = "dummyAlarmsPackage"
             val feed = "interval"
 
             // the package alarms should be there
@@ -330,11 +322,10 @@
     }
 
     it should "return error message when interval action includes invalid minutes parameter" in withAssetCleaner(wskprops) {
-
         (wp, assetHelper) =>
             implicit val wskprops = wp // shadow global props and make implicit
-            val triggerName = s"dummyCloudantTrigger-${System.currentTimeMillis}"
-            val packageName = "dummyCloudantPackage"
+            val triggerName = s"dummyAlarmsTrigger-${System.currentTimeMillis}"
+            val packageName = "dummyAlarmsPackage"
             val feed = "interval"
 
             // the package alarms should be there
@@ -456,8 +447,8 @@
     it should "return error message when limitCronFields is true and 6 cron fields are used" in withAssetCleaner(wskprops) {
         (wp, assetHelper) =>
             implicit val wskprops = wp // shadow global props and make implicit
-            val triggerName = s"dummyCloudantTrigger-${System.currentTimeMillis}"
-            val packageName = "dummyCloudantPackage"
+            val triggerName = s"dummyAlarmsTrigger-${System.currentTimeMillis}"
+            val packageName = "dummyAlarmsPackage"
             val feed = "alarm"
 
             // the package alarms should be there