xref: /aosp_15_r20/system/update_engine/common/metrics_constants.h (revision 5a9231315b4521097b8dc3750bc806fcafe0c72f)
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