summaryrefslogtreecommitdiff
path: root/common/metrics_reporter_interface.h
diff options
context:
space:
mode:
Diffstat (limited to 'common/metrics_reporter_interface.h')
-rw-r--r--common/metrics_reporter_interface.h248
1 files changed, 248 insertions, 0 deletions
diff --git a/common/metrics_reporter_interface.h b/common/metrics_reporter_interface.h
new file mode 100644
index 00000000..a7a91a54
--- /dev/null
+++ b/common/metrics_reporter_interface.h
@@ -0,0 +1,248 @@
+//
+// Copyright (C) 2017 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef UPDATE_ENGINE_COMMON_METRICS_REPORTER_INTERFACE_H_
+#define UPDATE_ENGINE_COMMON_METRICS_REPORTER_INTERFACE_H_
+
+#include <memory>
+#include <string>
+
+#include <base/time/time.h>
+
+#include "update_engine/common/constants.h"
+#include "update_engine/common/dynamic_partition_control_interface.h"
+#include "update_engine/common/error_code.h"
+#include "update_engine/common/metrics_constants.h"
+#include "update_engine/payload_consumer/install_plan.h"
+
+namespace chromeos_update_engine {
+
+enum class ServerToCheck;
+enum class CertificateCheckResult;
+
+class MetricsReporterInterface {
+ public:
+ virtual ~MetricsReporterInterface() = default;
+
+ // Helper function to report metrics related to user-initiated rollback. The
+ // following metrics are reported:
+ //
+ // |kMetricRollbackResult|
+ virtual void ReportRollbackMetrics(metrics::RollbackResult result) = 0;
+
+ // Helper function to report metrics related to enterprise (admin-initiated)
+ // rollback:
+ //
+ // |kMetricEnterpriseRollbackSuccess|
+ // |kMetricEnterpriseRollbackFailure|
+ virtual void ReportEnterpriseRollbackMetrics(
+ bool success, const std::string& rollback_version) = 0;
+
+ // Helper function to report metrics reported once a day. The
+ // following metrics are reported:
+ //
+ // |kMetricDailyOSAgeDays|
+ virtual void ReportDailyMetrics(base::TimeDelta os_age) = 0;
+
+ // Helper function to report metrics after completing an update check
+ // with the ChromeOS update server ("Omaha"). The following metrics
+ // are reported:
+ //
+ // |kMetricCheckResult|
+ // |kMetricCheckReaction|
+ // |kMetricCheckDownloadErrorCode|
+ // |kMetricCheckTimeSinceLastCheckMinutes|
+ // |kMetricCheckTimeSinceLastCheckUptimeMinutes|
+ // |kMetricCheckTargetVersion|
+ // |kMetricCheckRollbackTargetVersion|
+ //
+ // The |kMetricCheckResult| metric will only be reported if |result|
+ // is not |kUnset|.
+ //
+ // The |kMetricCheckReaction| metric will only be reported if
+ // |reaction| is not |kUnset|.
+ //
+ // The |kMetricCheckDownloadErrorCode| will only be reported if
+ // |download_error_code| is not |kUnset|.
+ //
+ // The values for the |kMetricCheckTimeSinceLastCheckMinutes| and
+ // |kMetricCheckTimeSinceLastCheckUptimeMinutes| metrics are
+ // automatically reported and calculated by maintaining persistent
+ // and process-local state variables.
+ //
+ // |kMetricCheckTargetVersion| reports the first section of the target version
+ // if it's set, |kMetricCheckRollbackTargetVersion| reports the same, but only
+ // if rollback is also allowed using enterprise policy.
+ virtual void ReportUpdateCheckMetrics(
+ metrics::CheckResult result,
+ metrics::CheckReaction reaction,
+ metrics::DownloadErrorCode download_error_code) = 0;
+
+ // Helper function to report metrics after the completion of each
+ // update attempt. The following metrics are reported:
+ //
+ // |kMetricAttemptNumber|
+ // |kMetricAttemptPayloadType|
+ // |kMetricAttemptPayloadSizeMiB|
+ // |kMetricAttemptDurationMinutes|
+ // |kMetricAttemptDurationUptimeMinutes|
+ // |kMetricAttemptTimeSinceLastAttemptMinutes|
+ // |kMetricAttemptTimeSinceLastAttemptUptimeMinutes|
+ // |kMetricAttemptResult|
+ // |kMetricAttemptInternalErrorCode|
+ //
+ // The |kMetricAttemptInternalErrorCode| metric will only be reported
+ // if |internal_error_code| is not |kErrorSuccess|.
+ //
+ // The |kMetricAttemptDownloadErrorCode| metric will only be
+ // reported if |payload_download_error_code| is not |kUnset|.
+ //
+ // The values for the |kMetricAttemptTimeSinceLastAttemptMinutes| and
+ // |kMetricAttemptTimeSinceLastAttemptUptimeMinutes| metrics are
+ // automatically calculated and reported by maintaining persistent and
+ // process-local state variables.
+ virtual void ReportUpdateAttemptMetrics(int attempt_number,
+ PayloadType payload_type,
+ base::TimeDelta duration,
+ base::TimeDelta duration_uptime,
+ int64_t payload_size,
+ metrics::AttemptResult attempt_result,
+ ErrorCode internal_error_code) = 0;
+
+ // Helper function to report download metrics after the completion of each
+ // update attempt. The following metrics are reported:
+ //
+ // |kMetricAttemptPayloadBytesDownloadedMiB|
+ // |kMetricAttemptPayloadDownloadSpeedKBps|
+ // |kMetricAttemptDownloadSource|
+ // |kMetricAttemptDownloadErrorCode|
+ // |kMetricAttemptConnectionType|
+ virtual void ReportUpdateAttemptDownloadMetrics(
+ int64_t payload_bytes_downloaded,
+ int64_t payload_download_speed_bps,
+ DownloadSource download_source,
+ metrics::DownloadErrorCode payload_download_error_code,
+ metrics::ConnectionType connection_type) = 0;
+
+ // Reports the |kAbnormalTermination| for the |kMetricAttemptResult|
+ // metric. No other metrics in the UpdateEngine.Attempt.* namespace
+ // will be reported.
+ virtual void ReportAbnormallyTerminatedUpdateAttemptMetrics() = 0;
+
+ // Helper function to report the after the completion of a successful
+ // update attempt. The following metrics are reported:
+ //
+ // |kMetricSuccessfulUpdateAttemptCount|
+ // |kMetricSuccessfulUpdateUpdatesAbandonedCount|
+ // |kMetricSuccessfulUpdatePayloadType|
+ // |kMetricSuccessfulUpdatePayloadSizeMiB|
+ // |kMetricSuccessfulUpdateBytesDownloadedMiBHttpsServer|
+ // |kMetricSuccessfulUpdateBytesDownloadedMiBHttpServer|
+ // |kMetricSuccessfulUpdateBytesDownloadedMiBHttpPeer|
+ // |kMetricSuccessfulUpdateBytesDownloadedMiB|
+ // |kMetricSuccessfulUpdateDownloadSourcesUsed|
+ // |kMetricSuccessfulUpdateDownloadOverheadPercentage|
+ // |kMetricSuccessfulUpdateTotalDurationMinutes|
+ // |kMetricSuccessfulUpdateTotalDurationUptimeMinutes|
+ // |kMetricSuccessfulUpdateRebootCount|
+ // |kMetricSuccessfulUpdateUrlSwitchCount|
+ //
+ // The values for the |kMetricSuccessfulUpdateDownloadSourcesUsed| are
+ // |kMetricSuccessfulUpdateBytesDownloadedMiB| metrics automatically
+ // calculated from examining the |num_bytes_downloaded| array.
+ virtual void ReportSuccessfulUpdateMetrics(
+ int attempt_count,
+ int updates_abandoned_count,
+ PayloadType payload_type,
+ int64_t payload_size,
+ int64_t num_bytes_downloaded[kNumDownloadSources],
+ int download_overhead_percentage,
+ base::TimeDelta total_duration,
+ base::TimeDelta total_duration_uptime,
+ int reboot_count,
+ int url_switch_count) = 0;
+
+ // Helper function to report the after the completion of a SSL certificate
+ // check. One of the following metrics is reported:
+ //
+ // |kMetricCertificateCheckUpdateCheck|
+ // |kMetricCertificateCheckDownload|
+ virtual void ReportCertificateCheckMetrics(ServerToCheck server_to_check,
+ CertificateCheckResult result) = 0;
+
+ // Helper function to report the number failed update attempts. The following
+ // metrics are reported:
+ //
+ // |kMetricFailedUpdateCount|
+ virtual void ReportFailedUpdateCount(int target_attempt) = 0;
+
+ // Helper function to report the time interval in minutes between a
+ // successful update and the reboot into the updated system. The following
+ // metrics are reported:
+ //
+ // |kMetricTimeToRebootMinutes|
+ virtual void ReportTimeToReboot(int time_to_reboot_minutes) = 0;
+
+ // Helper function to report the source of installation data. The following
+ // metrics are reported:
+ //
+ // |kMetricInstallDateProvisioningSource|
+ virtual void ReportInstallDateProvisioningSource(int source, int max) = 0;
+
+ // Helper function to report an internal error code. The following metrics are
+ // reported:
+ //
+ // |kMetricAttemptInternalErrorCode|
+ virtual void ReportInternalErrorCode(ErrorCode error_code) = 0;
+
+ // Helper function to report metrics related to the verified boot key
+ // versions:
+ //
+ // |kMetricKernelMinVersion|
+ // |kMetricKernelMaxRollforwardVersion|
+ // |kMetricKernelMaxRollforwardSetSuccess|
+ virtual void ReportKeyVersionMetrics(int kernel_min_version,
+ int kernel_max_rollforward_version,
+ bool kernel_max_rollforward_success) = 0;
+
+ // Helper function to report the duration between an update being seen by the
+ // client to the update being applied. Updates are not always immediately
+ // applied when seen, several enterprise policies can affect when an update
+ // would actually be downloaded and applied.
+ //
+ // This metric should only be reported for enterprise enrolled devices.
+ //
+ // The following metrics are reported from this function:
+ // If |has_time_restriction_policy| is false:
+ // |kMetricSuccessfulUpdateDurationFromSeenDays|
+ // If |has_time_restriction_policy| is true:
+ // |kMetricSuccessfulUpdateDurationFromSeenTimeRestrictedDays|
+ //
+ virtual void ReportEnterpriseUpdateSeenToDownloadDays(
+ bool has_time_restriction_policy, int time_to_update_days) = 0;
+};
+
+namespace metrics {
+
+std::unique_ptr<MetricsReporterInterface> CreateMetricsReporter(
+ DynamicPartitionControlInterface* dynamic_partition_control,
+ const InstallPlan* install_plan);
+
+} // namespace metrics
+
+} // namespace chromeos_update_engine
+
+#endif // UPDATE_ENGINE_COMMON_METRICS_REPORTER_INTERFACE_H_