blob: 457346df6a752cee3348bdbb1b71ae264e4e4d67 [file] [log] [blame]
Thieu Le3426c8f2012-01-11 17:35:11 -08001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Thieu Le48e6d6d2011-12-06 00:40:27 +00002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Wade Guthrie60a37062013-04-02 11:39:09 -07005#ifndef SHILL_METRICS_H_
6#define SHILL_METRICS_H_
Thieu Le48e6d6d2011-12-06 00:40:27 +00007
8#include <list>
9
Thieu Le48e6d6d2011-12-06 00:40:27 +000010#include <base/memory/scoped_vector.h>
11#include <metrics/metrics_library.h>
12#include <metrics/timer.h>
13
Thieu Le6c1e3bb2013-02-06 15:20:35 -080014#include "shill/event_dispatcher.h"
Wade Guthried4977f22012-08-22 12:37:54 -070015#include "shill/ieee80211.h"
Thieu Le85e050b2012-03-13 15:04:38 -070016#include "shill/portal_detector.h"
Thieu Leb84ba342012-03-02 15:15:19 -080017#include "shill/power_manager.h"
Thieu Le48e6d6d2011-12-06 00:40:27 +000018#include "shill/refptr_types.h"
19#include "shill/service.h"
20
21namespace shill {
22
Gaurav Shah6d2c72d2012-10-16 16:30:44 -070023class WiFiMainTest;
Thieu Le48e6d6d2011-12-06 00:40:27 +000024class WiFiService;
25
26class Metrics {
27 public:
28 enum WiFiChannel {
29 kWiFiChannelUndef = 0,
30 kWiFiChannel2412 = 1,
31 kWiFiChannel2417 = 2,
32 kWiFiChannel2422 = 3,
33 kWiFiChannel2427 = 4,
34 kWiFiChannel2432 = 5,
35 kWiFiChannel2437 = 6,
36 kWiFiChannel2442 = 7,
37 kWiFiChannel2447 = 8,
38 kWiFiChannel2452 = 9,
39 kWiFiChannel2457 = 10,
40 kWiFiChannel2462 = 11,
41 kWiFiChannel2467 = 12,
42 kWiFiChannel2472 = 13,
43 kWiFiChannel2484 = 14,
44
45 kWiFiChannel5180 = 15,
46 kWiFiChannel5200 = 16,
47 kWiFiChannel5220 = 17,
48 kWiFiChannel5240 = 18,
49 kWiFiChannel5260 = 19,
50 kWiFiChannel5280 = 20,
51 kWiFiChannel5300 = 21,
52 kWiFiChannel5320 = 22,
53
54 kWiFiChannel5500 = 23,
55 kWiFiChannel5520 = 24,
56 kWiFiChannel5540 = 25,
57 kWiFiChannel5560 = 26,
58 kWiFiChannel5580 = 27,
59 kWiFiChannel5600 = 28,
60 kWiFiChannel5620 = 29,
61 kWiFiChannel5640 = 30,
62 kWiFiChannel5660 = 31,
63 kWiFiChannel5680 = 32,
64 kWiFiChannel5700 = 33,
65
66 kWiFiChannel5745 = 34,
67 kWiFiChannel5765 = 35,
68 kWiFiChannel5785 = 36,
69 kWiFiChannel5805 = 37,
70 kWiFiChannel5825 = 38,
71
72 kWiFiChannel5170 = 39,
73 kWiFiChannel5190 = 40,
74 kWiFiChannel5210 = 41,
75 kWiFiChannel5230 = 42,
76
77 /* NB: ignore old 11b bands 2312..2372 and 2512..2532 */
78 /* NB: ignore regulated bands 4920..4980 and 5020..5160 */
79 kWiFiChannelMax
80 };
81
Thieu Lead1ec2c2012-01-05 23:39:48 +000082 enum WiFiNetworkPhyMode {
83 kWiFiNetworkPhyModeUndef = 0, // Unknown/undefined
84 kWiFiNetworkPhyMode11a = 1, // 802.11a
85 kWiFiNetworkPhyMode11b = 2, // 802.11b
86 kWiFiNetworkPhyMode11g = 3, // 802.11g
87 kWiFiNetworkPhyMode11n = 4, // 802.11n
88 kWiFiNetworkPhyModeHalf = 5, // PSB Half-width
89 kWiFiNetworkPhyModeQuarter = 6, // PSB Quarter-width
90 kWiFiNetworkPhyModeTurbo = 7, // Atheros Turbo mode
91
92 kWiFiNetworkPhyModeMax
93 };
94
Paul Stewart21f40962013-03-01 14:27:28 -080095 enum EapOuterProtocol {
96 kEapOuterProtocolUnknown = 0,
97 kEapOuterProtocolLeap = 1,
98 kEapOuterProtocolPeap = 2,
99 kEapOuterProtocolTls = 3,
100 kEapOuterProtocolTtls = 4,
101
102 kEapOuterProtocolMax
103 };
104
105 enum EapInnerProtocol {
106 kEapInnerProtocolUnknown = 0,
107 kEapInnerProtocolNone = 1,
108 kEapInnerProtocolPeapMd5 = 2,
109 kEapInnerProtocolPeapMschapv2 = 3,
110 kEapInnerProtocolTtlsEapMd5 = 4,
111 kEapInnerProtocolTtlsEapMschapv2 = 5,
112 kEapInnerProtocolTtlsMschapv2 = 6,
113 kEapInnerProtocolTtlsMschap = 7,
114 kEapInnerProtocolTtlsPap = 8,
115 kEapInnerProtocolTtlsChap = 9,
116
117 kEapInnerProtocolMax
118 };
119
Thieu Lead1ec2c2012-01-05 23:39:48 +0000120 enum WiFiSecurity {
121 kWiFiSecurityUnknown = 0,
122 kWiFiSecurityNone = 1,
123 kWiFiSecurityWep = 2,
124 kWiFiSecurityWpa = 3,
125 kWiFiSecurityRsn = 4,
126 kWiFiSecurity8021x = 5,
127 kWiFiSecurityPsk = 6,
128
129 kWiFiSecurityMax
130 };
131
Paul Stewarte4cedde2013-07-17 08:56:44 -0700132 enum WiFiApMode {
133 kWiFiApModeUnknown = 0,
134 kWiFiApModeManaged = 1,
135 kWiFiApModeAdHoc = 2,
136
137 kWiFiApModeMax
138 };
139
Thieu Le85e050b2012-03-13 15:04:38 -0700140 enum PortalResult {
141 kPortalResultSuccess = 0,
142 kPortalResultDNSFailure = 1,
143 kPortalResultDNSTimeout = 2,
144 kPortalResultConnectionFailure = 3,
145 kPortalResultConnectionTimeout = 4,
146 kPortalResultHTTPFailure = 5,
147 kPortalResultHTTPTimeout = 6,
148 kPortalResultContentFailure = 7,
149 kPortalResultContentTimeout = 8,
150 kPortalResultUnknown = 9,
151
152 kPortalResultMax
153 };
154
Paul Stewartff845fc2012-08-07 07:28:44 -0700155 enum LinkMonitorFailure {
156 kLinkMonitorMacAddressNotFound = 0,
157 kLinkMonitorClientStartFailure = 1,
158 kLinkMonitorTransmitFailure = 2,
159 kLinkMonitorFailureThresholdReached = 3,
160
161 kLinkMonitorFailureMax
162 };
163
Wade Guthried4977f22012-08-22 12:37:54 -0700164 enum WiFiStatusType {
165 kStatusCodeTypeByAp,
166 kStatusCodeTypeByClient,
167 kStatusCodeTypeByUser,
168 kStatusCodeTypeConsideredDead,
169 kStatusCodeTypeMax
170 };
171
172 enum WiFiDisconnectByWhom {
173 kDisconnectedByAp,
174 kDisconnectedNotByAp
175 };
176
Wade Guthrieb9e0ee72013-05-31 09:23:30 -0700177 enum WiFiScanResult {
178 kScanResultProgressiveConnected,
179 kScanResultProgressiveErrorAndFullFoundNothing,
180 kScanResultProgressiveErrorButFullConnected,
181 kScanResultProgressiveAndFullFoundNothing,
182 kScanResultProgressiveAndFullConnected,
183 kScanResultFullScanFoundNothing,
184 kScanResultFullScanConnected,
185 kScanResultInternalError,
186 kScanResultMax
187 };
188
Paul Stewart85aea152013-01-22 09:31:56 -0800189 enum ServiceFixupProfileType {
190 kMetricServiceFixupDefaultProfile,
191 kMetricServiceFixupUserProfile,
192 kMetricServiceFixupMax
193 };
194
Arman Uguray6d528f12012-09-13 13:44:55 -0700195 enum TerminationActionResult {
Arman Ugurayab22c162012-10-08 19:08:38 -0700196 kTerminationActionResultSuccess,
197 kTerminationActionResultFailure,
Arman Uguray6d528f12012-09-13 13:44:55 -0700198 kTerminationActionResultMax
199 };
200
Arman Ugurayab22c162012-10-08 19:08:38 -0700201 enum TerminationActionReason {
202 kTerminationActionReasonSuspend,
203 kTerminationActionReasonTerminate
204 };
205
Prathmesh Prabhu08757aa2013-05-15 17:17:33 -0700206 enum Cellular3GPPRegistrationDelayedDrop {
207 kCellular3GPPRegistrationDelayedDropPosted = 0,
208 kCellular3GPPRegistrationDelayedDropCanceled = 1,
209 kCellular3GPPRegistrationDelayedDropMax
210 };
211
Thieu Le26fc01b2013-01-28 12:08:48 -0800212 enum CellularDropTechnology {
213 kCellularDropTechnology1Xrtt = 0,
214 kCellularDropTechnologyEdge = 1,
215 kCellularDropTechnologyEvdo = 2,
216 kCellularDropTechnologyGprs = 3,
217 kCellularDropTechnologyGsm = 4,
218 kCellularDropTechnologyHspa = 5,
219 kCellularDropTechnologyHspaPlus = 6,
220 kCellularDropTechnologyLte = 7,
221 kCellularDropTechnologyUmts = 8,
222 kCellularDropTechnologyUnknown = 9,
223 kCellularDropTechnologyMax
224 };
225
Thieu Le91fccf62013-04-22 15:23:16 -0700226 enum CellularOutOfCreditsReason {
227 kCellularOutOfCreditsReasonConnectDisconnectLoop = 0,
228 kCellularOutOfCreditsReasonTxCongested = 1,
229 kCellularOutOfCreditsReasonElongatedTimeWait = 2,
230 kCellularOutOfCreditsReasonMax
231 };
232
Thieu Le5133b712013-02-19 14:47:21 -0800233 enum CorruptedProfile {
234 kCorruptedProfile = 1,
235 kCorruptedProfileMax
236 };
237
Paul Stewart91a43cb2013-03-02 21:34:15 -0800238 enum VpnDriver {
239 kVpnDriverOpenVpn = 0,
240 kVpnDriverL2tpIpsec = 1,
241 kVpnDriverMax
242 };
243
244 enum VpnRemoteAuthenticationType {
245 kVpnRemoteAuthenticationTypeOpenVpnDefault = 0,
246 kVpnRemoteAuthenticationTypeOpenVpnCertificate = 1,
247 kVpnRemoteAuthenticationTypeL2tpIpsecDefault = 2,
248 kVpnRemoteAuthenticationTypeL2tpIpsecCertificate = 3,
249 kVpnRemoteAuthenticationTypeL2tpIpsecPsk = 4,
250 kVpnRemoteAuthenticationTypeMax
251 };
252
253 enum VpnUserAuthenticationType {
254 kVpnUserAuthenticationTypeOpenVpnNone = 0,
255 kVpnUserAuthenticationTypeOpenVpnCertificate = 1,
256 kVpnUserAuthenticationTypeOpenVpnUsernamePassword = 2,
257 kVpnUserAuthenticationTypeOpenVpnUsernamePasswordOtp = 3,
Paul Stewartb5768232014-02-27 07:21:34 -0800258 kVpnUserAuthenticationTypeOpenVpnUsernameToken = 7,
Paul Stewart91a43cb2013-03-02 21:34:15 -0800259 kVpnUserAuthenticationTypeL2tpIpsecNone = 4,
260 kVpnUserAuthenticationTypeL2tpIpsecCertificate = 5,
261 kVpnUserAuthenticationTypeL2tpIpsecUsernamePassword = 6,
262 kVpnUserAuthenticationTypeMax
263 };
264
Peter Qiue783f1c2014-05-02 11:42:33 -0700265 enum DHCPOptionFailureTechnology {
266 kDHCPOptionFailureTechnologyCellular = 0,
267 kDHCPOptionFailureTechnologyEthernet,
268 kDHCPOptionFailureTechnologyEthernetEap,
269 kDHCPOptionFailureTechnologyWifi,
270 kDHCPOptionFailureTechnologyWiMax,
271 kDHCPOptionFailureTechnologyVPN,
272 kDHCPOptionFailureTechnologyUnknown,
273 kDHCPOptionFailureTechnologyMax
274 };
275
276 enum UserInitiatedEvent {
277 kUserInitiatedEventWifiScan = 0,
278 kUserInitiatedEventMax
Paul Stewartdded0072013-10-24 12:38:54 -0700279 };
280
Peter Qiudc4e0992014-05-01 10:02:52 -0700281 enum UserInitiatedConnectionResult {
282 kUserInitiatedConnectionResultSuccess = 0,
283 kUserInitiatedConnectionResultFailure = 1,
284 kUserInitiatedConnectionResultAborted = 2,
285 kUserInitiatedConnectionResultMax
286 };
287
Peter Qiub9256f32014-05-09 15:27:29 -0700288 enum DNSTestResult {
Peter Qiuf18e7712014-05-20 09:59:46 -0700289 kFallbackDNSTestResultSuccess = 0,
290 kFallbackDNSTestResultFailure,
291 kFallbackDNSTestResultMax
Peter Qiub9256f32014-05-09 15:27:29 -0700292 };
293
Peter Qiudc335f82014-05-15 10:33:17 -0700294 // Network problem detected by traffic monitor.
295 enum NetworkProblem {
296 kNetworkProblemCongestedTCPTxQueue = 0,
297 kNetworkProblemDNSFailure,
298 kNetworkProblemMax
299 };
300
mukesh agrawal132e96f2014-04-24 11:49:42 -0700301 static const char kMetricDisconnectSuffix[];
Thieu Le67370f62012-02-14 23:01:42 +0000302 static const int kMetricDisconnectMax;
303 static const int kMetricDisconnectMin;
304 static const int kMetricDisconnectNumBuckets;
mukesh agrawal132e96f2014-04-24 11:49:42 -0700305 static const char kMetricSignalAtDisconnectSuffix[];
Wade Guthrie9ec08062013-09-25 15:22:24 -0700306 static const int kMetricSignalAtDisconnectMin;
307 static const int kMetricSignalAtDisconnectMax;
308 static const int kMetricSignalAtDisconnectNumBuckets;
mukesh agrawal132e96f2014-04-24 11:49:42 -0700309 static const char kMetricNetworkApModeSuffix[];
310 static const char kMetricNetworkChannelSuffix[];
Thieu Le48e6d6d2011-12-06 00:40:27 +0000311 static const int kMetricNetworkChannelMax;
mukesh agrawal132e96f2014-04-24 11:49:42 -0700312 static const char kMetricNetworkEapInnerProtocolSuffix[];
Paul Stewart21f40962013-03-01 14:27:28 -0800313 static const int kMetricNetworkEapInnerProtocolMax;
mukesh agrawal132e96f2014-04-24 11:49:42 -0700314 static const char kMetricNetworkEapOuterProtocolSuffix[];
Paul Stewart21f40962013-03-01 14:27:28 -0800315 static const int kMetricNetworkEapOuterProtocolMax;
mukesh agrawal132e96f2014-04-24 11:49:42 -0700316 static const char kMetricNetworkPhyModeSuffix[];
Thieu Lead1ec2c2012-01-05 23:39:48 +0000317 static const int kMetricNetworkPhyModeMax;
mukesh agrawal132e96f2014-04-24 11:49:42 -0700318 static const char kMetricNetworkSecuritySuffix[];
Thieu Lead1ec2c2012-01-05 23:39:48 +0000319 static const int kMetricNetworkSecurityMax;
Thieu Le48e6d6d2011-12-06 00:40:27 +0000320 static const char kMetricNetworkServiceErrors[];
321 static const int kMetricNetworkServiceErrorsMax;
mukesh agrawal132e96f2014-04-24 11:49:42 -0700322 static const char kMetricNetworkSignalStrengthSuffix[];
Paul Stewart23b393a2012-09-25 21:21:06 -0700323 static const int kMetricNetworkSignalStrengthMin;
324 static const int kMetricNetworkSignalStrengthMax;
325 static const int kMetricNetworkSignalStrengthNumBuckets;
mukesh agrawal132e96f2014-04-24 11:49:42 -0700326 static const char kMetricTimeOnlineSecondsSuffix[];
Thieu Lea20cbc22012-01-09 22:01:43 +0000327 static const int kMetricTimeOnlineSecondsMax;
328 static const int kMetricTimeOnlineSecondsMin;
329 static const int kMetricTimeOnlineSecondsNumBuckets;
mukesh agrawal132e96f2014-04-24 11:49:42 -0700330 static const char kMetricTimeResumeToReadyMillisecondsSuffix[];
331 static const char kMetricTimeToConfigMillisecondsSuffix[];
332 static const char kMetricTimeToConnectMillisecondsSuffix[];
Thieu Lecdb5a212013-01-25 11:17:18 -0800333 static const int kMetricTimeToConnectMillisecondsMax;
334 static const int kMetricTimeToConnectMillisecondsMin;
335 static const int kMetricTimeToConnectMillisecondsNumBuckets;
mukesh agrawal132e96f2014-04-24 11:49:42 -0700336 static const char kMetricTimeToScanAndConnectMillisecondsSuffix[];
Thieu Lea20cbc22012-01-09 22:01:43 +0000337 static const char kMetricTimeToDropSeconds[];
338 static const int kMetricTimeToDropSecondsMax;
339 static const int kMetricTimeToDropSecondsMin;
mukesh agrawal132e96f2014-04-24 11:49:42 -0700340 static const char kMetricTimeToDisableMillisecondsSuffix[];
Thieu Lea2519bf2013-01-23 16:51:54 -0800341 static const int kMetricTimeToDisableMillisecondsMax;
342 static const int kMetricTimeToDisableMillisecondsMin;
343 static const int kMetricTimeToDisableMillisecondsNumBuckets;
mukesh agrawal132e96f2014-04-24 11:49:42 -0700344 static const char kMetricTimeToEnableMillisecondsSuffix[];
Thieu Lece4483e2013-01-23 15:12:03 -0800345 static const int kMetricTimeToEnableMillisecondsMax;
346 static const int kMetricTimeToEnableMillisecondsMin;
347 static const int kMetricTimeToEnableMillisecondsNumBuckets;
mukesh agrawal132e96f2014-04-24 11:49:42 -0700348 static const char kMetricTimeToInitializeMillisecondsSuffix[];
Thieu Lec8078a62013-01-22 18:01:12 -0800349 static const int kMetricTimeToInitializeMillisecondsMax;
Thieu Lece4483e2013-01-23 15:12:03 -0800350 static const int kMetricTimeToInitializeMillisecondsMin;
Thieu Lec8078a62013-01-22 18:01:12 -0800351 static const int kMetricTimeToInitializeMillisecondsNumBuckets;
mukesh agrawal132e96f2014-04-24 11:49:42 -0700352 static const char kMetricTimeToJoinMillisecondsSuffix[];
353 static const char kMetricTimeToOnlineMillisecondsSuffix[];
354 static const char kMetricTimeToPortalMillisecondsSuffix[];
355 static const char kMetricTimeToScanMillisecondsSuffix[];
Thieu Le18c11072013-01-28 17:21:37 -0800356 static const int kMetricTimeToScanMillisecondsMax;
357 static const int kMetricTimeToScanMillisecondsMin;
358 static const int kMetricTimeToScanMillisecondsNumBuckets;
Thieu Lea20cbc22012-01-09 22:01:43 +0000359 static const int kTimerHistogramMillisecondsMax;
360 static const int kTimerHistogramMillisecondsMin;
Thieu Le48e6d6d2011-12-06 00:40:27 +0000361 static const int kTimerHistogramNumBuckets;
362
Thieu Le85e050b2012-03-13 15:04:38 -0700363 // The number of portal detections attempted for each pass.
364 // This includes both failure/timeout attempts and successful attempt
365 // (if any).
mukesh agrawal132e96f2014-04-24 11:49:42 -0700366 static const char kMetricPortalAttemptsSuffix[];
Thieu Le85e050b2012-03-13 15:04:38 -0700367 static const int kMetricPortalAttemptsMax;
368 static const int kMetricPortalAttemptsMin;
369 static const int kMetricPortalAttemptsNumBuckets;
370
371 // The total number of portal detections attempted between the Connected
372 // state and the Online state. This includes both failure/timeout attempts
373 // and the final successful attempt.
mukesh agrawal132e96f2014-04-24 11:49:42 -0700374 static const char kMetricPortalAttemptsToOnlineSuffix[];
Thieu Le85e050b2012-03-13 15:04:38 -0700375 static const int kMetricPortalAttemptsToOnlineMax;
376 static const int kMetricPortalAttemptsToOnlineMin;
377 static const int kMetricPortalAttemptsToOnlineNumBuckets;
378
379 // The result of the portal detection.
mukesh agrawal132e96f2014-04-24 11:49:42 -0700380 static const char kMetricPortalResultSuffix[];
Thieu Le85e050b2012-03-13 15:04:38 -0700381
Wade Guthrie60a37062013-04-02 11:39:09 -0700382 // Wifi connection frequencies.
383 static const char kMetricFrequenciesConnectedEver[];
384 static const int kMetricFrequenciesConnectedMax;
385 static const int kMetricFrequenciesConnectedMin;
386 static const int kMetricFrequenciesConnectedNumBuckets;
387
Wade Guthrieb9e0ee72013-05-31 09:23:30 -0700388 static const char kMetricScanResult[];
Wade Guthrief22681f2013-05-31 11:46:31 -0700389 static const char kMetricWiFiScanTimeInEbusyMilliseconds[];
390
Thieu Leb84ba342012-03-02 15:15:19 -0800391 static const char kMetricPowerManagerKey[];
392
Paul Stewartff845fc2012-08-07 07:28:44 -0700393 // LinkMonitor statistics.
mukesh agrawal132e96f2014-04-24 11:49:42 -0700394 static const char kMetricLinkMonitorFailureSuffix[];
395 static const char kMetricLinkMonitorResponseTimeSampleSuffix[];
Paul Stewartf1961f82012-09-11 20:45:39 -0700396 static const int kMetricLinkMonitorResponseTimeSampleMin;
397 static const int kMetricLinkMonitorResponseTimeSampleMax;
Paul Stewartff845fc2012-08-07 07:28:44 -0700398 static const int kMetricLinkMonitorResponseTimeSampleNumBuckets;
mukesh agrawal132e96f2014-04-24 11:49:42 -0700399 static const char kMetricLinkMonitorSecondsToFailureSuffix[];
Paul Stewartf1961f82012-09-11 20:45:39 -0700400 static const int kMetricLinkMonitorSecondsToFailureMin;
401 static const int kMetricLinkMonitorSecondsToFailureMax;
Paul Stewart0443aa52012-08-09 10:43:50 -0700402 static const int kMetricLinkMonitorSecondsToFailureNumBuckets;
mukesh agrawal132e96f2014-04-24 11:49:42 -0700403 static const char kMetricLinkMonitorBroadcastErrorsAtFailureSuffix[];
404 static const char kMetricLinkMonitorUnicastErrorsAtFailureSuffix[];
Paul Stewartf1961f82012-09-11 20:45:39 -0700405 static const int kMetricLinkMonitorErrorCountMin;
406 static const int kMetricLinkMonitorErrorCountMax;
Paul Stewart0443aa52012-08-09 10:43:50 -0700407 static const int kMetricLinkMonitorErrorCountNumBuckets;
Paul Stewartff845fc2012-08-07 07:28:44 -0700408
Wade Guthried4977f22012-08-22 12:37:54 -0700409 static const char kMetricLinkClientDisconnectReason[];
410 static const char kMetricLinkApDisconnectReason[];
411 static const char kMetricLinkClientDisconnectType[];
412 static const char kMetricLinkApDisconnectType[];
413
Arman Uguray6d528f12012-09-13 13:44:55 -0700414 // Shill termination action statistics.
Arman Ugurayab22c162012-10-08 19:08:38 -0700415 static const char kMetricTerminationActionTimeOnTerminate[];
416 static const char kMetricTerminationActionResultOnTerminate[];
417 static const char kMetricTerminationActionTimeOnSuspend[];
418 static const char kMetricTerminationActionResultOnSuspend[];
419 static const int kMetricTerminationActionTimeMillisecondsMax;
420 static const int kMetricTerminationActionTimeMillisecondsMin;
Arman Uguray6d528f12012-09-13 13:44:55 -0700421
Paul Stewart85aea152013-01-22 09:31:56 -0800422 // WiFiService Entry Fixup.
mukesh agrawal132e96f2014-04-24 11:49:42 -0700423 static const char kMetricServiceFixupEntriesSuffix[];
Paul Stewart85aea152013-01-22 09:31:56 -0800424
Thieu Le26fc01b2013-01-28 12:08:48 -0800425 // Cellular specific statistics.
Prathmesh Prabhu08757aa2013-05-15 17:17:33 -0700426 static const char kMetricCellular3GPPRegistrationDelayedDrop[];
Thieu Le7cf36b02013-01-30 17:15:56 -0800427 static const char kMetricCellularAutoConnectTries[];
428 static const int kMetricCellularAutoConnectTriesMax;
429 static const int kMetricCellularAutoConnectTriesMin;
430 static const int kMetricCellularAutoConnectTriesNumBuckets;
431 static const char kMetricCellularAutoConnectTotalTime[];
432 static const int kMetricCellularAutoConnectTotalTimeMax;
433 static const int kMetricCellularAutoConnectTotalTimeMin;
434 static const int kMetricCellularAutoConnectTotalTimeNumBuckets;
Thieu Le91fccf62013-04-22 15:23:16 -0700435 static const char kMetricCellularDrop[];
436 static const char kMetricCellularDropsPerHour[];
437 static const int kMetricCellularDropsPerHourMax;
438 static const int kMetricCellularDropsPerHourMin;
439 static const int kMetricCellularDropsPerHourNumBuckets;
440 static const char kMetricCellularFailureReason[];
441 static const char kMetricCellularOutOfCreditsReason[];
442 static const char kMetricCellularSignalStrengthBeforeDrop[];
443 static const int kMetricCellularSignalStrengthBeforeDropMax;
444 static const int kMetricCellularSignalStrengthBeforeDropMin;
445 static const int kMetricCellularSignalStrengthBeforeDropNumBuckets;
Thieu Le26fc01b2013-01-28 12:08:48 -0800446
Thieu Le5133b712013-02-19 14:47:21 -0800447 // Profile statistics.
448 static const char kMetricCorruptedProfile[];
449
Paul Stewart91a43cb2013-03-02 21:34:15 -0800450 // VPN connection statistics.
451 static const char kMetricVpnDriver[];
452 static const int kMetricVpnDriverMax;
453 static const char kMetricVpnRemoteAuthenticationType[];
454 static const int kMetricVpnRemoteAuthenticationTypeMax;
455 static const char kMetricVpnUserAuthenticationType[];
456 static const int kMetricVpnUserAuthenticationTypeMax;
457
Paul Stewartdded0072013-10-24 12:38:54 -0700458 // We have detected that a DHCP server can only deliver leases if
459 // we reduce the number of options that we request of it. This
460 // implies an infrastructure issue.
Peter Qiue783f1c2014-05-02 11:42:33 -0700461 static const char kMetricDHCPOptionFailureDetected[];
Paul Stewartdded0072013-10-24 12:38:54 -0700462
Paul Stewart1f916e42013-12-23 09:52:54 -0800463 // The length in seconds of a lease that has expired while the DHCP
464 // client was attempting to renew the lease..
mukesh agrawal132e96f2014-04-24 11:49:42 -0700465 static const char kMetricExpiredLeaseLengthSecondsSuffix[];
Paul Stewart1f916e42013-12-23 09:52:54 -0800466 static const int kMetricExpiredLeaseLengthSecondsMax;
467 static const int kMetricExpiredLeaseLengthSecondsMin;
468 static const int kMetricExpiredLeaseLengthSecondsNumBuckets;
469
Peter Qiu574996a2014-04-04 10:55:47 -0700470 // Number of wifi services available when auto-connect is initiated.
471 static const char kMetricWifiAutoConnectableServices[];
472 static const int kMetricWifiAutoConnectableServicesMax;
473 static const int kMetricWifiAutoConnectableServicesMin;
474 static const int kMetricWifiAutoConnectableServicesNumBuckets;
475
476 // Number of BSSes available for a wifi service when we attempt to connect
477 // to that service.
478 static const char kMetricWifiAvailableBSSes[];
479 static const int kMetricWifiAvailableBSSesMax;
480 static const int kMetricWifiAvailableBSSesMin;
481 static const int kMetricWifiAvailableBSSesNumBuckets;
482
Peter Qiu39d4af02014-04-14 12:24:01 -0700483 // Number of services associated with currently connected network.
484 static const char kMetricServicesOnSameNetwork[];
485 static const int kMetricServicesOnSameNetworkMax;
486 static const int kMetricServicesOnSameNetworkMin;
487 static const int kMetricServicesOnSameNetworkNumBuckets;
488
Peter Qiue783f1c2014-05-02 11:42:33 -0700489 // Metric for user-initiated events.
490 static const char kMetricUserInitiatedEvents[];
491
Peter Qiu8e430582014-04-30 14:12:37 -0700492 // Wifi TX bitrate in Mbps.
493 static const char kMetricWifiTxBitrate[];
494 static const int kMetricWifiTxBitrateMax;
495 static const int kMetricWifiTxBitrateMin;
496 static const int kMetricWifiTxBitrateNumBuckets;
497
Peter Qiudc4e0992014-05-01 10:02:52 -0700498 // User-initiated wifi connection attempt result.
499 static const char kMetricWifiUserInitiatedConnectionResult[];
500
Peter Qiub9256f32014-05-09 15:27:29 -0700501 // DNS test result.
Peter Qiuf18e7712014-05-20 09:59:46 -0700502 static const char kMetricFallbackDNSTestResultSuffix[];
Peter Qiub9256f32014-05-09 15:27:29 -0700503
Peter Qiudc335f82014-05-15 10:33:17 -0700504 // Network problem detected by traffic monitor
505 static const char kMetricNetworkProblemDetectedSuffix[];
506
Thieu Le6c1e3bb2013-02-06 15:20:35 -0800507 explicit Metrics(EventDispatcher *dispatcher);
Thieu Le48e6d6d2011-12-06 00:40:27 +0000508 virtual ~Metrics();
509
Thieu Le48e6d6d2011-12-06 00:40:27 +0000510 // Converts the WiFi frequency into the associated UMA channel enumerator.
511 static WiFiChannel WiFiFrequencyToChannel(uint16 frequency);
512
Thieu Lead1ec2c2012-01-05 23:39:48 +0000513 // Converts a flimflam security string into its UMA security enumerator.
514 static WiFiSecurity WiFiSecurityStringToEnum(const std::string &security);
515
Paul Stewarte4cedde2013-07-17 08:56:44 -0700516 // Converts a flimflam AP mode string into its UMA AP mode enumerator.
517 static WiFiApMode WiFiApModeStringToEnum(const std::string &ap_mode);
518
Paul Stewart21f40962013-03-01 14:27:28 -0800519 // Converts a flimflam EAP outer protocol string into its UMA enumerator.
520 static EapOuterProtocol EapOuterProtocolStringToEnum(
521 const std::string &outer);
522
523 // Converts a flimflam EAP inner protocol string into its UMA enumerator.
524 static EapInnerProtocol EapInnerProtocolStringToEnum(
525 const std::string &inner);
526
Thieu Le85e050b2012-03-13 15:04:38 -0700527 // Converts portal detection result to UMA portal result enumerator.
528 static PortalResult PortalDetectionResultToEnum(
529 const PortalDetector::Result &result);
530
Thieu Le6c1e3bb2013-02-06 15:20:35 -0800531 // Starts this object. Call this during initialization.
532 virtual void Start();
533
534 // Stops this object. Call this during cleanup.
535 virtual void Stop();
536
Thieu Le48e6d6d2011-12-06 00:40:27 +0000537 // Registers a service with this object so it can use the timers to track
538 // state transition metrics.
Wade Guthrie7ac610b2013-10-01 17:48:14 -0700539 void RegisterService(const Service &service);
Thieu Le48e6d6d2011-12-06 00:40:27 +0000540
541 // Deregisters the service from this class. All state transition timers
542 // will be removed.
Wade Guthrie7ac610b2013-10-01 17:48:14 -0700543 void DeregisterService(const Service &service);
Thieu Le48e6d6d2011-12-06 00:40:27 +0000544
545 // Tracks the time it takes |service| to go from |start_state| to
546 // |stop_state|. When |stop_state| is reached, the time is sent to UMA.
mukesh agrawal6cfe53f2013-08-13 13:39:01 -0700547 virtual void AddServiceStateTransitionTimer(
Wade Guthrie7ac610b2013-10-01 17:48:14 -0700548 const Service &service, const std::string &histogram_name,
mukesh agrawal6cfe53f2013-08-13 13:39:01 -0700549 Service::ConnectState start_state, Service::ConnectState stop_state);
Thieu Le48e6d6d2011-12-06 00:40:27 +0000550
mukesh agrawal132e96f2014-04-24 11:49:42 -0700551 // Specializes |metric_suffix| for the specified |technology_id|.
552 std::string GetFullMetricName(const char *metric_suffix,
Thieu Le48e6d6d2011-12-06 00:40:27 +0000553 Technology::Identifier technology_id);
554
555 // Notifies this object that the default service has changed.
556 // |service| is the new default service.
Thieu Lea20cbc22012-01-09 22:01:43 +0000557 virtual void NotifyDefaultServiceChanged(const Service *service);
Thieu Le48e6d6d2011-12-06 00:40:27 +0000558
559 // Notifies this object that |service| state has changed.
Wade Guthrie7ac610b2013-10-01 17:48:14 -0700560 virtual void NotifyServiceStateChanged(const Service &service,
Thieu Le48e6d6d2011-12-06 00:40:27 +0000561 Service::ConnectState new_state);
562
Thieu Le67370f62012-02-14 23:01:42 +0000563 // Notifies this object that |service| has been disconnected.
Wade Guthrie7ac610b2013-10-01 17:48:14 -0700564 void NotifyServiceDisconnect(const Service &service);
Thieu Le48e6d6d2011-12-06 00:40:27 +0000565
Wade Guthrie9ec08062013-09-25 15:22:24 -0700566 // Notifies this object of power at disconnect.
567 void NotifySignalAtDisconnect(const Service &service,
568 int16_t signal_strength);
569
Daniel Eratfac09532014-04-17 20:25:59 -0700570 // Notifies this object of the end of a suspend attempt.
571 void NotifySuspendDone();
Thieu Le48e6d6d2011-12-06 00:40:27 +0000572
Arman Ugurayab22c162012-10-08 19:08:38 -0700573 // Notifies this object that termination actions started executing.
574 void NotifyTerminationActionsStarted(TerminationActionReason reason);
575
576 // Notifies this object that termination actions have been completed.
577 // |success| is true, if the termination actions completed successfully.
578 void NotifyTerminationActionsCompleted(
579 TerminationActionReason reason, bool success);
580
Paul Stewartff845fc2012-08-07 07:28:44 -0700581 // Notifies this object of a failure in LinkMonitor.
582 void NotifyLinkMonitorFailure(
Paul Stewart0443aa52012-08-09 10:43:50 -0700583 Technology::Identifier technology,
584 LinkMonitorFailure failure,
Paul Stewartf1961f82012-09-11 20:45:39 -0700585 int seconds_to_failure,
586 int broadcast_error_count,
587 int unicast_error_count);
Paul Stewartff845fc2012-08-07 07:28:44 -0700588
589 // Notifies this object that LinkMonitor has added a response time sample
590 // for |connection| with a value of |response_time_milliseconds|.
591 void NotifyLinkMonitorResponseTimeSampleAdded(
592 Technology::Identifier technology,
Paul Stewartf1961f82012-09-11 20:45:39 -0700593 int response_time_milliseconds);
Paul Stewartff845fc2012-08-07 07:28:44 -0700594
Wade Guthried4977f22012-08-22 12:37:54 -0700595 // Notifies this object of WiFi disconnect.
Wade Guthriec2728962013-07-10 09:32:16 -0700596 virtual void Notify80211Disconnect(WiFiDisconnectByWhom by_whom,
597 IEEE_80211::WiFiReasonCode reason);
Wade Guthried4977f22012-08-22 12:37:54 -0700598
Thieu Lec8078a62013-01-22 18:01:12 -0800599 // Registers a device with this object so the device can use the timers to
600 // track state transition metrics.
601 void RegisterDevice(int interface_index,
602 Technology::Identifier technology);
603
Thieu Le9abd6742013-01-23 23:35:37 -0800604 // Checks to see if the device has already been registered.
605 bool IsDeviceRegistered(int interface_index,
606 Technology::Identifier technology);
607
Thieu Lec8078a62013-01-22 18:01:12 -0800608 // Deregisters the device from this class. All state transition timers
609 // will be removed.
610 void DeregisterDevice(int interface_index);
611
612 // Notifies this object that a device has been initialized.
613 void NotifyDeviceInitialized(int interface_index);
614
Thieu Lece4483e2013-01-23 15:12:03 -0800615 // Notifies this object that a device has started the enable process.
616 void NotifyDeviceEnableStarted(int interface_index);
617
618 // Notifies this object that a device has completed the enable process.
619 void NotifyDeviceEnableFinished(int interface_index);
620
Thieu Lea2519bf2013-01-23 16:51:54 -0800621 // Notifies this object that a device has started the disable process.
622 void NotifyDeviceDisableStarted(int interface_index);
623
624 // Notifies this object that a device has completed the disable process.
625 void NotifyDeviceDisableFinished(int interface_index);
626
Thieu Le18c11072013-01-28 17:21:37 -0800627 // Notifies this object that a device has started the scanning process.
Wade Guthrie44f290d2013-05-28 10:16:25 -0700628 virtual void NotifyDeviceScanStarted(int interface_index);
Thieu Le18c11072013-01-28 17:21:37 -0800629
630 // Notifies this object that a device has completed the scanning process.
Wade Guthrie5a4e2ef2013-04-30 12:51:39 -0700631 virtual void NotifyDeviceScanFinished(int interface_index);
Thieu Le18c11072013-01-28 17:21:37 -0800632
Wade Guthrie9ec08062013-09-25 15:22:24 -0700633 // Terminates an underway scan (does nothing if a scan wasn't underway).
Wade Guthriea5995cf2013-07-30 09:31:16 -0700634 virtual void ResetScanTimer(int interface_index);
Wade Guthrie44f290d2013-05-28 10:16:25 -0700635
Thieu Lecdb5a212013-01-25 11:17:18 -0800636 // Notifies this object that a device has started the connect process.
Wade Guthrie44f290d2013-05-28 10:16:25 -0700637 virtual void NotifyDeviceConnectStarted(int interface_index,
638 bool is_auto_connecting);
Thieu Lecdb5a212013-01-25 11:17:18 -0800639
640 // Notifies this object that a device has completed the connect process.
Wade Guthrie44f290d2013-05-28 10:16:25 -0700641 virtual void NotifyDeviceConnectFinished(int interface_index);
642
643 // Resets both the connect_timer and the scan_connect_timer the timer (the
644 // latter so that a future connect will not erroneously be associated with
645 // the previous scan).
646 virtual void ResetConnectTimer(int interface_index);
Thieu Lecdb5a212013-01-25 11:17:18 -0800647
Thieu Le26fc01b2013-01-28 12:08:48 -0800648 // Notifies this object that a cellular device has been dropped by the
649 // network.
mukesh agrawal09e08112013-08-16 13:26:44 -0700650 void NotifyCellularDeviceDrop(const std::string &network_technology,
Thieu Le26fc01b2013-01-28 12:08:48 -0800651 uint16 signal_strength);
652
Prathmesh Prabhu08757aa2013-05-15 17:17:33 -0700653 // Notifies this object about 3GPP registration drop events.
654 virtual void Notify3GPPRegistrationDelayedDropPosted();
655 virtual void Notify3GPPRegistrationDelayedDropCanceled();
656
Thieu Leb7aa5f72013-01-31 15:57:48 -0800657 // Notifies this object about a cellular device failure code.
658 void NotifyCellularDeviceFailure(const Error &error);
659
Thieu Le91fccf62013-04-22 15:23:16 -0700660 // Notifies this object that a cellular service has been marked as
661 // out-of-credits.
662 void NotifyCellularOutOfCredits(Metrics::CellularOutOfCreditsReason reason);
663
Peter Qiu574996a2014-04-04 10:55:47 -0700664 // Notifies this object about number of wifi services available for auto
665 // connect when auto-connect is initiated.
666 virtual void NotifyWifiAutoConnectableServices(int num_services);
667
668 // Notifies this object about number of BSSes available for a wifi service
669 // when attempt to connect to that service.
670 virtual void NotifyWifiAvailableBSSes(int num_services);
671
Peter Qiu39d4af02014-04-14 12:24:01 -0700672 // Notifies this object about number of services associated to the
673 // currently connected network.
674 virtual void NotifyServicesOnSameNetwork(int num_services);
675
Peter Qiu8e430582014-04-30 14:12:37 -0700676 // Notifies this object about WIFI TX bitrate in Mbps.
677 virtual void NotifyWifiTxBitrate(int bitrate);
678
Peter Qiudc4e0992014-05-01 10:02:52 -0700679 // Notifies this object about the result of user-initiated connection
680 // attempt.
681 virtual void NotifyUserInitiatedConnectionResult(const std::string &name,
682 int result);
683
Thieu Le5133b712013-02-19 14:47:21 -0800684 // Notifies this object about a corrupted profile.
685 virtual void NotifyCorruptedProfile();
686
Paul Stewartdded0072013-10-24 12:38:54 -0700687 // Notifies this object about a service with DHCP infrastructure problems.
688 virtual void NotifyDHCPOptionFailure(const Service &service);
689
Peter Qiue783f1c2014-05-02 11:42:33 -0700690 // Notifies this object about user-initiated event.
691 virtual void NotifyUserInitiatedEvent(int event);
692
Peter Qiub9256f32014-05-09 15:27:29 -0700693 // Notifies this object about the result of the fallback DNS test.
Peter Qiuf18e7712014-05-20 09:59:46 -0700694 virtual void NotifyFallbackDNSTestResult(Technology::Identifier technology_id,
695 int result);
Peter Qiub9256f32014-05-09 15:27:29 -0700696
Peter Qiudc335f82014-05-15 10:33:17 -0700697 // Notifies this object about a network problem detected on the currently
698 // connected network.
699 virtual void NotifyNetworkProblemDetected(
700 Technology::Identifier technology_id, int reason);
701
Thieu Le48e6d6d2011-12-06 00:40:27 +0000702 // Sends linear histogram data to UMA.
Thieu Le85e050b2012-03-13 15:04:38 -0700703 virtual bool SendEnumToUMA(const std::string &name, int sample, int max);
Thieu Le48e6d6d2011-12-06 00:40:27 +0000704
Thieu Lea20cbc22012-01-09 22:01:43 +0000705 // Send histogram data to UMA.
Thieu Le85e050b2012-03-13 15:04:38 -0700706 virtual bool SendToUMA(const std::string &name, int sample, int min,
707 int max, int num_buckets);
Thieu Lea20cbc22012-01-09 22:01:43 +0000708
Thieu Le48e6d6d2011-12-06 00:40:27 +0000709 private:
Thieu Le48e6d6d2011-12-06 00:40:27 +0000710 friend class MetricsTest;
Thieu Le6c1e3bb2013-02-06 15:20:35 -0800711 FRIEND_TEST(MetricsTest, CellularDropsPerHour);
Thieu Le48e6d6d2011-12-06 00:40:27 +0000712 FRIEND_TEST(MetricsTest, FrequencyToChannel);
Wade Guthrie44f290d2013-05-28 10:16:25 -0700713 FRIEND_TEST(MetricsTest, ResetConnectTimer);
Thieu Leb84ba342012-03-02 15:15:19 -0800714 FRIEND_TEST(MetricsTest, ServiceFailure);
Thieu Lea20cbc22012-01-09 22:01:43 +0000715 FRIEND_TEST(MetricsTest, TimeOnlineTimeToDrop);
Thieu Leb84ba342012-03-02 15:15:19 -0800716 FRIEND_TEST(MetricsTest, TimeToConfig);
717 FRIEND_TEST(MetricsTest, TimeToOnline);
718 FRIEND_TEST(MetricsTest, TimeToPortal);
Thieu Le18c11072013-01-28 17:21:37 -0800719 FRIEND_TEST(MetricsTest, TimeToScanIgnore);
Thieu Leb84ba342012-03-02 15:15:19 -0800720 FRIEND_TEST(MetricsTest, WiFiServiceChannel);
721 FRIEND_TEST(MetricsTest, WiFiServicePostReady);
Gaurav Shah6d2c72d2012-10-16 16:30:44 -0700722 FRIEND_TEST(WiFiMainTest, GetGeolocationObjects);
Thieu Le48e6d6d2011-12-06 00:40:27 +0000723
724 typedef ScopedVector<chromeos_metrics::TimerReporter> TimerReporters;
725 typedef std::list<chromeos_metrics::TimerReporter *> TimerReportersList;
726 typedef std::map<Service::ConnectState, TimerReportersList>
727 TimerReportersByState;
728 struct ServiceMetrics {
Thieu Le48e6d6d2011-12-06 00:40:27 +0000729 // All TimerReporter objects are stored in |timers| which owns the objects.
730 // |start_on_state| and |stop_on_state| contain pointers to the
731 // TimerReporter objects and control when to start and stop the timers.
732 TimerReporters timers;
733 TimerReportersByState start_on_state;
734 TimerReportersByState stop_on_state;
735 };
736 typedef std::map<const Service *, std::tr1::shared_ptr<ServiceMetrics> >
737 ServiceMetricsLookupMap;
738
Thieu Lec8078a62013-01-22 18:01:12 -0800739 struct DeviceMetrics {
mukesh agrawal09e08112013-08-16 13:26:44 -0700740 DeviceMetrics() : auto_connect_tries(0) {}
Thieu Le9abd6742013-01-23 23:35:37 -0800741 Technology::Identifier technology;
Thieu Lec8078a62013-01-22 18:01:12 -0800742 scoped_ptr<chromeos_metrics::TimerReporter> initialization_timer;
Thieu Lece4483e2013-01-23 15:12:03 -0800743 scoped_ptr<chromeos_metrics::TimerReporter> enable_timer;
Thieu Lea2519bf2013-01-23 16:51:54 -0800744 scoped_ptr<chromeos_metrics::TimerReporter> disable_timer;
Thieu Le18c11072013-01-28 17:21:37 -0800745 scoped_ptr<chromeos_metrics::TimerReporter> scan_timer;
Thieu Lecdb5a212013-01-25 11:17:18 -0800746 scoped_ptr<chromeos_metrics::TimerReporter> connect_timer;
Wade Guthrie44f290d2013-05-28 10:16:25 -0700747 scoped_ptr<chromeos_metrics::TimerReporter> scan_connect_timer;
Thieu Le7cf36b02013-01-30 17:15:56 -0800748 scoped_ptr<chromeos_metrics::TimerReporter> auto_connect_timer;
Thieu Le6c1e3bb2013-02-06 15:20:35 -0800749 int auto_connect_tries;
Thieu Lec8078a62013-01-22 18:01:12 -0800750 };
751 typedef std::map<const int, std::tr1::shared_ptr<DeviceMetrics> >
752 DeviceMetricsLookupMap;
753
Thieu Le48e6d6d2011-12-06 00:40:27 +0000754 static const uint16 kWiFiBandwidth5MHz;
755 static const uint16 kWiFiBandwidth20MHz;
756 static const uint16 kWiFiFrequency2412;
757 static const uint16 kWiFiFrequency2472;
758 static const uint16 kWiFiFrequency2484;
759 static const uint16 kWiFiFrequency5170;
760 static const uint16 kWiFiFrequency5180;
761 static const uint16 kWiFiFrequency5230;
762 static const uint16 kWiFiFrequency5240;
763 static const uint16 kWiFiFrequency5320;
764 static const uint16 kWiFiFrequency5500;
765 static const uint16 kWiFiFrequency5700;
766 static const uint16 kWiFiFrequency5745;
767 static const uint16 kWiFiFrequency5825;
768
Wade Guthrie7ac610b2013-10-01 17:48:14 -0700769 void InitializeCommonServiceMetrics(const Service &service);
Thieu Le48e6d6d2011-12-06 00:40:27 +0000770 void UpdateServiceStateTransitionMetrics(ServiceMetrics *service_metrics,
771 Service::ConnectState new_state);
Wade Guthrie7ac610b2013-10-01 17:48:14 -0700772 void SendServiceFailure(const Service &service);
Thieu Le48e6d6d2011-12-06 00:40:27 +0000773
Wade Guthrie60a37062013-04-02 11:39:09 -0700774 DeviceMetrics *GetDeviceMetrics(int interface_index) const;
Thieu Le7cf36b02013-01-30 17:15:56 -0800775 void AutoConnectMetricsReset(DeviceMetrics *device_metrics);
Thieu Lece4483e2013-01-23 15:12:03 -0800776
Thieu Le48e6d6d2011-12-06 00:40:27 +0000777 // For unit test purposes.
778 void set_library(MetricsLibraryInterface *library);
Thieu Lea20cbc22012-01-09 22:01:43 +0000779 void set_time_online_timer(chromeos_metrics::Timer *timer) {
780 time_online_timer_.reset(timer); // Passes ownership
781 }
782 void set_time_to_drop_timer(chromeos_metrics::Timer *timer) {
783 time_to_drop_timer_.reset(timer); // Passes ownership
784 }
Thieu Leb84ba342012-03-02 15:15:19 -0800785 void set_time_resume_to_ready_timer(chromeos_metrics::Timer *timer) {
786 time_resume_to_ready_timer_.reset(timer); // Passes ownership
787 }
Arman Ugurayab22c162012-10-08 19:08:38 -0700788 void set_time_termination_actions_timer(
789 chromeos_metrics::Timer *timer) {
790 time_termination_actions_timer.reset(timer); // Passes ownership
791 }
Thieu Le18c11072013-01-28 17:21:37 -0800792 void set_time_to_scan_timer(int interface_index,
793 chromeos_metrics::TimerReporter *timer) {
794 DeviceMetrics *device_metrics = GetDeviceMetrics(interface_index);
795 device_metrics->scan_timer.reset(timer); // Passes ownership
796 }
Wade Guthrie44f290d2013-05-28 10:16:25 -0700797 void set_time_to_connect_timer(int interface_index,
798 chromeos_metrics::TimerReporter *timer) {
799 DeviceMetrics *device_metrics = GetDeviceMetrics(interface_index);
800 device_metrics->connect_timer.reset(timer); // Passes ownership
801 }
802 void set_time_to_scan_connect_timer(int interface_index,
803 chromeos_metrics::TimerReporter *timer) {
804 DeviceMetrics *device_metrics = GetDeviceMetrics(interface_index);
805 device_metrics->scan_connect_timer.reset(timer); // Passes ownership
806 }
Thieu Le48e6d6d2011-12-06 00:40:27 +0000807
808 // |library_| points to |metrics_library_| when shill runs normally.
809 // However, in order to allow for unit testing, we point |library_| to a
810 // MetricsLibraryMock object instead.
Thieu Le6c1e3bb2013-02-06 15:20:35 -0800811 EventDispatcher *dispatcher_;
Thieu Le48e6d6d2011-12-06 00:40:27 +0000812 MetricsLibrary metrics_library_;
813 MetricsLibraryInterface *library_;
814 ServiceMetricsLookupMap services_metrics_;
Thieu Lea20cbc22012-01-09 22:01:43 +0000815 Technology::Identifier last_default_technology_;
816 bool was_online_;
817 scoped_ptr<chromeos_metrics::Timer> time_online_timer_;
818 scoped_ptr<chromeos_metrics::Timer> time_to_drop_timer_;
Thieu Leb84ba342012-03-02 15:15:19 -0800819 scoped_ptr<chromeos_metrics::Timer> time_resume_to_ready_timer_;
Arman Ugurayab22c162012-10-08 19:08:38 -0700820 scoped_ptr<chromeos_metrics::Timer> time_termination_actions_timer;
Darin Petkov58f0b6d2012-06-12 12:52:30 +0200821 bool collect_bootstats_;
Thieu Lec8078a62013-01-22 18:01:12 -0800822 DeviceMetricsLookupMap devices_metrics_;
Thieu Le48e6d6d2011-12-06 00:40:27 +0000823
824 DISALLOW_COPY_AND_ASSIGN(Metrics);
825};
826
827} // namespace shill
828
Wade Guthrie60a37062013-04-02 11:39:09 -0700829#endif // SHILL_METRICS_H_