metrics_reporter_interface.h revision 1f93d098d6d6c341ed7471352fda80c936471a17
1282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu// 2282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu// Copyright (C) 2017 The Android Open Source Project 3282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu// 4282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu// Licensed under the Apache License, Version 2.0 (the "License"); 5282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu// you may not use this file except in compliance with the License. 6282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu// You may obtain a copy of the License at 7282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu// 8282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu// http://www.apache.org/licenses/LICENSE-2.0 9282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu// 10282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu// Unless required by applicable law or agreed to in writing, software 11282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu// distributed under the License is distributed on an "AS IS" BASIS, 12282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu// See the License for the specific language governing permissions and 14282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu// limitations under the License. 15282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu// 16282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu 17282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu#ifndef UPDATE_ENGINE_METRICS_REPORTER_INTERFACE_H_ 18282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu#define UPDATE_ENGINE_METRICS_REPORTER_INTERFACE_H_ 19282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu 20282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu#include <base/time/time.h> 21282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu 22282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu#include "update_engine/common/constants.h" 23282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu#include "update_engine/common/error_code.h" 24282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu#include "update_engine/metrics_constants.h" 25282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu#include "update_engine/system_state.h" 26282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu 27282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xunamespace chromeos_update_engine { 28282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu 291b66114d367d1b85b4397bb559e274dbd0ebcd31Tianjie Xuenum class ServerToCheck; 301b66114d367d1b85b4397bb559e274dbd0ebcd31Tianjie Xuenum class CertificateCheckResult; 311b66114d367d1b85b4397bb559e274dbd0ebcd31Tianjie Xu 32282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xuclass MetricsReporterInterface { 33282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu public: 34282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu virtual ~MetricsReporterInterface() = default; 35282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu 36282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu virtual void Initialize() = 0; 37282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu 38282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // Helper function to report metrics related to rollback. The 39282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // following metrics are reported: 40282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // 41282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricRollbackResult| 42282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu virtual void ReportRollbackMetrics(metrics::RollbackResult result) = 0; 43282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu 44282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // Helper function to report metrics reported once a day. The 45282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // following metrics are reported: 46282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // 47282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricDailyOSAgeDays| 48282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu virtual void ReportDailyMetrics(base::TimeDelta os_age) = 0; 49282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu 50282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // Helper function to report metrics after completing an update check 51282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // with the ChromeOS update server ("Omaha"). The following metrics 52282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // are reported: 53282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // 54282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricCheckResult| 55282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricCheckReaction| 56282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricCheckDownloadErrorCode| 57282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricCheckTimeSinceLastCheckMinutes| 58282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricCheckTimeSinceLastCheckUptimeMinutes| 59282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // 60282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // The |kMetricCheckResult| metric will only be reported if |result| 61282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // is not |kUnset|. 62282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // 63282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // The |kMetricCheckReaction| metric will only be reported if 64282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |reaction| is not |kUnset|. 65282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // 66282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // The |kMetricCheckDownloadErrorCode| will only be reported if 67282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |download_error_code| is not |kUnset|. 68282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // 69282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // The values for the |kMetricCheckTimeSinceLastCheckMinutes| and 70282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricCheckTimeSinceLastCheckUptimeMinutes| metrics are 71282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // automatically reported and calculated by maintaining persistent 72282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // and process-local state variables. 73282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu virtual void ReportUpdateCheckMetrics( 74282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu SystemState* system_state, 75282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu metrics::CheckResult result, 76282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu metrics::CheckReaction reaction, 77282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu metrics::DownloadErrorCode download_error_code) = 0; 78282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu 79282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // Helper function to report metrics after the completion of each 80282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // update attempt. The following metrics are reported: 81282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // 82282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricAttemptNumber| 83282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricAttemptPayloadType| 84282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricAttemptPayloadSizeMiB| 851b66114d367d1b85b4397bb559e274dbd0ebcd31Tianjie Xu // |kMetricAttemptDurationMinutes| 861b66114d367d1b85b4397bb559e274dbd0ebcd31Tianjie Xu // |kMetricAttemptDurationUptimeMinutes| 87282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricAttemptTimeSinceLastAttemptMinutes| 88282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricAttemptTimeSinceLastAttemptUptimeMinutes| 89282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricAttemptResult| 90282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricAttemptInternalErrorCode| 91282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // 92282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // The |kMetricAttemptInternalErrorCode| metric will only be reported 93282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // if |internal_error_code| is not |kErrorSuccess|. 94282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // 95282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // The |kMetricAttemptDownloadErrorCode| metric will only be 96282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // reported if |payload_download_error_code| is not |kUnset|. 97282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // 98282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // The values for the |kMetricAttemptTimeSinceLastAttemptMinutes| and 99282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricAttemptTimeSinceLastAttemptUptimeMinutes| metrics are 100282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // automatically calculated and reported by maintaining persistent and 101282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // process-local state variables. 1021f93d098d6d6c341ed7471352fda80c936471a17Tianjie Xu virtual void ReportUpdateAttemptMetrics(SystemState* system_state, 1031f93d098d6d6c341ed7471352fda80c936471a17Tianjie Xu int attempt_number, 1041f93d098d6d6c341ed7471352fda80c936471a17Tianjie Xu PayloadType payload_type, 1051f93d098d6d6c341ed7471352fda80c936471a17Tianjie Xu base::TimeDelta duration, 1061f93d098d6d6c341ed7471352fda80c936471a17Tianjie Xu base::TimeDelta duration_uptime, 1071f93d098d6d6c341ed7471352fda80c936471a17Tianjie Xu int64_t payload_size, 1081f93d098d6d6c341ed7471352fda80c936471a17Tianjie Xu metrics::AttemptResult attempt_result, 1091f93d098d6d6c341ed7471352fda80c936471a17Tianjie Xu ErrorCode internal_error_code) = 0; 1101f93d098d6d6c341ed7471352fda80c936471a17Tianjie Xu 1111f93d098d6d6c341ed7471352fda80c936471a17Tianjie Xu // Helper function to report download metrics after the completion of each 1121f93d098d6d6c341ed7471352fda80c936471a17Tianjie Xu // update attempt. The following metrics are reported: 1131f93d098d6d6c341ed7471352fda80c936471a17Tianjie Xu // 1141f93d098d6d6c341ed7471352fda80c936471a17Tianjie Xu // |kMetricAttemptPayloadBytesDownloadedMiB| 1151f93d098d6d6c341ed7471352fda80c936471a17Tianjie Xu // |kMetricAttemptPayloadDownloadSpeedKBps| 1161f93d098d6d6c341ed7471352fda80c936471a17Tianjie Xu // |kMetricAttemptDownloadSource| 1171f93d098d6d6c341ed7471352fda80c936471a17Tianjie Xu // |kMetricAttemptDownloadErrorCode| 1181f93d098d6d6c341ed7471352fda80c936471a17Tianjie Xu // |kMetricAttemptConnectionType| 1191f93d098d6d6c341ed7471352fda80c936471a17Tianjie Xu virtual void ReportUpdateAttemptDownloadMetrics( 120282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu int64_t payload_bytes_downloaded, 121282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu int64_t payload_download_speed_bps, 122282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu DownloadSource download_source, 123282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu metrics::DownloadErrorCode payload_download_error_code, 124282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu metrics::ConnectionType connection_type) = 0; 125282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu 126282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // Reports the |kAbnormalTermination| for the |kMetricAttemptResult| 127282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // metric. No other metrics in the UpdateEngine.Attempt.* namespace 128282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // will be reported. 129282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu virtual void ReportAbnormallyTerminatedUpdateAttemptMetrics() = 0; 130282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu 131282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // Helper function to report the after the completion of a successful 132282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // update attempt. The following metrics are reported: 133282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // 134282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricSuccessfulUpdateAttemptCount| 135282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricSuccessfulUpdateUpdatesAbandonedCount| 136282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricSuccessfulUpdatePayloadType| 137282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricSuccessfulUpdatePayloadSizeMiB| 138282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricSuccessfulUpdateBytesDownloadedMiBHttpsServer| 139282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricSuccessfulUpdateBytesDownloadedMiBHttpServer| 140282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricSuccessfulUpdateBytesDownloadedMiBHttpPeer| 141282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricSuccessfulUpdateBytesDownloadedMiB| 142282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricSuccessfulUpdateDownloadSourcesUsed| 143282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricSuccessfulUpdateDownloadOverheadPercentage| 144282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricSuccessfulUpdateTotalDurationMinutes| 145282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricSuccessfulUpdateRebootCount| 146282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricSuccessfulUpdateUrlSwitchCount| 147282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // 148282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // The values for the |kMetricSuccessfulUpdateDownloadSourcesUsed| are 149282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricSuccessfulUpdateBytesDownloadedMiB| metrics automatically 150282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // calculated from examining the |num_bytes_downloaded| array. 151282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu virtual void ReportSuccessfulUpdateMetrics( 152282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu int attempt_count, 153282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu int updates_abandoned_count, 154282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu PayloadType payload_type, 155282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu int64_t payload_size, 156282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu int64_t num_bytes_downloaded[kNumDownloadSources], 157282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu int download_overhead_percentage, 158282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu base::TimeDelta total_duration, 159282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu int reboot_count, 160282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu int url_switch_count) = 0; 161282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu 162282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // Helper function to report the after the completion of a SSL certificate 163282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // check. One of the following metrics is reported: 164282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // 165282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricCertificateCheckUpdateCheck| 166282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricCertificateCheckDownload| 167282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu virtual void ReportCertificateCheckMetrics(ServerToCheck server_to_check, 168282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu CertificateCheckResult result) = 0; 169282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu 170282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // Helper function to report the number failed update attempts. The following 171282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // metrics are reported: 172282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // 173282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricFailedUpdateCount| 174282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu virtual void ReportFailedUpdateCount(int target_attempt) = 0; 175282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu 176282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // Helper function to report the time interval in minutes between a 177282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // successful update and the reboot into the updated system. The following 178282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // metrics are reported: 179282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // 180282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricTimeToRebootMinutes| 181282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu virtual void ReportTimeToReboot(int time_to_reboot_minutes) = 0; 182282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu 183282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // Helper function to report the source of installation data. The following 184282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // metrics are reported: 185282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // 186282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu // |kMetricInstallDateProvisioningSource| 187282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu virtual void ReportInstallDateProvisioningSource(int source, int max) = 0; 188282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu}; 189282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu 190282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu} // namespace chromeos_update_engine 191282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu 192282aa1f89de19d7052d844b0f7c53fedc04b802eTianjie Xu#endif // UPDATE_ENGINE_METRICS_REPORTER_INTERFACE_H_ 193