da20ef51139e69f57acacc39a1c02ec96f813a0d
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 = 20;
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();
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 }
233 }
234 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
235 ?>