Code

Corrected defaults
[gosa.git] / gosa-plugins / rsyslog / addons / rsyslog / class_rsyslog.inc
1 <?php
3 class rsyslog extends plugin
4 {
5   var $plHeadline= "rSyslog";
6   var $plDescription= "View system logs";
8   var $servers = array();
9   var $selected_server = "";
10   var $selected_host = "%%";
12   var $startTime = "";
13   var $stopTime  = "";
15   var $sort_value  = "FromHost";
16   var $sort_type  = "DESC";
17   var $limit  = "0";
18   var $limits = array(20,50,100,200,500,1000,'-');
19   var $page   = 0;
21   function rsyslog (&$config, $dn= NULL)
22   {
23     $this->config= &$config;
24     $this->ui = get_userinfo();
26     $this->startTime = date("d.m.Y", (time() - 7*24*60*60));
27     $this->stopTime  = date("d.m.Y", time());
29     // Get list of rsyslog servers 
30     $ldap = $this->config->get_ldap_link();
31     $ldap->cd($this->config->current['BASE']);
32     $ldap->search("objectClass=rSyslogServer",array("cn","rSyslogUser","rSyslogDatabase","rSyslogPassword"));
33     while($attrs = $ldap->fetch()){
34       if(empty($this->selected_server)) $this->selected_server = $attrs['cn'][0];
35       $s = array('cn' => $attrs['cn'][0], 'dn' => $attrs['dn'], 'Password' => '', 'status' => 'ok');
36       $s['User'] = $attrs['rSyslogUser'][0]; 
37       $s['Database'] = $attrs['rSyslogDatabase'][0]; 
38       $s['Hosts'] = array();
39       $s['ACL'] = "";
40       if(isset($attrs['rSyslogPassword'])) $s['Password'] = $attrs['rSyslogPassword'][0];
41       $this->servers[$attrs['cn'][0]] = $s;
42     }
44     // Check for installed mysql extension, if missing abort
45     $this->mysql_extension_installed = is_callable("mysql_connect");
46     if(!$this->mysql_extension_installed) return;
48     // Test server connetivity 
49     $ui = get_userinfo();
50     foreach($this->servers as $name => $server)  
51     {
52       $link = @mysql_pconnect($server['cn'], $server['User'], $server['Password']);
53       if ($link === FALSE){
54         new log("debug","gosa_logging","dbconnect",array(),@mysql_error());
55         $this->servers[$name]['status'] = "connectfailed";
56         $this->servers[$name]['error']  = @mysql_error();
57         continue;
58       }elseif (! @mysql_select_db($server['Database'])){
59         new log("debug","gosa_logging","selectdb",array(),@mysql_error());
60         $this->servers[$name]['status'] = "dbmissing";
61         $this->servers[$name]['error']  = @mysql_error();
62         continue;
63       }else{
64         $this->servers[$name]['status'] = "ok";
65         $this->servers[$name]['error']  = "";
67         // Detect ACLs
68         $this->servers[$name]['ACL'] =  $ui->get_permissions($server['dn'], 'server/rsyslog','viewEntries');
70         // Get list of Hosts using this log server..
71         if(preg_match('/r/', $this->servers[$name]['ACL'])){
72           $query = "SELECT distinct(FromHost) FROM SystemEvents;";
73           $res = @mysql_query($query, $link);
74           if($res){
75             while($attrs = @mysql_fetch_assoc($res)){
76               $this->servers[$name]['Hosts'][$attrs['FromHost']] = $attrs['FromHost'];  
77             }
78           }else{
79             $this->servers[$name]['status'] = "query_failed";
80             $this->servers[$name]['error']  = @mysql_error();
81           }
82         }
83       }
84     }
85   }
87   function execute()
88   {
89     $smarty = get_smarty();
90     $smarty->assign("usePrototype", "true");
91     $ui = get_userinfo();
92     
93     if(!isset($this->servers[$this->selected_server]) || !count($this->servers[$this->selected_server]['Hosts'])){
94       $hosts = array('-' => _("-"));
95     }else{
96       $hosts = array('all' => _("All"));
97       $hosts = array_merge($hosts,$this->servers[$this->selected_server]['Hosts']);
98     }
100     $result =$this->get_result();
102     $smarty->assign("servers",$this->servers);
103     $smarty->assign("hosts",$hosts);
104     $smarty->assign("selected_server",$this->selected_server);
105     $smarty->assign("selected_host",$this->selected_host);
106     $smarty->assign("startTime",  $this->startTime);
107     $smarty->assign("stopTime",    $this->stopTime);
108     $smarty->assign("sort_type",    $this->sort_type);
109     $smarty->assign("sort_value",   $this->sort_value);
110     $smarty->assign("limits",   $this->limits);
111     $smarty->assign("limit",    $this->limit);
112     $smarty->assign("page",    $this->page);
113     $smarty->assign("plug_id", $_GET['plug']);
114     $smarty->assign("downimg", "<img src='images/lists/sort-down.png' class='center' alt='\\/' border='0'>");
115     $smarty->assign("upimg", "<img src='images/lists/sort-up.png' class='center' alt='\\/' border='0'>");
116     $smarty->assign("result", $result);
117     if($this->limit != '-'){
118       $smarty->assign("page_sel", range_selector($result['count'],$this->page,$this->limits[$this->limit]));
119     }else{
120       $smarty->assign("page_sel", "");
121     }
123     return($smarty->fetch(get_template_path("rSyslog.tpl", TRUE)));
124   }
126   function get_result()
127   {
128     $result = array();
129     $result['entries'] = array();
130     $result['status']  = "ok";
131     $result['count']   = 0;
132     $result['error']   = "";
134     // Check whether the selected server exists.
135     if(!isset($this->servers[$this->selected_server])){
136       $this->servers[$name]['status'] = sprintf(_("The selected server '%s' does not exists!"),$this->selected_server);
137       $this->servers[$name]['error']  = $this->servers[$this->selected_server]['error'];
138       return($result);
139     }
141     // Check database connectivity    
142     $name = $this->selected_server;
143     $server = $this->servers[$name];
144     $link = @mysql_pconnect($server['cn'], $server['User'], $server['Password']);
145     if ($link === FALSE){
146       new log("debug","gosa_logging","dbconnect",array(),@mysql_error());
147       $this->servers[$name]['status'] = "connectfailed";
148       $this->servers[$name]['error']  = @mysql_error();
149     }elseif (! @mysql_select_db($server['Database'])){
150       new log("debug","gosa_logging","selectdb",array(),@mysql_error());
151       $this->servers[$name]['status'] = "dbmissing";
152       $this->servers[$name]['error']  = @mysql_error();
153     }else{
154       $this->servers[$name]['status'] = "ok";
155       $this->servers[$name]['error']  = "";
156     }
158     // Get log entries matching the selected filter
159     if(preg_match('/r/', $this->servers[$name]['ACL'])){
161       $host = "%%";
162       if($this->selected_host != "all") $host = $this->selected_host;
164       $filter = "FROM SystemEvents WHERE FromHost like '{$host}' ";
165       $filter.= "AND DeviceReportedTime >= '".(date("Y.m.d 00:00:00", strtotime($this->startTime)))."' ";     
166       $filter.= "AND DeviceReportedTime <= '".(date("Y.m.d 23:59:59", strtotime($this->stopTime)))."' ";     
168       // Detect amount of matching entries 
169       $query = "SELECT count(ID) as `amount` ".$filter;
170       $res = @mysql_query($query, $link);
171       if($res && $attrs = @mysql_fetch_assoc($res)){ 
172         $result['count'] = $attrs['amount'];
173       }else{
174         $this->servers[$name]['status'] = "query_failed";
175         $this->servers[$name]['error']  = @mysql_error();
176       }
178       if($result['count']){
180         if($result['count'] < $this->page) $this->page = 0;
182         $filter.= "ORDER BY ".$this->sort_value." ".$this->sort_type." ";
183         if($this->limit != "-"){
184           $filter.= "LIMIT ".$this->page.", ".$this->limits[$this->limit];
185         }else{
186           $this->page = 0;
187         }
189         $query = "SELECT * ".$filter;
190         $res = mysql_query($query, $link);
191         if($res){
192           while($attrs = @mysql_fetch_assoc($res)){
193             $result['entries'][] = $attrs;
194           }
195           $this->servers[$name]['status'] = "ok";
196           $this->servers[$name]['error']  = "";
197         }else{
198           $this->servers[$name]['status'] = "query_failed";
199           $this->servers[$name]['error']  = @mysql_error();
200         }
201       }
202     }
203     $result['status'] =$this->servers[$name]['status'];
204     $result['error'] =$this->servers[$name]['error'];
205     return($result);
206   }
209   function save_object()
210   {
211     foreach(array("selected_host","selected_server","stopTime","startTime") as $attr){
212       if(isset($_POST[$attr])) $this->$attr = get_post($attr);
213     }
215     if(isset($_GET['start'])) $this->page = $_GET['start'];
216     if(isset($_POST['limit']) && isset($this->limits[$_POST['limit']])){
217       $this->limit = $_POST['limit'];
218     }
220     if(isset($_GET['sort_value']) && in_array($_GET['sort_value'], 
221           array("DeviceReportedTime","FromHost","Facility","Priority","Message"))){
222       $sort_value = $_GET['sort_value'];
223       if($this->sort_value == $sort_value){
224         if($this->sort_type == "ASC"){
225           $this->sort_type="DESC"; 
226         }else{
227           $this->sort_type="ASC"; 
228         }
229       } 
230       $this->sort_value=$sort_value; 
231     } 
232   }
234 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
235 ?>