1aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 2aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Copyright (C) 2014 The Android Open Source Project 3aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 4aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Licensed under the Apache License, Version 2.0 (the "License"); 5aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// you may not use this file except in compliance with the License. 6aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// You may obtain a copy of the License at 7aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 8aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// http://www.apache.org/licenses/LICENSE-2.0 9aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 10aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Unless required by applicable law or agreed to in writing, software 11aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// distributed under the License is distributed on an "AS IS" BASIS, 12aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// See the License for the specific language governing permissions and 14aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// limitations under the License. 15aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 1633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 17cf175a098081f3f0e9ca52d997a7ce1585c14c2dGilad Arnold#ifndef UPDATE_ENGINE_METRICS_H_ 18cf175a098081f3f0e9ca52d997a7ce1585c14c2dGilad Arnold#define UPDATE_ENGINE_METRICS_H_ 1933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 2033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen#include <base/time/time.h> 2133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 2214c0da88a93aa7b1aa71d5e7e923b537f0d419f3Alex Deymo#include "update_engine/certificate_checker.h" 2339910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#include "update_engine/common/constants.h" 2439910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#include "update_engine/common/error_code.h" 2533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 2633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthennamespace chromeos_update_engine { 2733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 2833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenclass SystemState; 2933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 3033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthennamespace metrics { 3133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 3233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// UpdateEngine.Daily.* metrics. 3333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricDailyOSAgeDays[]; 3433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 3533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// UpdateEngine.Check.* metrics. 3633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricCheckDownloadErrorCode[]; 3733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricCheckReaction[]; 3833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricCheckResult[]; 3933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricCheckTimeSinceLastCheckMinutes[]; 4033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricCheckTimeSinceLastCheckUptimeMinutes[]; 4133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 4233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// UpdateEngine.Attempt.* metrics. 4333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptNumber[]; 4433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptPayloadType[]; 4533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptPayloadSizeMiB[]; 46b281f0768f4d95afcf7378229a1a9f9ec9bd69abDavid Zeuthenextern const char kMetricAttemptConnectionType[]; 4733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptDurationMinutes[]; 4833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptDurationUptimeMinutes[]; 4933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptTimeSinceLastAttemptSeconds[]; 5033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptTimeSinceLastAttemptUptimeSeconds[]; 5133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptPayloadBytesDownloaded[]; 5233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptPayloadDownloadSpeedKBps[]; 5333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptDownloadSource[]; 5433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptResult[]; 5533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptInternalErrorCode[]; 5633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricAttemptDownloadErrorCode[]; 5733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 5833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// UpdateEngine.SuccessfulUpdate.* metrics. 5933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricSuccessfulUpdateAttemptCount[]; 6033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricSuccessfulUpdateBytesDownloadedMiB[]; 6133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricSuccessfulUpdateDownloadOverheadPercentage[]; 6233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricSuccessfulUpdateDownloadSourcesUsed[]; 6333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricSuccessfulUpdatePayloadType[]; 6433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricSuccessfulUpdatePayloadSizeMiB[]; 6533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricSuccessfulUpdateTotalDurationMinutes[]; 6633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricSuccessfulUpdateRebootCount[]; 6733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricSuccessfulUpdateUpdatesAbandonedCount[]; 6833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricSuccessfulUpdateUrlSwitchCount[]; 6933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 7096197df73f6c804d96eb3a1390eb817f354089d2David Zeuthen// UpdateEngine.Rollback.* metric. 7196197df73f6c804d96eb3a1390eb817f354089d2David Zeuthenextern const char kMetricRollbackResult[]; 7296197df73f6c804d96eb3a1390eb817f354089d2David Zeuthen 7333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// UpdateEngine.* metrics. 7433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricFailedUpdateCount[]; 7533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricInstallDateProvisioningSource[]; 7633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenextern const char kMetricTimeToRebootMinutes[]; 7733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 7833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The possible outcomes when checking for updates. 7933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 8033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// This is used in the UpdateEngine.Check.Result histogram. 8133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenenum class CheckResult { 8233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kUpdateAvailable, // Response indicates an update is available. 8333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kNoUpdateAvailable, // Response indicates no updates are available. 8433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kDownloadError, // Error downloading response from Omaha. 8533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kParsingError, // Error parsing response. 8633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kRebootPending, // No update check was performed a reboot is pending. 8733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 8833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kNumConstants, 8933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kUnset = -1 9033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen}; 9133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 9233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// Possible ways a device can react to a new update being available. 9333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 9433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// This is used in the UpdateEngine.Check.Reaction histogram. 9533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenenum class CheckReaction { 9633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kUpdating, // Device proceeds to download and apply update. 9733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kIgnored , // Device-policy dictates ignoring the update. 9833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kDeferring, // Device-policy dictates waiting. 9933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kBackingOff, // Previous errors dictates waiting. 10033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 10133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kNumConstants, 10233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kUnset = -1 10333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen}; 10433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 10533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The possible ways that downloading from a HTTP or HTTPS server can fail. 10633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 10733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// This is used in the UpdateEngine.Check.DownloadErrorCode and 10833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// UpdateEngine.Attempt.DownloadErrorCode histograms. 10933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenenum class DownloadErrorCode { 11033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // Errors that can happen in the field. See http://crbug.com/355745 11133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // for how we plan to add more detail in the future. 11233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kDownloadError = 0, // Error downloading data from server. 11333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 11433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // IMPORTANT: When adding a new error code, add at the bottom of the 11533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // above block and before the kInputMalformed field. This 11633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // is to ensure that error codes are not reordered. 11733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 11833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // This error code is used to convey that malformed input was given 11933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // to the utils::GetDownloadErrorCode() function. This should never 12033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // happen but if it does it's because of an internal update_engine 12133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // error and we're interested in knowing this. 12233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kInputMalformed = 100, 12333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 12433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // Bucket for capturing HTTP status codes not in the 200-599 12533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // range. This should never happen in practice but if it does we 12633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // want to know. 12733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kHttpStatusOther = 101, 12833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 12933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen // Above 200 and below 600, the value is the HTTP status code. 13033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kHttpStatus200 = 200, 13133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 13233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kNumConstants = 600, 13333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 13433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kUnset = -1 13533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen}; 13633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 13733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// Possible ways an update attempt can end. 13833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 13933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// This is used in the UpdateEngine.Attempt.Result histogram. 14033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenenum class AttemptResult { 14133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kUpdateSucceeded, // The update succeeded. 14233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kInternalError, // An internal error occurred. 14333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kPayloadDownloadError, // Failure while downloading payload. 14433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kMetadataMalformed, // Metadata was malformed. 14533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kOperationMalformed, // An operation was malformed. 14633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kOperationExecutionError, // An operation failed to execute. 14733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kMetadataVerificationFailed, // Metadata verification failed. 14833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kPayloadVerificationFailed, // Payload verification failed. 14933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kVerificationFailed, // Root or Kernel partition verification failed. 15033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kPostInstallFailed, // The postinstall step failed. 15133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kAbnormalTermination, // The attempt ended abnormally. 1521f19dccb115cf608104b1cb0d192a53ae32f238fAlex Deymo kUpdateCanceled, // Update canceled by the user. 15333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 15433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kNumConstants, 15533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 15633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen kUnset = -1 15733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen}; 15833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 159b281f0768f4d95afcf7378229a1a9f9ec9bd69abDavid Zeuthen// Possible ways the device is connected to the Internet. 160b281f0768f4d95afcf7378229a1a9f9ec9bd69abDavid Zeuthen// 161b281f0768f4d95afcf7378229a1a9f9ec9bd69abDavid Zeuthen// This is used in the UpdateEngine.Attempt.ConnectionType histogram. 162b281f0768f4d95afcf7378229a1a9f9ec9bd69abDavid Zeuthenenum class ConnectionType { 163b281f0768f4d95afcf7378229a1a9f9ec9bd69abDavid Zeuthen kUnknown, // Unknown. 164b281f0768f4d95afcf7378229a1a9f9ec9bd69abDavid Zeuthen kEthernet, // Ethernet. 165b281f0768f4d95afcf7378229a1a9f9ec9bd69abDavid Zeuthen kWifi, // Wireless. 166b281f0768f4d95afcf7378229a1a9f9ec9bd69abDavid Zeuthen kWimax, // WiMax. 167b281f0768f4d95afcf7378229a1a9f9ec9bd69abDavid Zeuthen kBluetooth, // Bluetooth. 168b281f0768f4d95afcf7378229a1a9f9ec9bd69abDavid Zeuthen kCellular, // Cellular. 169b281f0768f4d95afcf7378229a1a9f9ec9bd69abDavid Zeuthen kTetheredEthernet, // Tethered (Ethernet). 170b281f0768f4d95afcf7378229a1a9f9ec9bd69abDavid Zeuthen kTetheredWifi, // Tethered (Wifi). 171b281f0768f4d95afcf7378229a1a9f9ec9bd69abDavid Zeuthen 172b281f0768f4d95afcf7378229a1a9f9ec9bd69abDavid Zeuthen kNumConstants, 173b281f0768f4d95afcf7378229a1a9f9ec9bd69abDavid Zeuthen kUnset = -1 174b281f0768f4d95afcf7378229a1a9f9ec9bd69abDavid Zeuthen}; 175b281f0768f4d95afcf7378229a1a9f9ec9bd69abDavid Zeuthen 17696197df73f6c804d96eb3a1390eb817f354089d2David Zeuthen// Possible ways a rollback can end. 17796197df73f6c804d96eb3a1390eb817f354089d2David Zeuthen// 17896197df73f6c804d96eb3a1390eb817f354089d2David Zeuthen// This is used in the UpdateEngine.Rollback histogram. 17996197df73f6c804d96eb3a1390eb817f354089d2David Zeuthenenum class RollbackResult { 18096197df73f6c804d96eb3a1390eb817f354089d2David Zeuthen kFailed, 18196197df73f6c804d96eb3a1390eb817f354089d2David Zeuthen kSuccess, 18296197df73f6c804d96eb3a1390eb817f354089d2David Zeuthen 18396197df73f6c804d96eb3a1390eb817f354089d2David Zeuthen kNumConstants 18496197df73f6c804d96eb3a1390eb817f354089d2David Zeuthen}; 18596197df73f6c804d96eb3a1390eb817f354089d2David Zeuthen 18696197df73f6c804d96eb3a1390eb817f354089d2David Zeuthen// Helper function to report metrics related to rollback. The 18796197df73f6c804d96eb3a1390eb817f354089d2David Zeuthen// following metrics are reported: 18896197df73f6c804d96eb3a1390eb817f354089d2David Zeuthen// 18996197df73f6c804d96eb3a1390eb817f354089d2David Zeuthen// |kMetricRollbackResult| 19096197df73f6c804d96eb3a1390eb817f354089d2David Zeuthenvoid ReportRollbackMetrics(SystemState *system_state, 19196197df73f6c804d96eb3a1390eb817f354089d2David Zeuthen RollbackResult result); 19296197df73f6c804d96eb3a1390eb817f354089d2David Zeuthen 19333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// Helper function to report metrics reported once a day. The 19433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// following metrics are reported: 19533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 19633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricDailyOSAgeDays| 19733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenvoid ReportDailyMetrics(SystemState *system_state, 19833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen base::TimeDelta os_age); 19933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 20033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// Helper function to report metrics after completing an update check 20133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// with the ChromeOS update server ("Omaha"). The following metrics 20233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// are reported: 20333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 20433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricCheckResult| 20533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricCheckReaction| 20633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricCheckDownloadErrorCode| 20733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricCheckTimeSinceLastCheckMinutes| 20833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricCheckTimeSinceLastCheckUptimeMinutes| 20933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 21033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The |kMetricCheckResult| metric will only be reported if |result| 21133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// is not |kUnset|. 21233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 21333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The |kMetricCheckReaction| metric will only be reported if 21433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |reaction| is not |kUnset|. 21533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 21633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The |kMetricCheckDownloadErrorCode| will only be reported if 21733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |download_error_code| is not |kUnset|. 21833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 21933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The values for the |kMetricCheckTimeSinceLastCheckMinutes| and 22033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricCheckTimeSinceLastCheckUptimeMinutes| metrics are 22133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// automatically reported and calculated by maintaining persistent 22233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// and process-local state variables. 22333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenvoid ReportUpdateCheckMetrics(SystemState *system_state, 22433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen CheckResult result, 22533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen CheckReaction reaction, 22633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen DownloadErrorCode download_error_code); 22733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 22833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 22933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// Helper function to report metrics after the completion of each 23033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// update attempt. The following metrics are reported: 23133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 23233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptNumber| 23333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptPayloadType| 23433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptPayloadSizeMiB| 23533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptDurationSeconds| 23633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptDurationUptimeSeconds| 23733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptTimeSinceLastAttemptMinutes| 23833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptTimeSinceLastAttemptUptimeMinutes| 23933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptPayloadBytesDownloadedMiB| 24033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptPayloadDownloadSpeedKBps| 24133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptDownloadSource| 24233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptResult| 24333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptInternalErrorCode| 24433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptDownloadErrorCode| 24533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 24633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The |kMetricAttemptInternalErrorCode| metric will only be reported 24733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// if |internal_error_code| is not |kErrorSuccess|. 24833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 24933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The |kMetricAttemptDownloadErrorCode| metric will only be 25033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// reported if |payload_download_error_code| is not |kUnset|. 25133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 25233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The values for the |kMetricAttemptTimeSinceLastAttemptMinutes| and 25333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricAttemptTimeSinceLastAttemptUptimeMinutes| metrics are 25433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// automatically calculated and reported by maintaining persistent and 25533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// process-local state variables. 25633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenvoid ReportUpdateAttemptMetrics( 25733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen SystemState *system_state, 25833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int attempt_number, 25933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen PayloadType payload_type, 26033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen base::TimeDelta duration, 26133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen base::TimeDelta duration_uptime, 26233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int64_t payload_size, 26333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int64_t payload_bytes_downloaded, 26433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int64_t payload_download_speed_bps, 26533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen DownloadSource download_source, 26633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen AttemptResult attempt_result, 26733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen ErrorCode internal_error_code, 268b281f0768f4d95afcf7378229a1a9f9ec9bd69abDavid Zeuthen DownloadErrorCode payload_download_error_code, 269b281f0768f4d95afcf7378229a1a9f9ec9bd69abDavid Zeuthen ConnectionType connection_type); 27033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 2714e1d1495c034c8a81c989622481b6cdf94a50c3cDavid Zeuthen// Reports the |kAbnormalTermination| for the |kMetricAttemptResult| 2724e1d1495c034c8a81c989622481b6cdf94a50c3cDavid Zeuthen// metric. No other metrics in the UpdateEngine.Attempt.* namespace 2734e1d1495c034c8a81c989622481b6cdf94a50c3cDavid Zeuthen// will be reported. 2744e1d1495c034c8a81c989622481b6cdf94a50c3cDavid Zeuthenvoid ReportAbnormallyTerminatedUpdateAttemptMetrics(SystemState *system_state); 2754e1d1495c034c8a81c989622481b6cdf94a50c3cDavid Zeuthen 27633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// Helper function to report the after the completion of a successful 27733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// update attempt. The following metrics are reported: 27833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 27933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateAttemptCount| 28033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateUpdatesAbandonedCount| 28133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdatePayloadType| 28233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdatePayloadSizeMiB| 28333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateBytesDownloadedMiBHttpsServer| 28433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateBytesDownloadedMiBHttpServer| 28533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateBytesDownloadedMiBHttpPeer| 28633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateBytesDownloadedMiB| 28733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateDownloadSourcesUsed| 28833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateDownloadOverheadPercentage| 28933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateTotalDurationMinutes| 29033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateRebootCount| 29133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateUrlSwitchCount| 29233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 29333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The values for the |kMetricSuccessfulUpdateDownloadSourcesUsed| are 29433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |kMetricSuccessfulUpdateBytesDownloadedMiB| metrics automatically 29533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// calculated from examining the |num_bytes_downloaded| array. 29633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenvoid ReportSuccessfulUpdateMetrics( 29733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen SystemState *system_state, 29833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int attempt_count, 29933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int updates_abandoned_count, 30033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen PayloadType payload_type, 30133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int64_t payload_size, 30233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int64_t num_bytes_downloaded[kNumDownloadSources], 30333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int download_overhead_percentage, 30433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen base::TimeDelta total_duration, 30533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int reboot_count, 30633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen int url_switch_count); 30733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 308c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo// Helper function to report the after the completion of a SSL certificate 309c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo// check. One of the following metrics is reported: 310c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo// 311c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo// |kMetricCertificateCheckUpdateCheck| 312c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo// |kMetricCertificateCheckDownload| 313c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymovoid ReportCertificateCheckMetrics(SystemState* system_state, 314c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo ServerToCheck server_to_check, 315c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo CertificateCheckResult result); 316c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo 31733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen} // namespace metrics 31833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 31933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen} // namespace chromeos_update_engine 32033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 321cf175a098081f3f0e9ca52d997a7ce1585c14c2dGilad Arnold#endif // UPDATE_ENGINE_METRICS_H_ 322