1 /*
2  *  Copyright 2016 Bjango Pty Ltd. All rights reserved.
3  *  Copyright 2010 William Tisäter. All rights reserved.
4  *
5  *  Redistribution and use in source and binary forms, with or without
6  *  modification, are permitted provided that the following conditions are met:
7  *
8  *    1.  Redistributions of source code must retain the above copyright
9  *        notice, this list of conditions and the following disclaimer.
10  *
11  *    2.  Redistributions in binary form must reproduce the above copyright
12  *        notice, this list of conditions and the following disclaimer in the
13  *        documentation and/or other materials provided with the distribution.
14  *
15  *    3.  The name of the copyright holder may not be used to endorse or promote
16  *        products derived from this software without specific prior written
17  *        permission.
18  *
19  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY
20  *  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21  *  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22  *  DISCLAIMED. IN NO EVENT SHALL WILLIAM TISÄTER BE LIABLE FOR ANY
23  *  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24  *  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25  *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26  *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28  *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  *
30  */
31 
32 #ifndef _STATS_H
33 #define _STATS_H
34 
35 #include "config.h"
36 #include <math.h>
37 #include <stdio.h>
38 
39 #include <vector>
40 #include <limits.h>
41 
42 #include "System.h"
43 #include "stats/StatsCPU.h"
44 #include "stats/StatsSensors.h"
45 #include "stats/StatsMemory.h"
46 #include "stats/StatsLoad.h"
47 #include "stats/StatsNetwork.h"
48 #include "stats/StatsDisks.h"
49 #include "stats/StatsUptime.h"
50 #include "stats/StatsActivity.h"
51 #include "stats/StatsBattery.h"
52 #include "stats/StatsProcesses.h"
53 
54 #ifdef HAVE_KSTAT_H
55 # include <kstat.h>
56 #endif
57 
58 #ifdef USE_SQLITE
59 #include "Database.h"
60 #endif
61 
62 class Stats
63 {
64 	public:
65 		void prepare();
66 		void start();
67 		void startStats();
68 		void update_system_stats();
69 		void updateNextTimes(double t);
70 		void close();
71 		void finalize();
72 
73 		std::vector<battery_info> get_battery_history(long _pos);
74 		long uptime();
75 		long long sampleID;
76 		pthread_mutex_t lock;
77 
78 		bool historyEnabled;
79 		bool debugLogging;
80 
81 		#ifdef USE_SQLITE
82 		Database _database;
83 		void insertDatabaseItems(StatsBase *collector);
84 		#endif
85 
86 		StatsCPU cpuStats;
87 		StatsSensors sensorStats;
88 		StatsMemory memoryStats;
89 		StatsLoad loadStats;
90 		StatsNetwork networkStats;
91 		StatsDisks diskStats;
92 		StatsUptime uptimeStats;
93 		StatsActivity activityStats;
94 		StatsBattery batteryStats;
95 		StatsProcesses processStats;
96 
97 	private:
98 #ifdef HAVE_LIBKSTAT
99 		kstat_ctl_t *ksh;
100 #endif
101 		pthread_t _thread;
102 		double updateTime;
103 		double nextIPAddressTime;
104 };
105 
106 #endif
107