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                         )";
50             $ret = sqlite_query($query, $res);
51         }
53         return($res);
54     }
58     static function log($type, $plugin, $category, $action, $amount = 1, $duration = 0)
59     {
60         global $config;
61         global $clicks;
62         $type           = sqlite_escape_string($type);
63         $plugin         = sqlite_escape_string($plugin);
64         $action         = sqlite_escape_string($action);
65         $timestamp      = time();
66         $mtimestamp     = microtime(TRUE);
67         $uuid           = $config->getGOsaUUID();
68         $amount         = sqlite_escape_string($amount);
69         $duration       = sqlite_escape_string($duration);
70         $clicks         = sqlite_escape_string($clicks);
71         $memory_usage   = sqlite_escape_string(stats::get_memory_usage());
72         $cpu_load       = sqlite_escape_string(stats::get_cpu_load());
74         $tmp = array();
75         foreach($category as $cat){
76             $tmp[] = trim($cat, '\/,; ');
77         }
78         $category = sqlite_escape_string(implode($tmp, ', '));
80         $res = stats::checkDatabase();
81         $TABLE_NAME = 'stats';
82         $query = "
83             INSERT INTO {$TABLE_NAME}
84                 (ACTID, TYPE, PLUGIN, CATEGORY, ACTION, UUID, MTIMESTAMP, TIMESTAMP, AMOUNT, DURATION, MEMORY_USAGE, CPU_LOAD) 
85             VALUES 
86                 ('{$clicks}','{$type}','{$plugin}','{$category}','{$action}','{$uuid}',
87                     '{$mtimestamp}','{$timestamp}','{$amount}','{$duration}','{$memory_usage}','{$cpu_load}')";
88         sqlite_query($query, $res);
89     }
91     static function get_memory_usage()
92     {
93         return(memory_get_usage());
94     }
96     static function get_cpu_load()
97     {
98         $cur = time();
99         if(empty(stats::$last_cpu_load) || (($cur - stats::$last_cpu_load_stamp) >=2 )){
100             list($one, $five, $ten) =preg_split("/ /",shell_exec('cat /proc/loadavg'));
101             stats::$last_cpu_load = $one;
102             stats::$last_cpu_load_stamp = $cur;
103         }
104         return(stats::$last_cpu_load);
105     }
106     
107     static function show()
108     {
109         $res = stats::checkDatabase();
110         $TABLE_NAME = 'stats';
111         $query = "SELECT * FROM {$TABLE_NAME} ORDER BY MTIMESTAMP";
112         $query = "SELECT PLUGIN, ACTION, MAX(DURATION) as 'DURATION' FROM {$TABLE_NAME} WHERE ACTION='modify' GROUP BY PLUGIN,ACTION ";
113         $query = "SELECT * FROM {$TABLE_NAME} ORDER BY ID DESC LIMIT 30";
114         $query = "SELECT * FROM {$TABLE_NAME} WHERE plugin != 'LDAP' ORDER BY ID DESC LIMIT 30";
115         $ret = sqlite_query($query, $res);
116         echo "<pre>";
118         $colSize = 16;
120         $title = FALSE;
121         foreach(sqlite_fetch_all($ret) as $entry){
122             if(!$title){
123                 foreach($entry as $key => $str) {
124                     if(is_numeric($key)) continue;
125                     echo str_pad($key,$colSize,' ')."|";
126                 }
127                 echo "\n";
128                 foreach($entry as $key => $str) {
129                     if(is_numeric($key)) continue;
130                     echo str_pad('',$colSize,'-')."-";
131                 }
132                 echo "\n";
133                 $title = TRUE;
134             }
135  
136             foreach($entry as $key => $str){
137                 if(is_numeric($key)) continue;
138                 if($key == "DURATION" || $key == "MTIMESTAMP" || $key == "CPU_LOAD"){
139                     $str = sprintf("%0.4f", preg_replace("/,/",".",$str));
140                     echo str_pad($str,$colSize,' ', STR_PAD_LEFT)."|"; 
141                 }else{
142                     echo str_pad($str,$colSize,' ')."|"; 
143                 }
144             }
145             echo "\n";
146         }
147         echo sqlite_error_string($ret);
149         echo "\n------ \n";
150         echo "Time spent per plugin-category \n";
151         echo "------ \n";
153         $query = "
154             SELECT SUM(DURATION) AS DUR, CATEGORY 
155             FROM {$TABLE_NAME}
156             WHERE plugin != 'LDAP' 
157             GROUP BY CATEGORY 
158             ORDER BY DUR DESC LIMIT 10";
159         $ret = sqlite_query($query, $res);
161         $colSize = 16;
162         $title = FALSE;
163         foreach(sqlite_fetch_all($ret) as $entry){
164             foreach($entry as $key => $str){
165                 if(is_numeric($key)) continue;
166                 echo str_pad($str,$colSize,' ')."|"; 
167             }
168             echo "\n";
169         }
172         echo sqlite_error_string($ret);
174         echo "\n------ \n";
175         echo "Time spent per plugin \n";
176         echo "------ \n";
178         $query = "
179             SELECT SUM(DURATION) AS DUR, PLUGIN 
180             FROM {$TABLE_NAME}
181             WHERE plugin != 'LDAP' 
182             GROUP BY PLUGIN 
183             ORDER BY DUR DESC LIMIT 10";
184         $ret = sqlite_query($query, $res);
186         $colSize = 16;
187         $title = FALSE;
188         foreach(sqlite_fetch_all($ret) as $entry){
189             foreach($entry as $key => $str){
190                 if(is_numeric($key)) continue;
191                 echo str_pad($str,$colSize,' ')."|"; 
192             }
193             echo "\n";
194         }
195         echo sqlite_error_string($ret);
197  # * Anzahl von Objekttypen
198  # * Anzahl der Löschungen pro Objekttyp
199  # * Anzahl der Erzeugungen pro Objekttyp
200  # * Anzahl der Bearbeitungen pro Objekttyp
201  # * Anzahl der Verschiebungen pro Objekttyp
202  # * Anzahl der Mehrfachbearbeitungen pro Objekttyp
203  # * Antwortzeiten pro aktion
204  # * Anzahl der Passwortänderungen
205  # * Anzahl der unterschiedlichen Anmeldungen
208         echo "\n------ \n";
209         echo "Actions done per plugin \n";
210         echo "------ \n";
212         $query = "
213             SELECT COUNT(ACTION) as CNT, ACTION, PLUGIN 
214             FROM {$TABLE_NAME}
215             WHERE   TYPE = 'plugin'
216              AND    PLUGIN != 'LDAP'
217             GROUP BY ACTION,PLUGIN 
218             ORDER BY CNT DESC LIMIT 30";
219         $ret = sqlite_query($query, $res);
221         $colSize = 16;
222         $title = FALSE;
223         foreach(sqlite_fetch_all($ret) as $entry){
224             foreach($entry as $key => $str){
225                 if(is_numeric($key)) continue;
226                 echo str_pad($str,$colSize,' ')."|"; 
227             }
228             echo "\n";
229         }
230         echo sqlite_error_string($ret);
232         echo "\n------ \n";
233         echo "'create' actions done per plugin  (5 most)\n";
234         echo "------ \n";
236         $query = "
237             SELECT COUNT(ACTION) as CNT, ACTION, PLUGIN 
238             FROM {$TABLE_NAME}
239             WHERE   TYPE = 'plugin'
240              AND    PLUGIN != 'LDAP'
241              AND    ACTION = 'create'
242             GROUP BY ACTION,PLUGIN 
243             ORDER BY CNT DESC LIMIT 5";
244         $ret = sqlite_query($query, $res);
246         $colSize = 16;
247         $title = FALSE;
248         foreach(sqlite_fetch_all($ret) as $entry){
249             foreach($entry as $key => $str){
250                 if(is_numeric($key)) continue;
251                 echo str_pad($str,$colSize,' ')."|"; 
252             }
253             echo "\n";
254         }
255         echo sqlite_error_string($ret);
257         echo "\n------ \n";
258         echo "'move' actions done per plugin  (5 most)\n";
259         echo "------ \n";
261         $query = "
262             SELECT COUNT(ACTION) as CNT, ACTION, PLUGIN 
263             FROM {$TABLE_NAME}
264             WHERE   TYPE = 'plugin'
265              AND    PLUGIN != 'LDAP'
266              AND    ACTION = 'move'
267             GROUP BY ACTION,PLUGIN 
268             ORDER BY CNT DESC LIMIT 5";
269         $ret = sqlite_query($query, $res);
271         $colSize = 16;
272         $title = FALSE;
273         foreach(sqlite_fetch_all($ret) as $entry){
274             foreach($entry as $key => $str){
275                 if(is_numeric($key)) continue;
276                 echo str_pad($str,$colSize,' ')."|"; 
277             }
278             echo "\n";
279         }
280         echo sqlite_error_string($ret);
282         echo "\n------ \n";
283         echo "'view' actions done per plugin  (5 most)\n";
284         echo "------ \n";
286         $query = "
287             SELECT COUNT(ACTION) as CNT, ACTION, PLUGIN 
288             FROM {$TABLE_NAME}
289             WHERE   TYPE = 'plugin'
290              AND    PLUGIN != 'LDAP'
291              AND    ACTION = 'view'
292             GROUP BY ACTION,PLUGIN 
293             ORDER BY CNT DESC LIMIT 5";
294         $ret = sqlite_query($query, $res);
296         $colSize = 16;
297         $title = FALSE;
298         foreach(sqlite_fetch_all($ret) as $entry){
299             foreach($entry as $key => $str){
300                 if(is_numeric($key)) continue;
301                 echo str_pad($str,$colSize,' ')."|"; 
302             }
303             echo "\n";
304         }
305         echo sqlite_error_string($ret);
307         echo "\n------ \n";
308         echo "'open' actions done per plugin  (5 most)\n";
309         echo "------ \n";
311         $query = "
312             SELECT COUNT(ACTION) as CNT, ACTION, PLUGIN 
313             FROM {$TABLE_NAME}
314             WHERE   TYPE = 'plugin'
315              AND    PLUGIN != 'LDAP'
316              AND    ACTION = 'open'
317             GROUP BY ACTION,PLUGIN 
318             ORDER BY CNT DESC LIMIT 5";
319         $ret = sqlite_query($query, $res);
321         $colSize = 16;
322         $title = FALSE;
323         foreach(sqlite_fetch_all($ret) as $entry){
324             foreach($entry as $key => $str){
325                 if(is_numeric($key)) continue;
326                 echo str_pad($str,$colSize,' ')."|"; 
327             }
328             echo "\n";
329         }
330         echo "</pre>";
331         echo sqlite_error_string($ret);
332     }
336 ?>