Index: metrics_daemon.h |
diff --git a/metrics_daemon.h b/metrics_daemon.h |
index 5f2e7868a9aed95793ea023f1863f2503326ccde..dd613227de02984802e338a6115cf6cc6f7b8f6c 100644 |
--- a/metrics_daemon.h |
+++ b/metrics_daemon.h |
@@ -29,7 +29,8 @@ class MetricsDaemon { |
~MetricsDaemon(); |
// Initializes. |
- void Init(bool testing, MetricsLibraryInterface* metrics_lib); |
+ void Init(bool testing, MetricsLibraryInterface* metrics_lib, |
+ const char* diskstats_path); |
// Does all the work. If |run_as_daemon| is true, daemonizes by |
// forking. |
@@ -52,6 +53,7 @@ class MetricsDaemon { |
FRIEND_TEST(MetricsDaemonTest, ProcessUserCrash); |
FRIEND_TEST(MetricsDaemonTest, ReportCrashesDailyFrequency); |
FRIEND_TEST(MetricsDaemonTest, ReportDailyUse); |
+ FRIEND_TEST(MetricsDaemonTest, ReportDiskStats); |
FRIEND_TEST(MetricsDaemonTest, ReportKernelCrashInterval); |
FRIEND_TEST(MetricsDaemonTest, ReportUncleanShutdownInterval); |
FRIEND_TEST(MetricsDaemonTest, ReportUserCrashInterval); |
@@ -77,6 +79,12 @@ class MetricsDaemon { |
kNumberSessionStates |
}; |
+ // State for disk stats collector callback. |
+ enum DiskStatsState { |
+ kDiskStatsShort, // short wait before short interval collection |
+ kDiskStatsLong, // final wait before new collection |
+ }; |
+ |
// Data record for aggregating daily usage. |
class UseRecord { |
public: |
@@ -111,6 +119,15 @@ class MetricsDaemon { |
static const char kMetricUserCrashesDailyName[]; |
static const char kMetricUserCrashesWeeklyName[]; |
static const char kMetricUserCrashIntervalName[]; |
+ static const char kMetricReadSectorsLongName[]; |
+ static const char kMetricReadSectorsShortName[]; |
+ static const char kMetricWriteSectorsLongName[]; |
+ static const char kMetricWriteSectorsShortName[]; |
+ static const int kMetricDiskStatsShortInterval; |
+ static const int kMetricDiskStatsLongInterval; |
+ static const int kMetricSectorsIOMax; |
+ static const int kMetricSectorsBuckets; |
+ static const char kMetricsDiskStatsPath[]; |
// D-Bus message match strings. |
static const char* kDBusMatches_[]; |
@@ -217,6 +234,22 @@ class MetricsDaemon { |
void SendMetric(const std::string& name, int sample, |
int min, int max, int nbuckets); |
+ // Initializes disk stats reporting. |
+ void DiskStatsReporterInit(); |
+ |
+ // Schedules a callback for the next disk stats collection. |
+ void ScheduleDiskStatsCallback(int wait); |
+ |
+ // Reads cumulative disk statistics from sysfs. |
+ void DiskStatsReadStats(long int* read_sectors, long int* write_sectors); |
+ |
+ // Reports disk statistics (static version for glib). Arguments are a glib |
+ // artifact. |
+ static gboolean DiskStatsCallbackStatic(void* handle); |
+ |
+ // Reports disk statistics. |
+ void DiskStatsCallback(); |
+ |
// Test mode. |
bool testing_; |
@@ -265,6 +298,13 @@ class MetricsDaemon { |
// Scheduled daily use monitor source (see ScheduleUseMonitor). |
GSource* usemon_source_; |
+ |
+ // Contains the most recent disk stats. |
+ long int read_sectors_; |
+ long int write_sectors_; |
+ |
+ DiskStatsState diskstats_state_; |
+ const char* diskstats_path_; |
}; |
#endif // METRICS_DAEMON_H_ |