06cf3f85ae0f07707528ae173e728caa8270606a
1 <?php
3 class stats
4 {
6 static protected $last_cpu_load = "";
7 static protected $last_cpu_load_stamp = 0;
10 static function checkDatabase()
11 {
12 $TABLE_NAME = 'stats';
14 // Check for modules
15 // php5-sqlite
18 // Try to create database, if it exists just open it.
19 $res = sqlite_open('/var/spool/gosa/stats', 0666, $error);
20 if(!$res){
21 return($res);
22 }
24 // Delete Table
25 $query = "DROP TABLE '{$TABLE_NAME}'";
26 # $ret = sqlite_query($query, $res);
28 // List Tables an check if there is already everything we need.
29 $query = "SELECT name FROM sqlite_master WHERE type='table' and name='{$TABLE_NAME}'";
30 $ret = sqlite_query($query, $res);
31 if(!count(sqlite_fetch_all($ret))){
33 // Check for table existance
34 $query = "
35 CREATE TABLE {$TABLE_NAME} (
36 ID INTEGER PRIMARY KEY,
37 ACTID INTEGER,
38 TYPE TEXT,
39 PLUGIN TEXT,
40 CATEGORY TEXT,
41 ACTION TEXT,
42 UUID TEXT,
43 TIMESTAMP INTEGER,
44 MTIMESTAMP REAL,
45 DURATION REAL,
46 AMOUNT INTEGER,
47 MEMORY_USAGE INTEGER,
48 CPU_LOAD FLOAT,
49 INFO BLOB
50 )";
51 $ret = sqlite_query($query, $res);
52 }
54 return($res);
55 }
59 static function log($type, $plugin, $category, $action, $amount = 1, $duration = 0, $info ='')
60 {
61 global $config;
62 global $clicks;
63 $type = sqlite_escape_string($type);
64 $plugin = sqlite_escape_string($plugin);
65 $action = sqlite_escape_string($action);
66 $timestamp = time();
67 $mtimestamp = microtime(TRUE);
68 $uuid = $config->getGOsaUUID();
69 $amount = sqlite_escape_string($amount);
70 $duration = sqlite_escape_string($duration);
71 $info = sqlite_escape_string($info);
72 $clicks = sqlite_escape_string($clicks);
73 $memory_usage = sqlite_escape_string(stats::get_memory_usage());
74 $cpu_load = sqlite_escape_string(stats::get_cpu_load());
76 $tmp = array();
77 foreach($category as $cat){
78 $tmp[] = trim($cat, '\/,; ');
79 }
80 $category = sqlite_escape_string(implode($tmp, ', '));
82 $res = stats::checkDatabase();
83 $TABLE_NAME = 'stats';
84 $query = "
85 INSERT INTO {$TABLE_NAME}
86 (ACTID, TYPE, PLUGIN, CATEGORY, ACTION, UUID, MTIMESTAMP, TIMESTAMP, AMOUNT, DURATION, MEMORY_USAGE, CPU_LOAD, INFO)
87 VALUES
88 ('{$clicks}','{$type}','{$plugin}','{$category}','{$action}','{$uuid}',
89 '{$mtimestamp}','{$timestamp}','{$amount}','{$duration}','{$memory_usage}','{$cpu_load}','{$info}')";
90 sqlite_query($query, $res);
91 }
93 static function get_memory_usage()
94 {
95 return(memory_get_usage());
96 }
98 static function get_cpu_load()
99 {
100 $cur = time();
101 if(empty(stats::$last_cpu_load) || (($cur - stats::$last_cpu_load_stamp) >=2 )){
102 list($one, $five, $ten) =preg_split("/ /",shell_exec('cat /proc/loadavg'));
103 stats::$last_cpu_load = $one;
104 stats::$last_cpu_load_stamp = $cur;
105 }
106 return(stats::$last_cpu_load);
107 }
109 static function show()
110 {
111 $res = stats::checkDatabase();
112 $TABLE_NAME = 'stats';
113 $query = "SELECT * FROM {$TABLE_NAME} ORDER BY MTIMESTAMP";
114 $query = "SELECT PLUGIN, ACTION, MAX(DURATION) as 'DURATION' FROM {$TABLE_NAME} WHERE ACTION='modify' GROUP BY PLUGIN,ACTION ";
115 $query = "SELECT * FROM {$TABLE_NAME} ORDER BY ID DESC LIMIT 30";
116 $query = "SELECT * FROM {$TABLE_NAME} WHERE plugin != 'LDAP' ORDER BY ID DESC LIMIT 30";
117 $ret = sqlite_query($query, $res);
118 echo "<pre>";
120 $colSize = 16;
122 $title = FALSE;
123 foreach(sqlite_fetch_all($ret) as $entry){
124 if(!$title){
125 foreach($entry as $key => $str) {
126 if(is_numeric($key)) continue;
127 echo str_pad($key,$colSize,' ')."|";
128 }
129 echo "\n";
130 foreach($entry as $key => $str) {
131 if(is_numeric($key)) continue;
132 echo str_pad('',$colSize,'-')."-";
133 }
134 echo "\n";
135 $title = TRUE;
136 }
138 foreach($entry as $key => $str){
139 if(is_numeric($key)) continue;
140 if($key == "DURATION" || $key == "MTIMESTAMP" || $key == "CPU_LOAD"){
141 $str = sprintf("%0.4f", preg_replace("/,/",".",$str));
142 echo str_pad($str,$colSize,' ', STR_PAD_LEFT)."|";
143 }else{
144 echo str_pad($str,$colSize,' ')."|";
145 }
146 }
147 echo "\n";
148 }
149 echo sqlite_error_string($ret);
151 echo "\n------ \n";
152 echo "Time spent per plugin-category \n";
153 echo "------ \n";
155 $query = "
156 SELECT SUM(DURATION) AS DUR, CATEGORY
157 FROM {$TABLE_NAME}
158 WHERE plugin != 'LDAP'
159 GROUP BY CATEGORY
160 ORDER BY DUR DESC LIMIT 10";
161 $ret = sqlite_query($query, $res);
163 $colSize = 16;
164 $title = FALSE;
165 foreach(sqlite_fetch_all($ret) as $entry){
166 foreach($entry as $key => $str){
167 if(is_numeric($key)) continue;
168 echo str_pad($str,$colSize,' ')."|";
169 }
170 echo "\n";
171 }
174 echo sqlite_error_string($ret);
176 echo "\n------ \n";
177 echo "Time spent per plugin \n";
178 echo "------ \n";
180 $query = "
181 SELECT SUM(DURATION) AS DUR, PLUGIN, UUID
182 FROM {$TABLE_NAME}
183 WHERE plugin != 'LDAP'
184 GROUP BY PLUGIN, UUID
185 ORDER BY DUR DESC LIMIT 10";
186 $ret = sqlite_query($query, $res);
188 $colSize = 16;
189 $title = FALSE;
190 foreach(sqlite_fetch_all($ret) as $entry){
191 foreach($entry as $key => $str){
192 if(is_numeric($key)) continue;
193 echo str_pad($str,$colSize,' ')."|";
194 }
195 echo "\n";
196 }
197 echo sqlite_error_string($ret);
199 # * Anzahl von Objekttypen
200 # * Anzahl der Löschungen pro Objekttyp
201 # * Anzahl der Erzeugungen pro Objekttyp
202 # * Anzahl der Bearbeitungen pro Objekttyp
203 # * Anzahl der Verschiebungen pro Objekttyp
204 # * Anzahl der Mehrfachbearbeitungen pro Objekttyp
205 # * Antwortzeiten pro aktion
206 # * Anzahl der Passwortänderungen
207 # * Anzahl der unterschiedlichen Anmeldungen
210 echo "\n------ \n";
211 echo "Actions done per plugin \n";
212 echo "------ \n";
214 $query = "
215 SELECT COUNT(ACTION) as CNT, ACTION, PLUGIN
216 FROM {$TABLE_NAME}
217 WHERE TYPE = 'plugin'
218 AND PLUGIN != 'LDAP'
219 GROUP BY ACTION,PLUGIN
220 ORDER BY CNT DESC LIMIT 30";
221 $ret = sqlite_query($query, $res);
223 $colSize = 16;
224 $title = FALSE;
225 foreach(sqlite_fetch_all($ret) as $entry){
226 foreach($entry as $key => $str){
227 if(is_numeric($key)) continue;
228 echo str_pad($str,$colSize,' ')."|";
229 }
230 echo "\n";
231 }
232 echo sqlite_error_string($ret);
234 echo "\n------ \n";
235 echo "'create' actions done per plugin (5 most)\n";
236 echo "------ \n";
238 $query = "
239 SELECT COUNT(ACTION) as CNT, ACTION, PLUGIN
240 FROM {$TABLE_NAME}
241 WHERE TYPE = 'plugin'
242 AND PLUGIN != 'LDAP'
243 AND ACTION = 'create'
244 GROUP BY ACTION,PLUGIN
245 ORDER BY CNT DESC LIMIT 5";
246 $ret = sqlite_query($query, $res);
248 $colSize = 16;
249 $title = FALSE;
250 foreach(sqlite_fetch_all($ret) as $entry){
251 foreach($entry as $key => $str){
252 if(is_numeric($key)) continue;
253 echo str_pad($str,$colSize,' ')."|";
254 }
255 echo "\n";
256 }
257 echo sqlite_error_string($ret);
259 echo "\n------ \n";
260 echo "'move' actions done per plugin (5 most)\n";
261 echo "------ \n";
263 $query = "
264 SELECT COUNT(ACTION) as CNT, ACTION, PLUGIN
265 FROM {$TABLE_NAME}
266 WHERE TYPE = 'plugin'
267 AND PLUGIN != 'LDAP'
268 AND ACTION = 'move'
269 GROUP BY ACTION,PLUGIN
270 ORDER BY CNT DESC LIMIT 5";
271 $ret = sqlite_query($query, $res);
273 $colSize = 16;
274 $title = FALSE;
275 foreach(sqlite_fetch_all($ret) as $entry){
276 foreach($entry as $key => $str){
277 if(is_numeric($key)) continue;
278 echo str_pad($str,$colSize,' ')."|";
279 }
280 echo "\n";
281 }
282 echo sqlite_error_string($ret);
284 echo "\n------ \n";
285 echo "'view' actions done per plugin (5 most)\n";
286 echo "------ \n";
288 $query = "
289 SELECT COUNT(ACTION) as CNT, ACTION, PLUGIN
290 FROM {$TABLE_NAME}
291 WHERE TYPE = 'plugin'
292 AND PLUGIN != 'LDAP'
293 AND ACTION = 'view'
294 GROUP BY ACTION,PLUGIN
295 ORDER BY CNT DESC LIMIT 5";
296 $ret = sqlite_query($query, $res);
298 $colSize = 16;
299 $title = FALSE;
300 foreach(sqlite_fetch_all($ret) as $entry){
301 foreach($entry as $key => $str){
302 if(is_numeric($key)) continue;
303 echo str_pad($str,$colSize,' ')."|";
304 }
305 echo "\n";
306 }
307 echo sqlite_error_string($ret);
309 echo "\n------ \n";
310 echo "'open' actions done per plugin (5 most)\n";
311 echo "------ \n";
313 $query = "
314 SELECT COUNT(ACTION) as CNT, ACTION, PLUGIN, UUID
315 FROM {$TABLE_NAME}
316 WHERE TYPE = 'plugin'
317 AND PLUGIN != 'LDAP'
318 AND ACTION = 'open'
319 GROUP BY ACTION,PLUGIN, UUID
320 ORDER BY CNT DESC LIMIT 5";
321 $ret = sqlite_query($query, $res);
323 $colSize = 16;
324 $title = FALSE;
325 foreach(sqlite_fetch_all($ret) as $entry){
326 foreach($entry as $key => $str){
327 if(is_numeric($key)) continue;
328 echo str_pad($str,$colSize,' ')."|";
329 }
330 echo "\n";
331 }
332 echo "</pre>";
333 echo sqlite_error_string($ret);
334 }
335 }
338 ?>