From: cajus Date: Thu, 17 Jan 2008 08:23:21 +0000 (+0000) Subject: Updated logview X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=970bdf7f9c533b4e2019106e23935106c92a7985;p=gosa.git Updated logview git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@8428 594d385d-05f5-0310-b6e9-bd551577e9d8 --- diff --git a/gosa-core/plugins/addons/logview/class_gosa_logview.inc b/gosa-core/plugins/addons/logview/class_gosa_logview.inc deleted file mode 100644 index 9079abe39..000000000 --- a/gosa-core/plugins/addons/logview/class_gosa_logview.inc +++ /dev/null @@ -1,400 +0,0 @@ -config= &$config; - $this->ui = get_userinfo(); - - /* Restore last filter settings */ - $logview = session::get('logview'); - foreach(array("action","server","time","regex") as $attr){ - if(isset($logview['gosa_log'][$attr])){ - $this->$attr = $logview['gosa_log'][$attr]; - } - } - - $tz = timezone::get_default_timezone(); - $this->timezone_offset = $tz['value'] * 60 * 60 ; - - $ldap = $this->config->get_ldap_link(); - $ldap->search("(&(objectClass=person)(uid=*))",array("uid","dn")); - while($attrs = $ldap->fetch()){ - $this->uid_map[$attrs['dn']] = $attrs['uid'][0]; - } - } - - - function execute() - { - /* Call parent execute */ - plugin::execute(); - - /* Log view */ - if(!$this->view_logged){ - $this->view_logged = TRUE; - new log("view","logview/".get_class($this),$this->dn); - } - - /* Time interval */ - $date_select = array( - "0" => _("one hour"), "1" => _("6 hours"), - "2" => _("12 hours"), "3" => _("24 hours"), - "4" => _("2 days"), "5" => _("one week"), - "6" => _("2 weeks"), "7" => _("one month")); - - - $time = time(); - $date_select_ = array( - "0" => $time - 3600, - "1" => $time - 21600, - "2" => $time - 43200, - "3" => $time - 86400, - "4" => $time - 172800, - "5" => $time - 604800, - "6" => $time - 1209600, - "7" => $time - 2419200); - - $smarty= get_smarty(); - $smarty->assign("search_result", ""); - $smarty->assign("plug", "?plug=".validate($_GET['plug'])); - $smarty->assign("search_image", get_template_path('images/search.png')); - $smarty->assign("time_image", get_template_path('images/time.png')); - $smarty->assign("server_image", get_template_path('images/server.png')); - $smarty->assign("log_image", get_template_path('images/log_warning.png')); - $smarty->assign("ruleset_image", get_template_path('images/edit.png')); - $smarty->assign("launchimage", get_template_path('images/launch.png')); - $smarty->assign("date_select", $date_select); - $smarty->assign("actions", array()); - $smarty->assign("direction", "up"); - $smarty->assign("mode0", ""); - $smarty->assign("mode1", ""); - $smarty->assign("mode2", ""); - $smarty->assign("mode3", ""); - $smarty->assign("mode4", ""); - $smarty->assign("mode5", ""); - $smarty->assign("mode6", ""); - - /* Assign select option content */ - foreach( array("server", "action", "time", "regex") as $type){ - $smarty->assign("$type", $this->$type); - } - - /**** - * Check if defined servers - * and mysql extension - ****/ - if (!isset($this->config->data['SERVERS']['LOGGING']) || !count($this->config->data['SERVERS']['LOGGING'])){ - msg_dialog::display(_("Warning"), sprintf(_("No %s servers defined!"), "GOsa log"), WARNING_DIALOG); - return ($smarty->fetch (get_template_path('gosa_log_contents.tpl', TRUE))); - } - - if(!is_callable("mysql_connect")){ - msg_dialog::display(_("Configuration error"), sprintf(_("Missing %s PHP extension!"), "mysql"), WARNING_DIALOG); - return ($smarty->fetch (get_template_path('gosa_log_contents.tpl', TRUE))); - } - - /**** - * Get Configurations - ****/ - $list_of_servers = $this->config->data['SERVERS']['LOGGING']; - $servers = array(); - foreach($list_of_servers as $servername => $data){ - $servers[$servername] = $servername; - } - $smarty->assign("servers", $servers); - - /* Set a default server, if there is currently no valid server selected */ - if(empty($this->server) || !in_array($this->server,$servers)){ - $this->server = key($servers); - } - - /**** - * Connect to currently selected server - ****/ - $cfg = $list_of_servers[$this->server]; - $link = @mysql_pconnect($this->server, $cfg['USER'], $cfg['PWD']); - if ($link === FALSE){ - msg_dialog::display(_("Error"), sprintf(_("Cannot connect to %s database!"), "GOsa LOG"), ERROR_DIALOG); - new log("debug","logview","",array(),@mysql_error()); - return ($smarty->fetch (get_template_path('gosa_log_contents.tpl', TRUE))); - } - - /* check of log database is available */ - if (! @mysql_select_db($cfg['DB'])){ - msg_dialog::display(_("Error"), sprintf(_("Cannot select %s database!"), "GOsa LOG"), ERROR_DIALOG); - new log("debug","logview","",array(),@mysql_error()); - return ($smarty->fetch (get_template_path('gosa_log_contents.tpl', TRUE))); - } - - - /**** - * Get all action types - ****/ - - $actions = array("!ALL" => _("All")); - $query = "SELECT distinct(action) FROM gosa_log;"; - $res = @mysql_query($query); - while($attrs = @mysql_fetch_assoc($res)){ - $actions[$attrs['action']] = $attrs['action']; - } - - - /**** - * Check Acls - ****/ - - $ui = get_userinfo(); - $dn = $list_of_servers[$this->server]['DN']; - $acls = $ui->get_permissions($dn,"server/gosaLogServer","viewEntries"); - - if(!preg_match("/r/",$acls)){ - $res = " - - "._("You have insufficient permissions to view syslog entries.")." - - "; - - /* Show main page */ - $smarty->assign("range_selector", ""); - $smarty->assign("search_result", $res); - return ($smarty->fetch (get_template_path('gosa_log_contents.tpl', TRUE))); - } - - - /**** - * Query stuff - ****/ - $res= ""; - $cfg = $list_of_servers[$this->server]; - $link = @mysql_pconnect($this->server, $cfg['USER'], $cfg['PWD']); - - /* Test connection object && create up query string */ - if ($link === FALSE){ - msg_dialog::display(_("Error"), sprintf(_("Cannot connect to %s database!"), "GOsa LOG"), ERROR_DIALOG); - new log("debug","logview","",array(),@mysql_error()); - } else { - - if (! @mysql_select_db($cfg['DB'])){ - msg_dialog::display(_("Error"), sprintf(_("Cannot select %s database!"), "GOsa LOG"), ERROR_DIALOG); - new log("debug","logview","",array(),@mysql_error()); - } else { - - /* Prepare order setting */ - if ($this->sort_direction == "down"){ - $desc= "DESC"; - $sort_sign = "\/"; - } else { - $desc= ""; - $sort_sign = "/\"; - } - - /* Get start time */ - $start = $date_select_[$this->time]; - - /* Prepare search filter */ - $sql_regex =trim(preg_replace("/\*/","%",$this->regex)); - $sql_regex = "%".trim($sql_regex,"%")."%"; - - /* Create search filter */ - $query_base= "FROM gosa_log WHERE timestamp >= $start "; - - /* Append action filter */ - if($this->action != "!ALL"){ - $query_base .=" AND action like '".$this->action."' "; - } - - /* Append search filter */ - if($sql_regex != "%%"){ - $query_base .=" AND ( result like '".$sql_regex."' OR user like '".$sql_regex."') "; - } - - /* Get number of entries */ - $query= "SELECT COUNT(`user`) ".$query_base.";"; - $result = mysql_query($query); - if(!$result){ - new log("debug","logview","",array(),@mysql_error()); - } - $line= mysql_fetch_array($result, MYSQL_ASSOC); - $count= $line['COUNT(`user`)']; - if ($count > 25){ - $smarty->assign("range_selector", range_selector($count, $this->start, $this->range,"EntriesPerPage")); - } else { - $smarty->assign("range_selector", ""); - } - - /* Query results that will be displayed */ - $query= "SELECT * ".$query_base." ORDER BY ".$this->fields[$this->sort]." ".$desc." LIMIT ".$this->start.",".$this->range.";"; - @DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__, $query, "Database query"); - $result = @mysql_query($query); - if(!$result){ - new log("debug","logview","",array(),@mysql_error()); - } - - /* Display results */ - $mod= 0; - - /* Add entries to result str */ - while ($line = mysql_fetch_array($result, MYSQL_ASSOC)){ - - /* Toggle background color */ - if ( ($mod++) & 1){ - $col= "background-color: #ECECEC;"; - } else { - $col= "background-color: #F5F5F5;"; - } - - $base = ", ".substr($this->config->current['BASE'],0,5)."..."; - - if(isset($this->uid_map[$line['user']])){ - $user = $this->uid_map[$line['user']]; - }else{ - $user = preg_replace("/,".normalizePreg($this->config->current['BASE'])."/",$base,$line['user']); - } - $object = preg_replace("/,".normalizePreg($this->config->current['BASE'])."/",$base,$line['object']); - - $res.=" \n"; - $res.=" ".$line['action'].""; - $res.=" ".date("H:i:s d.m.Y",($line['timestamp'] + $this->timezone_offset)).""; - $res.=" ".preg_replace("/,/",", ",$user).""; - $res.=" ".$line['objecttype'].""; - $res.=" ".preg_replace("/,/",", ",$object).""; - $res.=" ".$line['result'].""; -# if($line['repeated'] == 1){ -# $res.=" -"; -# }else{ -# $res.=" ".($line['repeated']-1).""; -# } - $res.=" \n"; - } - mysql_close($link); - $smarty->assign("mode".$this->sort, $sort_sign); - $smarty->assign("search_result", $res); - } - } - - $smarty->assign("regex", $this->regex); - $smarty->assign("server",$this->server); - $smarty->assign("servers",$servers); - $smarty->assign("action",$this->action); - $smarty->assign("actions",$actions); - $smarty->assign("date_select", $date_select); - - $smarty->assign("direction", $this->sort_direction); - - /* Show main page */ - return ($smarty->fetch (get_template_path('gosa_log_contents.tpl', TRUE))); - } - - - function save_object() - { - if(isset($_POST['gosa_log_contents_posted'])){ - - /* Get submitted range */ - if(isset($_POST['EntriesPerPage'])){ - if(is_numeric($_POST['EntriesPerPage'])){ - $this->range = $_POST['EntriesPerPage']; - } - } - - /* Get actual select boxe values */ - $logfilter_changed = FALSE; - foreach( array("server", "action","time","regex") as $type){ - if(isset($_POST[$type])){ - $this->$type = $_POST[$type]; - } - } - - /* Filter regex values */ - if ($this->regex == ""){ - $this->regex= '*'; - } else { - $new = preg_replace('/\*\**/', '*', $this->regex); - $this->regex= $new; - } - - /* Set start value */ - if (isset($_GET['start'])){ - $this->start= (int)$_GET['start']; - } - - /* Reset page number if filter has changed */ - if ($logfilter_changed > 0){ - $this->start= 0; - } - - /* Adapt sorting */ - if (isset($_GET['sort'])){ - - if($_GET['direction'] == "up"){ - $this->sort_direction = "down"; - }else{ - $this->sort_direction = "up"; - } - - $this->sort= (int)$_GET['sort']; - if ($this->sort < 0 || $this->sort > count($this->fields)){ - $this->sort= 0; - } - } - - /* Save attributes in Sessiob, so we are able to recontruct filter on plugin reload */ - $logview = session::get('logview'); - $logview['gosa_log'] = array(); - foreach(array("action","server","time","regex") as $attr){ - $logview['gosa_log'][$attr] = $this->$attr; - } - session::set('logview',$logview); - } - } - - - /* Return plugin informations for acl handling - #FIXME You can only read attributes within this report plugin - static function plInfo() - { - return (array( - "plShortName" => _("Log view"), - "plDescription" => _("Log view addon"), - "plSelfModify" => FALSE, - "plDepends" => array(), - "plPriority" => 0, - "plSection" => array("addon"), - "plCategory" => array("logview" => array("objectClass" => "none", "description" => _("System logs"))), - - "plProvidedAcls" => array() - )); - } - */ -} -// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: -?> diff --git a/gosa-core/plugins/addons/logview/class_logview.inc b/gosa-core/plugins/addons/logview/class_logview.inc deleted file mode 100644 index 3349a69fa..000000000 --- a/gosa-core/plugins/addons/logview/class_logview.inc +++ /dev/null @@ -1,415 +0,0 @@ -config= &$config; - - /* Get global filter config */ - if (!session::is_set("logfilter")){ - $logfilter= array( - "time" => "1", - "log_level" => "!All", - "host" => "!All", - "regex" => "*"); - - session::set("logfilter", $logfilter); - } - - $this->ui = get_userinfo(); - } - - function execute() - { - /* Call parent execute */ - plugin::execute(); - - /* Log view */ - if(!$this->view_logged){ - $this->view_logged = TRUE; - new log("view","logview/".get_class($this),$this->dn); - } - - $logfilter= session::get("logfilter"); - $smarty= get_smarty(); - $smarty->assign("search_result", ""); - $smarty->assign("plug", "?plug=".validate($_GET['plug'])); - $smarty->assign("search_image", get_template_path('images/search.png')); - $smarty->assign("time_image", get_template_path('images/time.png')); - $smarty->assign("server_image", get_template_path('images/server.png')); - $smarty->assign("log_image", get_template_path('images/log_warning.png')); - $smarty->assign("ruleset_image", get_template_path('images/edit.png')); - $smarty->assign("launchimage", get_template_path('images/launch.png')); - $smarty->assign("hostlist", $this->hostlist); - $smarty->assign("loglevellist", $this->loglevellist); - $smarty->assign("tilist", $this->tilist); - $smarty->assign("mode0", ""); - $smarty->assign("mode1", ""); - $smarty->assign("mode2", ""); - $smarty->assign("mode3", ""); - - /* Assign select option content */ - foreach( array("host", "log_level", "time", "regex") as $type){ - $smarty->assign("$type", $logfilter[$type]); - } - - /* Test connection to log database */ - if (!isset($this->config->data['SERVERS']['LOG'])){ - msg_dialog::display(_("Warning"), sprintf(_("No %s servers defined!"), "syslog"), WARNING_DIALOG); - return ($smarty->fetch (get_template_path('contents.tpl', TRUE))); - - }elseif(!is_callable("mysql_connect")){ - msg_dialog::display(_("Configuration error"), sprintf(_("Missing %s PHP extension!"), "mysql"), WARNING_DIALOG); - return ($smarty->fetch (get_template_path('contents.tpl', TRUE))); - - }else{ - - /* Cehck connection informations */ - $cfg= $this->config->data['SERVERS']['LOG']; - - /* Open link to database and check if it is valid */ - $link = @mysql_pconnect($cfg['SERVER'], $cfg['LOGIN'], $cfg['PASSWORD']); - if ($link === FALSE){ - msg_dialog::display(_("Error"), sprintf(_("Cannot connect to %s database!"), "syslog"), ERROR_DIALOG); - new log("debug","logview","",array(),@mysql_error()); - return ($smarty->fetch (get_template_path('contents.tpl', TRUE))); - } - - /* check of log database is available */ - if (! @mysql_select_db("gomon")){ - msg_dialog::display(_("Error"), sprintf(_("Cannot select %s database!"), "syslog"), ERROR_DIALOG); - new log("debug","logview","",array(),@mysql_error()); - return ($smarty->fetch (get_template_path('contents.tpl', TRUE))); - } - - /* Get Host list, if still empty */ - if(count($this->hostlist) == 0){ - - /* Query database and check results */ - $query= "SELECT DISTINCT host FROM golog LIMIT 200;"; - @DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__, $query, "Database query"); - $result = @mysql_query($query); - if ($result === false){ - msg_dialog::display(_("Error"), _("Cannot obtain host list from syslog database!"), ERROR_DIALOG); - new log("debug","logview","",array(),@mysql_error()); - return ($smarty->fetch (get_template_path('contents.tpl', TRUE))); - } - - /* Add hostnames to list */ - while ($line = mysql_fetch_array($result, MYSQL_ASSOC)){ - $this->hostlist[$line['host']]= $line['host']; - } - $this->hostlist['!All']= _("All"); - ksort($this->hostlist); - $smarty->assign("hostlist", $this->hostlist); - } - - /* Get log level list */ - if(count($this->loglevellist) == 0){ - - /* Try to get all used log level types */ - $query= "SELECT DISTINCT log_level FROM golog LIMIT 200;"; - @DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__, $query, "Database query"); - $result = @mysql_query($query); - if ($result === false){ - new log("debug","logview","",array(),@mysql_error()); - msg_dialog::display(_("Error"), _("Database query failed!"), ERROR_DIALOG); - return ($smarty->fetch (get_template_path('contents.tpl', TRUE))); - } - - /* Add each etry to log level list */ - while ($line = mysql_fetch_array($result, MYSQL_ASSOC)){ - $this->loglevellist[$line['log_level']]= $line['log_level']; - } - $this->loglevellist['!All']= _("All"); - ksort($this->loglevellist); - $smarty->assign("loglevellist", $this->loglevellist); - } - } - - /* Set list of available time sequences */ - if(count($this->tilist) == 0){ - - /* Time interval */ - $this->tilist= array("0" => _("one hour"), "1" => _("6 hours"), - "2" => _("12 hours"), "3" => _("24 hours"), - "4" => _("2 days"), "5" => _("one week"), - "6" => _("2 weeks"), "7" => _("one month")); - $smarty->assign("tilist", $this->tilist); - } - - $smarty->assign("regex", $logfilter['regex']); - - - /* Get acls */ - - $tmp_cat_bases = $this->ui->get_module_departments("logview"); - $all_acls = ""; - foreach($tmp_cat_bases as $acl_base){ - $all_acls .= $this->ui->get_permissions($acl_base,"logview/logview"); - } - if(count($tmp_cat_bases) == 0 || !preg_match("/r/",$all_acls)){ - $res = " - - "._("You have insufficient permissions to view syslog entries.")." - - "; - - /* Show main page */ - $smarty->assign("range_selector", ""); - $smarty->assign("search_result", $res); - return ($smarty->fetch (get_template_path('contents.tpl', TRUE))); - } - - /* Query stuff */ - $res= ""; - $cfg = $this->config->data['SERVERS']['LOG']; - $tmp = set_error_handler('dummy_error_handler'); - $link = @mysql_pconnect($cfg['SERVER'], $cfg['LOGIN'], $cfg['PASSWORD']); - set_error_handler($tmp); - - /* Test connection object && create up query string */ - if ($link === FALSE){ - msg_dialog::display(_("Error"), sprintf(_("Cannot connect to %s database!"), "syslog"), ERROR_DIALOG); - new log("debug","logview","",array(),@mysql_error()); - } else { - if (! @mysql_select_db("gomon")){ - msg_dialog::display(_("Error"), sprintf(_("Cannot select %s database!"), "syslog"), ERROR_DIALOG); - new log("debug","logview","",array(),@mysql_error()); - } else { - - /* Assemble time query */ - switch ($logfilter['time']){ - case '0': - $start= date ("YmdHis", time() - 3600); - break; - ;; - case '1': - $start= date ("YmdHis", time() - 21600); - break; - ;; - case '2': - $start= date ("YmdHis", time() - 43200); - break; - ;; - case '3': - $start= date ("YmdHis", time() - 86400); - break; - ;; - case '4': - $start= date ("YmdHis", time() - 172800); - break; - ;; - case '5': - $start= date ("YmdHis", time() - 604800); - break; - ;; - case '6': - $start= date ("YmdHis", time() - 1209600); - break; - ;; - case '7': - $start= date ("YmdHis", time() - 2419200); - break; - ;; - } - - /* Assemble log level query */ - if ($logfilter['log_level'] == '!All'){ - $ll= ""; - } else { - $ll= "AND log_level='".$logfilter['log_level']."'"; - } - if ($logfilter['host'] == '!All'){ - $hf= ""; - } else { - $hf= "AND host='".$logfilter['host']."'"; - } - - /* Order setting */ - if ($this->sort_direction == "down"){ - $desc= "DESC"; - $sort_sign = "\\/"; - } else { - $desc= ""; - $sort_sign="/\\"; - } - $end= date ("YmdHis"); - $query_base= " FROM - golog - WHERE - message like '".preg_replace("/\*/","%",$logfilter['regex'])."' - $ll - $hf - AND - time_stamp <= $end AND time_stamp >= $start"; - - /* Get number of entries */ - $query= "SELECT COUNT(*)".$query_base.";"; - $result = @mysql_query($query); - if(!$result){ - new log("debug","logview","",array(),@mysql_error()); - } - $line= mysql_fetch_array($result, MYSQL_ASSOC); - $count= $line['COUNT(*)']; - if ($count > 25){ - $smarty->assign("range_selector", range_selector($count, $this->start, $this->range,"EntriesPerPage")); - } else { - $smarty->assign("range_selector", ""); - } - - /* Query results */ - $query= "SELECT *".$query_base." ORDER BY ".$this->fields[$this->sort]." $desc LIMIT ".$this->start.",".$this->range.";"; - @DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__, $query, "Database query"); - $result = @mysql_query($query); - if(!$result){ - new log("debug","logview","",array(),@mysql_error()); - } - /* Display results */ - $mod= 0; - - /* Add entries to result str */ - while ($line = mysql_fetch_array($result, MYSQL_ASSOC)){ - - /* Toggle background color */ - if ( ($mod++) & 1){ - $col= "background-color: #ECECEC;"; - } else { - $col= "background-color: #F5F5F5;"; - } - - $res.=" \n"; - $res.=" - \"".$line['log_level']."\" - "; - $res.=" ". - $line['host']." - "; - $res.=" ". - $line['time_stamp']." - "; - $res .= "". - $line['message']." - "; - $res.=" \n"; - } - mysql_close($link); - $smarty->assign("mode".$this->sort, $sort_sign); - $smarty->assign("host", $logfilter['host']); - $smarty->assign("log_level", $logfilter['log_level']); - - $smarty->assign("search_result", $res); - } - } - - /* Show main page */ - return ($smarty->fetch (get_template_path('contents.tpl', TRUE))); - } - - - function save_object() - { - /* Get submitted range */ - if(isset($_POST['EntriesPerPage'])){ - if(is_numeric($_POST['EntriesPerPage'])){ - $this->range = $_POST['EntriesPerPage']; - } - } - - /* Save data */ - $logfilter= session::get("logfilter"); - - /* Get actual select boxe values */ - $logfilter_changed = 0; - foreach( array("host", "time", "log_level", "regex") as $type){ - - /* Set new value and test if value has changed */ - $last[$type] = $logfilter[$type]; - if (isset($_POST[$type])){ - $logfilter[$type]= $_POST[$type]; - } - - if ($last[$type] != $logfilter[$type]){ - $logfilter_changed = 1; - } - } - - /* Filter regex values */ - if ($logfilter['regex'] == ""){ - $logfilter['regex']= '%'; - } else { - $new = preg_replace('/\*\**/', '*', $logfilter['regex']); - $logfilter['regex']= $new; - } - - /* Store filter values */ - session::set("logfilter", $logfilter); - - /* Set start value */ - if (isset($_GET['start'])){ - $this->start= (int)$_GET['start']; - } - - /* Reset page number if filter has changed */ - if ($logfilter_changed > 0){ - $this->start= 0; - } - - /* Adapt sorting */ - if (isset($_GET['sort'])){ - if ($this->sort == (int)$_GET['sort']){ - if ($this->sort_direction == "down"){ - $this->sort_direction= "up"; - } else { - $this->sort_direction= "down"; - } - } - $this->sort= (int)$_GET['sort']; - if ($this->sort < 0 || $this->sort > 3){ - $this->sort= 0; - } - } - } - - - /* Return plugin informations for acl handling - #FIXME You can only read attributes within this report plugin */ - static function plInfo() - { - return (array( - "plShortName" => _("Log view"), - "plDescription" => _("Log view addon"), - "plSelfModify" => FALSE, - "plDepends" => array(), - "plPriority" => 0, - "plSection" => array("addon"), - "plCategory" => array("logview" => array("objectClass" => "none", "description" => _("System logs"))), - - "plProvidedAcls" => array() - )); - } -} -// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: -?> diff --git a/gosa-core/plugins/addons/logview/contents.tpl b/gosa-core/plugins/addons/logview/contents.tpl deleted file mode 100644 index 9a03544f3..000000000 --- a/gosa-core/plugins/addons/logview/contents.tpl +++ /dev/null @@ -1,105 +0,0 @@ -
-

[F]{t}Filter{/t}

-
-
- - - - - - - - - - - - -
- - - - - - - - - -
  - -
  - -
-
-   - - - - - - - - - - -
  - -
 
-
-   - - - - - - -
- -
-
-
- -
- -{if $search_result ne ""} - - - - - - - - {$search_result} -
{t}Level{/t} {$mode0}{t}Hostname{/t} {$mode1}{t}Date{/t} {$mode2}{t}Message{/t} {$mode3}
- - - - - -
{$range_selector}
- -{else} - {t}Search returned no results...{/t} -{/if} - - - diff --git a/gosa-core/plugins/addons/logview/gosa_log_contents.tpl b/gosa-core/plugins/addons/logview/gosa_log_contents.tpl deleted file mode 100644 index 5d71d8103..000000000 --- a/gosa-core/plugins/addons/logview/gosa_log_contents.tpl +++ /dev/null @@ -1,107 +0,0 @@ -
-

[F]{t}Filter{/t}

-
-
- - - - - - - - - - - - -
- - - - - - - - - -
  - -
  - -
-
-   - - - - - - - - - - -
  - -
 
-
-   - - - - - - -
- -
-
-
- -
- -{if $search_result ne ""} - - - - - - - - - - {$search_result} -
{t}Action{/t} {$mode0}{t}Date{/t} {$mode1}{t}User{/t} {$mode2}{t}Object type{/t} {$mode3}{t}Object{/t} {$mode4}{t}Message{/t} {$mode5}
- - - - - -
{$range_selector}
- -{else} - {t}Search returned no results...{/t} -{/if} - - - diff --git a/gosa-core/plugins/addons/logview/main.inc b/gosa-core/plugins/addons/logview/main.inc deleted file mode 100644 index 5df3535ec..000000000 --- a/gosa-core/plugins/addons/logview/main.inc +++ /dev/null @@ -1,39 +0,0 @@ -data['TABS']['LOGTABS'],"")); - } - $log_tabs = session::get('log_tabs'); - - /* Execute formular */ -# $display= $log_tabs->save_object(); - $display= $log_tabs->execute (); - $display.= "\n"; - - /* Page header*/ - $display= print_header(get_template_path('images/logview.png'), _("System log view")).$display; - - /* Store changes in session */ - session::set('log_tabs',$log_tabs); -} -?> diff --git a/gosa-core/plugins/addons/logview/tabs_log.inc b/gosa-core/plugins/addons/logview/tabs_log.inc deleted file mode 100644 index bb855d28b..000000000 --- a/gosa-core/plugins/addons/logview/tabs_log.inc +++ /dev/null @@ -1,24 +0,0 @@ - diff --git a/gosa-plugins/log/addons/logview/class_gosa_logview.inc b/gosa-plugins/log/addons/logview/class_gosa_logview.inc new file mode 100644 index 000000000..9079abe39 --- /dev/null +++ b/gosa-plugins/log/addons/logview/class_gosa_logview.inc @@ -0,0 +1,400 @@ +config= &$config; + $this->ui = get_userinfo(); + + /* Restore last filter settings */ + $logview = session::get('logview'); + foreach(array("action","server","time","regex") as $attr){ + if(isset($logview['gosa_log'][$attr])){ + $this->$attr = $logview['gosa_log'][$attr]; + } + } + + $tz = timezone::get_default_timezone(); + $this->timezone_offset = $tz['value'] * 60 * 60 ; + + $ldap = $this->config->get_ldap_link(); + $ldap->search("(&(objectClass=person)(uid=*))",array("uid","dn")); + while($attrs = $ldap->fetch()){ + $this->uid_map[$attrs['dn']] = $attrs['uid'][0]; + } + } + + + function execute() + { + /* Call parent execute */ + plugin::execute(); + + /* Log view */ + if(!$this->view_logged){ + $this->view_logged = TRUE; + new log("view","logview/".get_class($this),$this->dn); + } + + /* Time interval */ + $date_select = array( + "0" => _("one hour"), "1" => _("6 hours"), + "2" => _("12 hours"), "3" => _("24 hours"), + "4" => _("2 days"), "5" => _("one week"), + "6" => _("2 weeks"), "7" => _("one month")); + + + $time = time(); + $date_select_ = array( + "0" => $time - 3600, + "1" => $time - 21600, + "2" => $time - 43200, + "3" => $time - 86400, + "4" => $time - 172800, + "5" => $time - 604800, + "6" => $time - 1209600, + "7" => $time - 2419200); + + $smarty= get_smarty(); + $smarty->assign("search_result", ""); + $smarty->assign("plug", "?plug=".validate($_GET['plug'])); + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("time_image", get_template_path('images/time.png')); + $smarty->assign("server_image", get_template_path('images/server.png')); + $smarty->assign("log_image", get_template_path('images/log_warning.png')); + $smarty->assign("ruleset_image", get_template_path('images/edit.png')); + $smarty->assign("launchimage", get_template_path('images/launch.png')); + $smarty->assign("date_select", $date_select); + $smarty->assign("actions", array()); + $smarty->assign("direction", "up"); + $smarty->assign("mode0", ""); + $smarty->assign("mode1", ""); + $smarty->assign("mode2", ""); + $smarty->assign("mode3", ""); + $smarty->assign("mode4", ""); + $smarty->assign("mode5", ""); + $smarty->assign("mode6", ""); + + /* Assign select option content */ + foreach( array("server", "action", "time", "regex") as $type){ + $smarty->assign("$type", $this->$type); + } + + /**** + * Check if defined servers + * and mysql extension + ****/ + if (!isset($this->config->data['SERVERS']['LOGGING']) || !count($this->config->data['SERVERS']['LOGGING'])){ + msg_dialog::display(_("Warning"), sprintf(_("No %s servers defined!"), "GOsa log"), WARNING_DIALOG); + return ($smarty->fetch (get_template_path('gosa_log_contents.tpl', TRUE))); + } + + if(!is_callable("mysql_connect")){ + msg_dialog::display(_("Configuration error"), sprintf(_("Missing %s PHP extension!"), "mysql"), WARNING_DIALOG); + return ($smarty->fetch (get_template_path('gosa_log_contents.tpl', TRUE))); + } + + /**** + * Get Configurations + ****/ + $list_of_servers = $this->config->data['SERVERS']['LOGGING']; + $servers = array(); + foreach($list_of_servers as $servername => $data){ + $servers[$servername] = $servername; + } + $smarty->assign("servers", $servers); + + /* Set a default server, if there is currently no valid server selected */ + if(empty($this->server) || !in_array($this->server,$servers)){ + $this->server = key($servers); + } + + /**** + * Connect to currently selected server + ****/ + $cfg = $list_of_servers[$this->server]; + $link = @mysql_pconnect($this->server, $cfg['USER'], $cfg['PWD']); + if ($link === FALSE){ + msg_dialog::display(_("Error"), sprintf(_("Cannot connect to %s database!"), "GOsa LOG"), ERROR_DIALOG); + new log("debug","logview","",array(),@mysql_error()); + return ($smarty->fetch (get_template_path('gosa_log_contents.tpl', TRUE))); + } + + /* check of log database is available */ + if (! @mysql_select_db($cfg['DB'])){ + msg_dialog::display(_("Error"), sprintf(_("Cannot select %s database!"), "GOsa LOG"), ERROR_DIALOG); + new log("debug","logview","",array(),@mysql_error()); + return ($smarty->fetch (get_template_path('gosa_log_contents.tpl', TRUE))); + } + + + /**** + * Get all action types + ****/ + + $actions = array("!ALL" => _("All")); + $query = "SELECT distinct(action) FROM gosa_log;"; + $res = @mysql_query($query); + while($attrs = @mysql_fetch_assoc($res)){ + $actions[$attrs['action']] = $attrs['action']; + } + + + /**** + * Check Acls + ****/ + + $ui = get_userinfo(); + $dn = $list_of_servers[$this->server]['DN']; + $acls = $ui->get_permissions($dn,"server/gosaLogServer","viewEntries"); + + if(!preg_match("/r/",$acls)){ + $res = " + + "._("You have insufficient permissions to view syslog entries.")." + + "; + + /* Show main page */ + $smarty->assign("range_selector", ""); + $smarty->assign("search_result", $res); + return ($smarty->fetch (get_template_path('gosa_log_contents.tpl', TRUE))); + } + + + /**** + * Query stuff + ****/ + $res= ""; + $cfg = $list_of_servers[$this->server]; + $link = @mysql_pconnect($this->server, $cfg['USER'], $cfg['PWD']); + + /* Test connection object && create up query string */ + if ($link === FALSE){ + msg_dialog::display(_("Error"), sprintf(_("Cannot connect to %s database!"), "GOsa LOG"), ERROR_DIALOG); + new log("debug","logview","",array(),@mysql_error()); + } else { + + if (! @mysql_select_db($cfg['DB'])){ + msg_dialog::display(_("Error"), sprintf(_("Cannot select %s database!"), "GOsa LOG"), ERROR_DIALOG); + new log("debug","logview","",array(),@mysql_error()); + } else { + + /* Prepare order setting */ + if ($this->sort_direction == "down"){ + $desc= "DESC"; + $sort_sign = "\/"; + } else { + $desc= ""; + $sort_sign = "/\"; + } + + /* Get start time */ + $start = $date_select_[$this->time]; + + /* Prepare search filter */ + $sql_regex =trim(preg_replace("/\*/","%",$this->regex)); + $sql_regex = "%".trim($sql_regex,"%")."%"; + + /* Create search filter */ + $query_base= "FROM gosa_log WHERE timestamp >= $start "; + + /* Append action filter */ + if($this->action != "!ALL"){ + $query_base .=" AND action like '".$this->action."' "; + } + + /* Append search filter */ + if($sql_regex != "%%"){ + $query_base .=" AND ( result like '".$sql_regex."' OR user like '".$sql_regex."') "; + } + + /* Get number of entries */ + $query= "SELECT COUNT(`user`) ".$query_base.";"; + $result = mysql_query($query); + if(!$result){ + new log("debug","logview","",array(),@mysql_error()); + } + $line= mysql_fetch_array($result, MYSQL_ASSOC); + $count= $line['COUNT(`user`)']; + if ($count > 25){ + $smarty->assign("range_selector", range_selector($count, $this->start, $this->range,"EntriesPerPage")); + } else { + $smarty->assign("range_selector", ""); + } + + /* Query results that will be displayed */ + $query= "SELECT * ".$query_base." ORDER BY ".$this->fields[$this->sort]." ".$desc." LIMIT ".$this->start.",".$this->range.";"; + @DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__, $query, "Database query"); + $result = @mysql_query($query); + if(!$result){ + new log("debug","logview","",array(),@mysql_error()); + } + + /* Display results */ + $mod= 0; + + /* Add entries to result str */ + while ($line = mysql_fetch_array($result, MYSQL_ASSOC)){ + + /* Toggle background color */ + if ( ($mod++) & 1){ + $col= "background-color: #ECECEC;"; + } else { + $col= "background-color: #F5F5F5;"; + } + + $base = ", ".substr($this->config->current['BASE'],0,5)."..."; + + if(isset($this->uid_map[$line['user']])){ + $user = $this->uid_map[$line['user']]; + }else{ + $user = preg_replace("/,".normalizePreg($this->config->current['BASE'])."/",$base,$line['user']); + } + $object = preg_replace("/,".normalizePreg($this->config->current['BASE'])."/",$base,$line['object']); + + $res.=" \n"; + $res.=" ".$line['action'].""; + $res.=" ".date("H:i:s d.m.Y",($line['timestamp'] + $this->timezone_offset)).""; + $res.=" ".preg_replace("/,/",", ",$user).""; + $res.=" ".$line['objecttype'].""; + $res.=" ".preg_replace("/,/",", ",$object).""; + $res.=" ".$line['result'].""; +# if($line['repeated'] == 1){ +# $res.=" -"; +# }else{ +# $res.=" ".($line['repeated']-1).""; +# } + $res.=" \n"; + } + mysql_close($link); + $smarty->assign("mode".$this->sort, $sort_sign); + $smarty->assign("search_result", $res); + } + } + + $smarty->assign("regex", $this->regex); + $smarty->assign("server",$this->server); + $smarty->assign("servers",$servers); + $smarty->assign("action",$this->action); + $smarty->assign("actions",$actions); + $smarty->assign("date_select", $date_select); + + $smarty->assign("direction", $this->sort_direction); + + /* Show main page */ + return ($smarty->fetch (get_template_path('gosa_log_contents.tpl', TRUE))); + } + + + function save_object() + { + if(isset($_POST['gosa_log_contents_posted'])){ + + /* Get submitted range */ + if(isset($_POST['EntriesPerPage'])){ + if(is_numeric($_POST['EntriesPerPage'])){ + $this->range = $_POST['EntriesPerPage']; + } + } + + /* Get actual select boxe values */ + $logfilter_changed = FALSE; + foreach( array("server", "action","time","regex") as $type){ + if(isset($_POST[$type])){ + $this->$type = $_POST[$type]; + } + } + + /* Filter regex values */ + if ($this->regex == ""){ + $this->regex= '*'; + } else { + $new = preg_replace('/\*\**/', '*', $this->regex); + $this->regex= $new; + } + + /* Set start value */ + if (isset($_GET['start'])){ + $this->start= (int)$_GET['start']; + } + + /* Reset page number if filter has changed */ + if ($logfilter_changed > 0){ + $this->start= 0; + } + + /* Adapt sorting */ + if (isset($_GET['sort'])){ + + if($_GET['direction'] == "up"){ + $this->sort_direction = "down"; + }else{ + $this->sort_direction = "up"; + } + + $this->sort= (int)$_GET['sort']; + if ($this->sort < 0 || $this->sort > count($this->fields)){ + $this->sort= 0; + } + } + + /* Save attributes in Sessiob, so we are able to recontruct filter on plugin reload */ + $logview = session::get('logview'); + $logview['gosa_log'] = array(); + foreach(array("action","server","time","regex") as $attr){ + $logview['gosa_log'][$attr] = $this->$attr; + } + session::set('logview',$logview); + } + } + + + /* Return plugin informations for acl handling + #FIXME You can only read attributes within this report plugin + static function plInfo() + { + return (array( + "plShortName" => _("Log view"), + "plDescription" => _("Log view addon"), + "plSelfModify" => FALSE, + "plDepends" => array(), + "plPriority" => 0, + "plSection" => array("addon"), + "plCategory" => array("logview" => array("objectClass" => "none", "description" => _("System logs"))), + + "plProvidedAcls" => array() + )); + } + */ +} +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/gosa-plugins/log/addons/logview/class_logview.inc b/gosa-plugins/log/addons/logview/class_logview.inc new file mode 100644 index 000000000..3349a69fa --- /dev/null +++ b/gosa-plugins/log/addons/logview/class_logview.inc @@ -0,0 +1,415 @@ +config= &$config; + + /* Get global filter config */ + if (!session::is_set("logfilter")){ + $logfilter= array( + "time" => "1", + "log_level" => "!All", + "host" => "!All", + "regex" => "*"); + + session::set("logfilter", $logfilter); + } + + $this->ui = get_userinfo(); + } + + function execute() + { + /* Call parent execute */ + plugin::execute(); + + /* Log view */ + if(!$this->view_logged){ + $this->view_logged = TRUE; + new log("view","logview/".get_class($this),$this->dn); + } + + $logfilter= session::get("logfilter"); + $smarty= get_smarty(); + $smarty->assign("search_result", ""); + $smarty->assign("plug", "?plug=".validate($_GET['plug'])); + $smarty->assign("search_image", get_template_path('images/search.png')); + $smarty->assign("time_image", get_template_path('images/time.png')); + $smarty->assign("server_image", get_template_path('images/server.png')); + $smarty->assign("log_image", get_template_path('images/log_warning.png')); + $smarty->assign("ruleset_image", get_template_path('images/edit.png')); + $smarty->assign("launchimage", get_template_path('images/launch.png')); + $smarty->assign("hostlist", $this->hostlist); + $smarty->assign("loglevellist", $this->loglevellist); + $smarty->assign("tilist", $this->tilist); + $smarty->assign("mode0", ""); + $smarty->assign("mode1", ""); + $smarty->assign("mode2", ""); + $smarty->assign("mode3", ""); + + /* Assign select option content */ + foreach( array("host", "log_level", "time", "regex") as $type){ + $smarty->assign("$type", $logfilter[$type]); + } + + /* Test connection to log database */ + if (!isset($this->config->data['SERVERS']['LOG'])){ + msg_dialog::display(_("Warning"), sprintf(_("No %s servers defined!"), "syslog"), WARNING_DIALOG); + return ($smarty->fetch (get_template_path('contents.tpl', TRUE))); + + }elseif(!is_callable("mysql_connect")){ + msg_dialog::display(_("Configuration error"), sprintf(_("Missing %s PHP extension!"), "mysql"), WARNING_DIALOG); + return ($smarty->fetch (get_template_path('contents.tpl', TRUE))); + + }else{ + + /* Cehck connection informations */ + $cfg= $this->config->data['SERVERS']['LOG']; + + /* Open link to database and check if it is valid */ + $link = @mysql_pconnect($cfg['SERVER'], $cfg['LOGIN'], $cfg['PASSWORD']); + if ($link === FALSE){ + msg_dialog::display(_("Error"), sprintf(_("Cannot connect to %s database!"), "syslog"), ERROR_DIALOG); + new log("debug","logview","",array(),@mysql_error()); + return ($smarty->fetch (get_template_path('contents.tpl', TRUE))); + } + + /* check of log database is available */ + if (! @mysql_select_db("gomon")){ + msg_dialog::display(_("Error"), sprintf(_("Cannot select %s database!"), "syslog"), ERROR_DIALOG); + new log("debug","logview","",array(),@mysql_error()); + return ($smarty->fetch (get_template_path('contents.tpl', TRUE))); + } + + /* Get Host list, if still empty */ + if(count($this->hostlist) == 0){ + + /* Query database and check results */ + $query= "SELECT DISTINCT host FROM golog LIMIT 200;"; + @DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__, $query, "Database query"); + $result = @mysql_query($query); + if ($result === false){ + msg_dialog::display(_("Error"), _("Cannot obtain host list from syslog database!"), ERROR_DIALOG); + new log("debug","logview","",array(),@mysql_error()); + return ($smarty->fetch (get_template_path('contents.tpl', TRUE))); + } + + /* Add hostnames to list */ + while ($line = mysql_fetch_array($result, MYSQL_ASSOC)){ + $this->hostlist[$line['host']]= $line['host']; + } + $this->hostlist['!All']= _("All"); + ksort($this->hostlist); + $smarty->assign("hostlist", $this->hostlist); + } + + /* Get log level list */ + if(count($this->loglevellist) == 0){ + + /* Try to get all used log level types */ + $query= "SELECT DISTINCT log_level FROM golog LIMIT 200;"; + @DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__, $query, "Database query"); + $result = @mysql_query($query); + if ($result === false){ + new log("debug","logview","",array(),@mysql_error()); + msg_dialog::display(_("Error"), _("Database query failed!"), ERROR_DIALOG); + return ($smarty->fetch (get_template_path('contents.tpl', TRUE))); + } + + /* Add each etry to log level list */ + while ($line = mysql_fetch_array($result, MYSQL_ASSOC)){ + $this->loglevellist[$line['log_level']]= $line['log_level']; + } + $this->loglevellist['!All']= _("All"); + ksort($this->loglevellist); + $smarty->assign("loglevellist", $this->loglevellist); + } + } + + /* Set list of available time sequences */ + if(count($this->tilist) == 0){ + + /* Time interval */ + $this->tilist= array("0" => _("one hour"), "1" => _("6 hours"), + "2" => _("12 hours"), "3" => _("24 hours"), + "4" => _("2 days"), "5" => _("one week"), + "6" => _("2 weeks"), "7" => _("one month")); + $smarty->assign("tilist", $this->tilist); + } + + $smarty->assign("regex", $logfilter['regex']); + + + /* Get acls */ + + $tmp_cat_bases = $this->ui->get_module_departments("logview"); + $all_acls = ""; + foreach($tmp_cat_bases as $acl_base){ + $all_acls .= $this->ui->get_permissions($acl_base,"logview/logview"); + } + if(count($tmp_cat_bases) == 0 || !preg_match("/r/",$all_acls)){ + $res = " + + "._("You have insufficient permissions to view syslog entries.")." + + "; + + /* Show main page */ + $smarty->assign("range_selector", ""); + $smarty->assign("search_result", $res); + return ($smarty->fetch (get_template_path('contents.tpl', TRUE))); + } + + /* Query stuff */ + $res= ""; + $cfg = $this->config->data['SERVERS']['LOG']; + $tmp = set_error_handler('dummy_error_handler'); + $link = @mysql_pconnect($cfg['SERVER'], $cfg['LOGIN'], $cfg['PASSWORD']); + set_error_handler($tmp); + + /* Test connection object && create up query string */ + if ($link === FALSE){ + msg_dialog::display(_("Error"), sprintf(_("Cannot connect to %s database!"), "syslog"), ERROR_DIALOG); + new log("debug","logview","",array(),@mysql_error()); + } else { + if (! @mysql_select_db("gomon")){ + msg_dialog::display(_("Error"), sprintf(_("Cannot select %s database!"), "syslog"), ERROR_DIALOG); + new log("debug","logview","",array(),@mysql_error()); + } else { + + /* Assemble time query */ + switch ($logfilter['time']){ + case '0': + $start= date ("YmdHis", time() - 3600); + break; + ;; + case '1': + $start= date ("YmdHis", time() - 21600); + break; + ;; + case '2': + $start= date ("YmdHis", time() - 43200); + break; + ;; + case '3': + $start= date ("YmdHis", time() - 86400); + break; + ;; + case '4': + $start= date ("YmdHis", time() - 172800); + break; + ;; + case '5': + $start= date ("YmdHis", time() - 604800); + break; + ;; + case '6': + $start= date ("YmdHis", time() - 1209600); + break; + ;; + case '7': + $start= date ("YmdHis", time() - 2419200); + break; + ;; + } + + /* Assemble log level query */ + if ($logfilter['log_level'] == '!All'){ + $ll= ""; + } else { + $ll= "AND log_level='".$logfilter['log_level']."'"; + } + if ($logfilter['host'] == '!All'){ + $hf= ""; + } else { + $hf= "AND host='".$logfilter['host']."'"; + } + + /* Order setting */ + if ($this->sort_direction == "down"){ + $desc= "DESC"; + $sort_sign = "\\/"; + } else { + $desc= ""; + $sort_sign="/\\"; + } + $end= date ("YmdHis"); + $query_base= " FROM + golog + WHERE + message like '".preg_replace("/\*/","%",$logfilter['regex'])."' + $ll + $hf + AND + time_stamp <= $end AND time_stamp >= $start"; + + /* Get number of entries */ + $query= "SELECT COUNT(*)".$query_base.";"; + $result = @mysql_query($query); + if(!$result){ + new log("debug","logview","",array(),@mysql_error()); + } + $line= mysql_fetch_array($result, MYSQL_ASSOC); + $count= $line['COUNT(*)']; + if ($count > 25){ + $smarty->assign("range_selector", range_selector($count, $this->start, $this->range,"EntriesPerPage")); + } else { + $smarty->assign("range_selector", ""); + } + + /* Query results */ + $query= "SELECT *".$query_base." ORDER BY ".$this->fields[$this->sort]." $desc LIMIT ".$this->start.",".$this->range.";"; + @DEBUG (DEBUG_MYSQL, __LINE__, __FUNCTION__, __FILE__, $query, "Database query"); + $result = @mysql_query($query); + if(!$result){ + new log("debug","logview","",array(),@mysql_error()); + } + /* Display results */ + $mod= 0; + + /* Add entries to result str */ + while ($line = mysql_fetch_array($result, MYSQL_ASSOC)){ + + /* Toggle background color */ + if ( ($mod++) & 1){ + $col= "background-color: #ECECEC;"; + } else { + $col= "background-color: #F5F5F5;"; + } + + $res.=" \n"; + $res.=" + \"".$line['log_level']."\" + "; + $res.=" ". + $line['host']." + "; + $res.=" ". + $line['time_stamp']." + "; + $res .= "". + $line['message']." + "; + $res.=" \n"; + } + mysql_close($link); + $smarty->assign("mode".$this->sort, $sort_sign); + $smarty->assign("host", $logfilter['host']); + $smarty->assign("log_level", $logfilter['log_level']); + + $smarty->assign("search_result", $res); + } + } + + /* Show main page */ + return ($smarty->fetch (get_template_path('contents.tpl', TRUE))); + } + + + function save_object() + { + /* Get submitted range */ + if(isset($_POST['EntriesPerPage'])){ + if(is_numeric($_POST['EntriesPerPage'])){ + $this->range = $_POST['EntriesPerPage']; + } + } + + /* Save data */ + $logfilter= session::get("logfilter"); + + /* Get actual select boxe values */ + $logfilter_changed = 0; + foreach( array("host", "time", "log_level", "regex") as $type){ + + /* Set new value and test if value has changed */ + $last[$type] = $logfilter[$type]; + if (isset($_POST[$type])){ + $logfilter[$type]= $_POST[$type]; + } + + if ($last[$type] != $logfilter[$type]){ + $logfilter_changed = 1; + } + } + + /* Filter regex values */ + if ($logfilter['regex'] == ""){ + $logfilter['regex']= '%'; + } else { + $new = preg_replace('/\*\**/', '*', $logfilter['regex']); + $logfilter['regex']= $new; + } + + /* Store filter values */ + session::set("logfilter", $logfilter); + + /* Set start value */ + if (isset($_GET['start'])){ + $this->start= (int)$_GET['start']; + } + + /* Reset page number if filter has changed */ + if ($logfilter_changed > 0){ + $this->start= 0; + } + + /* Adapt sorting */ + if (isset($_GET['sort'])){ + if ($this->sort == (int)$_GET['sort']){ + if ($this->sort_direction == "down"){ + $this->sort_direction= "up"; + } else { + $this->sort_direction= "down"; + } + } + $this->sort= (int)$_GET['sort']; + if ($this->sort < 0 || $this->sort > 3){ + $this->sort= 0; + } + } + } + + + /* Return plugin informations for acl handling + #FIXME You can only read attributes within this report plugin */ + static function plInfo() + { + return (array( + "plShortName" => _("Log view"), + "plDescription" => _("Log view addon"), + "plSelfModify" => FALSE, + "plDepends" => array(), + "plPriority" => 0, + "plSection" => array("addon"), + "plCategory" => array("logview" => array("objectClass" => "none", "description" => _("System logs"))), + + "plProvidedAcls" => array() + )); + } +} +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/gosa-plugins/log/addons/logview/contents.tpl b/gosa-plugins/log/addons/logview/contents.tpl new file mode 100644 index 000000000..9a03544f3 --- /dev/null +++ b/gosa-plugins/log/addons/logview/contents.tpl @@ -0,0 +1,105 @@ +
+

[F]{t}Filter{/t}

+
+
+ + + + + + + + + + + + +
+ + + + + + + + + +
  + +
  + +
+
+   + + + + + + + + + + +
  + +
 
+
+   + + + + + + +
+ +
+
+
+ +
+ +{if $search_result ne ""} + + + + + + + + {$search_result} +
{t}Level{/t} {$mode0}{t}Hostname{/t} {$mode1}{t}Date{/t} {$mode2}{t}Message{/t} {$mode3}
+ + + + + +
{$range_selector}
+ +{else} + {t}Search returned no results...{/t} +{/if} + + + diff --git a/gosa-plugins/log/addons/logview/gosa_log_contents.tpl b/gosa-plugins/log/addons/logview/gosa_log_contents.tpl new file mode 100644 index 000000000..5d71d8103 --- /dev/null +++ b/gosa-plugins/log/addons/logview/gosa_log_contents.tpl @@ -0,0 +1,107 @@ +
+

[F]{t}Filter{/t}

+
+
+ + + + + + + + + + + + +
+ + + + + + + + + +
  + +
  + +
+
+   + + + + + + + + + + +
  + +
 
+
+   + + + + + + +
+ +
+
+
+ +
+ +{if $search_result ne ""} + + + + + + + + + + {$search_result} +
{t}Action{/t} {$mode0}{t}Date{/t} {$mode1}{t}User{/t} {$mode2}{t}Object type{/t} {$mode3}{t}Object{/t} {$mode4}{t}Message{/t} {$mode5}
+ + + + + +
{$range_selector}
+ +{else} + {t}Search returned no results...{/t} +{/if} + + + diff --git a/gosa-plugins/log/addons/logview/main.inc b/gosa-plugins/log/addons/logview/main.inc new file mode 100644 index 000000000..5df3535ec --- /dev/null +++ b/gosa-plugins/log/addons/logview/main.inc @@ -0,0 +1,39 @@ +data['TABS']['LOGTABS'],"")); + } + $log_tabs = session::get('log_tabs'); + + /* Execute formular */ +# $display= $log_tabs->save_object(); + $display= $log_tabs->execute (); + $display.= "\n"; + + /* Page header*/ + $display= print_header(get_template_path('images/logview.png'), _("System log view")).$display; + + /* Store changes in session */ + session::set('log_tabs',$log_tabs); +} +?> diff --git a/gosa-plugins/log/addons/logview/tabs_log.inc b/gosa-plugins/log/addons/logview/tabs_log.inc new file mode 100644 index 000000000..bb855d28b --- /dev/null +++ b/gosa-plugins/log/addons/logview/tabs_log.inc @@ -0,0 +1,24 @@ +