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.cc b/metrics.cc
index 85e37cd..4162f64 100644
--- a/metrics.cc
+++ b/metrics.cc
@@ -10,6 +10,7 @@
 #include <chromeos/dbus/service_constants.h>
 #include <metrics/bootstat.h>
 
+#include "shill/link_monitor.h"
 #include "shill/scope_logger.h"
 #include "shill/wifi_service.h"
 
@@ -100,6 +101,17 @@
 // static
 const char Metrics::kMetricPowerManagerKey[] = "metrics";
 
+// static
+const char Metrics::kMetricLinkMonitorFailure[] =
+    "Network.Shill.%s.LinkMonitorFailure";
+const char Metrics::kMetricLinkMonitorResponseTimeSample[] =
+    "Network.Shill.%s.LinkMonitorResponseTimeSample";
+const int Metrics::kMetricLinkMonitorResponseTimeSampleMin = 0;
+const int Metrics::kMetricLinkMonitorResponseTimeSampleMax =
+    LinkMonitor::kTestPeriodMilliseconds;
+const int Metrics::kMetricLinkMonitorResponseTimeSampleNumBuckets = 50;
+
+
 Metrics::Metrics()
     : library_(&metrics_library_),
       last_default_technology_(Technology::kUnknown),
@@ -377,6 +389,25 @@
   }
 }
 
+void Metrics::NotifyLinkMonitorFailure(
+    Technology::Identifier technology, LinkMonitorFailure failure) {
+  string histogram = GetFullMetricName(kMetricLinkMonitorFailure,
+                                       technology);
+  SendEnumToUMA(histogram, failure, kLinkMonitorFailureMax);
+}
+
+void Metrics::NotifyLinkMonitorResponseTimeSampleAdded(
+    Technology::Identifier technology,
+    unsigned int response_time_milliseconds) {
+  string histogram = GetFullMetricName(kMetricLinkMonitorResponseTimeSample,
+                                       technology);
+  SendToUMA(histogram,
+            response_time_milliseconds,
+            kMetricLinkMonitorResponseTimeSampleMin,
+            kMetricLinkMonitorResponseTimeSampleMax,
+            kMetricLinkMonitorResponseTimeSampleNumBuckets);
+}
+
 bool Metrics::SendEnumToUMA(const string &name, int sample, int max) {
   return library_->SendEnumToUMA(name, sample, max);
 }