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.
6 #include "mojo/services/test_service/test_request_tracker_impl.h"
11 TrackingContext::TrackingContext() : next_id(1) {}
12 TrackingContext::~TrackingContext() {}
14 TestRequestTrackerImpl::TestRequestTrackerImpl(
15 ApplicationConnection
* connection
,
16 TrackingContext
* context
) : context_(context
), weak_factory_(this) {
19 TestRequestTrackerImpl::~TestRequestTrackerImpl() {
22 void TestRequestTrackerImpl::RecordStats(
24 ServiceStatsPtr stats
) {
25 assert(context_
->ids_to_names
.find(client_id
) !=
26 context_
->ids_to_names
.end());
27 context_
->records
[client_id
].push_back(*stats
);
30 void TestRequestTrackerImpl::OnConnectionEstablished() {
31 uint64_t id
= context_
->next_id
++;
32 client()->SetIdAndReturnName(id
,
33 base::Bind(&TestRequestTrackerImpl::UploaderNameCallback
,
34 weak_factory_
.GetWeakPtr(),
38 void TestRequestTrackerImpl::UploaderNameCallback(
39 uint64_t id
, const mojo::String
& name
) {
40 DCHECK(context_
->ids_to_names
.find(id
) == context_
->ids_to_names
.end());
41 context_
->ids_to_names
[id
] = name
;
44 TestTrackedRequestServiceImpl::TestTrackedRequestServiceImpl(
45 ApplicationConnection
* connection
,
46 TrackingContext
* context
) : context_(context
) {
49 TestTrackedRequestServiceImpl::~TestTrackedRequestServiceImpl() {
52 void TestTrackedRequestServiceImpl::GetReport(
53 const mojo::Callback
<void(mojo::Array
<ServiceReportPtr
>)>& callback
) {
54 mojo::Array
<ServiceReportPtr
> reports
;
55 for (AllRecordsMap::const_iterator it1
= context_
->records
.begin();
56 it1
!= context_
->records
.end(); ++it1
) {
57 ServiceReportPtr
report(ServiceReport::New());
58 report
->service_name
= context_
->ids_to_names
[it1
->first
];
59 double mean_health_numerator
= 0;
60 size_t num_samples
= it1
->second
.size();
64 for (std::vector
<ServiceStats
>::const_iterator it2
= it1
->second
.begin();
65 it2
!= it1
->second
.end(); ++it2
) {
66 report
->total_requests
+= it2
->num_new_requests
;
67 mean_health_numerator
+= it2
->health
;
69 report
->mean_health
= mean_health_numerator
/ num_samples
;
70 reports
.push_back(report
.Pass());
72 callback
.Run(reports
.Pass());