diff options
Diffstat (limited to 'mojo/services/test_service/test_request_tracker_impl.cc')
-rw-r--r-- | mojo/services/test_service/test_request_tracker_impl.cc | 75 |
1 files changed, 75 insertions, 0 deletions
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 0000000..09fa4d5 --- /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 |