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