shill: LinkMonitor: Add Metrics

BUG=chromium-os:32600
TEST=Unit tests

Change-Id: I4a7625fb006e939a5ea63efeede8ca9982115332
Reviewed-on: https://gerrit.chromium.org/gerrit/29421
Commit-Ready: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
Reviewed-by: Paul Stewart <pstew@chromium.org>
diff --git a/metrics.h b/metrics.h
index bcd1276..d241249 100644
--- a/metrics.h
+++ b/metrics.h
@@ -116,6 +116,15 @@
     kPortalResultMax
   };
 
+  enum LinkMonitorFailure {
+    kLinkMonitorMacAddressNotFound = 0,
+    kLinkMonitorClientStartFailure = 1,
+    kLinkMonitorTransmitFailure = 2,
+    kLinkMonitorFailureThresholdReached = 3,
+
+    kLinkMonitorFailureMax
+  };
+
   static const char kMetricDisconnect[];
   static const int kMetricDisconnectMax;
   static const int kMetricDisconnectMin;
@@ -165,6 +174,13 @@
 
   static const char kMetricPowerManagerKey[];
 
+  // LinkMonitor statistics.
+  static const char kMetricLinkMonitorFailure[];
+  static const char kMetricLinkMonitorResponseTimeSample[];
+  static const int kMetricLinkMonitorResponseTimeSampleMin;
+  static const int kMetricLinkMonitorResponseTimeSampleMax;
+  static const int kMetricLinkMonitorResponseTimeSampleNumBuckets;
+
   Metrics();
   virtual ~Metrics();
 
@@ -211,6 +227,16 @@
   // Notifies this object of a power management state change.
   void NotifyPowerStateChange(PowerManager::SuspendState new_state);
 
+  // Notifies this object of a failure in LinkMonitor.
+  void NotifyLinkMonitorFailure(
+      Technology::Identifier technology, LinkMonitorFailure failure);
+
+  // Notifies this object that LinkMonitor has added a response time sample
+  // for |connection| with a value of |response_time_milliseconds|.
+  void NotifyLinkMonitorResponseTimeSampleAdded(
+      Technology::Identifier technology,
+      unsigned int response_time_milliseconds);
+
   // Sends linear histogram data to UMA.
   virtual bool SendEnumToUMA(const std::string &name, int sample, int max);