Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(163)

Side by Side Diff: metrics_daemon.h

Issue 3181015: Add # daily crashes metrics and separate kernel crashes out. (Closed) Base URL: ssh://git@chromiumos-git//metrics.git
Patch Set: Respond to review Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « counter_test.cc ('k') | metrics_daemon.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef METRICS_DAEMON_H_ 5 #ifndef METRICS_DAEMON_H_
6 #define METRICS_DAEMON_H_ 6 #define METRICS_DAEMON_H_
7 7
8 #include <dbus/dbus.h> 8 #include <dbus/dbus.h>
9 #include <glib.h> 9 #include <glib.h>
10 10
11 #include <base/scoped_ptr.h> 11 #include <base/scoped_ptr.h>
12 #include <base/time.h> 12 #include <base/time.h>
13 #include <gtest/gtest_prod.h> // for FRIEND_TEST 13 #include <gtest/gtest_prod.h> // for FRIEND_TEST
14 14
15 #include "metrics_library.h" 15 #include "metrics_library.h"
16 16
17 namespace chromeos_metrics { class TaggedCounterInterface; } 17 namespace chromeos_metrics {
18 class FrequencyCounter;
19 class TaggedCounterInterface;
20 }
18 21
19 class MetricsDaemon { 22 class MetricsDaemon {
20 23
21 public: 24 public:
22 MetricsDaemon(); 25 MetricsDaemon();
23 ~MetricsDaemon(); 26 ~MetricsDaemon();
24 27
25 // Initializes. 28 // Initializes.
26 void Init(bool testing, MetricsLibraryInterface* metrics_lib); 29 void Init(bool testing, MetricsLibraryInterface* metrics_lib);
27 30
28 // Does all the work. If |run_as_daemon| is true, daemonizes by 31 // Does all the work. If |run_as_daemon| is true, daemonizes by
29 // forking. 32 // forking.
30 void Run(bool run_as_daemon); 33 void Run(bool run_as_daemon);
31 34
32 private: 35 private:
33 friend class MetricsDaemonTest; 36 friend class MetricsDaemonTest;
34 FRIEND_TEST(MetricsDaemonTest, CheckKernelCrash); 37 FRIEND_TEST(MetricsDaemonTest, CheckSystemCrash);
35 FRIEND_TEST(MetricsDaemonTest, DailyUseReporter);
36 FRIEND_TEST(MetricsDaemonTest, KernelCrashIntervalReporter);
37 FRIEND_TEST(MetricsDaemonTest, LookupNetworkState); 38 FRIEND_TEST(MetricsDaemonTest, LookupNetworkState);
38 FRIEND_TEST(MetricsDaemonTest, LookupPowerState); 39 FRIEND_TEST(MetricsDaemonTest, LookupPowerState);
39 FRIEND_TEST(MetricsDaemonTest, LookupScreenSaverState); 40 FRIEND_TEST(MetricsDaemonTest, LookupScreenSaverState);
40 FRIEND_TEST(MetricsDaemonTest, LookupSessionState); 41 FRIEND_TEST(MetricsDaemonTest, LookupSessionState);
41 FRIEND_TEST(MetricsDaemonTest, MessageFilter); 42 FRIEND_TEST(MetricsDaemonTest, MessageFilter);
42 FRIEND_TEST(MetricsDaemonTest, NetStateChangedSimpleDrop); 43 FRIEND_TEST(MetricsDaemonTest, NetStateChangedSimpleDrop);
43 FRIEND_TEST(MetricsDaemonTest, NetStateChangedSuspend); 44 FRIEND_TEST(MetricsDaemonTest, NetStateChangedSuspend);
44 FRIEND_TEST(MetricsDaemonTest, PowerStateChanged); 45 FRIEND_TEST(MetricsDaemonTest, PowerStateChanged);
45 FRIEND_TEST(MetricsDaemonTest, ProcessKernelCrash); 46 FRIEND_TEST(MetricsDaemonTest, ProcessKernelCrash);
47 FRIEND_TEST(MetricsDaemonTest, ProcessUncleanShutdown);
46 FRIEND_TEST(MetricsDaemonTest, ProcessUserCrash); 48 FRIEND_TEST(MetricsDaemonTest, ProcessUserCrash);
49 FRIEND_TEST(MetricsDaemonTest, ReportCrashesDailyFrequency);
50 FRIEND_TEST(MetricsDaemonTest, ReportDailyUse);
51 FRIEND_TEST(MetricsDaemonTest, ReportKernelCrashInterval);
52 FRIEND_TEST(MetricsDaemonTest, ReportUncleanShutdownInterval);
53 FRIEND_TEST(MetricsDaemonTest, ReportUserCrashInterval);
47 FRIEND_TEST(MetricsDaemonTest, ScreenSaverStateChanged); 54 FRIEND_TEST(MetricsDaemonTest, ScreenSaverStateChanged);
48 FRIEND_TEST(MetricsDaemonTest, SendMetric); 55 FRIEND_TEST(MetricsDaemonTest, SendMetric);
49 FRIEND_TEST(MetricsDaemonTest, SessionStateChanged); 56 FRIEND_TEST(MetricsDaemonTest, SessionStateChanged);
50 FRIEND_TEST(MetricsDaemonTest, SetUserActiveState); 57 FRIEND_TEST(MetricsDaemonTest, SetUserActiveState);
51 FRIEND_TEST(MetricsDaemonTest, SetUserActiveStateTimeJump); 58 FRIEND_TEST(MetricsDaemonTest, SetUserActiveStateTimeJump);
52 FRIEND_TEST(MetricsDaemonTest, UserCrashIntervalReporter);
53 59
54 // The network states (see network_states.h). 60 // The network states (see network_states.h).
55 enum NetworkState { 61 enum NetworkState {
56 kUnknownNetworkState = -1, // Initial/unknown network state. 62 kUnknownNetworkState = -1, // Initial/unknown network state.
57 #define STATE(name, capname) kNetworkState ## capname, 63 #define STATE(name, capname) kNetworkState ## capname,
58 #include "network_states.h" 64 #include "network_states.h"
59 kNumberNetworkStates 65 kNumberNetworkStates
60 }; 66 };
61 67
62 // The power states (see power_states.h). 68 // The power states (see power_states.h).
(...skipping 14 matching lines...) Expand all
77 83
78 // Data record for aggregating daily usage. 84 // Data record for aggregating daily usage.
79 class UseRecord { 85 class UseRecord {
80 public: 86 public:
81 UseRecord() : day_(0), seconds_(0) {} 87 UseRecord() : day_(0), seconds_(0) {}
82 int day_; 88 int day_;
83 int seconds_; 89 int seconds_;
84 }; 90 };
85 91
86 // Metric parameters. 92 // Metric parameters.
93 static const char kMetricAnyCrashesDailyName[];
94 static const char kMetricCrashesDailyBuckets;
95 static const char kMetricCrashesDailyMax;
96 static const char kMetricCrashesDailyMin;
97 static const int kMetricCrashIntervalBuckets;
98 static const int kMetricCrashIntervalMax;
99 static const int kMetricCrashIntervalMin;
100 static const int kMetricDailyUseTimeBuckets;
101 static const int kMetricDailyUseTimeMax;
102 static const int kMetricDailyUseTimeMin;
87 static const char kMetricDailyUseTimeName[]; 103 static const char kMetricDailyUseTimeName[];
88 static const int kMetricDailyUseTimeMin; 104 static const char kMetricKernelCrashesDailyName[];
89 static const int kMetricDailyUseTimeMax;
90 static const int kMetricDailyUseTimeBuckets;
91 static const char kMetricKernelCrashIntervalName[]; 105 static const char kMetricKernelCrashIntervalName[];
92 static const int kMetricKernelCrashIntervalMin; 106 static const int kMetricTimeToNetworkDropBuckets;
93 static const int kMetricKernelCrashIntervalMax; 107 static const int kMetricTimeToNetworkDropMax;
94 static const int kMetricKernelCrashIntervalBuckets; 108 static const int kMetricTimeToNetworkDropMin;
95 static const char kMetricTimeToNetworkDropName[]; 109 static const char kMetricTimeToNetworkDropName[];
96 static const int kMetricTimeToNetworkDropMin; 110 static const char kMetricUncleanShutdownIntervalName[];
97 static const int kMetricTimeToNetworkDropMax; 111 static const char kMetricUncleanShutdownsDailyName[];
98 static const int kMetricTimeToNetworkDropBuckets; 112 static const char kMetricUserCrashesDailyName[];
99 static const char kMetricUserCrashIntervalName[]; 113 static const char kMetricUserCrashIntervalName[];
100 static const int kMetricUserCrashIntervalMin;
101 static const int kMetricUserCrashIntervalMax;
102 static const int kMetricUserCrashIntervalBuckets;
103 114
104 // D-Bus message match strings. 115 // D-Bus message match strings.
105 static const char* kDBusMatches_[]; 116 static const char* kDBusMatches_[];
106 117
107 // Array of network states. 118 // Array of network states.
108 static const char* kNetworkStates_[kNumberNetworkStates]; 119 static const char* kNetworkStates_[kNumberNetworkStates];
109 120
110 // Array of power states. 121 // Array of power states.
111 static const char* kPowerStates_[kNumberPowerStates]; 122 static const char* kPowerStates_[kNumberPowerStates];
112 123
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 // the usage file, the |seconds| are accumulated. 166 // the usage file, the |seconds| are accumulated.
156 void LogDailyUseRecord(int day, int seconds); 167 void LogDailyUseRecord(int day, int seconds);
157 168
158 // Updates the active use time and logs time between user-space 169 // Updates the active use time and logs time between user-space
159 // process crashes. 170 // process crashes.
160 void ProcessUserCrash(); 171 void ProcessUserCrash();
161 172
162 // Updates the active use time and logs time between kernel crashes. 173 // Updates the active use time and logs time between kernel crashes.
163 void ProcessKernelCrash(); 174 void ProcessKernelCrash();
164 175
165 // Checks if a kernel crash has been detected and processes if so. 176 // Updates the active use time and logs time between unclean shutdowns.
166 // The method assumes that a kernel crash has happened if 177 void ProcessUncleanShutdown();
167 // |crash_file| exists. 178
168 void CheckKernelCrash(const std::string& crash_file); 179 // Checks if a kernel crash has been detected and returns true if
180 // so. The method assumes that a kernel crash has happened if
181 // |crash_file| exists. It removes the file immediately if it
182 // exists, so it must not be called more than once.
183 bool CheckSystemCrash(const std::string& crash_file);
169 184
170 // Callbacks for the daily use monitor. The daily use monitor uses 185 // Callbacks for the daily use monitor. The daily use monitor uses
171 // LogDailyUseRecord to aggregate current usage data and send it to 186 // LogDailyUseRecord to aggregate current usage data and send it to
172 // UMA, if necessary. It also reschedules itself using an 187 // UMA, if necessary. It also reschedules itself using an
173 // exponentially bigger interval (up to a certain maximum) -- so 188 // exponentially bigger interval (up to a certain maximum) -- so
174 // usage is monitored less frequently with longer active use. 189 // usage is monitored less frequently with longer active use.
175 static gboolean UseMonitorStatic(gpointer data); 190 static gboolean UseMonitorStatic(gpointer data);
176 bool UseMonitor(); 191 bool UseMonitor();
177 192
178 // Schedules or reschedules a daily use monitor for |interval| 193 // Schedules or reschedules a daily use monitor for |interval|
(...skipping 10 matching lines...) Expand all
189 void UnscheduleUseMonitor(); 204 void UnscheduleUseMonitor();
190 205
191 // Sends a regular (exponential) histogram sample to Chrome for 206 // Sends a regular (exponential) histogram sample to Chrome for
192 // transport to UMA. See MetricsLibrary::SendToUMA in 207 // transport to UMA. See MetricsLibrary::SendToUMA in
193 // metrics_library.h for a description of the arguments. 208 // metrics_library.h for a description of the arguments.
194 void SendMetric(const std::string& name, int sample, 209 void SendMetric(const std::string& name, int sample,
195 int min, int max, int nbuckets); 210 int min, int max, int nbuckets);
196 211
197 // TaggedCounter callback to process aggregated daily usage data and 212 // TaggedCounter callback to process aggregated daily usage data and
198 // send to UMA. 213 // send to UMA.
199 static void DailyUseReporter(void* data, int tag, int count); 214 static void ReportDailyUse(void* data, int tag, int count);
215
216 // Helper to report a crash interval to UMA.
217 static void ReportCrashInterval(const char* histogram_name,
218 void* handle, int count);
200 219
201 // TaggedCounter callback to process time between user-space process 220 // TaggedCounter callback to process time between user-space process
202 // crashes and send to UMA. 221 // crashes and send to UMA.
203 static void UserCrashIntervalReporter(void* data, int tag, int count); 222 static void ReportUserCrashInterval(void* data, int tag, int count);
204 223
205 // TaggedCounter callback to process time between kernel crashes and 224 // TaggedCounter callback to process time between kernel crashes and
206 // send to UMA. 225 // send to UMA.
207 static void KernelCrashIntervalReporter(void* data, int tag, int count); 226 static void ReportKernelCrashInterval(void* data, int tag, int count);
227
228 // TaggedCounter callback to process time between unclean shutdowns and
229 // send to UMA.
230 static void ReportUncleanShutdownInterval(void* data, int tag, int count);
231
232 // Helper to report a daily crash frequency to UMA.
233 static void ReportCrashesDailyFrequency(const char* histogram_name,
234 void* handle, int count);
235
236 // TaggedCounter callback to report daily crash frequency to UMA.
237 static void ReportUserCrashesDaily(void* handle, int tag, int count);
238
239 // TaggedCounter callback to report kernel crash frequency to UMA.
240 static void ReportKernelCrashesDaily(void* handle, int tag, int count);
241
242 // TaggedCounter callback to report unclean shutdown frequency to UMA.
243 static void ReportUncleanShutdownsDaily(void* handle, int tag, int count);
244
245 // TaggedCounter callback to report frequency of any crashes to UMA.
246 static void ReportAnyCrashesDaily(void* handle, int tag, int count);
208 247
209 // Test mode. 248 // Test mode.
210 bool testing_; 249 bool testing_;
211 250
212 // The metrics library handle. 251 // The metrics library handle.
213 MetricsLibraryInterface* metrics_lib_; 252 MetricsLibraryInterface* metrics_lib_;
214 253
215 // Current network state. 254 // Current network state.
216 NetworkState network_state_; 255 NetworkState network_state_;
217 256
(...skipping 19 matching lines...) Expand all
237 276
238 // Daily active use time in seconds. 277 // Daily active use time in seconds.
239 scoped_ptr<chromeos_metrics::TaggedCounterInterface> daily_use_; 278 scoped_ptr<chromeos_metrics::TaggedCounterInterface> daily_use_;
240 279
241 // Active use time between user-space process crashes. 280 // Active use time between user-space process crashes.
242 scoped_ptr<chromeos_metrics::TaggedCounterInterface> user_crash_interval_; 281 scoped_ptr<chromeos_metrics::TaggedCounterInterface> user_crash_interval_;
243 282
244 // Active use time between kernel crashes. 283 // Active use time between kernel crashes.
245 scoped_ptr<chromeos_metrics::TaggedCounterInterface> kernel_crash_interval_; 284 scoped_ptr<chromeos_metrics::TaggedCounterInterface> kernel_crash_interval_;
246 285
286 // Active use time between unclean shutdowns crashes.
287 scoped_ptr<chromeos_metrics::TaggedCounterInterface>
288 unclean_shutdown_interval_;
289
290 // Daily count of user-space process crashes.
291 scoped_ptr<chromeos_metrics::FrequencyCounter> user_crashes_daily_;
292
293 // Daily count of kernel crashes.
294 scoped_ptr<chromeos_metrics::FrequencyCounter> kernel_crashes_daily_;
295
296 // Daily count of unclean shutdowns.
297 scoped_ptr<chromeos_metrics::FrequencyCounter> unclean_shutdowns_daily_;
298
299 // Daily count of any crashes (user-space processes, kernel, or
300 // unclean shutdowns).
301 scoped_ptr<chromeos_metrics::FrequencyCounter> any_crashes_daily_;
302
247 // Sleep period until the next daily usage aggregation performed by 303 // Sleep period until the next daily usage aggregation performed by
248 // the daily use monitor (see ScheduleUseMonitor). 304 // the daily use monitor (see ScheduleUseMonitor).
249 int usemon_interval_; 305 int usemon_interval_;
250 306
251 // Scheduled daily use monitor source (see ScheduleUseMonitor). 307 // Scheduled daily use monitor source (see ScheduleUseMonitor).
252 GSource* usemon_source_; 308 GSource* usemon_source_;
253 }; 309 };
254 310
255 #endif // METRICS_DAEMON_H_ 311 #endif // METRICS_DAEMON_H_
OLDNEW
« no previous file with comments | « counter_test.cc ('k') | metrics_daemon.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698