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