1 // Copyright 2023 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 #ifndef COMPONENTS_METRICS_STRUCTURED_REPORTING_STRUCTURED_METRICS_REPORTING_SERVICE_H_
6 #define COMPONENTS_METRICS_STRUCTURED_REPORTING_STRUCTURED_METRICS_REPORTING_SERVICE_H_
7 
8 #include "components/metrics/reporting_service.h"
9 #include "components/metrics/unsent_log_store.h"
10 
11 class PrefRegistrySimple;
12 class PrefService;
13 
14 namespace metrics {
15 class MetricsServiceClient;
16 }
17 
18 namespace metrics::structured::reporting {
19 
20 // A service that uploads Structured Metrics logs to the UMA server.
21 class StructuredMetricsReportingService : public metrics::ReportingService {
22  public:
23   StructuredMetricsReportingService(
24       MetricsServiceClient* client,
25       PrefService* local_state,
26       const UnsentLogStore::UnsentLogStoreLimits& storage_limits);
27 
28   void StoreLog(const std::string& serialized_log,
29                 metrics::MetricsLogsEventManager::CreateReason reason);
30 
31   // metrics::ReportingService:
32   metrics::LogStore* log_store() override;
33 
34   void Purge();
35 
36   static void RegisterPrefs(PrefRegistrySimple* registry);
37 
38  private:
39   // Getters for MetricsLogUploader parameters.
40   GURL GetUploadUrl() const override;
41   GURL GetInsecureUploadUrl() const override;
42   base::StringPiece upload_mime_type() const override;
43   MetricsLogUploader::MetricServiceType service_type() const override;
44 
45   // Methods for submitting UMA histograms.
46   void LogActualUploadInterval(base::TimeDelta interval) override;
47   void LogResponseOrErrorCode(int response_code,
48                               int error_code,
49                               bool was_https) override;
50   void LogSuccessLogSize(size_t log_size) override;
51   void LogLargeRejection(size_t log_size) override;
52 
53   metrics::UnsentLogStore log_store_;
54 };
55 }  // namespace metrics::structured::reporting
56 
57 #endif  // COMPONENTS_METRICS_STRUCTURED_REPORTING_STRUCTURED_METRICS_REPORTING_SERVICE_H_
58