Count the Intent FAILED events.

This is work toward fixing ONOS-554

Change-Id: I6aced093c47459796d40e8bd839177c4db60d1e0
diff --git a/apps/metrics/intent/src/main/java/org/onosproject/metrics/intent/IntentMetrics.java b/apps/metrics/intent/src/main/java/org/onosproject/metrics/intent/IntentMetrics.java
index ef43602..81cc415 100644
--- a/apps/metrics/intent/src/main/java/org/onosproject/metrics/intent/IntentMetrics.java
+++ b/apps/metrics/intent/src/main/java/org/onosproject/metrics/intent/IntentMetrics.java
@@ -65,6 +65,7 @@
     private static final String COMPONENT_NAME = "Intent";
     private static final String FEATURE_SUBMITTED_NAME = "Submitted";
     private static final String FEATURE_INSTALLED_NAME = "Installed";
+    private static final String FEATURE_FAILED_NAME = "Failed";
     private static final String FEATURE_WITHDRAW_REQUESTED_NAME =
         "WithdrawRequested";
     private static final String FEATURE_WITHDRAWN_NAME = "Withdrawn";
@@ -72,11 +73,13 @@
     // Event metrics:
     //  - Intent Submitted API operation
     //  - Intent Installed operation completion
+    //  - Intent Failed compilation or installation
     //  - Intent Withdraw Requested API operation
     //  - Intent Withdrawn operation completion
     //
     private EventMetric intentSubmittedEventMetric;
     private EventMetric intentInstalledEventMetric;
+    private EventMetric intentFailedEventMetric;
     private EventMetric intentWithdrawRequestedEventMetric;
     private EventMetric intentWithdrawnEventMetric;
 
@@ -117,6 +120,11 @@
     }
 
     @Override
+    public EventMetric intentFailedEventMetric() {
+        return intentFailedEventMetric;
+    }
+
+    @Override
     public EventMetric intentWithdrawRequestedEventMetric() {
         return intentWithdrawRequestedEventMetric;
     }
@@ -137,7 +145,7 @@
                 intentInstalledEventMetric.eventReceived();
                 break;
             case FAILED:
-                // ignore
+                intentFailedEventMetric.eventReceived();
                 break;
             case WITHDRAW_REQ:
                 intentWithdrawRequestedEventMetric.eventReceived();
@@ -181,6 +189,9 @@
         intentInstalledEventMetric =
             new EventMetric(metricsService, COMPONENT_NAME,
                             FEATURE_INSTALLED_NAME);
+        intentFailedEventMetric =
+            new EventMetric(metricsService, COMPONENT_NAME,
+                            FEATURE_FAILED_NAME);
         intentWithdrawRequestedEventMetric =
             new EventMetric(metricsService, COMPONENT_NAME,
                             FEATURE_WITHDRAW_REQUESTED_NAME);
@@ -190,6 +201,7 @@
 
         intentSubmittedEventMetric.registerMetrics();
         intentInstalledEventMetric.registerMetrics();
+        intentFailedEventMetric.registerMetrics();
         intentWithdrawRequestedEventMetric.registerMetrics();
         intentWithdrawnEventMetric.registerMetrics();
     }
@@ -200,6 +212,7 @@
     private void removeMetrics() {
         intentSubmittedEventMetric.removeMetrics();
         intentInstalledEventMetric.removeMetrics();
+        intentFailedEventMetric.removeMetrics();
         intentWithdrawRequestedEventMetric.removeMetrics();
         intentWithdrawnEventMetric.removeMetrics();
     }
diff --git a/apps/metrics/intent/src/main/java/org/onosproject/metrics/intent/IntentMetricsService.java b/apps/metrics/intent/src/main/java/org/onosproject/metrics/intent/IntentMetricsService.java
index df0b94c..ef5a6a7 100644
--- a/apps/metrics/intent/src/main/java/org/onosproject/metrics/intent/IntentMetricsService.java
+++ b/apps/metrics/intent/src/main/java/org/onosproject/metrics/intent/IntentMetricsService.java
@@ -45,6 +45,13 @@
     public EventMetric intentInstalledEventMetric();
 
     /**
+     * Gets the Event Metric for the intent FAILED events.
+     *
+     * @return the Event Metric for the intent FAILED events.
+     */
+    public EventMetric intentFailedEventMetric();
+
+    /**
      * Gets the Event Metric for the intent WITHDRAW_REQ events.
      *
      * @return the Event Metric for the intent WITHDRAW_REQ events.
diff --git a/apps/metrics/intent/src/main/java/org/onosproject/metrics/intent/cli/IntentEventsMetricsCommand.java b/apps/metrics/intent/src/main/java/org/onosproject/metrics/intent/cli/IntentEventsMetricsCommand.java
index 932566b..d77ff7d 100644
--- a/apps/metrics/intent/src/main/java/org/onosproject/metrics/intent/cli/IntentEventsMetricsCommand.java
+++ b/apps/metrics/intent/src/main/java/org/onosproject/metrics/intent/cli/IntentEventsMetricsCommand.java
@@ -56,6 +56,8 @@
                           service.intentSubmittedEventMetric());
             result = json(mapper, result, "intentInstalled",
                           service.intentInstalledEventMetric());
+            result = json(mapper, result, "intentFailed",
+                          service.intentFailedEventMetric());
             result = json(mapper, result, "intentWithdrawRequested",
                           service.intentWithdrawRequestedEventMetric());
             result = json(mapper, result, "intentWithdrawn",
@@ -66,6 +68,8 @@
                              service.intentSubmittedEventMetric());
             printEventMetric("Installed",
                              service.intentInstalledEventMetric());
+            printEventMetric("Failed",
+                             service.intentFailedEventMetric());
             printEventMetric("Withdraw Requested",
                              service.intentWithdrawRequestedEventMetric());
             printEventMetric("Withdrawn",