You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
321 lines
12 KiB
321 lines
12 KiB
// |
|
// Copyright (C) 2014 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_METRICS_H_ |
|
#define UPDATE_ENGINE_METRICS_H_ |
|
|
|
#include <base/time/time.h> |
|
|
|
#include "update_engine/certificate_checker.h" |
|
#include "update_engine/common/constants.h" |
|
#include "update_engine/common/error_code.h" |
|
|
|
namespace chromeos_update_engine { |
|
|
|
class SystemState; |
|
|
|
namespace metrics { |
|
|
|
// UpdateEngine.Daily.* metrics. |
|
extern const char kMetricDailyOSAgeDays[]; |
|
|
|
// UpdateEngine.Check.* metrics. |
|
extern const char kMetricCheckDownloadErrorCode[]; |
|
extern const char kMetricCheckReaction[]; |
|
extern const char kMetricCheckResult[]; |
|
extern const char kMetricCheckTimeSinceLastCheckMinutes[]; |
|
extern const char kMetricCheckTimeSinceLastCheckUptimeMinutes[]; |
|
|
|
// UpdateEngine.Attempt.* metrics. |
|
extern const char kMetricAttemptNumber[]; |
|
extern const char kMetricAttemptPayloadType[]; |
|
extern const char kMetricAttemptPayloadSizeMiB[]; |
|
extern const char kMetricAttemptConnectionType[]; |
|
extern const char kMetricAttemptDurationMinutes[]; |
|
extern const char kMetricAttemptDurationUptimeMinutes[]; |
|
extern const char kMetricAttemptTimeSinceLastAttemptSeconds[]; |
|
extern const char kMetricAttemptTimeSinceLastAttemptUptimeSeconds[]; |
|
extern const char kMetricAttemptPayloadBytesDownloaded[]; |
|
extern const char kMetricAttemptPayloadDownloadSpeedKBps[]; |
|
extern const char kMetricAttemptDownloadSource[]; |
|
extern const char kMetricAttemptResult[]; |
|
extern const char kMetricAttemptInternalErrorCode[]; |
|
extern const char kMetricAttemptDownloadErrorCode[]; |
|
|
|
// UpdateEngine.SuccessfulUpdate.* metrics. |
|
extern const char kMetricSuccessfulUpdateAttemptCount[]; |
|
extern const char kMetricSuccessfulUpdateBytesDownloadedMiB[]; |
|
extern const char kMetricSuccessfulUpdateDownloadOverheadPercentage[]; |
|
extern const char kMetricSuccessfulUpdateDownloadSourcesUsed[]; |
|
extern const char kMetricSuccessfulUpdatePayloadType[]; |
|
extern const char kMetricSuccessfulUpdatePayloadSizeMiB[]; |
|
extern const char kMetricSuccessfulUpdateTotalDurationMinutes[]; |
|
extern const char kMetricSuccessfulUpdateRebootCount[]; |
|
extern const char kMetricSuccessfulUpdateUpdatesAbandonedCount[]; |
|
extern const char kMetricSuccessfulUpdateUrlSwitchCount[]; |
|
|
|
// UpdateEngine.Rollback.* metric. |
|
extern const char kMetricRollbackResult[]; |
|
|
|
// UpdateEngine.* metrics. |
|
extern const char kMetricFailedUpdateCount[]; |
|
extern const char kMetricInstallDateProvisioningSource[]; |
|
extern const char kMetricTimeToRebootMinutes[]; |
|
|
|
// The possible outcomes when checking for updates. |
|
// |
|
// This is used in the UpdateEngine.Check.Result histogram. |
|
enum class CheckResult { |
|
kUpdateAvailable, // Response indicates an update is available. |
|
kNoUpdateAvailable, // Response indicates no updates are available. |
|
kDownloadError, // Error downloading response from Omaha. |
|
kParsingError, // Error parsing response. |
|
kRebootPending, // No update check was performed a reboot is pending. |
|
|
|
kNumConstants, |
|
kUnset = -1 |
|
}; |
|
|
|
// Possible ways a device can react to a new update being available. |
|
// |
|
// This is used in the UpdateEngine.Check.Reaction histogram. |
|
enum class CheckReaction { |
|
kUpdating, // Device proceeds to download and apply update. |
|
kIgnored , // Device-policy dictates ignoring the update. |
|
kDeferring, // Device-policy dictates waiting. |
|
kBackingOff, // Previous errors dictates waiting. |
|
|
|
kNumConstants, |
|
kUnset = -1 |
|
}; |
|
|
|
// The possible ways that downloading from a HTTP or HTTPS server can fail. |
|
// |
|
// This is used in the UpdateEngine.Check.DownloadErrorCode and |
|
// UpdateEngine.Attempt.DownloadErrorCode histograms. |
|
enum class DownloadErrorCode { |
|
// Errors that can happen in the field. See http://crbug.com/355745 |
|
// for how we plan to add more detail in the future. |
|
kDownloadError = 0, // Error downloading data from server. |
|
|
|
// IMPORTANT: When adding a new error code, add at the bottom of the |
|
// above block and before the kInputMalformed field. This |
|
// is to ensure that error codes are not reordered. |
|
|
|
// This error code is used to convey that malformed input was given |
|
// to the utils::GetDownloadErrorCode() function. This should never |
|
// happen but if it does it's because of an internal update_engine |
|
// error and we're interested in knowing this. |
|
kInputMalformed = 100, |
|
|
|
// Bucket for capturing HTTP status codes not in the 200-599 |
|
// range. This should never happen in practice but if it does we |
|
// want to know. |
|
kHttpStatusOther = 101, |
|
|
|
// Above 200 and below 600, the value is the HTTP status code. |
|
kHttpStatus200 = 200, |
|
|
|
kNumConstants = 600, |
|
|
|
kUnset = -1 |
|
}; |
|
|
|
// Possible ways an update attempt can end. |
|
// |
|
// This is used in the UpdateEngine.Attempt.Result histogram. |
|
enum class AttemptResult { |
|
kUpdateSucceeded, // The update succeeded. |
|
kInternalError, // An internal error occurred. |
|
kPayloadDownloadError, // Failure while downloading payload. |
|
kMetadataMalformed, // Metadata was malformed. |
|
kOperationMalformed, // An operation was malformed. |
|
kOperationExecutionError, // An operation failed to execute. |
|
kMetadataVerificationFailed, // Metadata verification failed. |
|
kPayloadVerificationFailed, // Payload verification failed. |
|
kVerificationFailed, // Root or Kernel partition verification failed. |
|
kPostInstallFailed, // The postinstall step failed. |
|
kAbnormalTermination, // The attempt ended abnormally. |
|
kUpdateCanceled, // Update canceled by the user. |
|
|
|
kNumConstants, |
|
|
|
kUnset = -1 |
|
}; |
|
|
|
// Possible ways the device is connected to the Internet. |
|
// |
|
// This is used in the UpdateEngine.Attempt.ConnectionType histogram. |
|
enum class ConnectionType { |
|
kUnknown, // Unknown. |
|
kEthernet, // Ethernet. |
|
kWifi, // Wireless. |
|
kWimax, // WiMax. |
|
kBluetooth, // Bluetooth. |
|
kCellular, // Cellular. |
|
kTetheredEthernet, // Tethered (Ethernet). |
|
kTetheredWifi, // Tethered (Wifi). |
|
|
|
kNumConstants, |
|
kUnset = -1 |
|
}; |
|
|
|
// Possible ways a rollback can end. |
|
// |
|
// This is used in the UpdateEngine.Rollback histogram. |
|
enum class RollbackResult { |
|
kFailed, |
|
kSuccess, |
|
|
|
kNumConstants |
|
}; |
|
|
|
// Helper function to report metrics related to rollback. The |
|
// following metrics are reported: |
|
// |
|
// |kMetricRollbackResult| |
|
void ReportRollbackMetrics(SystemState *system_state, |
|
RollbackResult result); |
|
|
|
// Helper function to report metrics reported once a day. The |
|
// following metrics are reported: |
|
// |
|
// |kMetricDailyOSAgeDays| |
|
void ReportDailyMetrics(SystemState *system_state, |
|
base::TimeDelta os_age); |
|
|
|
// 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| |
|
// |
|
// 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. |
|
void ReportUpdateCheckMetrics(SystemState *system_state, |
|
CheckResult result, |
|
CheckReaction reaction, |
|
DownloadErrorCode download_error_code); |
|
|
|
|
|
// Helper function to report metrics after the completion of each |
|
// update attempt. The following metrics are reported: |
|
// |
|
// |kMetricAttemptNumber| |
|
// |kMetricAttemptPayloadType| |
|
// |kMetricAttemptPayloadSizeMiB| |
|
// |kMetricAttemptDurationSeconds| |
|
// |kMetricAttemptDurationUptimeSeconds| |
|
// |kMetricAttemptTimeSinceLastAttemptMinutes| |
|
// |kMetricAttemptTimeSinceLastAttemptUptimeMinutes| |
|
// |kMetricAttemptPayloadBytesDownloadedMiB| |
|
// |kMetricAttemptPayloadDownloadSpeedKBps| |
|
// |kMetricAttemptDownloadSource| |
|
// |kMetricAttemptResult| |
|
// |kMetricAttemptInternalErrorCode| |
|
// |kMetricAttemptDownloadErrorCode| |
|
// |
|
// 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. |
|
void ReportUpdateAttemptMetrics( |
|
SystemState *system_state, |
|
int attempt_number, |
|
PayloadType payload_type, |
|
base::TimeDelta duration, |
|
base::TimeDelta duration_uptime, |
|
int64_t payload_size, |
|
int64_t payload_bytes_downloaded, |
|
int64_t payload_download_speed_bps, |
|
DownloadSource download_source, |
|
AttemptResult attempt_result, |
|
ErrorCode internal_error_code, |
|
DownloadErrorCode payload_download_error_code, |
|
ConnectionType connection_type); |
|
|
|
// Reports the |kAbnormalTermination| for the |kMetricAttemptResult| |
|
// metric. No other metrics in the UpdateEngine.Attempt.* namespace |
|
// will be reported. |
|
void ReportAbnormallyTerminatedUpdateAttemptMetrics(SystemState *system_state); |
|
|
|
// 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| |
|
// |kMetricSuccessfulUpdateRebootCount| |
|
// |kMetricSuccessfulUpdateUrlSwitchCount| |
|
// |
|
// The values for the |kMetricSuccessfulUpdateDownloadSourcesUsed| are |
|
// |kMetricSuccessfulUpdateBytesDownloadedMiB| metrics automatically |
|
// calculated from examining the |num_bytes_downloaded| array. |
|
void ReportSuccessfulUpdateMetrics( |
|
SystemState *system_state, |
|
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, |
|
int reboot_count, |
|
int url_switch_count); |
|
|
|
// Helper function to report the after the completion of a SSL certificate |
|
// check. One of the following metrics is reported: |
|
// |
|
// |kMetricCertificateCheckUpdateCheck| |
|
// |kMetricCertificateCheckDownload| |
|
void ReportCertificateCheckMetrics(SystemState* system_state, |
|
ServerToCheck server_to_check, |
|
CertificateCheckResult result); |
|
|
|
} // namespace metrics |
|
|
|
} // namespace chromeos_update_engine |
|
|
|
#endif // UPDATE_ENGINE_METRICS_H_
|
|
|