8a41d69797abc9c9a13f69dc4e390dbfb22c93db
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 = "all";
11 var $selected_priority = "all";
13 var $startTime = "";
14 var $stopTime = "";
16 var $search_for ="";
18 var $sort_value = "FromHost";
19 var $sort_type = "DESC";
20 var $limit = "0";
21 var $limits = array(20,50,100,200,500,1000,'-');
22 var $page = 0;
24 function rsyslog (&$config, $dn= NULL)
25 {
26 $this->config= &$config;
27 $this->ui = get_userinfo();
29 $this->startTime = date("d.m.Y", (time() - 7*24*60*60));
30 $this->stopTime = date("d.m.Y", time());
32 // Get list of rsyslog servers
33 $ldap = $this->config->get_ldap_link();
34 $ldap->cd($this->config->current['BASE']);
35 $ldap->search("objectClass=rSyslogServer",array("cn","rSyslogUser","rSyslogDatabase","rSyslogPassword"));
36 while($attrs = $ldap->fetch()){
37 if(empty($this->selected_server)) $this->selected_server = $attrs['cn'][0];
38 $s = array('cn' => $attrs['cn'][0], 'dn' => $attrs['dn'], 'Password' => '', 'status' => 'ok');
39 $s['User'] = $attrs['rSyslogUser'][0];
40 $s['Database'] = $attrs['rSyslogDatabase'][0];
41 $s['Hosts'] = array();
42 $s['Priorities'] = array();
43 $s['ACL'] = "";
44 if(isset($attrs['rSyslogPassword'])) $s['Password'] = $attrs['rSyslogPassword'][0];
45 $this->servers[$attrs['cn'][0]] = $s;
46 }
48 // Check for installed mysql extension, if missing abort
49 $this->mysql_extension_installed = is_callable("mysql_connect");
50 if(!$this->mysql_extension_installed) return;
52 // Test server connetivity
53 $ui = get_userinfo();
54 foreach($this->servers as $name => $server)
55 {
56 $link = @mysql_pconnect($server['cn'], $server['User'], $server['Password']);
57 if ($link === FALSE){
58 new log("debug","gosa_logging","dbconnect",array(),@mysql_error());
59 $this->servers[$name]['status'] = "connectfailed";
60 $this->servers[$name]['error'] = @mysql_error();
61 continue;
62 }elseif (! @mysql_select_db($server['Database'])){
63 new log("debug","gosa_logging","selectdb",array(),@mysql_error());
64 $this->servers[$name]['status'] = "dbmissing";
65 $this->servers[$name]['error'] = @mysql_error();
66 continue;
67 }else{
68 $this->servers[$name]['status'] = "ok";
69 $this->servers[$name]['error'] = "";
71 // Detect ACLs
72 $this->servers[$name]['ACL'] = $ui->get_permissions($server['dn'], 'server/rsyslog','viewEntries');
74 // Get list of Hosts using this log server..
75 if(preg_match('/r/', $this->servers[$name]['ACL'])){
76 $query = "SELECT distinct(FromHost) FROM SystemEvents;";
77 $res = @mysql_query($query, $link);
78 if($res){
79 while($attrs = @mysql_fetch_assoc($res)){
80 $this->servers[$name]['Hosts'][$attrs['FromHost']] = $attrs['FromHost'];
81 }
82 }else{
83 $this->servers[$name]['status'] = "query_failed";
84 $this->servers[$name]['error'] = @mysql_error();
85 }
86 $query = "SELECT distinct(Priority) FROM SystemEvents ORDER BY Priority;";
87 $res = @mysql_query($query, $link);
88 if($res){
89 while($attrs = @mysql_fetch_assoc($res)){
90 $this->servers[$name]['Priorities'][$attrs['Priority']] = $attrs['Priority'];
91 }
92 }else{
93 $this->servers[$name]['status'] = "query_failed";
94 $this->servers[$name]['error'] = @mysql_error();
95 }
96 }
97 }
98 }
99 }
101 function execute()
102 {
103 $smarty = get_smarty();
104 $smarty->assign("usePrototype", "true");
105 $ui = get_userinfo();
107 if(!isset($this->servers[$this->selected_server]) || !count($this->servers[$this->selected_server]['Hosts'])){
108 $hosts = array('-' => _("-"));
109 }else{
110 $hosts = array('all' => _("All"));
111 $hosts = array_merge($hosts,$this->servers[$this->selected_server]['Hosts']);
112 }
113 if(!isset($this->servers[$this->selected_server]) || !count($this->servers[$this->selected_server]['Priorities'])){
114 $priorities = array('-' => _("-"));
115 }else{
116 $priorities = array('all' => _("All"));
117 foreach($this->servers[$this->selected_server]['Priorities'] as $id => $name){
118 $priorities[$id] = $name;
119 }
120 }
122 $result =$this->get_result();
124 $smarty->assign("servers",$this->servers);
125 $smarty->assign("hosts",$hosts);
126 $smarty->assign("priorities",$priorities);
127 $smarty->assign("selected_server",$this->selected_server);
128 $smarty->assign("selected_host",$this->selected_host);
129 $smarty->assign("selected_priority",$this->selected_priority);
130 $smarty->assign("search_for",$this->search_for);
131 $smarty->assign("startTime", $this->startTime);
132 $smarty->assign("stopTime", $this->stopTime);
133 $smarty->assign("sort_type", $this->sort_type);
134 $smarty->assign("sort_value", $this->sort_value);
135 $smarty->assign("limits", $this->limits);
136 $smarty->assign("limit", $this->limit);
137 $smarty->assign("page", $this->page);
138 $smarty->assign("plug_id", $_GET['plug']);
139 $smarty->assign("downimg", "<img src='images/lists/sort-down.png' class='center' alt='\\/' border='0'>");
140 $smarty->assign("upimg", "<img src='images/lists/sort-up.png' class='center' alt='\\/' border='0'>");
141 $smarty->assign("result", $result);
142 if($this->limit != '-'){
143 $smarty->assign("page_sel", range_selector($result['count'],$this->page,$this->limits[$this->limit]));
144 }else{
145 $smarty->assign("page_sel", "");
146 }
148 return($smarty->fetch(get_template_path("rSyslog.tpl", TRUE)));
149 }
151 function get_result()
152 {
153 $result = array();
154 $result['entries'] = array();
155 $result['status'] = "ok";
156 $result['count'] = 0;
157 $result['error'] = "";
159 // Check whether the selected server exists.
160 if(!isset($this->servers[$this->selected_server])){
161 $this->servers[$name]['status'] = sprintf(_("The selected server '%s' does not exists!"),$this->selected_server);
162 $this->servers[$name]['error'] = $this->servers[$this->selected_server]['error'];
163 return($result);
164 }
166 // Check database connectivity
167 $name = $this->selected_server;
168 $server = $this->servers[$name];
169 $link = @mysql_pconnect($server['cn'], $server['User'], $server['Password']);
170 if ($link === FALSE){
171 new log("debug","gosa_logging","dbconnect",array(),@mysql_error());
172 $this->servers[$name]['status'] = "connectfailed";
173 $this->servers[$name]['error'] = @mysql_error();
174 }elseif (! @mysql_select_db($server['Database'])){
175 new log("debug","gosa_logging","selectdb",array(),@mysql_error());
176 $this->servers[$name]['status'] = "dbmissing";
177 $this->servers[$name]['error'] = @mysql_error();
178 }else{
179 $this->servers[$name]['status'] = "ok";
180 $this->servers[$name]['error'] = "";
181 }
183 // Get log entries matching the selected filter
184 if(preg_match('/r/', $this->servers[$name]['ACL'])){
186 $host = "%%";
187 if($this->selected_host != "all") $host = $this->selected_host;
188 $prio = "%%";
189 if($this->selected_priority != "all") $prio = $this->selected_priority;
191 $filter = "FROM SystemEvents WHERE FromHost like '{$host}' ";
192 $filter.= "AND Priority like '{$prio}' ";
193 $filter.= "AND DeviceReportedTime >= '".(date("Y.m.d 00:00:00", strtotime($this->startTime)))."' ";
194 $filter.= "AND DeviceReportedTime <= '".(date("Y.m.d 23:59:59", strtotime($this->stopTime)))."' ";
196 if(!empty($this->search_for)){
197 $filter.= "AND ( ( SysLogTag like '%".$this->search_for."%' ) OR ( Message like '%".$this->search_for."%' ) ) ";
198 }
200 // Detect amount of matching entries
201 $query = "SELECT count(ID) as `amount` ".$filter;
202 $res = @mysql_query($query, $link);
203 if($res && $attrs = @mysql_fetch_assoc($res)){
204 $result['count'] = $attrs['amount'];
205 }else{
206 $this->servers[$name]['status'] = "query_failed";
207 $this->servers[$name]['error'] = @mysql_error();
208 }
210 if($result['count']){
212 if($result['count'] < $this->page) $this->page = 0;
214 $filter.= "ORDER BY ".$this->sort_value." ".$this->sort_type." ";
215 if($this->limit != "-"){
216 $filter.= "LIMIT ".$this->page.", ".$this->limits[$this->limit];
217 }else{
218 $this->page = 0;
219 }
221 $query = "SELECT * ".$filter;
222 $res = mysql_query($query, $link);
223 if($res){
224 while($attrs = @mysql_fetch_assoc($res)){
225 $result['entries'][] = $attrs;
226 }
227 $this->servers[$name]['status'] = "ok";
228 $this->servers[$name]['error'] = "";
229 }else{
230 $this->servers[$name]['status'] = "query_failed";
231 $this->servers[$name]['error'] = @mysql_error();
232 }
233 }
234 }
235 $result['status'] =$this->servers[$name]['status'];
236 $result['error'] =$this->servers[$name]['error'];
237 return($result);
238 }
241 function save_object()
242 {
243 // Get timestamps
244 foreach(array("stopTime","startTime") as $attr){
245 if(isset($_POST[$attr])) $this->$attr = get_post($attr);
246 }
248 // Get server from post
249 if( isset($_POST['selected_server']) && isset($this->servers[$_POST['selected_server']])){
250 $this->selected_server = $_POST['selected_server'];
251 }
253 // Get Host
254 if( isset($_POST['selected_host']) &&
255 ($_POST['selected_host'] == "all" ||
256 in_array($_POST['selected_host'],$this->servers[$this->selected_server]['Hosts']))){
257 $this->selected_host = $_POST['selected_host'];
258 }
260 // Get priority from post
261 if( isset($_POST['selected_priority']) &&
262 ($_POST['selected_priority'] == "all" ||
263 in_array($_POST['selected_priority'],$this->servers[$this->selected_server]['Priorities']))){
264 $this->selected_priority = $_POST['selected_priority'];
265 }
267 // Get serach string
268 if(isset($_POST['search_for'])){
269 $this->search_for = trim(get_post('search_for'));
270 }
272 // Get page navigation attributes
273 if(isset($_GET['start'])) $this->page = $_GET['start'];
274 if(isset($_POST['limit']) && isset($this->limits[$_POST['limit']])){
275 $this->limit = $_POST['limit'];
276 }
278 // Get sorting attributes
279 if(isset($_GET['sort_value']) && in_array($_GET['sort_value'],
280 array("DeviceReportedTime","FromHost","Facility","Priority","Message","SysLogTag"))){
281 $sort_value = $_GET['sort_value'];
282 if($this->sort_value == $sort_value){
283 if($this->sort_type == "ASC"){
284 $this->sort_type="DESC";
285 }else{
286 $this->sort_type="ASC";
287 }
288 }
289 $this->sort_value=$sort_value;
290 }
291 }
292 }
293 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
294 ?>