diff --git a/dbd/sql/mysql/data/sai_api.sql b/dbd/sql/mysql/data/sai_api.sql new file mode 100644 index 0000000..5f436ea --- /dev/null +++ b/dbd/sql/mysql/data/sai_api.sql @@ -0,0 +1,30 @@ +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (0, 42, 0, -1, NULL, 'sai_mod', NULL); +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1, 42, 1, 0, NULL, 'js', NULL); +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (2, 42, 1, 0, NULL, 'css', NULL); +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (3, 42, 0, 0, NULL, 'action', NULL); +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (10, 42, 2, 3, 'login', 'username', 'ALL'); +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (11, 42, 2, 3, 'login', 'password_sha', 'ALL'); +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (12, 42, 2, 3, 'login', 'password_md5', 'ALL'); +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (20, 42, 2, 3, 'register', 'username', 'ALL'); +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (21, 42, 2, 3, 'register', 'password', 'ALL'); +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (30, 42, 2, 3, 'edit', 'id', 'ALL'); +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (23, 42, 2, 3, 'register', 'email', 'ALL'); +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (24, 42, 3, 3, 'register', 'locale', 'ALL'); + +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (31, 42, 2, 3, 'edit', 'lang', 'LANG'); +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (32, 42, 2, 3, 'edit', 'newtext', 'ALL'); +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (33, 42, 2, 3, 'delete', 'id', 'ALL'); +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (34, 42, 2, 3, 'editmode', 'entry', 'ALL'); +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (35, 42, 2, 3, 'add', 'id', 'ALL'); +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (36, 42, 2, 3, 'add', 'category', 'INT'); + +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (40, 42, 2, 3, 'upload', 'cat', 'STRING'); +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (41, 42, 2, 3, 'del', 'cat', 'STRING'); +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (42, 42, 2, 3, 'del', 'id', 'STRING'); +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (43, 42, 2, 3, 'rn', 'cat', 'STRING'); +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (44, 42, 2, 3, 'rn', 'id', 'STRING'); +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (45, 42, 2, 3, 'rn', 'newid', 'STRING'); + +INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (50, 42, 3, 3, 'filter', 'filter', 'STRING'); + +-- INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (302, 42, 4, -1, NULL, '_lang', 'LANG'); \ No newline at end of file diff --git a/dbd/sql/pg/data/sai_api.sql b/dbd/sql/pg/data/sai_api.sql index 275dbe0..f2e7494 100644 --- a/dbd/sql/pg/data/sai_api.sql +++ b/dbd/sql/pg/data/sai_api.sql @@ -19,3 +19,10 @@ INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, ve INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (36, 42, 2, 3, 'add', 'category', 'INT'); INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (40, 42, 3, 3, 'filter', 'filter', 'STRING'); INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (302, 42, 4, -1, NULL, '_lang', 'LANG'); + +-- INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (40, 42, 2, 3, 'upload', 'cat', 'STRING'); +-- INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (41, 42, 2, 3, 'del', 'cat', 'STRING'); +-- INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (42, 42, 2, 3, 'del', 'id', 'STRING'); +-- INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (43, 42, 2, 3, 'rn', 'cat', 'STRING'); +-- INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (44, 42, 2, 3, 'rn', 'id', 'STRING'); +-- INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (45, 42, 2, 3, 'rn', 'newid', 'STRING'); \ No newline at end of file diff --git a/log/error_handler/error_handler_dbwriter.php b/log/error_handler/error_handler_dbwriter.php index 2b47a2e..092146e 100644 --- a/log/error_handler/error_handler_dbwriter.php +++ b/log/error_handler/error_handler_dbwriter.php @@ -6,7 +6,7 @@ namespace SYSTEM\LOG; //And only the first ErrorHandler will be called if he returns true in CALL. class error_handler_dbwriter extends \SYSTEM\LOG\error_handler { public static function CALL(\Exception $E, $thrown){ - try{ + try{ if(\property_exists(get_class($E), 'logged') && $E->logged){ return false;} //alrdy logged @@ -20,10 +20,13 @@ class error_handler_dbwriter extends \SYSTEM\LOG\error_handler { } else { $con = new \SYSTEM\DB\Connection(\SYSTEM\system::getSystemDBInfo()); $con->prepare( 'sysLogStmt', 'INSERT INTO system_log '. - '(class, message, code, file, line, trace, ip, querytime, time) '. - 'VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);', + '(class, message, code, file, line, trace, ip, querytime, time, server_name, server_port, request_uri, post, http_referer, http_user_agent, user, thrown) '. + 'VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);', array( get_class($E), $E->getMessage(), $E->getCode(), $E->getFile(), $E->getLine(), $E->getTraceAsString(), - getenv('REMOTE_ADDR'),round(microtime(true) - \SYSTEM\time::getStartTime(),5),microtime(true))); + getenv('REMOTE_ADDR'),round(microtime(true) - \SYSTEM\time::getStartTime(),5),date('Y-m-d H:i:s', microtime(true)), + $_SERVER["SERVER_NAME"],$_SERVER["SERVER_PORT"],$_SERVER['REQUEST_URI'], serialize($_POST), + array_key_exists('HTTP_REFERER', $_SERVER) ? $_SERVER['HTTP_REFERER'] : null,$_SERVER['HTTP_USER_AGENT'], + ($user = \SYSTEM\SECURITY\Security::getUser()) ? $user->id : null,$thrown)); } if(\property_exists(get_class($E), 'logged')){ @@ -31,7 +34,5 @@ class error_handler_dbwriter extends \SYSTEM\LOG\error_handler { } catch (\Exception $E){} //Error -> Ignore return false; //We just log and do not handle the error! - } - public static function MASK(){ - return \SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_ERRORREPORTING);} + } } \ No newline at end of file diff --git a/log/error_handler/error_handler_jsonoutput.php b/log/error_handler/error_handler_jsonoutput.php index 89112ea..2058311 100644 --- a/log/error_handler/error_handler_jsonoutput.php +++ b/log/error_handler/error_handler_jsonoutput.php @@ -3,8 +3,7 @@ namespace SYSTEM\LOG; class error_handler_jsonoutput extends \SYSTEM\LOG\error_handler { - //Only those who die! - public static function MASK(){ return \E_ALL;} //\E_ERROR | \E_USER_ERROR | \E_CORE_ERROR | \E_COMPILE_ERROR; } + //Only those who die! public static function CALL(\Exception $E, $thrown){ if($thrown){ try{ diff --git a/log/exceptions/COUNTER.php b/log/exceptions/COUNTER.php new file mode 100644 index 0000000..b7799d8 --- /dev/null +++ b/log/exceptions/COUNTER.php @@ -0,0 +1,5 @@ +getCode())) && - \call_user_func_array(array($handler,self::HANDLER_FUNC_CALL),array($E, $thrown))){ - return true;} - } - return false; + foreach(self::$handlers as $handler){ + if( \call_user_func_array(array($handler,self::HANDLER_FUNC_CALL),array($E, $thrown))){ + return true;}} + return false; } public static function __exception_handler(\Exception $E, $thrown = true){ return self::call_handlers($E, $thrown) && $thrown;} public static function __error_handler($code, $message, $file, $line, $thrown = true){ - return self::call_handlers(new \SYSTEM\LOG\ErrorException($message, 1, $code, $file, $line) ,$thrown);} + return self::call_handlers(new \SYSTEM\LOG\ERROR_EXCEPTION($message, 1, $code, $file, $line) ,$thrown);} public static function __shutdown_handler($thrown = true) { if( ($error = error_get_last()) !== NULL && !$error['type'] === E_DEPRECATED) { //http://www.dreamincode.net/forums/topic/284506-having-trouble-supressing-magic-quotes-gpc-fatal-errors/ - return self::call_handlers(new \SYSTEM\LOG\ShutdownException($error["message"], 1, $error["type"],$error["file"],$error["line"]) ,$thrown);} + return self::call_handlers(new \SYSTEM\LOG\SHUTDOWN_EXCEPTION($error["message"], 1, $error["type"],$error["file"],$error["line"]) ,$thrown);} } public static function __fatal_error_handler($bufferContent, $thrown = true){ diff --git a/sai/modules/saimod_sys_log/img/ajax-loader.gif b/sai/modules/saimod_sys_log/img/ajax-loader.gif new file mode 100644 index 0000000..442b8d2 Binary files /dev/null and b/sai/modules/saimod_sys_log/img/ajax-loader.gif differ diff --git a/sai/modules/saimod_sys_log/saimod_sys_log.js b/sai/modules/saimod_sys_log/saimod_sys_log.js index 78fb6a4..f74d2f1 100644 --- a/sai/modules/saimod_sys_log/saimod_sys_log.js +++ b/sai/modules/saimod_sys_log/saimod_sys_log.js @@ -33,6 +33,7 @@ function init__SYSTEM_SAI_saimod_sys_log() { function drawVisualization() { $('img#loader').show(); + console.log(SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_log&action=visualization'); $.getJSON(SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_log&action=visualization',function(json){ if(json.status != true){ $('img#loader').hide(); @@ -145,5 +146,6 @@ function do_filter(filter){ $('#visualization').hide(); $(this).parents().children().removeClass('active'); $(this).addClass('active'); + console.log(SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_log&action=filter&filter='+filter); $('#table-wrapper').load(SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_log&action=filter&filter='+filter,function(){$('#table-wrapper').show(); $('img#loader').hide();}); } \ No newline at end of file diff --git a/sai/modules/saimod_sys_log/saimod_sys_log.php b/sai/modules/saimod_sys_log/saimod_sys_log.php index 95c7226..3bc4c5c 100644 --- a/sai/modules/saimod_sys_log/saimod_sys_log.php +++ b/sai/modules/saimod_sys_log/saimod_sys_log.php @@ -14,36 +14,67 @@ class saimod_sys_log extends \SYSTEM\SAI\SaiModule { return false; } - public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_visualization(){ + public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_visualization(){ $con = new \SYSTEM\DB\Connection(\SYSTEM\system::getSystemDBInfo()); - $res = $con->query('SELECT time::date as day, - min(time) as time_min, max(time) as time_max, - count(*) as count, - avg(querytime) as querytime_avg, - max(querytime) as querytime_max, - min(querytime) as querytime_min, - count(distinct file) as file_unique, - count(distinct ip) as ip_unique, - count(distinct message) as text_unique, - count(distinct class) as class_unique, - sum(case when class = \'INFO\' then 1 else 0 end) class_INFO, - sum(case when class = \'DEPRECATED\' then 1 else 0 end) class_DEPRECATED, - sum(case when class = \'WARNING\' then 1 else 0 end) class_WARNING, - sum(case when class = \'ERROR\' then 1 else 0 end) class_ERROR, - sum(case when class = \'AppError\' then 1 else 0 end) class_AppError, - sum(case when class = \'SYSTEM\LOG\INFO\' then 1 else 0 end) class_SYSTEM_LOG_INFO, - sum(case when class = \'SYSTEM\LOG\DEPRECATED\' then 1 else 0 end) class_SYSTEM_LOG_DEPRECATED, - sum(case when class = \'SYSTEM\LOG\WARNING\' then 1 else 0 end) class_SYSTEM_LOG_WARNING, - sum(case when class = \'SYSTEM\LOG\ERROR\' then 1 else 0 end) class_SYSTEM_LOG_ERROR, - sum(case when class = \'SYSTEM\LOG\ErrorException\' then 1 else 0 end) class_SYSTEM_LOG_ErrorException, - sum(case when class = \'SYSTEM\LOG\ShutdownException\' then 1 else 0 end) class_SYSTEM_LOG_ShutdownException, - sum(case when class = \'Exception\' then 1 else 0 end) class_Exception, - sum(case when class = \'RuntimeException\' then 1 else 0 end) class_RuntimeException, - sum(case when class = \'ErrorException\' then 1 else 0 end) class_ErrorException - from system.sys_log - group by day - order by day desc - limit 365;'); + if(\SYSTEM\system::isSystemDbInfoPG()){ + $res = $con->query('SELECT time::date as day, + min(time) as time_min, max(time) as time_max, + count(*) as count, + avg(querytime) as querytime_avg, + max(querytime) as querytime_max, + min(querytime) as querytime_min, + count(distinct file) as file_unique, + count(distinct ip) as ip_unique, + count(distinct message) as text_unique, + count(distinct class) as class_unique, + sum(case when class = \'INFO\' then 1 else 0 end) class_INFO, + sum(case when class = \'DEPRECATED\' then 1 else 0 end) class_DEPRECATED, + sum(case when class = \'WARNING\' then 1 else 0 end) class_WARNING, + sum(case when class = \'ERROR\' then 1 else 0 end) class_ERROR, + sum(case when class = \'AppError\' then 1 else 0 end) class_AppError, + sum(case when class = \'SYSTEM\LOG\INFO\' then 1 else 0 end) class_SYSTEM_LOG_INFO, + sum(case when class = \'SYSTEM\LOG\DEPRECATED\' then 1 else 0 end) class_SYSTEM_LOG_DEPRECATED, + sum(case when class = \'SYSTEM\LOG\WARNING\' then 1 else 0 end) class_SYSTEM_LOG_WARNING, + sum(case when class = \'SYSTEM\LOG\ERROR\' then 1 else 0 end) class_SYSTEM_LOG_ERROR, + sum(case when class = \'SYSTEM\LOG\ErrorException\' then 1 else 0 end) class_SYSTEM_LOG_ErrorException, + sum(case when class = \'SYSTEM\LOG\ShutdownException\' then 1 else 0 end) class_SYSTEM_LOG_ShutdownException, + sum(case when class = \'Exception\' then 1 else 0 end) class_Exception, + sum(case when class = \'RuntimeException\' then 1 else 0 end) class_RuntimeException, + sum(case when class = \'ErrorException\' then 1 else 0 end) class_ErrorException + from system.sys_log + group by day + order by day desc + limit 365;'); + } else { + $res = $con->query('SELECT DATE(time) as day, + min(time) as time_min, max(time) as time_max, + count(*) as count, + avg(querytime) as querytime_avg, + max(querytime) as querytime_max, + min(querytime) as querytime_min, + count(distinct file) as file_unique, + count(distinct ip) as ip_unique, + count(distinct message) as text_unique, + count(distinct class) as class_unique, + sum(case when class = \'INFO\' then 1 else 0 end) class_INFO, + sum(case when class = \'DEPRECATED\' then 1 else 0 end) class_DEPRECATED, + sum(case when class = \'WARNING\' then 1 else 0 end) class_WARNING, + sum(case when class = \'ERROR\' then 1 else 0 end) class_ERROR, + sum(case when class = \'AppError\' then 1 else 0 end) class_AppError, + sum(case when class = \'SYSTEM\LOG\INFO\' then 1 else 0 end) class_SYSTEM_LOG_INFO, + sum(case when class = \'SYSTEM\LOG\DEPRECATED\' then 1 else 0 end) class_SYSTEM_LOG_DEPRECATED, + sum(case when class = \'SYSTEM\LOG\WARNING\' then 1 else 0 end) class_SYSTEM_LOG_WARNING, + sum(case when class = \'SYSTEM\LOG\ERROR\' then 1 else 0 end) class_SYSTEM_LOG_ERROR, + sum(case when class = \'SYSTEM\LOG\ErrorException\' then 1 else 0 end) class_SYSTEM_LOG_ErrorException, + sum(case when class = \'SYSTEM\LOG\ShutdownException\' then 1 else 0 end) class_SYSTEM_LOG_ShutdownException, + sum(case when class = \'Exception\' then 1 else 0 end) class_Exception, + sum(case when class = \'RuntimeException\' then 1 else 0 end) class_RuntimeException, + sum(case when class = \'ErrorException\' then 1 else 0 end) class_ErrorException + from system_log + group by day + order by day desc + limit 365;'); + } $result = array(); while($row = $res->next()){ $result[] = $row;} @@ -61,28 +92,34 @@ class saimod_sys_log extends \SYSTEM\SAI\SaiModule { array($filter)); } else { $res = $con->prepare( 'selectSysLogFilter', - 'SELECT * FROM system_log WHERE class LIKE ? ORDER BY time DESC LIMIT 100;', - array($filter)); + 'SELECT * FROM system_log LEFT JOIN system_user ON system_log.user = system_user.id WHERE class LIKE ? ORDER BY time DESC LIMIT 100;', + array(mysql_escape_string($filter))); } } else { if(\SYSTEM\system::isSystemDbInfoPG()){ $res = $con->query('SELECT * FROM system.sys_log ORDER BY time DESC LIMIT 100;'); } else { - $res = $con->query('SELECT * FROM system_log ORDER BY time DESC LIMIT 100;'); + $res = $con->query('SELECT * FROM system_log LEFT JOIN system_user ON system_log.user = system_user.id ORDER BY time DESC LIMIT 100;'); } } $now = microtime(true); $result = ''. - ''.''.''.''.''.''.''.''.''.''; - while($r = $res->next()){ - //TODO make time conversion on database - if(\SYSTEM\system::isSystemDbInfoPG()){ - $result .= ''.''.''.''.''.''.''.''.''.''.''; - } else { - $result .= ''.''.''.''.''.''.''.''.''.''.''; - } + ''.''.''.''.''.''.''.''.''.''; + while($r = $res->next()){ + //print_r($r); + $result .= ''. + ''. + ''. + ''. + ''. + ''. + ''. + ''. + ''. + ''. + ''; } $result .= '
'.'time ago'.''.'time'.''.'class'.''.'message'.''.'code'.''.'file'.''.'line'.''.'ip'.''.'querytime'.'
'.self::time_elapsed_string(strtotime($r['time'])).''.$r['time'].''.$r['class'].''.substr($r['message'],0,255).''.$r['code'].''.$r['file'].''.$r['line'].''.$r['ip'].''.$r['querytime'].'
'.self::time_elapsed_string($r['time']).''.$r['time'].''.$r['class'].''.substr($r['message'],0,255).''.$r['code'].''.$r['file'].''.$r['line'].''.$r['ip'].''.$r['querytime'].'
'.'time ago'.''.'class'.''.'message'.''.'file'.''.'line'.''.'ip'.''.'url'.''.'user'.''.'querytime'.'
'.self::time_elapsed_string(strtotime($r['time'])).''.$r['class'].''.substr($r['message'],0,255).''.$r['file'].''.$r['line'].''.$r['ip'].''.$r['server_name'].':'.$r['server_port'].$r['request_uri'].''.$r['username'].''.$r['querytime'].'
'; @@ -112,7 +149,11 @@ class saimod_sys_log extends \SYSTEM\SAI\SaiModule { private static function generate_error_filters(){ $con = new \SYSTEM\DB\Connection(\SYSTEM\system::getSystemDBInfo()); - $res = $con->query("SELECT class FROM system.sys_log GROUP BY class ORDER BY class;"); + if(\SYSTEM\system::isSystemDbInfoPG()){ + $res = $con->query("SELECT class FROM system.sys_log GROUP BY class ORDER BY class;"); + }else{ + $res = $con->query("SELECT class FROM system_log GROUP BY class ORDER BY class;"); + } $result = ""; $i = 1; @@ -122,9 +163,10 @@ class saimod_sys_log extends \SYSTEM\SAI\SaiModule { return $result; } - public static function sai_mod__SYSTEM_SAI_saimod_sys_log(){ + public static function sai_mod__SYSTEM_SAI_saimod_sys_log(){ $vars = array(); $vars['error_filter'] = self::generate_error_filters(); + $vars['PICPATH'] = \SYSTEM\WEBPATH(new \SYSTEM\PSAI(), 'modules/saimod_sys_log/img/'); return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_log/saimod_sys_log.tpl'), $vars); } diff --git a/sai/modules/saimod_sys_log/saimod_sys_log.tpl b/sai/modules/saimod_sys_log/saimod_sys_log.tpl index 74ed5fd..b697f15 100644 --- a/sai/modules/saimod_sys_log/saimod_sys_log.tpl +++ b/sai/modules/saimod_sys_log/saimod_sys_log.tpl @@ -14,7 +14,7 @@ - +
${error_filter}