Code

f6806013287b7e6df94151d96f4b180c4a8f996f
[gosa.git] / gosa-core / plugins / generic / statistics / class_statistics.inc
1 <?php
3 class statistics extends plugin
4 {
5     var $plHeadline = 'Statistics';
6     var $plDescription = 'GOsa usage statistics';
7     var $plShortIcon = 'statistics.png';
8     var $plIcon = 'plugin.png';
9     
10     var $rpcHandle = NULL;
11     var $rpcConfigured = FALSE;
13     var $graphID_1 = 0;
15     function __construct($config)
16     {
17         plugin::plugin($config, NULL);
19         // First try to retrieve values via RPC
20         $this->rpcConfigured = FALSE;
21         if ($this->config->get_cfg_value("core","gosaRpcServer") != ""){
22             $this->rpcConfigured = TRUE;
23             $this->rpcHandle = $this->config->getRpcHandle(
24                     "http://10.3.64.59:4000",
25                     "65717fe6-9e3e-11df-b010-5452005f1250",
26                     "WyukwauWoid2",
27                     TRUE);
28         }
29     }
31     function execute()
32     {
33         $smarty = get_smarty();
35         // Do not render anything if we are not prepared to send and receive data via rpc.
36         $smarty->assign("rpcConfigured", $this->rpcConfigured);
37         $smarty->assign("validRpcHandle", TRUE);
38         if(!$this->rpcConfigured || !$this->rpcHandle){
39             $smarty->assign("validRpcHandle", FALSE);
40             return($smarty->fetch(get_template_path('statistics.tpl', TRUE)));
41         }
43         // Send stats 
44         if(isset($_POST['transmitStatistics'])){
45             $tmp = stats::dumpTables();
46             $dump = array();
47             foreach($tmp as $entry){
48                 $dump[] = array_values($entry);
49             }
50             $res = $this->rpcHandle->updateInstanceStatus($dump);
51             if(!$this->rpcHandle->success()){
52                 msg_dialog::display(_("Error"),msgPool::rpcError($this->rpcHandle->get_error()),ERROR_DIALOG);
53             }else{
54                 echo $res." Entries inserted";
55             }
56         }
58         // Transmit daily statistics to GOsa-Server
59         if(isset($_POST['receiveStatistics'])){
61             // First try to retrieve values via RPC
62             if ($this->config->get_cfg_value("core","gosaRpcServer") != ""){
63                 $res = $this->rpcHandle->getInstanceStats();
64                 if(!$this->rpcHandle->success()){
65                     msg_dialog::display(_("Error"),msgPool::rpcError($this->rpcHandle->get_error()),ERROR_DIALOG);
66                 }
68                 if($res){
70                     // Include pChart 
71                     new pChartInclude();
73                     // --------
74                     // Generate PIE chart of most used categories
75                     // --------
77                     // Get most used categories, but only eight at once.
78                     arsort($res['category_count']);
79                     $mostUsedCategories = array_slice($res['category_count'],0,8);
81                     // Dataset definition   
82                     $DataSet = new pData;  
83                     $this->graphID_1 = preg_replace("/[^0-9]/","",microtime(TRUE));
84                     $DataSet->AddPoint(array_values($mostUsedCategories),"Serie1");  
85                     $DataSet->AddPoint(array_keys($mostUsedCategories),"Serie2");  
86                     $DataSet->AddAllSeries();  
87                     $DataSet->SetAbsciseLabelSerie("Serie2");  
89                     // Initialise the graph  
90                     $Test = new pChart(400,200);  
91                     $Test->setFontProperties("./themes/default/fonts/LiberationSans-Regular.ttf",8);  
92                     $Test->drawPieGraph($DataSet->GetData(),$DataSet->GetDataDescription(),150,90,110,PIE_PERCENTAGE,TRUE,50,20,5);  
93                     $Test->drawPieLegend(310,15,$DataSet->GetData(),$DataSet->GetDataDescription(),200,255,200);  
95                     $file = '/tmp/graph_'.$this->graphID_1;
96                     $Test->Render($file);
97                     session::set('statistics::graphFile'.$this->graphID_1,$file);
100                     // --------
101                     // Generate combined line and car chart of plugin usage, ldap execution time and errors 
102                     // --------
104                     // Generate new and unique graph id
105                     $this->graphID_2 = preg_replace("/[^0-9]/","",microtime(TRUE));
107                     // Build up DataSet. 
108                     $tmp = array();
109                     $DataSet2 = new pData;  
110                     $dates = array();
111                     $max = 0;
113                     foreach($res['action_per_date'] as $id => $data){
115                         $category = $data['category'];
116                         $date =  $data['date'];
118                         if(!isset($mostUsedCategories[$category])) continue;
120                         if($data['count'] > $max) $max = $data['count'];
121                         $tmp[$category][$date] = $data['count'];
122                         $dates[$date] = $date;
123                     }
124                     $dMin = min($dates);
125                     $dMax = max($dates);
126                     for($i = $dMin; $i < $dMax; $i += (24*60*60)){
127                         if(!in_array($i,$dates)) $dates[$i] = $i;
128                     }
129                     $dates = array_values($dates);
130                     sort($dates);
132                     foreach($tmp as $category => $data){
133                         reset($dates);
134                         foreach($dates as $date){
135                             if(!isset($tmp[$category][$date])){
136                                 $tmp[$category][$date] = 0;
137                             }
138                         }     
139                         ksort($tmp[$category]);
140                         
141                         $DataSet2->AddPoint($tmp[$category], $category);
142                         $DataSet2->SetSerieName(_($category), $category);
143                     }
144                    
145                     $DataSet2->AddAllSeries();  
147                     $tmp = array();
148                     foreach($dates as $date) $tmp[] = date('d.m', $date);
150                     $DataSet2->AddPoint($tmp, 'date');
151                     $DataSet2->SetAbsciseLabelSerie('date');  
152                     $DataSet2->RemoveSerie('date');  
154                     $Test2 = new pChart(700,230);  
155                     $Test2->setFixedScale(0,$max);  
156                     $Test2->setFontProperties("./themes/default/fonts/LiberationSans-Regular.ttf",8);  
157                     $Test2->setGraphArea(50,30,585,200);  
158                     $Test2->drawFilledRoundedRectangle(7,7,693,223,5,240,240,240);  
159                     $Test2->drawRoundedRectangle(5,5,695,225,5,230,230,230);  
160                     $Test2->drawGraphArea(255,255,255,TRUE);  
161                     $Test2->drawScale($DataSet2->GetData(),$DataSet2->GetDataDescription(),SCALE_NORMAL,150,150,150,TRUE,0,2);     
162                     $Test2->drawGrid(4,TRUE,230,230,230,50);  
164                     // Draw the 0 line  
165                     $Test2->drawTreshold(0,143,55,72,TRUE,TRUE);  
167                     // Draw the cubic curve graph  
168 #                    $Test2->drawBarGraph($DataSet2->GetData(),$DataSet2->GetDataDescription(),TRUE);  
169                     $Test2->drawLineGraph($DataSet2->GetData(),$DataSet2->GetDataDescription(),TRUE);  
171                     // Finish the graph  
172                     $DataSet2->RemoveSerie('date');  
173                     $Test2->drawLegend(600,30,$DataSet2->GetDataDescription(),255,255,255);  
174                     $Test2->drawTitle(50,22,"Plugin usage over time",50,50,50,585);  
176                     $file = '/tmp/graph_'.$this->graphID_2;
177                     $Test2->Render($file);
178                     session::set('statistics::graphFile'.$this->graphID_2,$file);
179                 }
180             }
181         }
183         $smarty->assign('graphID_1', $this->graphID_1);
184         $smarty->assign('graphID_2', $this->graphID_2);
185         return($smarty->fetch(get_template_path('statistics.tpl', TRUE)));
186     }
188     function check()
189     {
190         $messages = plugin::check();
191         return($messages);
192     }
194     function save_object()
195     {
196         plugin::save_object();
197     }
199 ?>