Code

Added some more queries for the stats db
[gosa.git] / gosa-core / include / class_stats.inc
1 <?php
3 class stats 
4 {
5     
6     static protected $last_cpu_load = "";
7     static protected $last_cpu_load_stamp = 0;
10     static function checkDatabase()
11     {
12         $TABLE_NAME = 'stats';
13     
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     }
108     
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             }
137  
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 sqlite_error_string($ret);
334         echo "\n------ \n";
335         echo "Time per session\n";
336         echo "------ \n";
338         $query = "
339             SELECT SUM(DURATION) as DUR, UUID
340             FROM {$TABLE_NAME}
341             GROUP BY UUID
342             ORDER BY DUR DESC LIMIT 10";
343         $ret = sqlite_query($query, $res);
345         $colSize = 16;
346         $title = FALSE;
347         foreach(sqlite_fetch_all($ret) as $entry){
348             foreach($entry as $key => $str){
349                 if(is_numeric($key)) continue;
350                 echo str_pad($str,$colSize,' ')."|"; 
351             }
352             echo "\n";
353         }
354         echo sqlite_error_string($ret);
356         echo "\n------ \n";
357         echo "Most used password hashes\n";
358         echo "------ \n";
360         $query = "
361             SELECT DISTINCT(INFO), COUNT(INFO) as CNT
362             FROM {$TABLE_NAME}
363             WHERE ACTION = 'change_password'
364             GROUP BY INFO
365             ORDER BY INFO DESC LIMIT 10";
366         $ret = sqlite_query($query, $res);
368         $colSize = 16;
369         $title = FALSE;
370         foreach(sqlite_fetch_all($ret) as $entry){
371             foreach($entry as $key => $str){
372                 if(is_numeric($key)) continue;
373                 echo str_pad($str,$colSize,' ')."|"; 
374             }
375             echo "\n";
376         }
377         echo sqlite_error_string($ret);
379         echo "\n------ \n";
380         echo "Actions at all\n";
381         echo "------ \n";
383         $query = "
384             SELECT DISTINCT(ACTION), COUNT(ACTION)  AS CNT
385             FROM {$TABLE_NAME}
386             GROUP BY ACTION
387             ORDER BY CNT DESC LIMIT 10";
388         $ret = sqlite_query($query, $res);
390         $colSize = 16;
391         $title = FALSE;
392         foreach(sqlite_fetch_all($ret) as $entry){
393             foreach($entry as $key => $str){
394                 if(is_numeric($key)) continue;
395                 echo str_pad($str,$colSize,' ')."|"; 
396             }
397             echo "\n";
398         }
399         echo sqlite_error_string($ret);
401         echo "\n------ \n";
402         echo "Time spent per action\n";
403         echo "------ \n";
405         $query = "
406             SELECT DISTINCT(ACTION), SUM(DURATION) AS DUR
407             FROM {$TABLE_NAME}
408             GROUP BY ACTION
409             ORDER BY DUR DESC LIMIT 10";
410         $ret = sqlite_query($query, $res);
412         $colSize = 16;
413         $title = FALSE;
414         foreach(sqlite_fetch_all($ret) as $entry){
415             foreach($entry as $key => $str){
416                 if(is_numeric($key)) continue;
417                 echo str_pad($str,$colSize,' ')."|"; 
418             }
419             echo "\n";
420         }
421         echo sqlite_error_string($ret);
423         echo "\n------ \n";
424         echo "Average time per action\n";
425         echo "------ \n";
427         $query = "
428             SELECT DISTINCT(ACTION), AVG(DURATION) AS DUR
429             FROM {$TABLE_NAME}
430             GROUP BY ACTION
431             ORDER BY DUR DESC LIMIT 10";
432         $ret = sqlite_query($query, $res);
434         $colSize = 16;
435         $title = FALSE;
436         foreach(sqlite_fetch_all($ret) as $entry){
437             foreach($entry as $key => $str){
438                 if(is_numeric($key)) continue;
439                 echo str_pad($str,$colSize,' ')."|"; 
440             }
441             echo "\n";
442         }
443         echo sqlite_error_string($ret);
445         echo "</pre>";
446     }
450 ?>