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().max_ongoing_log_size,
35 logs_event_manager_),
36 metrics_log_store_(local_state,
37 client->GetStorageLimits(),
38 client->GetUploadSigningKey(),
39 logs_event_manager_) {}
40
~MetricsReportingService()41 MetricsReportingService::~MetricsReportingService() {}
42
log_store()43 LogStore* MetricsReportingService::log_store() {
44 return &metrics_log_store_;
45 }
46
GetUploadUrl() const47 GURL MetricsReportingService::GetUploadUrl() const {
48 return client()->GetMetricsServerUrl();
49 }
50
GetInsecureUploadUrl() const51 GURL MetricsReportingService::GetInsecureUploadUrl() const {
52 return client()->GetInsecureMetricsServerUrl();
53 }
54
upload_mime_type() const55 base::StringPiece MetricsReportingService::upload_mime_type() const {
56 return kDefaultMetricsMimeType;
57 }
58
service_type() const59 MetricsLogUploader::MetricServiceType MetricsReportingService::service_type()
60 const {
61 return MetricsLogUploader::UMA;
62 }
63
LogActualUploadInterval(base::TimeDelta interval)64 void MetricsReportingService::LogActualUploadInterval(
65 base::TimeDelta interval) {
66 UMA_HISTOGRAM_CUSTOM_COUNTS("UMA.ActualLogUploadInterval",
67 interval.InMinutes(), 1,
68 base::Hours(12).InMinutes(), 50);
69 }
70
LogCellularConstraint(bool upload_canceled)71 void MetricsReportingService::LogCellularConstraint(bool upload_canceled) {
72 UMA_HISTOGRAM_BOOLEAN("UMA.LogUpload.Canceled.CellularConstraint",
73 upload_canceled);
74 }
75
LogResponseOrErrorCode(int response_code,int error_code,bool was_https)76 void MetricsReportingService::LogResponseOrErrorCode(int response_code,
77 int error_code,
78 bool was_https) {
79 if (was_https) {
80 base::UmaHistogramSparse("UMA.LogUpload.ResponseOrErrorCode",
81 response_code >= 0 ? response_code : error_code);
82 } else {
83 base::UmaHistogramSparse("UMA.LogUpload.ResponseOrErrorCode.HTTP",
84 response_code >= 0 ? response_code : error_code);
85 }
86 }
87
LogSuccessLogSize(size_t log_size)88 void MetricsReportingService::LogSuccessLogSize(size_t log_size) {
89 UMA_HISTOGRAM_COUNTS_10000("UMA.LogSize.OnSuccess", log_size / 1024);
90 }
91
LogSuccessMetadata(const std::string & staged_log)92 void MetricsReportingService::LogSuccessMetadata(
93 const std::string& staged_log) {}
94
LogLargeRejection(size_t log_size)95 void MetricsReportingService::LogLargeRejection(size_t log_size) {}
96
97 } // namespace metrics
98