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/link_monitor.cc b/link_monitor.cc
index 2485ce5..7db78be 100644
--- a/link_monitor.cc
+++ b/link_monitor.cc
@@ -18,6 +18,7 @@
#include "shill/device_info.h"
#include "shill/event_dispatcher.h"
#include "shill/ip_address.h"
+#include "shill/metrics.h"
#include "shill/scope_logger.h"
#include "shill/shill_time.h"
@@ -33,10 +34,12 @@
LinkMonitor::LinkMonitor(const ConnectionRefPtr &connection,
EventDispatcher *dispatcher,
+ Metrics *metrics,
DeviceInfo *device_info,
const FailureCallback &failure_callback)
: connection_(connection),
dispatcher_(dispatcher),
+ metrics_(metrics),
device_info_(device_info),
failure_callback_(failure_callback),
broadcast_failure_count_(0),
@@ -56,6 +59,8 @@
if (!device_info_->GetMACAddress(
connection_->interface_index(), &local_mac_address_)) {
LOG(ERROR) << "Could not get local MAC address.";
+ metrics_->NotifyLinkMonitorFailure(
+ connection_->technology(), Metrics::kLinkMonitorMacAddressNotFound);
Stop();
return false;
}
@@ -89,6 +94,8 @@
unsigned int response_time_milliseconds) {
SLOG(Link, 2) << "In " << __func__ << " with sample "
<< response_time_milliseconds << ".";
+ metrics_->NotifyLinkMonitorResponseTimeSampleAdded(
+ connection_->technology(), response_time_milliseconds);
response_sample_bucket_ += response_time_milliseconds;
if (response_sample_count_ < kMaxResponseSampleFilterDepth) {
++response_sample_count_;
@@ -113,7 +120,7 @@
arp_client_.reset(new ArpClient(connection_->interface_index()));
if (!arp_client_->Start()) {
- return false;
+ return false;
}
receive_response_handler_.reset(
dispatcher_->CreateReadyHandler(
@@ -141,6 +148,9 @@
<< " unicast failures.";
failure_callback_.Run();
Stop();
+ metrics_->NotifyLinkMonitorFailure(
+ connection_->technology(),
+ Metrics::kLinkMonitorFailureThresholdReached);
return true;
}
is_unicast_ = !is_unicast_;
@@ -206,6 +216,8 @@
if (!CreateClient()) {
LOG(ERROR) << "Failed to start ARP client.";
Stop();
+ metrics_->NotifyLinkMonitorFailure(
+ connection_->technology(), Metrics::kLinkMonitorClientStartFailure);
return false;
}
} else if (AddMissedResponse()) {
@@ -239,6 +251,8 @@
if (!arp_client_->TransmitRequest(request)) {
LOG(ERROR) << "Failed to send ARP request. Stopping.";
Stop();
+ metrics_->NotifyLinkMonitorFailure(
+ connection_->technology(), Metrics::kLinkMonitorTransmitFailure);
return false;
}