1*5a923131SAndroid Build Coastguard Worker // 2*5a923131SAndroid Build Coastguard Worker // Copyright (C) 2017 The Android Open Source Project 3*5a923131SAndroid Build Coastguard Worker // 4*5a923131SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); 5*5a923131SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License. 6*5a923131SAndroid Build Coastguard Worker // You may obtain a copy of the License at 7*5a923131SAndroid Build Coastguard Worker // 8*5a923131SAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0 9*5a923131SAndroid Build Coastguard Worker // 10*5a923131SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software 11*5a923131SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, 12*5a923131SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*5a923131SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and 14*5a923131SAndroid Build Coastguard Worker // limitations under the License. 15*5a923131SAndroid Build Coastguard Worker // 16*5a923131SAndroid Build Coastguard Worker 17*5a923131SAndroid Build Coastguard Worker #ifndef UPDATE_ENGINE_COMMON_METRICS_CONSTANTS_H_ 18*5a923131SAndroid Build Coastguard Worker #define UPDATE_ENGINE_COMMON_METRICS_CONSTANTS_H_ 19*5a923131SAndroid Build Coastguard Worker 20*5a923131SAndroid Build Coastguard Worker #include <chrono> 21*5a923131SAndroid Build Coastguard Worker namespace chromeos_update_engine { 22*5a923131SAndroid Build Coastguard Worker 23*5a923131SAndroid Build Coastguard Worker namespace metrics { 24*5a923131SAndroid Build Coastguard Worker // The possible outcomes when checking for updates. 25*5a923131SAndroid Build Coastguard Worker // 26*5a923131SAndroid Build Coastguard Worker // This is used in the UpdateEngine.Check.Result histogram. 27*5a923131SAndroid Build Coastguard Worker enum class CheckResult { 28*5a923131SAndroid Build Coastguard Worker kUpdateAvailable, // Response indicates an update is available. 29*5a923131SAndroid Build Coastguard Worker kNoUpdateAvailable, // Response indicates no updates are available. 30*5a923131SAndroid Build Coastguard Worker kDownloadError, // Error downloading response from Omaha. 31*5a923131SAndroid Build Coastguard Worker kParsingError, // Error parsing response. 32*5a923131SAndroid Build Coastguard Worker kRebootPending, // No update check was performed a reboot is pending. 33*5a923131SAndroid Build Coastguard Worker 34*5a923131SAndroid Build Coastguard Worker kNumConstants, 35*5a923131SAndroid Build Coastguard Worker kUnset = -1 36*5a923131SAndroid Build Coastguard Worker }; 37*5a923131SAndroid Build Coastguard Worker 38*5a923131SAndroid Build Coastguard Worker // Possible ways a device can react to a new update being available. 39*5a923131SAndroid Build Coastguard Worker // 40*5a923131SAndroid Build Coastguard Worker // This is used in the UpdateEngine.Check.Reaction histogram. 41*5a923131SAndroid Build Coastguard Worker enum class CheckReaction { 42*5a923131SAndroid Build Coastguard Worker kUpdating, // Device proceeds to download and apply update. 43*5a923131SAndroid Build Coastguard Worker kIgnored, // Device-policy dictates ignoring the update. 44*5a923131SAndroid Build Coastguard Worker kDeferring, // Device-policy dictates waiting. 45*5a923131SAndroid Build Coastguard Worker kBackingOff, // Previous errors dictates waiting. 46*5a923131SAndroid Build Coastguard Worker 47*5a923131SAndroid Build Coastguard Worker kNumConstants, 48*5a923131SAndroid Build Coastguard Worker kUnset = -1 49*5a923131SAndroid Build Coastguard Worker }; 50*5a923131SAndroid Build Coastguard Worker 51*5a923131SAndroid Build Coastguard Worker // The possible ways that downloading from a HTTP or HTTPS server can fail. 52*5a923131SAndroid Build Coastguard Worker // 53*5a923131SAndroid Build Coastguard Worker // This is used in the UpdateEngine.Check.DownloadErrorCode and 54*5a923131SAndroid Build Coastguard Worker // UpdateEngine.Attempt.DownloadErrorCode histograms. 55*5a923131SAndroid Build Coastguard Worker enum class DownloadErrorCode { 56*5a923131SAndroid Build Coastguard Worker // Errors that can happen in the field. See http://crbug.com/355745 57*5a923131SAndroid Build Coastguard Worker // for how we plan to add more detail in the future. 58*5a923131SAndroid Build Coastguard Worker kDownloadError = 0, // Error downloading data from server. 59*5a923131SAndroid Build Coastguard Worker 60*5a923131SAndroid Build Coastguard Worker // IMPORTANT: When adding a new error code, add at the bottom of the 61*5a923131SAndroid Build Coastguard Worker // above block and before the kInputMalformed field. This 62*5a923131SAndroid Build Coastguard Worker // is to ensure that error codes are not reordered. 63*5a923131SAndroid Build Coastguard Worker 64*5a923131SAndroid Build Coastguard Worker // This error is reported when libcurl returns CURLE_COULDNT_RESOLVE_HOST and 65*5a923131SAndroid Build Coastguard Worker // calling res_init() can recover. 66*5a923131SAndroid Build Coastguard Worker kUnresolvedHostRecovered = 97, 67*5a923131SAndroid Build Coastguard Worker // This error is reported when libcurl returns CURLE_COULDNT_RESOLVE_HOST. 68*5a923131SAndroid Build Coastguard Worker kUnresolvedHostError = 98, 69*5a923131SAndroid Build Coastguard Worker // This error is reported when libcurl has an internal error that 70*5a923131SAndroid Build Coastguard Worker // update_engine can't recover from. 71*5a923131SAndroid Build Coastguard Worker kInternalLibCurlError = 99, 72*5a923131SAndroid Build Coastguard Worker 73*5a923131SAndroid Build Coastguard Worker // This error code is used to convey that malformed input was given 74*5a923131SAndroid Build Coastguard Worker // to the utils::GetDownloadErrorCode() function. This should never 75*5a923131SAndroid Build Coastguard Worker // happen but if it does it's because of an internal update_engine 76*5a923131SAndroid Build Coastguard Worker // error and we're interested in knowing this. 77*5a923131SAndroid Build Coastguard Worker kInputMalformed = 100, 78*5a923131SAndroid Build Coastguard Worker 79*5a923131SAndroid Build Coastguard Worker // Bucket for capturing HTTP status codes not in the 200-599 80*5a923131SAndroid Build Coastguard Worker // range. This should never happen in practice but if it does we 81*5a923131SAndroid Build Coastguard Worker // want to know. 82*5a923131SAndroid Build Coastguard Worker kHttpStatusOther = 101, 83*5a923131SAndroid Build Coastguard Worker 84*5a923131SAndroid Build Coastguard Worker // Above 200 and below 600, the value is the HTTP status code. 85*5a923131SAndroid Build Coastguard Worker kHttpStatus200 = 200, 86*5a923131SAndroid Build Coastguard Worker 87*5a923131SAndroid Build Coastguard Worker kNumConstants = 600, 88*5a923131SAndroid Build Coastguard Worker 89*5a923131SAndroid Build Coastguard Worker kUnset = -1 90*5a923131SAndroid Build Coastguard Worker }; 91*5a923131SAndroid Build Coastguard Worker 92*5a923131SAndroid Build Coastguard Worker // Possible ways an update attempt can end. 93*5a923131SAndroid Build Coastguard Worker // 94*5a923131SAndroid Build Coastguard Worker // This is used in the UpdateEngine.Attempt.Result histogram. 95*5a923131SAndroid Build Coastguard Worker enum class AttemptResult { 96*5a923131SAndroid Build Coastguard Worker kUpdateSucceeded, // The update succeeded. 97*5a923131SAndroid Build Coastguard Worker kInternalError, // An internal error occurred. 98*5a923131SAndroid Build Coastguard Worker kPayloadDownloadError, // Failure while downloading payload. 99*5a923131SAndroid Build Coastguard Worker kMetadataMalformed, // Metadata was malformed. 100*5a923131SAndroid Build Coastguard Worker kOperationMalformed, // An operation was malformed. 101*5a923131SAndroid Build Coastguard Worker kOperationExecutionError, // An operation failed to execute. 102*5a923131SAndroid Build Coastguard Worker kMetadataVerificationFailed, // Metadata verification failed. 103*5a923131SAndroid Build Coastguard Worker kPayloadVerificationFailed, // Payload verification failed. 104*5a923131SAndroid Build Coastguard Worker kVerificationFailed, // Root or Kernel partition verification failed. 105*5a923131SAndroid Build Coastguard Worker kPostInstallFailed, // The postinstall step failed. 106*5a923131SAndroid Build Coastguard Worker kAbnormalTermination, // The attempt ended abnormally. 107*5a923131SAndroid Build Coastguard Worker kUpdateCanceled, // Update canceled by the user. 108*5a923131SAndroid Build Coastguard Worker kUpdateSucceededNotActive, // Update succeeded but the new slot is not 109*5a923131SAndroid Build Coastguard Worker // active. 110*5a923131SAndroid Build Coastguard Worker kUpdateSkipped, // Current update skipped. 111*5a923131SAndroid Build Coastguard Worker kNumConstants, 112*5a923131SAndroid Build Coastguard Worker 113*5a923131SAndroid Build Coastguard Worker kUnset = -1 114*5a923131SAndroid Build Coastguard Worker }; 115*5a923131SAndroid Build Coastguard Worker 116*5a923131SAndroid Build Coastguard Worker // Possible ways the device is connected to the Internet. 117*5a923131SAndroid Build Coastguard Worker // 118*5a923131SAndroid Build Coastguard Worker // This is used in the UpdateEngine.Attempt.ConnectionType histogram. 119*5a923131SAndroid Build Coastguard Worker enum class ConnectionType { 120*5a923131SAndroid Build Coastguard Worker kUnknown = 0, // Unknown. 121*5a923131SAndroid Build Coastguard Worker kEthernet = 1, // Ethernet. 122*5a923131SAndroid Build Coastguard Worker kWifi = 2, // Wireless. 123*5a923131SAndroid Build Coastguard Worker kCellular = 5, // Cellular. 124*5a923131SAndroid Build Coastguard Worker kTetheredEthernet = 6, // Tethered (Ethernet). 125*5a923131SAndroid Build Coastguard Worker kTetheredWifi = 7, // Tethered (Wifi). 126*5a923131SAndroid Build Coastguard Worker kDisconnected = 8, // Disconnected. 127*5a923131SAndroid Build Coastguard Worker // deprecated: kWimax = 3, 128*5a923131SAndroid Build Coastguard Worker // deprecated: kBluetooth = 4, 129*5a923131SAndroid Build Coastguard Worker 130*5a923131SAndroid Build Coastguard Worker kNumConstants, 131*5a923131SAndroid Build Coastguard Worker kUnset = -1 132*5a923131SAndroid Build Coastguard Worker }; 133*5a923131SAndroid Build Coastguard Worker 134*5a923131SAndroid Build Coastguard Worker // Possible ways a rollback can end. 135*5a923131SAndroid Build Coastguard Worker // 136*5a923131SAndroid Build Coastguard Worker // This is used in the UpdateEngine.Rollback histogram. 137*5a923131SAndroid Build Coastguard Worker enum class RollbackResult { 138*5a923131SAndroid Build Coastguard Worker kFailed, 139*5a923131SAndroid Build Coastguard Worker kSuccess, 140*5a923131SAndroid Build Coastguard Worker 141*5a923131SAndroid Build Coastguard Worker kNumConstants 142*5a923131SAndroid Build Coastguard Worker }; 143*5a923131SAndroid Build Coastguard Worker 144*5a923131SAndroid Build Coastguard Worker constexpr auto kMetricFlushInterval = std::chrono::seconds(3); 145*5a923131SAndroid Build Coastguard Worker 146*5a923131SAndroid Build Coastguard Worker } // namespace metrics 147*5a923131SAndroid Build Coastguard Worker 148*5a923131SAndroid Build Coastguard Worker } // namespace chromeos_update_engine 149*5a923131SAndroid Build Coastguard Worker 150*5a923131SAndroid Build Coastguard Worker #endif // UPDATE_ENGINE_COMMON_METRICS_CONSTANTS_H_ 151