Index: mojo/services/test_service/test_request_tracker_impl.cc |
diff --git a/mojo/services/test_service/test_request_tracker_impl.cc b/mojo/services/test_service/test_request_tracker_impl.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..09fa4d5fad75600aef4ab9be36773b69c9ee8c32 |
--- /dev/null |
+++ b/mojo/services/test_service/test_request_tracker_impl.cc |
@@ -0,0 +1,75 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "mojo/services/test_service/test_request_tracker_impl.h" |
+ |
+namespace mojo { |
+namespace test { |
+ |
+TrackingContext::TrackingContext() : next_id(1) { |
+} |
+ |
+TrackingContext::~TrackingContext() { |
+} |
+ |
+TestRequestTrackerImpl::TestRequestTrackerImpl( |
+ InterfaceRequest<TestRequestTracker> request, |
+ TrackingContext* context) |
+ : context_(context), binding_(this, request.Pass()), weak_factory_(this) { |
+} |
+ |
+TestRequestTrackerImpl::~TestRequestTrackerImpl() { |
+} |
+ |
+void TestRequestTrackerImpl::RecordStats( |
+ uint64_t client_id, |
+ ServiceStatsPtr stats) { |
+ assert(context_->ids_to_names.find(client_id) != |
+ context_->ids_to_names.end()); |
+ context_->records[client_id].push_back(*stats); |
+} |
+ |
+void TestRequestTrackerImpl::SetNameAndReturnId( |
+ const String& service_name, |
+ const Callback<void(uint64_t id)>& callback) { |
+ uint64_t id = context_->next_id++; |
+ callback.Run(id); |
+ DCHECK(context_->ids_to_names.find(id) == context_->ids_to_names.end()); |
+ context_->ids_to_names[id] = service_name; |
+} |
+ |
+TestTrackedRequestServiceImpl::TestTrackedRequestServiceImpl( |
+ InterfaceRequest<TestTrackedRequestService> request, |
+ TrackingContext* context) |
+ : context_(context), binding_(this, request.Pass()) { |
+} |
+ |
+TestTrackedRequestServiceImpl::~TestTrackedRequestServiceImpl() { |
+} |
+ |
+void TestTrackedRequestServiceImpl::GetReport( |
+ const mojo::Callback<void(mojo::Array<ServiceReportPtr>)>& callback) { |
+ mojo::Array<ServiceReportPtr> reports; |
+ for (AllRecordsMap::const_iterator it1 = context_->records.begin(); |
+ it1 != context_->records.end(); ++it1) { |
+ ServiceReportPtr report(ServiceReport::New()); |
+ report->service_name = context_->ids_to_names[it1->first]; |
+ double mean_health_numerator = 0; |
+ size_t num_samples = it1->second.size(); |
+ if (num_samples == 0) |
+ continue; |
+ |
+ for (std::vector<ServiceStats>::const_iterator it2 = it1->second.begin(); |
+ it2 != it1->second.end(); ++it2) { |
+ report->total_requests += it2->num_new_requests; |
+ mean_health_numerator += it2->health; |
+ } |
+ report->mean_health = mean_health_numerator / num_samples; |
+ reports.push_back(report.Pass()); |
+ } |
+ callback.Run(reports.Pass()); |
+} |
+ |
+} // namespace test |
+} // namespace mojo |