1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "mojo/services/test_service/test_request_tracker_impl.h"
10 TrackingContext::TrackingContext() : next_id(1) {
13 TrackingContext::~TrackingContext() {
16 TestRequestTrackerImpl::TestRequestTrackerImpl(
17 InterfaceRequest
<TestRequestTracker
> request
,
18 TrackingContext
* context
)
19 : context_(context
), binding_(this, request
.Pass()), weak_factory_(this) {
22 TestRequestTrackerImpl::~TestRequestTrackerImpl() {
25 void TestRequestTrackerImpl::RecordStats(
27 ServiceStatsPtr stats
) {
28 assert(context_
->ids_to_names
.find(client_id
) !=
29 context_
->ids_to_names
.end());
30 context_
->records
[client_id
].push_back(*stats
);
33 void TestRequestTrackerImpl::SetNameAndReturnId(
34 const String
& service_name
,
35 const Callback
<void(uint64_t id
)>& callback
) {
36 uint64_t id
= context_
->next_id
++;
38 DCHECK(context_
->ids_to_names
.find(id
) == context_
->ids_to_names
.end());
39 context_
->ids_to_names
[id
] = service_name
;
42 TestTrackedRequestServiceImpl::TestTrackedRequestServiceImpl(
43 InterfaceRequest
<TestTrackedRequestService
> request
,
44 TrackingContext
* context
)
45 : context_(context
), binding_(this, request
.Pass()) {
48 TestTrackedRequestServiceImpl::~TestTrackedRequestServiceImpl() {
51 void TestTrackedRequestServiceImpl::GetReport(
52 const mojo::Callback
<void(mojo::Array
<ServiceReportPtr
>)>& callback
) {
53 mojo::Array
<ServiceReportPtr
> reports
;
54 for (AllRecordsMap::const_iterator it1
= context_
->records
.begin();
55 it1
!= context_
->records
.end(); ++it1
) {
56 ServiceReportPtr
report(ServiceReport::New());
57 report
->service_name
= context_
->ids_to_names
[it1
->first
];
58 double mean_health_numerator
= 0;
59 size_t num_samples
= it1
->second
.size();
63 for (std::vector
<ServiceStats
>::const_iterator it2
= it1
->second
.begin();
64 it2
!= it1
->second
.end(); ++it2
) {
65 report
->total_requests
+= it2
->num_new_requests
;
66 mean_health_numerator
+= it2
->health
;
68 report
->mean_health
= mean_health_numerator
/ num_samples
;
69 reports
.push_back(report
.Pass());
71 callback
.Run(reports
.Pass());