From fdbdc73b1e9a553ae5bff738ba32db657977ad88 Mon Sep 17 00:00:00 2001 From: rylon Date: Mon, 23 Dec 2013 08:59:28 +0100 Subject: [PATCH] saimod_sys_log new layout, more info --- dbd/tbl/system_log.php | 26 ++ dbd/tbl/{UserTable.php => system_user.php} | 2 +- log/error_handler/error_handler_dbwriter.php | 34 ++- log/exceptions/ERROR_EXCEPTION.php | 8 +- log/result/JsonResult.php | 2 +- sai/modules/saimod_sys_log/saimod_sys_log.js | 101 ++++--- sai/modules/saimod_sys_log/saimod_sys_log.php | 257 ++++++++++++------ sai/modules/saimod_sys_log/saimod_sys_log.tpl | 43 +-- .../saimod_sys_log/saimod_sys_log_admin.tpl | 3 + .../saimod_sys_log/saimod_sys_log_error.tpl | 23 ++ .../saimod_sys_log/saimod_sys_log_filter.tpl | 6 + .../saimod_sys_log/saimod_sys_log_stats.tpl | 5 + .../saimod_sys_log/saimod_sys_log_table.tpl | 15 + security/Security.php | 98 +++---- 14 files changed, 402 insertions(+), 221 deletions(-) create mode 100644 dbd/tbl/system_log.php rename dbd/tbl/{UserTable.php => system_user.php} (95%) create mode 100644 sai/modules/saimod_sys_log/saimod_sys_log_admin.tpl create mode 100644 sai/modules/saimod_sys_log/saimod_sys_log_error.tpl create mode 100644 sai/modules/saimod_sys_log/saimod_sys_log_filter.tpl create mode 100644 sai/modules/saimod_sys_log/saimod_sys_log_stats.tpl create mode 100644 sai/modules/saimod_sys_log/saimod_sys_log_table.tpl diff --git a/dbd/tbl/system_log.php b/dbd/tbl/system_log.php new file mode 100644 index 0000000..53d157d --- /dev/null +++ b/dbd/tbl/system_log.php @@ -0,0 +1,26 @@ +logged){ - return false;} //alrdy logged + return false;} //alrdy logged(this prevents proper thrown value for every system exception) if(\SYSTEM\system::isSystemDbInfoPG()){ $con = new \SYSTEM\DB\Connection(\SYSTEM\system::getSystemDBInfo()); - $con->prepare( 'sysLogStmt', 'INSERT INTO system.sys_log '. - '(class, message, code, file, line, trace, ip, querytime) '. - 'VALUES ($1, $2, $3, $4, $5, $6, $7, $8);', + $con->prepare( 'sysLogStmt', 'INSERT INTO '.\SYSTEM\DBD\system_log::NAME_PG. + '('.\SYSTEM\DBD\system_log::FIELD_CLASS.','.\SYSTEM\DBD\system_log::FIELD_MESSAGE.','. + \SYSTEM\DBD\system_log::FIELD_CODE.','.\SYSTEM\DBD\system_log::FIELD_FILE.','. + \SYSTEM\DBD\system_log::FIELD_LINE.','.\SYSTEM\DBD\system_log::FIELD_TRACE.','. + \SYSTEM\DBD\system_log::FIELD_IP.','.\SYSTEM\DBD\system_log::FIELD_QUERYTIME.','. + \SYSTEM\DBD\system_log::FIELD_SERVER_NAME.','.\SYSTEM\DBD\system_log::FIELD_SERVER_PORT.','. + \SYSTEM\DBD\system_log::FIELD_REQUEST_URI.','.\SYSTEM\DBD\system_log::FIELD_POST.','. + \SYSTEM\DBD\system_log::FIELD_HTTP_REFERER.','.\SYSTEM\DBD\system_log::FIELD_HTTP_USER_AGENT.','. + \SYSTEM\DBD\system_log::FIELD_USER.','.\SYSTEM\DBD\system_log::FIELD_THROWN.')'. + 'VALUES($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16);', array( get_class($E), $E->getMessage(), $E->getCode(), $E->getFile(), $E->getLine(), $E->getTraceAsString(), - getenv('REMOTE_ADDR'),round(microtime(true) - \SYSTEM\time::getStartTime(),5))); + getenv('REMOTE_ADDR'),round(microtime(true) - \SYSTEM\time::getStartTime(),5), + $_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)); } 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, server_name, server_port, request_uri, post, http_referer, http_user_agent, user, thrown) '. - 'VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);', + $con->prepare( 'sysLogStmt', 'INSERT INTO '.\SYSTEM\DBD\system_log::NAME_MYS. + '('.\SYSTEM\DBD\system_log::FIELD_CLASS.','.\SYSTEM\DBD\system_log::FIELD_MESSAGE.','. + \SYSTEM\DBD\system_log::FIELD_CODE.','.\SYSTEM\DBD\system_log::FIELD_FILE.','. + \SYSTEM\DBD\system_log::FIELD_LINE.','.\SYSTEM\DBD\system_log::FIELD_TRACE.','. + \SYSTEM\DBD\system_log::FIELD_IP.','.\SYSTEM\DBD\system_log::FIELD_QUERYTIME.','. + \SYSTEM\DBD\system_log::FIELD_TIME.','.\SYSTEM\DBD\system_log::FIELD_SERVER_NAME.','. + \SYSTEM\DBD\system_log::FIELD_SERVER_PORT.','.\SYSTEM\DBD\system_log::FIELD_REQUEST_URI.','. + \SYSTEM\DBD\system_log::FIELD_POST.','.\SYSTEM\DBD\system_log::FIELD_HTTP_REFERER.','. + \SYSTEM\DBD\system_log::FIELD_HTTP_USER_AGENT.','.\SYSTEM\DBD\system_log::FIELD_USER.','. + \SYSTEM\DBD\system_log::FIELD_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),date('Y-m-d H:i:s', microtime(true)), $_SERVER["SERVER_NAME"],$_SERVER["SERVER_PORT"],$_SERVER['REQUEST_URI'], serialize($_POST), diff --git a/log/exceptions/ERROR_EXCEPTION.php b/log/exceptions/ERROR_EXCEPTION.php index 1e835a7..2ef4656 100644 --- a/log/exceptions/ERROR_EXCEPTION.php +++ b/log/exceptions/ERROR_EXCEPTION.php @@ -1,10 +1,4 @@ getCode(); $error['file'] = $e->getFile(); $error['line'] = $e->getLine(); - $error['trace'] = array_slice(explode('#', $e->getTraceAsString()), 1, -1);; + $error['trace'] = array_slice(explode('#', $e->getTraceAsString()), 1, -1); return self::toString($error, self::JSONRESULT_ERROR); } diff --git a/sai/modules/saimod_sys_log/saimod_sys_log.js b/sai/modules/saimod_sys_log/saimod_sys_log.js index f74d2f1..c4c7b96 100644 --- a/sai/modules/saimod_sys_log/saimod_sys_log.js +++ b/sai/modules/saimod_sys_log/saimod_sys_log.js @@ -1,4 +1,65 @@ -function init__SYSTEM_SAI_saimod_sys_log() { +function init__SYSTEM_SAI_saimod_sys_log() { + $('#tabs_log a').click(function (e) { + e.preventDefault(); + $(this).tab('show'); + load_log_tab($(this).attr('action')); + }); + + load_log_tab("log"); +}; + +function load_log_tab(action){ + $('img#loader').show(); + switch(action){ + case 'log': + $('#tab_log').load(SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_log&action='+action, function(){ + register_log(); + register_error(); + $('img#loader').hide();}); + return; + case 'stats': + $('#tab_stats').load(SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_log&action='+action, function(){ + drawVisualization(); + $('img#loader').hide();}); + return; + case 'admin': + $('#tab_admin').load(SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_log&action='+action, function(){ + register_admin(); + $('img#loader').hide();}); + return; + default: + $('img#loader').hide(); + } +} + +function register_error(){ + $('.sai_log_error').click(function(){ + $('img#loader').show(); + $('#table_log').load(SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_log&action=error&error='+$(this).attr('error'), function(){ + $('img#loader').hide();})}); +} + +function load_table_log(filter){ + $('img#loader').show(); + $('#table_log').load(SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_log&action=filter&filter='+filter, function(){ + register_error(); + $('img#loader').hide();}); +} + +var filter = ""; +function register_log(){ + $('#refresh_error_table').click(function(){ + load_table_log(filter);}); + $("#error_filter a").click(function(){ + $('#error_filter li').each(function(){ + $(this).removeClass('active');}); + $(this).parent().addClass('active'); + filter = $(this).attr('filter'); + load_table_log($(this).attr('filter')); + }); +} + +function register_admin(){ $('#truncate_table').click(function(){ $.ajax({ type :'GET', url : SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_log&action=truncate', @@ -13,31 +74,13 @@ function init__SYSTEM_SAI_saimod_sys_log() { } }); }); - - - $('#refresh_error_table').live("click", (function(){ - do_filter("");})); - - $("#filter-error button").live("click", (function(){ - $('#filter-error button').each(function(){ - $(this).removeClass('active');}); - $(this).addClass('active'); - do_filter($(this).attr('filter'));})); - - $('#show_visualtization').live("click", (function(){ - drawVisualization(); - })); - - do_filter(""); -}; +} 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(); - $('#visualization').hide(); + if(!json || json.status != true){ + $('img#loader').hide(); return; } json = json.result; @@ -110,8 +153,7 @@ function drawVisualization() { parseInt(value.class_system_log_warning)+0.5, parseInt(value.class_system_log_error)+0.5, parseInt(value.class_system_log_errorexception)+0.5, - parseInt(value.class_system_log_shutdownexception)+0.5, - ]); + parseInt(value.class_system_log_shutdownexception)+0.5]); data5.addRow([ new Date(value.day), parseInt(value.count), parseInt(value.class_exception)+0.5, @@ -135,17 +177,6 @@ function drawVisualization() { new google.visualization.LineChart(document.getElementById('visualization5')).draw(data5, options); $('img#loader').hide(); - $('#table-wrapper').hide(); - $('#visualization').show(); }); -} - -function do_filter(filter){ - $('img#loader').show(); - $('#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 3bc4c5c..0533325 100644 --- a/sai/modules/saimod_sys_log/saimod_sys_log.php +++ b/sai/modules/saimod_sys_log/saimod_sys_log.php @@ -5,75 +5,87 @@ namespace SYSTEM\SAI; class saimod_sys_log extends \SYSTEM\SAI\SaiModule { - public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_truncate(){ - if(\SYSTEM\SECURITY\Security::check(\SYSTEM\SECURITY\RIGHTS::SYS_SAI)){ - $con = new \SYSTEM\DB\Connection(\SYSTEM\system::getSystemDBInfo()); - $res = $con->query('TRUNCATE system.sys_log;'); - return true; - } - return false; + public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_truncate(){ + $con = new \SYSTEM\DB\Connection(\SYSTEM\system::getSystemDBInfo()); + if(\SYSTEM\system::isSystemDbInfoPG()){ + $con->query('TRUNCATE '.\SYSTEM\DBD\system_log::NAME_PG.';'); + } else { + $con->query('TRUNCATE '.\SYSTEM\DBD\system_log::NAME_MYS.';');} + return \SYSTEM\LOG\JsonResult::ok(); } + public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_stats(){ + $vars = array(); + return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_log/saimod_sys_log_stats.tpl'), $vars); + } + + public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_admin(){ + $vars = array(); + return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_log/saimod_sys_log_admin.tpl'), $vars); + } + public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_visualization(){ $con = new \SYSTEM\DB\Connection(\SYSTEM\system::getSystemDBInfo()); 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;'); + $res = $con->query('SELECT '.\SYSTEM\DBD\system_log::FIELD_TIME.'::date as day,' + .'min('.\SYSTEM\DBD\system_log::FIELD_TIME.') as time_min,' + .'max('.\SYSTEM\DBD\system_log::FIELD_TIME.') as time_max,' + .'count(*) as count,' + .'avg('.\SYSTEM\DBD\system_log::FIELD_QUERYTIME.') as querytime_avg,' + .'max('.\SYSTEM\DBD\system_log::FIELD_QUERYTIME.') as querytime_max,' + .'min('.\SYSTEM\DBD\system_log::FIELD_QUERYTIME.') as querytime_min,' + .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_FILE.') as file_unique,' + .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_IP.') as ip_unique,' + .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_MESSAGE.') as text_unique,' + .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_CLASS.') as class_unique,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'INFO\' then 1 else 0 end) class_INFO,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'DEPRECATED\' then 1 else 0 end) class_DEPRECATED,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'WARNING\' then 1 else 0 end) class_WARNING,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'ERROR\' then 1 else 0 end) class_ERROR,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'AppError\' then 1 else 0 end) class_AppError,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'SYSTEM\LOG\INFO\' then 1 else 0 end) class_SYSTEM_LOG_INFO,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'SYSTEM\LOG\DEPRECATED\' then 1 else 0 end) class_SYSTEM_LOG_DEPRECATED,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'SYSTEM\LOG\WARNING\' then 1 else 0 end) class_SYSTEM_LOG_WARNING,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'SYSTEM\LOG\ERROR\' then 1 else 0 end) class_SYSTEM_LOG_ERROR,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'SYSTEM\LOG\ERROR_EXCEPTION\' then 1 else 0 end) class_SYSTEM_LOG_ERROR_EXCEPTION,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'SYSTEM\LOG\SHUTDOWN_EXCEPTION\' then 1 else 0 end) class_SYSTEM_LOG_SHUTDOWN_EXCEPTION,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'Exception\' then 1 else 0 end) class_Exception,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'RuntimeException\' then 1 else 0 end) class_RuntimeException,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'ErrorException\' then 1 else 0 end) class_ErrorException' + .'FROM '.\SYSTEM\DBD\system_log::NAME_PG + .' 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;'); + $res = $con->query('SELECT DATE('.\SYSTEM\DBD\system_log::FIELD_TIME.') as day,' + .'min('.\SYSTEM\DBD\system_log::FIELD_TIME.') as time_min,' + .'max('.\SYSTEM\DBD\system_log::FIELD_TIME.') as time_max,' + .'count(*) as count,' + .'avg('.\SYSTEM\DBD\system_log::FIELD_QUERYTIME.') as querytime_avg,' + .'max('.\SYSTEM\DBD\system_log::FIELD_QUERYTIME.') as querytime_max,' + .'min('.\SYSTEM\DBD\system_log::FIELD_QUERYTIME.') as querytime_min,' + .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_FILE.') as file_unique,' + .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_IP.') as ip_unique,' + .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_MESSAGE.') as text_unique,' + .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_CLASS.') as class_unique,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'INFO\' then 1 else 0 end) class_INFO,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'DEPRECATED\' then 1 else 0 end) class_DEPRECATED,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'WARNING\' then 1 else 0 end) class_WARNING,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'ERROR\' then 1 else 0 end) class_ERROR,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'AppError\' then 1 else 0 end) class_AppError,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'SYSTEM\LOG\INFO\' then 1 else 0 end) class_SYSTEM_LOG_INFO,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'SYSTEM\LOG\DEPRECATED\' then 1 else 0 end) class_SYSTEM_LOG_DEPRECATED,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'SYSTEM\LOG\WARNING\' then 1 else 0 end) class_SYSTEM_LOG_WARNING,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'SYSTEM\LOG\ERROR\' then 1 else 0 end) class_SYSTEM_LOG_ERROR,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'SYSTEM\LOG\ERROR_EXCEPTION\' then 1 else 0 end) class_SYSTEM_LOG_ERROR_EXCEPTION,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'SYSTEM\LOG\SHUTDOWN_EXCEPTION\' then 1 else 0 end) class_SYSTEM_LOG_SHUTDOWN_EXCEPTION,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'Exception\' then 1 else 0 end) class_Exception,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'RuntimeException\' then 1 else 0 end) class_RuntimeException,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'ErrorException\' then 1 else 0 end) class_ErrorException' + .' FROM '.\SYSTEM\DBD\system_log::NAME_MYS + .' GROUP BY day' + .' ORDER BY day DESC' + .' LIMIT 365;'); } $result = array(); while($row = $res->next()){ @@ -82,34 +94,92 @@ class saimod_sys_log extends \SYSTEM\SAI\SaiModule { return \SYSTEM\LOG\JsonResult::toString($result); } + public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_error($error){ + $con = new \SYSTEM\DB\Connection(\SYSTEM\system::getSystemDBInfo()); + if(\SYSTEM\system::isSystemDbInfoPG()){ + $res = $con->prepare( 'selectSysLogError', + 'SELECT * FROM '.\SYSTEM\DBD\system_log::NAME_PG. + ' LEFT JOIN '.\SYSTEM\DBD\system_user::NAME_PG. + ' ON '.\SYSTEM\DBD\system_log::NAME_PG.'.'.\SYSTEM\DBD\system_log::FIELD_USER. + ' = '.\SYSTEM\DBD\system_user::NAME_PG.'.'.\SYSTEM\DBD\system_user::FIELD_ID. + ' WHERE '.\SYSTEM\DBD\system_log::NAME_PG.'.'.\SYSTEM\DBD\system_log::FIELD_ID.' = $1;', + array($error)); + } else { + $res = $con->prepare( 'selectSysLogError', + 'SELECT * FROM '.\SYSTEM\DBD\system_log::NAME_MYS. + ' LEFT JOIN '.\SYSTEM\DBD\system_user::NAME_MYS. + ' ON '.\SYSTEM\DBD\system_log::NAME_MYS.'.'.\SYSTEM\DBD\system_log::FIELD_USER. + ' = '.\SYSTEM\DBD\system_user::NAME_MYS.'.'.\SYSTEM\DBD\system_user::FIELD_ID. + ' WHERE '.\SYSTEM\DBD\system_log::NAME_MYS.'.'.\SYSTEM\DBD\system_log::FIELD_ID.' = ?;', + array($error)); + } + + $vars = $res->next(); + $vars['trace'] = implode('
', array_slice(explode('#', $vars['trace']), 1, -1)); + return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_log/saimod_sys_log_error.tpl'), $vars); + } + public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_filter($filter = ""){ $con = new \SYSTEM\DB\Connection(\SYSTEM\system::getSystemDBInfo()); $res = null; if($filter !== ""){ - if(\SYSTEM\system::isSystemDbInfoPG()){ + if(\SYSTEM\system::isSystemDbInfoPG()){ + $res = $con->prepare( 'selectCountSysLogFilter', + 'SELECT COUNT(*) as count FROM '.\SYSTEM\DBD\system_log::NAME_PG.'WHERE '.\SYSTEM\DBD\system_log::FIELD_CLASS.' LIKE $1;', + array(mysql_escape_string($filter)))->next(); + $count = $res['count']; $res = $con->prepare( 'selectSysLogFilter', - 'SELECT * FROM system.sys_log WHERE class ILIKE $1 ORDER BY time DESC LIMIT 100;', - array($filter)); + 'SELECT * FROM '.\SYSTEM\DBD\system_log::NAME_PG. + ' LEFT JOIN '.\SYSTEM\DBD\system_user::NAME_PG. + ' ON '.\SYSTEM\DBD\system_log::NAME_PG.'.'.\SYSTEM\DBD\system_log::FIELD_USER. + ' = '.\SYSTEM\DBD\system_user::NAME_PG.'.'.\SYSTEM\DBD\system_user::FIELD_ID. + ' WHERE '.\SYSTEM\DBD\system_log::FIELD_CLASS.' LIKE $1'. + ' ORDER BY '.\SYSTEM\DBD\system_log::FIELD_TIME.' DESC LIMIT 100;', + array(mysql_escape_string($filter))); } else { + $res = $con->prepare( 'selectCountSysLogFilter', + 'SELECT COUNT(*) as count'. + ' FROM '.\SYSTEM\DBD\system_log::NAME_MYS. + ' WHERE '.\SYSTEM\DBD\system_log::FIELD_CLASS.' LIKE ?;', + array(mysql_escape_string($filter)))->next(); + $count = $res['count']; $res = $con->prepare( 'selectSysLogFilter', - 'SELECT * FROM system_log LEFT JOIN system_user ON system_log.user = system_user.id WHERE class LIKE ? ORDER BY time DESC LIMIT 100;', + 'SELECT * FROM '.\SYSTEM\DBD\system_log::NAME_MYS. + ' LEFT JOIN '.\SYSTEM\DBD\system_user::NAME_MYS. + ' ON '.\SYSTEM\DBD\system_log::NAME_MYS.'.'.\SYSTEM\DBD\system_log::FIELD_USER. + ' = '.\SYSTEM\DBD\system_user::NAME_MYS.'.'.\SYSTEM\DBD\system_user::FIELD_ID. + ' WHERE '.\SYSTEM\DBD\system_log::FIELD_CLASS.' LIKE ?'. + ' ORDER BY '.\SYSTEM\DBD\system_log::FIELD_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;'); + if(\SYSTEM\system::isSystemDbInfoPG()){ + $res = $con->query('SELECT COUNT(*) as count FROM '.\SYSTEM\DBD\system_log::NAME_PG)->next(); + $count = $res['count']; + $res = $con->query( 'SELECT * FROM '.\SYSTEM\DBD\system_log::NAME_PG. + ' LEFT JOIN '.\SYSTEM\DBD\system_user::NAME_PG. + ' ON '.\SYSTEM\DBD\system_log::NAME_PG.'.'.\SYSTEM\DBD\system_log::FIELD_USER. + ' = '.\SYSTEM\DBD\system_user::NAME_PG.'.'.\SYSTEM\DBD\system_user::FIELD_ID. + ' ORDER BY '.\SYSTEM\DBD\system_log::FIELD_TIME. + ' DESC LIMIT 100;'); } else { - $res = $con->query('SELECT * FROM system_log LEFT JOIN system_user ON system_log.user = system_user.id ORDER BY time DESC LIMIT 100;'); + $res = $con->query('SELECT COUNT(*) as count FROM '.\SYSTEM\DBD\system_log::NAME_MYS)->next(); + $count = $res['count']; + $res = $con->query( 'SELECT * FROM '.\SYSTEM\DBD\system_log::NAME_MYS. + ' LEFT JOIN '.\SYSTEM\DBD\system_user::NAME_MYS. + ' ON '.\SYSTEM\DBD\system_log::NAME_MYS.'.'.\SYSTEM\DBD\system_log::FIELD_USER. + ' = '.\SYSTEM\DBD\system_user::NAME_MYS.'.'.\SYSTEM\DBD\system_user::FIELD_ID. + ' ORDER BY '.\SYSTEM\DBD\system_log::FIELD_TIME. + ' DESC LIMIT 100;'); } } $now = microtime(true); - $result = ''. - ''.''.''.''.''.''.''.''.''.''; + $table=''; while($r = $res->next()){ //print_r($r); - $result .= ''. + $table .= ''. ''. ''. ''. @@ -120,11 +190,18 @@ class saimod_sys_log extends \SYSTEM\SAI\SaiModule { ''. ''. ''; - } - $result .= '
'.'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['username'].''.$r['querytime'].'
'; - - return $result; - + } + $vars = array(); + $vars['count'] = $count; + $vars['table'] = $table; + return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_log/saimod_sys_log_table.tpl'), $vars); + } + + public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_log(){ + $vars = array(); + $vars['table'] = self::sai_mod__SYSTEM_SAI_saimod_sys_log_action_filter(); + $vars['error_filter'] = self::generate_error_filters(); + return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_log/saimod_sys_log_filter.tpl'), $vars); } private static function time_elapsed_string($ptime){ @@ -150,33 +227,37 @@ class saimod_sys_log extends \SYSTEM\SAI\SaiModule { private static function generate_error_filters(){ $con = new \SYSTEM\DB\Connection(\SYSTEM\system::getSystemDBInfo()); if(\SYSTEM\system::isSystemDbInfoPG()){ - $res = $con->query("SELECT class FROM system.sys_log GROUP BY class ORDER BY class;"); + $res = $con->query( 'SELECT '.\SYSTEM\DBD\system_log::FIELD_CLASS. + ' FROM '.\SYSTEM\DBD\system_log::NAME_PG. + ' GROUP BY '.\SYSTEM\DBD\system_log::FIELD_CLASS. + ' ORDER BY '.\SYSTEM\DBD\system_log::FIELD_CLASS.';'); }else{ - $res = $con->query("SELECT class FROM system_log GROUP BY class ORDER BY class;"); + $res = $con->query( 'SELECT '.\SYSTEM\DBD\system_log::FIELD_CLASS. + ' FROM '.\SYSTEM\DBD\system_log::NAME_MYS. + ' GROUP BY '.\SYSTEM\DBD\system_log::FIELD_CLASS. + ' ORDER BY '.\SYSTEM\DBD\system_log::FIELD_CLASS.';'); } - $result = ""; - $i = 1; + $result = ''; while($row = $res->next()){ - $result .= ''.(($i++ % 6 == 0) ? '
' : '');} - + $result .= '
  • '.$row['class'].'
  • ';} return $result; } public static function sai_mod__SYSTEM_SAI_saimod_sys_log(){ - $vars = array(); - $vars['error_filter'] = self::generate_error_filters(); + $vars = array(); $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); } private static function tablerow_class($class){ switch($class){ - case 'SYSTEM\LOG\INFO': case 'INFO': + case 'SYSTEM\LOG\INFO': case 'INFO': case 'SYSTEM\LOG\COUNTER': return 'success'; case 'SYSTEM\LOG\DEPRECATED': case 'DEPRECATED': return 'info'; - case 'SYSTEM\LOG\ERROR': case 'ERROR': + case 'SYSTEM\LOG\ERROR': case 'ERROR': case 'Exception': case 'SYSTEM\LOG\ERROR_EXCEPTION': + case 'ErrorException': case 'SYSTEM\LOG\SHUTDOWN_EXCEPTION': return 'error'; case 'SYSTEM\LOG\WARNING': case 'WARNING': return 'warning'; diff --git a/sai/modules/saimod_sys_log/saimod_sys_log.tpl b/sai/modules/saimod_sys_log/saimod_sys_log.tpl index b697f15..91f4363 100644 --- a/sai/modules/saimod_sys_log/saimod_sys_log.tpl +++ b/sai/modules/saimod_sys_log/saimod_sys_log.tpl @@ -1,34 +1,13 @@ -