Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(236)

Unified Diff: components/metrics/reporting_service.h

Issue 2608833002: Move logic for uploading logs into a ReportingService object. (Closed)
Patch Set: Rebase again Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/metrics/metrics_upload_scheduler.cc ('k') | components/metrics/reporting_service.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/metrics/reporting_service.h
diff --git a/components/metrics/reporting_service.h b/components/metrics/reporting_service.h
new file mode 100644
index 0000000000000000000000000000000000000000..03bf7a90c71787176adc92c889febab23c0a31fb
--- /dev/null
+++ b/components/metrics/reporting_service.h
@@ -0,0 +1,146 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// This file defines a service that sends metrics logs to a server.
+
+#ifndef COMPONENTS_METRICS_REPORTING_SERVICE_H_
+#define COMPONENTS_METRICS_REPORTING_SERVICE_H_
+
+#include <stdint.h>
+
+#include <string>
+
+#include "base/macros.h"
+#include "base/time/time.h"
+#include "build/build_config.h"
+#include "components/metrics/data_use_tracker.h"
+#include "components/metrics/metrics_log_uploader.h"
+
+class PrefService;
+class PrefRegistrySimple;
+
+namespace metrics {
+
+class LogStore;
+class MetricsUploadScheduler;
+class MetricsServiceClient;
+
+// ReportingService is an abstract class which uploads serialized logs from a
+// LogStore to a remote server. A concrete implementation of this class must
+// provide the specific LogStore and parameters for the MetricsLogUploader, and
+// can also implement hooks to record histograms based on certain events that
+// occur while attempting to upload logs.
+class ReportingService {
+ public:
+ // Creates a ReportingService with the given |client|, |local_state|, and
+ // |max_retransmit_size|. Does not take ownership of the parameters; instead
+ // it stores a weak pointer to each. Caller should ensure that the parameters
+ // are valid for the lifetime of this class.
+ ReportingService(MetricsServiceClient* client,
+ PrefService* local_state,
+ size_t max_retransmit_size);
+ virtual ~ReportingService();
+
+ // Completes setup tasks that can't be done at construction time.
+ // Loads persisted logs and creates the MetricsUploadScheduler.
+ void Initialize();
+
+ // Starts the metrics reporting system.
+ // Should be called when metrics enabled or new logs are created.
+ // When the service is already running, this is a safe no-op.
+ void Start();
+
+ // Shuts down the metrics system. Should be called at shutdown, or if metrics
+ // are turned off.
+ void Stop();
+
+ // Enable/disable transmission of accumulated logs and crash reports (dumps).
+ // Calling Start() automatically enables reporting, but sending is
+ // asyncronous so this can be called immediately after Start() to prevent
+ // any uploading.
+ void EnableReporting();
+ void DisableReporting();
+
+ // True iff reporting is currently enabled.
+ bool reporting_active() const;
+
+ // Updates data usage tracking prefs with the specified values.
+ void UpdateMetricsUsagePrefs(const std::string& service_name,
+ int message_size,
+ bool is_cellular);
+
+ // Registers local state prefs used by this class. This should only be called
+ // once.
+ static void RegisterPrefs(PrefRegistrySimple* registry);
+
+ protected:
+ MetricsServiceClient* client() const { return client_; };
+
+ private:
+ // Retrieves the log store backing this service.
+ virtual LogStore* log_store() = 0;
+
+ // Getters for MetricsLogUploader parameters.
+ virtual std::string GetUploadUrl() const = 0;
+ virtual base::StringPiece upload_mime_type() const = 0;
+ virtual MetricsLogUploader::MetricServiceType service_type() const = 0;
+
+ // Methods for recording data to histograms.
+ virtual void LogActualUploadInterval(base::TimeDelta interval) {}
+ virtual void LogCellularConstraint(bool upload_canceled) {}
+ virtual void LogResponseCode(int response_code) {}
+ virtual void LogSuccess(size_t log_size) {}
+ virtual void LogLargeRejection(size_t log_size) {}
+
+ // If recording is enabled, begins uploading the next completed log from
+ // the log manager, staging it if necessary.
+ void SendNextLog();
+
+ // Uploads the currently staged log (which must be non-null).
+ void SendStagedLog();
+
+ // Called after transmission completes (either successfully or with failure).
+ void OnLogUploadComplete(int response_code);
+
+ // Used to interact with the embedder. Weak pointer; must outlive |this|
+ // instance.
+ MetricsServiceClient* const client_;
+
+ // Largest log size to attempt to retransmit.
+ size_t max_retransmit_size_;
+
+ // Indicate whether recording and reporting are currently happening.
+ // These should not be set directly, but by calling SetRecording and
+ // SetReporting.
+ bool reporting_active_;
+
+ // Instance of the helper class for uploading logs.
+ std::unique_ptr<MetricsLogUploader> log_uploader_;
+
+ // Whether there is a current log upload in progress.
+ bool log_upload_in_progress_;
+
+ // The scheduler for determining when uploads should happen.
+ std::unique_ptr<MetricsUploadScheduler> upload_scheduler_;
+
+ // Pointer used for obtaining data use pref updater callback on above layers.
+ std::unique_ptr<DataUseTracker> data_use_tracker_;
+
+ // The tick count of the last time log upload has been finished and null if no
+ // upload has been done yet.
+ base::TimeTicks last_upload_finish_time_;
+
+ base::ThreadChecker thread_checker_;
+
+ // Weak pointers factory used to post task on different threads. All weak
+ // pointers managed by this factory have the same lifetime as
+ // ReportingService.
+ base::WeakPtrFactory<ReportingService> self_ptr_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(ReportingService);
+};
+
+} // namespace metrics
+
+#endif // COMPONENTS_METRICS_REPORTING_SERVICE_H_
« no previous file with comments | « components/metrics/metrics_upload_scheduler.cc ('k') | components/metrics/reporting_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698