Code

Updated rSyslog plugin
[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   function rsyslog (&$config, $dn= NULL)
13   {
14     $this->config= &$config;
15     $this->ui = get_userinfo();
17     // Get list of rsyslog servers 
18     $ldap = $this->config->get_ldap_link();
19     $ldap->cd($this->config->current['BASE']);
20     $ldap->search("objectClass=rSyslogServer",array("cn","rSyslogUser","rSyslogDatabase","rSyslogPassword"));
21     while($attrs = $ldap->fetch()){
22       if(empty($this->selected_server)) $this->selected_server = $attrs['cn'][0];
23       $s = array('cn' => $attrs['cn'][0], 'dn' => $attrs['dn'], 'Password' => '', 'status' => 'ok');
24       $s['User'] = $attrs['rSyslogUser'][0]; 
25       $s['Database'] = $attrs['rSyslogDatabase'][0]; 
26       $s['Hosts'] = array();
27       $s['ACL'] = "";
28       if(isset($attrs['rSyslogPassword'])) $s['Password'] = $attrs['rSyslogPassword'][0];
29       $this->servers[$attrs['cn'][0]] = $s;
30     }
32     // Check for installed mysql extension, if missing abort
33     $this->mysql_extension_installed = is_callable("mysql_connect");
34     if(!$this->mysql_extension_installed) return;
36     // Test server connetivity 
37     $ui = get_userinfo();
38     foreach($this->servers as $name => $server)  
39     {
40       $link = @mysql_pconnect($server['cn'], $server['User'], $server['Password']);
41       if ($link === FALSE){
42         new log("debug","gosa_logging","dbconnect",array(),@mysql_error());
43         $this->servers[$name]['status'] = "connectfailed";
44         $this->servers[$name]['error']  = @mysql_error();
45         continue;
46       }elseif (! @mysql_select_db($server['Database'])){
47         new log("debug","gosa_logging","selectdb",array(),@mysql_error());
48         $this->servers[$name]['status'] = "dbmissing";
49         $this->servers[$name]['error']  = @mysql_error();
50         continue;
51       }else{
52         $this->servers[$name]['status'] = "ok";
53         $this->servers[$name]['error']  = "";
55         // Detect ACLs
56         $this->servers[$name]['ACL'] =  $ui->get_permissions($server['dn'], 'server/rsyslog','viewEntries');
58         // Get list of Hosts using this log server..
59         if(preg_match('/r/', $this->servers[$name]['ACL'])){
60           $query = "SELECT distinct(FromHost) FROM SystemEvents;";
61           $res = @mysql_query($query, $link);
62           if($res){
63             while($attrs = @mysql_fetch_assoc($res)){
64               $this->servers[$name]['Hosts'][$attrs['FromHost']] = $attrs['FromHost'];  
65             }
66           }else{
67             $this->servers[$name]['status'] = "query_failed";
68             $this->servers[$name]['error']  = @mysql_error();
69           }
70         }
71       }
72     }
73   }
75   function execute()
76   {
77     $smarty = get_smarty();
78     $ui = get_userinfo();
79     
80     if(!isset($this->servers[$this->selected_server]) || !count($this->servers[$this->selected_server]['Hosts'])){
81       $hosts = array('-' => _("-"));
82     }else{
83       $hosts = array('all' => _("All"));
84       $hosts = array_merge($hosts,$this->servers[$this->selected_server]['Hosts']);
85     }
87     $smarty->assign("servers",$this->servers);
88     $smarty->assign("hosts",$hosts);
89     $smarty->assign("selected_server",$this->selected_server);
90     $smarty->assign("selected_host",$this->selected_host);
91     $smarty->assign("result", $this->get_result());
92     return($smarty->fetch(get_template_path("rSyslog.tpl", TRUE)));
93   }
95   function get_result()
96   {
97     $result = array();
98     $result['entries'] = array();
99     $result['status']  = "ok";
100     $result['error']   = "";
102     // Check whether the selected server exists.
103     if(!isset($this->servers[$this->selected_server])){
104       $this->servers[$name]['status'] = sprintf(_("The selected server '%s' does not exists!"),$this->selected_server);
105       $this->servers[$name]['error']  = $this->servers[$this->selected_server]['error'];
106       return($result);
107     }
109     // Check database connectivity    
110     $name = $this->selected_server;
111     $server = $this->servers[$name];
112     $link = @mysql_pconnect($server['cn'], $server['User'], $server['Password']);
113     if ($link === FALSE){
114       new log("debug","gosa_logging","dbconnect",array(),@mysql_error());
115       $this->servers[$name]['status'] = "connectfailed";
116       $this->servers[$name]['error']  = @mysql_error();
117     }elseif (! @mysql_select_db($server['Database'])){
118       new log("debug","gosa_logging","selectdb",array(),@mysql_error());
119       $this->servers[$name]['status'] = "dbmissing";
120       $this->servers[$name]['error']  = @mysql_error();
121     }else{
122       $this->servers[$name]['status'] = "ok";
123       $this->servers[$name]['error']  = "";
124     }
126     // Get log entries matching the selected filter
127     if(preg_match('/r/', $this->servers[$name]['ACL'])){
128       $query = "SELECT * FROM SystemEvents LIMIT 10;";
129       $res = @mysql_query($query, $link);
130       if($res){
131         while($attrs = @mysql_fetch_assoc($res)){
132           $result['entries'][] = $attrs;
133         }
134         $this->servers[$name]['status'] = "ok";
135         $this->servers[$name]['error']  = "";
136       }else{
137         $this->servers[$name]['status'] = "query_failed";
138         $this->servers[$name]['error']  = @mysql_error();
139       }
140     }
141     $result['status'] =$this->servers[$name]['status'];
142     $result['error'] =$this->servers[$name]['error'];
143     return($result);
144   }
147   function save_object()
148   {
149     foreach(array("selected_host","selected_server") as $attr){
150       if(isset($_POST[$attr])) $this->$attr = get_post($attr);
151     }
152   }
154 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
155 ?>