Code

Ensure we either call the plugins constructor or manually set the initTime variable...
[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 "</pre>";
333         echo sqlite_error_string($ret);
334     }
338 ?>