metrics.h revision 33bae491eded4ef4f1eb4f4ef0f01ef0e5463f3a
133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// Copyright 2014 The Chromium OS Authors. All rights reserved. 233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// Use of this source code is governed by a BSD-style license that can be 333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// found in the LICENSE file. 433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen#ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_METRICS_H_ 633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen#define CHROMEOS_PLATFORM_UPDATE_ENGINE_METRICS_H_ 733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen#include <base/time/time.h> 933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 1033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen#include "update_engine/constants.h" 1133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen#include "update_engine/error_code.h" 1233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 1333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthennamespace chromeos_update_engine { 1433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 1533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenclass SystemState; 1633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 1733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthennamespace metrics { 1833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 1933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// UpdateEngine.Daily.* metrics. 2033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricDailyOSAgeDays[]; 2133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 2233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// UpdateEngine.Check.* metrics. 2333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricCheckDownloadErrorCode[]; 2433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricCheckReaction[]; 2533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricCheckResult[]; 2633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricCheckTimeSinceLastCheckMinutes[]; 2733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricCheckTimeSinceLastCheckUptimeMinutes[]; 2833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 2933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// UpdateEngine.Attempt.* metrics. 3033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptNumber[]; 3133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptPayloadType[]; 3233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptPayloadSizeMiB[]; 3333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptDurationMinutes[]; 3433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptDurationUptimeMinutes[]; 3533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptTimeSinceLastAttemptSeconds[]; 3633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptTimeSinceLastAttemptUptimeSeconds[]; 3733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptPayloadBytesOffset[]; 3833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptPayloadBytesNeeded[]; 3933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptPayloadBytesDownloaded[]; 4033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptPayloadDownloadSpeedKBps[]; 4133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptDownloadSource[]; 4233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptResult[]; 4333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptInternalErrorCode[]; 4433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptDownloadErrorCode[]; 4533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 4633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// UpdateEngine.SuccessfulUpdate.* metrics. 4733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricSuccessfulUpdateAttemptCount[]; 4833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricSuccessfulUpdateBytesDownloadedMiB[]; 4933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricSuccessfulUpdateDownloadOverheadPercentage[]; 5033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricSuccessfulUpdateDownloadSourcesUsed[]; 5133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricSuccessfulUpdatePayloadType[]; 5233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricSuccessfulUpdatePayloadSizeMiB[]; 5333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricSuccessfulUpdateTotalDurationMinutes[]; 5433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricSuccessfulUpdateRebootCount[]; 5533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricSuccessfulUpdateUpdatesAbandonedCount[]; 5633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricSuccessfulUpdateUrlSwitchCount[]; 5733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 5833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// UpdateEngine.* metrics. 5933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricFailedUpdateCount[]; 6033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricInstallDateProvisioningSource[]; 6133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricTimeToRebootMinutes[]; 6233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 6333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The possible outcomes when checking for updates. 6433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 6533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// This is used in the UpdateEngine.Check.Result histogram. 6633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenenum class CheckResult { 6733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kUpdateAvailable, // Response indicates an update is available. 6833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kNoUpdateAvailable, // Response indicates no updates are available. 6933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kDownloadError, // Error downloading response from Omaha. 7033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kParsingError, // Error parsing response. 7133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kRebootPending, // No update check was performed a reboot is pending. 7233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 7333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kNumConstants, 7433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kUnset = -1 7533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen}; 7633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 7733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// Possible ways a device can react to a new update being available. 7833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 7933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// This is used in the UpdateEngine.Check.Reaction histogram. 8033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenenum class CheckReaction { 8133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kUpdating, // Device proceeds to download and apply update. 8233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kIgnored , // Device-policy dictates ignoring the update. 8333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kDeferring, // Device-policy dictates waiting. 8433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kBackingOff, // Previous errors dictates waiting. 8533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 8633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kNumConstants, 8733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kUnset = -1 8833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen}; 8933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 9033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The possible ways that downloading from a HTTP or HTTPS server can fail. 9133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 9233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// This is used in the UpdateEngine.Check.DownloadErrorCode and 9333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// UpdateEngine.Attempt.DownloadErrorCode histograms. 9433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenenum class DownloadErrorCode { 9533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // Errors that can happen in the field. See http://crbug.com/355745 9633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // for how we plan to add more detail in the future. 9733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kDownloadError = 0, // Error downloading data from server. 9833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 9933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // IMPORTANT: When adding a new error code, add at the bottom of the 10033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // above block and before the kInputMalformed field. This 10133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // is to ensure that error codes are not reordered. 10233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 10333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // This error code is used to convey that malformed input was given 10433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // to the utils::GetDownloadErrorCode() function. This should never 10533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // happen but if it does it's because of an internal update_engine 10633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // error and we're interested in knowing this. 10733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kInputMalformed = 100, 10833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 10933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // Bucket for capturing HTTP status codes not in the 200-599 11033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // range. This should never happen in practice but if it does we 11133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // want to know. 11233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kHttpStatusOther = 101, 11333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 11433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // Above 200 and below 600, the value is the HTTP status code. 11533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kHttpStatus200 = 200, 11633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 11733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kNumConstants = 600, 11833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 11933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kUnset = -1 12033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen}; 12133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 12233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// Possible ways an update attempt can end. 12333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 12433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// This is used in the UpdateEngine.Attempt.Result histogram. 12533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenenum class AttemptResult { 12633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kUpdateSucceeded, // The update succeeded. 12733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kInternalError, // An internal error occurred. 12833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kPayloadDownloadError, // Failure while downloading payload. 12933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kMetadataMalformed, // Metadata was malformed. 13033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kOperationMalformed, // An operation was malformed. 13133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kOperationExecutionError, // An operation failed to execute. 13233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kMetadataVerificationFailed, // Metadata verification failed. 13333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kPayloadVerificationFailed, // Payload verification failed. 13433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kVerificationFailed, // Root or Kernel partition verification failed. 13533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kPostInstallFailed, // The postinstall step failed. 13633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kAbnormalTermination, // The attempt ended abnormally. 13733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 13833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kNumConstants, 13933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 14033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kUnset = -1 14133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen}; 14233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 14333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// Helper function to report metrics reported once a day. The 14433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// following metrics are reported: 14533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 14633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricDailyOSAgeDays| 14733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenvoid ReportDailyMetrics(SystemState *system_state, 14833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen base::TimeDelta os_age); 14933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 15033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// Helper function to report metrics after completing an update check 15133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// with the ChromeOS update server ("Omaha"). The following metrics 15233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// are reported: 15333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 15433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricCheckResult| 15533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricCheckReaction| 15633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricCheckDownloadErrorCode| 15733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricCheckTimeSinceLastCheckMinutes| 15833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricCheckTimeSinceLastCheckUptimeMinutes| 15933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 16033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The |kMetricCheckResult| metric will only be reported if |result| 16133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// is not |kUnset|. 16233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 16333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The |kMetricCheckReaction| metric will only be reported if 16433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |reaction| is not |kUnset|. 16533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 16633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The |kMetricCheckDownloadErrorCode| will only be reported if 16733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |download_error_code| is not |kUnset|. 16833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 16933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The values for the |kMetricCheckTimeSinceLastCheckMinutes| and 17033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricCheckTimeSinceLastCheckUptimeMinutes| metrics are 17133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// automatically reported and calculated by maintaining persistent 17233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// and process-local state variables. 17333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenvoid ReportUpdateCheckMetrics(SystemState *system_state, 17433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen CheckResult result, 17533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen CheckReaction reaction, 17633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen DownloadErrorCode download_error_code); 17733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 17833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 17933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// Helper function to report metrics after the completion of each 18033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// update attempt. The following metrics are reported: 18133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 18233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptNumber| 18333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptPayloadType| 18433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptPayloadSizeMiB| 18533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptDurationSeconds| 18633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptDurationUptimeSeconds| 18733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptTimeSinceLastAttemptMinutes| 18833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptTimeSinceLastAttemptUptimeMinutes| 18933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptPayloadBytesDownloadedMiB| 19033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptPayloadDownloadSpeedKBps| 19133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptDownloadSource| 19233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptResult| 19333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptInternalErrorCode| 19433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptDownloadErrorCode| 19533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 19633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The |kMetricAttemptInternalErrorCode| metric will only be reported 19733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// if |internal_error_code| is not |kErrorSuccess|. 19833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 19933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The |kMetricAttemptDownloadErrorCode| metric will only be 20033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// reported if |payload_download_error_code| is not |kUnset|. 20133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 20233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The values for the |kMetricAttemptTimeSinceLastAttemptMinutes| and 20333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptTimeSinceLastAttemptUptimeMinutes| metrics are 20433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// automatically calculated and reported by maintaining persistent and 20533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// process-local state variables. 20633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenvoid ReportUpdateAttemptMetrics( 20733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen SystemState *system_state, 20833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int attempt_number, 20933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen PayloadType payload_type, 21033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen base::TimeDelta duration, 21133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen base::TimeDelta duration_uptime, 21233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int64_t payload_size, 21333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int64_t payload_bytes_downloaded, 21433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int64_t payload_download_speed_bps, 21533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen DownloadSource download_source, 21633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen AttemptResult attempt_result, 21733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen ErrorCode internal_error_code, 21833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen DownloadErrorCode payload_download_error_code); 21933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 22033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// Helper function to report the after the completion of a successful 22133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// update attempt. The following metrics are reported: 22233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 22333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateAttemptCount| 22433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateUpdatesAbandonedCount| 22533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdatePayloadType| 22633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdatePayloadSizeMiB| 22733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateBytesDownloadedMiBHttpsServer| 22833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateBytesDownloadedMiBHttpServer| 22933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateBytesDownloadedMiBHttpPeer| 23033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateBytesDownloadedMiB| 23133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateDownloadSourcesUsed| 23233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateDownloadOverheadPercentage| 23333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateTotalDurationMinutes| 23433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateRebootCount| 23533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateUrlSwitchCount| 23633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 23733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The values for the |kMetricSuccessfulUpdateDownloadSourcesUsed| are 23833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateBytesDownloadedMiB| metrics automatically 23933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// calculated from examining the |num_bytes_downloaded| array. 24033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenvoid ReportSuccessfulUpdateMetrics( 24133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen SystemState *system_state, 24233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int attempt_count, 24333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int updates_abandoned_count, 24433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen PayloadType payload_type, 24533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int64_t payload_size, 24633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int64_t num_bytes_downloaded[kNumDownloadSources], 24733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int download_overhead_percentage, 24833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen base::TimeDelta total_duration, 24933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int reboot_count, 25033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int url_switch_count); 25133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 25233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen} // namespace metrics 25333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 25433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen} // namespace chromeos_update_engine 25533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 25633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen#endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_METRICS_H_ 257