xref: /aosp_15_r20/external/cronet/components/metrics/metrics_reporting_service.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2017 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 // ReportingService specialized to report UMA metrics.
6 
7 #include "components/metrics/metrics_reporting_service.h"
8 
9 #include "base/functional/bind.h"
10 #include "base/functional/callback.h"
11 #include "base/metrics/histogram_functions.h"
12 #include "base/metrics/histogram_macros.h"
13 #include "components/metrics/metrics_logs_event_manager.h"
14 #include "components/metrics/metrics_pref_names.h"
15 #include "components/metrics/metrics_service_client.h"
16 #include "components/metrics/unsent_log_store_metrics_impl.h"
17 #include "components/metrics/url_constants.h"
18 #include "components/prefs/pref_registry_simple.h"
19 
20 namespace metrics {
21 
22 // static
RegisterPrefs(PrefRegistrySimple * registry)23 void MetricsReportingService::RegisterPrefs(PrefRegistrySimple* registry) {
24   ReportingService::RegisterPrefs(registry);
25   MetricsLogStore::RegisterPrefs(registry);
26 }
27 
MetricsReportingService(MetricsServiceClient * client,PrefService * local_state,MetricsLogsEventManager * logs_event_manager_)28 MetricsReportingService::MetricsReportingService(
29     MetricsServiceClient* client,
30     PrefService* local_state,
31     MetricsLogsEventManager* logs_event_manager_)
32     : ReportingService(client,
33                        local_state,
34                        client->GetStorageLimits()
35                            .ongoing_log_queue_limits.max_log_size_bytes,
36                        logs_event_manager_),
37       metrics_log_store_(local_state,
38                          client->GetStorageLimits(),
39                          client->GetUploadSigningKey(),
40                          logs_event_manager_) {}
41 
~MetricsReportingService()42 MetricsReportingService::~MetricsReportingService() {}
43 
log_store()44 LogStore* MetricsReportingService::log_store() {
45   return &metrics_log_store_;
46 }
47 
GetUploadUrl() const48 GURL MetricsReportingService::GetUploadUrl() const {
49   return client()->GetMetricsServerUrl();
50 }
51 
GetInsecureUploadUrl() const52 GURL MetricsReportingService::GetInsecureUploadUrl() const {
53   return client()->GetInsecureMetricsServerUrl();
54 }
55 
upload_mime_type() const56 base::StringPiece MetricsReportingService::upload_mime_type() const {
57   return kDefaultMetricsMimeType;
58 }
59 
service_type() const60 MetricsLogUploader::MetricServiceType MetricsReportingService::service_type()
61     const {
62   return MetricsLogUploader::UMA;
63 }
64 
LogActualUploadInterval(base::TimeDelta interval)65 void MetricsReportingService::LogActualUploadInterval(
66     base::TimeDelta interval) {
67   UMA_HISTOGRAM_CUSTOM_COUNTS("UMA.ActualLogUploadInterval",
68                               interval.InMinutes(), 1,
69                               base::Hours(12).InMinutes(), 50);
70 }
71 
LogCellularConstraint(bool upload_canceled)72 void MetricsReportingService::LogCellularConstraint(bool upload_canceled) {
73   UMA_HISTOGRAM_BOOLEAN("UMA.LogUpload.Canceled.CellularConstraint",
74                         upload_canceled);
75 }
76 
LogResponseOrErrorCode(int response_code,int error_code,bool was_https)77 void MetricsReportingService::LogResponseOrErrorCode(int response_code,
78                                                      int error_code,
79                                                      bool was_https) {
80   if (was_https) {
81     base::UmaHistogramSparse("UMA.LogUpload.ResponseOrErrorCode",
82                              response_code >= 0 ? response_code : error_code);
83   } else {
84     base::UmaHistogramSparse("UMA.LogUpload.ResponseOrErrorCode.HTTP",
85                              response_code >= 0 ? response_code : error_code);
86   }
87 }
88 
LogSuccessLogSize(size_t log_size)89 void MetricsReportingService::LogSuccessLogSize(size_t log_size) {
90   UMA_HISTOGRAM_COUNTS_10000("UMA.LogSize.OnSuccess", log_size / 1024);
91 }
92 
LogSuccessMetadata(const std::string & staged_log)93 void MetricsReportingService::LogSuccessMetadata(
94     const std::string& staged_log) {}
95 
LogLargeRejection(size_t log_size)96 void MetricsReportingService::LogLargeRejection(size_t log_size) {}
97 
98 }  // namespace metrics
99