blob: 23f0eb25fd804db5c9aa575efb872923e219dd61 [file] [log] [blame]
Darin Petkov65b01462010-04-14 13:32:20 -07001// 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
3// found in the LICENSE file.
4
5#ifndef METRICS_DAEMON_H_
6#define METRICS_DAEMON_H_
7
Darin Petkov703ec972010-04-27 11:02:18 -07008#include <dbus/dbus.h>
Darin Petkov65b01462010-04-14 13:32:20 -07009#include <time.h>
10
11class MetricsDaemon {
12
13 public:
14 MetricsDaemon()
Darin Petkov703ec972010-04-27 11:02:18 -070015 : testing_(false),
16 network_state_(kUnknownNetworkState),
17 network_state_changed_(0),
18 power_state_(kUnknownPowerState) {}
Darin Petkov65b01462010-04-14 13:32:20 -070019 ~MetricsDaemon() {}
20
Darin Petkov703ec972010-04-27 11:02:18 -070021 // Does all the work. If |run_as_daemon| is true, daemonizes by
22 // forking. If |testing| is true, logs the stats instead of sending
23 // them to Chrome.
Darin Petkov65b01462010-04-14 13:32:20 -070024 void Run(bool run_as_daemon, bool testing);
25
26 private:
Darin Petkov703ec972010-04-27 11:02:18 -070027 // The network states (see network_states.h).
28 enum NetworkState {
29 kUnknownNetworkState = -1, // Initial/unknown network state.
Darin Petkov65b01462010-04-14 13:32:20 -070030#define STATE(name, capname) kNetworkState ## capname,
31#include "network_states.h"
32 kNumberNetworkStates
Darin Petkov703ec972010-04-27 11:02:18 -070033 };
Darin Petkov65b01462010-04-14 13:32:20 -070034
Darin Petkov703ec972010-04-27 11:02:18 -070035 // The power states (see power_states.h).
36 enum PowerState {
37 kUnknownPowerState = -1, // Initial/unknown power state.
38#define STATE(name, capname) kPowerState ## capname,
39#include "power_states.h"
40 kNumberPowerStates
41 };
Darin Petkov65b01462010-04-14 13:32:20 -070042
43 // Initializes.
44 void Init(bool testing);
45
46 // Creates the event loop and enters it.
47 void Loop();
48
Darin Petkov703ec972010-04-27 11:02:18 -070049 // D-Bus filter callback.
50 static DBusHandlerResult MessageFilter(DBusConnection* connection,
51 DBusMessage* message,
52 void* user_data);
Darin Petkov65b01462010-04-14 13:32:20 -070053
Darin Petkov703ec972010-04-27 11:02:18 -070054 // Processes network state change.
55 void NetStateChanged(const char* state_name);
Darin Petkov65b01462010-04-14 13:32:20 -070056
Darin Petkov703ec972010-04-27 11:02:18 -070057 // Given the state name, returns the state id.
58 NetworkState LookupNetworkState(const char* state_name);
Darin Petkov65b01462010-04-14 13:32:20 -070059
Darin Petkov703ec972010-04-27 11:02:18 -070060 // Processes power state change.
61 void PowerStateChanged(const char* state_name);
62
63 // Given the state name, returns the state id.
64 PowerState LookupPowerState(const char* state_name);
Darin Petkov65b01462010-04-14 13:32:20 -070065
Darin Petkovc2526a12010-04-21 14:24:04 -070066 // Sends a stat to Chrome for transport to UMA (or prints it for
67 // testing). See MetricsLibrary::SendToChrome in metrics_library.h
68 // for a description of the arguments.
69 void PublishMetric(const char* name, int sample,
70 int min, int max, int nbuckets);
Darin Petkov65b01462010-04-14 13:32:20 -070071
Darin Petkov703ec972010-04-27 11:02:18 -070072 // D-Bus message match strings.
73 static const char* dbus_matches_[];
Darin Petkov65b01462010-04-14 13:32:20 -070074
Darin Petkov703ec972010-04-27 11:02:18 -070075 // Array of network states.
76 static const char* network_states_[kNumberNetworkStates];
Darin Petkov65b01462010-04-14 13:32:20 -070077
Darin Petkov703ec972010-04-27 11:02:18 -070078 // Array of power states.
79 static const char* power_states_[kNumberPowerStates];
Darin Petkov65b01462010-04-14 13:32:20 -070080
Darin Petkov703ec972010-04-27 11:02:18 -070081 bool testing_; // just testing
82 NetworkState network_state_; // current network state
83 time_t network_state_changed_; // timestamp last net state change
84 PowerState power_state_; // current power state
Darin Petkov65b01462010-04-14 13:32:20 -070085};
86
87#endif // METRICS_DAEMON_H_