diff --git a/db/connection/ConnectionMYS.php b/db/connection/ConnectionMYS.php index 349d257..a711113 100644 --- a/db/connection/ConnectionMYS.php +++ b/db/connection/ConnectionMYS.php @@ -11,11 +11,11 @@ class ConnectionMYS extends ConnectionAbstr { $this->connection = mysqli_connect($dbinfo->m_host, $dbinfo->m_user, $dbinfo->m_password, $new_link, $client_flag); if(!$this->connection){ - throw new \Exception('Could not connect to Database. Check ur Database Settings');} + throw new \SYSTEM\LOG\ERROR('Could not connect to Database. Check ur Database Settings');} if(!mysqli_select_db($this->connection, $dbinfo->m_database)){ mysqli_close($this->connection); - throw new \Exception('Could not select Database. Check ur Database Settings: '.mysqli_error($this->connection));} + throw new \SYSTEM\LOG\ERROR('Could not select Database. Check ur Database Settings: '.mysqli_error($this->connection));} } public function __destruct(){ @@ -24,7 +24,7 @@ class ConnectionMYS extends ConnectionAbstr { public function prepare($stmtName, $stmt, $values){ $prepStmt = \mysqli_prepare($this->connection, $stmt); if(!$prepStmt){ - throw new \Exception('Prepared Statement prepare fail: '. \mysqli_error($this->connection));} + throw new \SYSTEM\LOG\ERROR('Prepared Statement prepare fail: '. \mysqli_error($this->connection));} $types = ''; $binds = array($prepStmt,null); @@ -36,7 +36,7 @@ class ConnectionMYS extends ConnectionAbstr { \call_user_func_array('mysqli_stmt_bind_param', $binds); if(!mysqli_stmt_execute($prepStmt)){ - throw new \Exception("Could not execute prepare statement: ". \mysqli_stmt_error($prepStmt));} + throw new \SYSTEM\LOG\ERROR("Could not execute prepare statement: ". \mysqli_stmt_error($prepStmt));} return new ResultMysqliPrepare($prepStmt); } @@ -47,7 +47,7 @@ class ConnectionMYS extends ConnectionAbstr { public function query($query){ $result = mysqli_query($this->connection, $query); if(!$result){ - throw new \Exception('Could not query Database. Check ur Query Syntax or required Rights: '.mysqli_error($this->connection));} + throw new \SYSTEM\LOG\ERROR('Could not query Database. Check ur Query Syntax or required Rights: '.mysqli_error($this->connection));} if($result === TRUE){ return TRUE;} diff --git a/dbd/sql/pg/data/sai_api.sql b/dbd/sql/pg/data/sai_api.sql index c87e112..34c0267 100644 --- a/dbd/sql/pg/data/sai_api.sql +++ b/dbd/sql/pg/data/sai_api.sql @@ -32,5 +32,7 @@ INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, ve 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 (51, 42, 3, 3, 'error', 'error', 'INT'); +INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (52, 42, 0, 3, 'stats', 'name', null); +INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (53, 42, 3, 52, null, 'filter', 'UINT'); INSERT INTO system.api ("ID", "group", type, "parentID", "parentValue", name, verify) VALUES (300, 42, 4, -1, NULL, '_lang', 'LANG'); \ No newline at end of file diff --git a/sai/modules/saimod_sys_locale/tinymce/skins/lightgray/skin.ie7.min.css b/sai/modules/saimod_sys_locale/tinymce/skins/lightgray/skin.ie7.min.css.noie similarity index 100% rename from sai/modules/saimod_sys_locale/tinymce/skins/lightgray/skin.ie7.min.css rename to sai/modules/saimod_sys_locale/tinymce/skins/lightgray/skin.ie7.min.css.noie diff --git a/sai/modules/saimod_sys_log/saimod_sys_log.js b/sai/modules/saimod_sys_log/saimod_sys_log.js index c4c7b96..5aad7b8 100644 --- a/sai/modules/saimod_sys_log/saimod_sys_log.js +++ b/sai/modules/saimod_sys_log/saimod_sys_log.js @@ -18,8 +18,8 @@ function load_log_tab(action){ $('img#loader').hide();}); return; case 'stats': - $('#tab_stats').load(SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_log&action='+action, function(){ - drawVisualization(); + $('#tab_stats').load(SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_log&action='+action, function(){ + register_stats(); $('img#loader').hide();}); return; case 'admin': @@ -58,6 +58,31 @@ function register_log(){ load_table_log($(this).attr('filter')); }); } +var filter_time = 604800; +var last_active = "#basic_tab"; +function register_stats(){ + filter_time = 604800; + $('#stats_tabs a').click(function (e) { + e.preventDefault(); + $(this).tab('show'); + last_active = $(this).attr('href'); + $($(this).attr('href')+' .visualisation').each(function(){ + load_visualisation($(this).attr('id'),filter_time); + }); + }); + $("#stats_filter a").click(function(){ + $('#stats_filter li').each(function(){ + $(this).removeClass('active');}); + $(this).parent().addClass('active'); + filter_time = $(this).attr('filter'); + $(last_active+' .visualisation').each(function(){ + load_visualisation($(this).attr('id'),filter_time); + }); + }); + $('#basic_tab .visualisation').each(function(){ + load_visualisation($(this).attr('id'),filter_time); + }); +} function register_admin(){ $('#truncate_table').click(function(){ @@ -76,107 +101,28 @@ function register_admin(){ }); } -function drawVisualization() { +function load_visualisation(id, filter){ $('img#loader').show(); - $.getJSON(SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_log&action=visualization',function(json){ - if(!json || json.status != true){ + $.getJSON(SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_log&action=stats&name='+id+'&filter='+filter,function(json){ + if(!json || json.status != true || !json.result){ $('img#loader').hide(); return; - } + } json = json.result; - var data1 = new google.visualization.DataTable(); - data1.addColumn('date', 'day'); - data1.addColumn('number', 'count'); - //data.addColumn('string', 'from to'); - data1.addColumn('number', 'file_unique'); - data1.addColumn('number', 'ip_unique'); - data1.addColumn('number', 'text_unique'); - data1.addColumn('number', 'class_unique'); - - var data2 = new google.visualization.DataTable(); - data2.addColumn('date', 'day'); - data2.addColumn('number', 'count'); - data2.addColumn('number', 'querytime avg'); - data2.addColumn('number', 'querytime max'); - data2.addColumn('number', 'querytime min'); - - var data3 = new google.visualization.DataTable(); - data3.addColumn('date', 'day'); - data3.addColumn('number', 'count'); - data3.addColumn('number', 'class_info'); - data3.addColumn('number', 'class_deprecated'); - data3.addColumn('number', 'class_warning'); - data3.addColumn('number', 'class_error'); - data3.addColumn('number', 'class_apperror'); - - var data4 = new google.visualization.DataTable(); - data4.addColumn('date', 'day'); - data4.addColumn('number', 'count'); - data4.addColumn('number', 'class_system_log_info'); - data4.addColumn('number', 'class_system_log_deprecated'); - data4.addColumn('number', 'class_system_log_warning'); - data4.addColumn('number', 'class_system_log_error'); - data4.addColumn('number', 'class_system_log_errorexception'); - data4.addColumn('number', 'class_system_log_shutdownexception'); - - var data5 = new google.visualization.DataTable(); - data5.addColumn('date', 'day'); - data5.addColumn('number', 'count'); - data5.addColumn('number', 'class_exception'); - data5.addColumn('number', 'class_runtimeexception'); - data5.addColumn('number', 'class_errorexception'); - data5.addColumn('number', 'class_other'); - - $.each(json, function(key, value){ - data1.addRow([ new Date(value.day), - parseInt(value.count), - parseInt(value.file_unique), - parseInt(value.ip_unique), - parseInt(value.text_unique), - parseInt(value.class_unique)]); - data2.addRow([ new Date(value.day), - parseInt(value.count), - parseFloat(value.querytime_avg), - parseFloat(value.querytime_max), - parseFloat(value.querytime_min)]); - data3.addRow([ new Date(value.day), - parseInt(value.count), - parseInt(value.class_info)+0.5, - parseInt(value.class_deprecated)+0.5, - parseInt(value.class_warning)+0.5, - parseInt(value.class_error)+0.5, - parseInt(value.class_apperror)+0.5]); - data4.addRow([ new Date(value.day), - parseInt(value.count), - parseInt(value.class_system_log_info)+0.5, - parseInt(value.class_system_log_deprecated)+0.5, - 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]); - data5.addRow([ new Date(value.day), - parseInt(value.count), - parseInt(value.class_exception)+0.5, - parseInt(value.class_runtimeexception)+0.5, - parseInt(value.class_errorexception)+0.5, - parseInt(value.count)+0.5 - parseInt(value.class_info) - parseInt(value.class_deprecated) - parseInt(value.class_warning) - parseInt(value.class_error) - parseInt(value.class_apperror) - parseInt(value.class_system_log_info) - parseInt(value.class_system_log_deprecated) - parseInt(value.class_system_log_warning) - parseInt(value.class_system_log_error) - parseInt(value.class_system_log_errorexception) - parseInt(value.class_system_log_shutdownexception) - parseInt(value.class_exception) - parseInt(value.class_runtimeexception) - parseInt(value.class_errorexception)]); - }); - - - - // Create and draw the visualization. - var options = {title: 'Exception Occurrence', aggregationTarget: 'category', selectionMode: 'multiple', /*focusTarget: 'category',*/ chartArea:{left:100,top:40}, vAxis:{logScale: true}, interpolateNulls: false, width: "1400", height: "500"}; - new google.visualization.LineChart(document.getElementById('visualization1')).draw(data1, options); - var options = {title: 'Exception Querytime', /*focusTarget: 'category',*/ chartArea:{left:100,top:40}, vAxis:{logScale: true}, interpolateNulls: false, width: "1400", height: "500"}; - new google.visualization.LineChart(document.getElementById('visualization2')).draw(data2, options); - var options = {title: 'Exception Classes - basic', /*focusTarget: 'category',*/ chartArea:{left:100,top:40}, vAxis:{logScale: true}, interpolateNulls: false, width: "1400", height: "500"}; - new google.visualization.LineChart(document.getElementById('visualization3')).draw(data3, options); - var options = {title: 'Exception Classes - system', /*focusTarget: 'category',*/ chartArea:{left:100,top:40}, vAxis:{logScale: true}, interpolateNulls: false, width: "1400", height: "500"}; - new google.visualization.LineChart(document.getElementById('visualization4')).draw(data4, options); - var options = {title: 'Exception Classes - other', /*focusTarget: 'category',*/ chartArea:{left:100,top:40}, vAxis:{logScale: true}, interpolateNulls: false, width: "1400", height: "500"}; - new google.visualization.LineChart(document.getElementById('visualization5')).draw(data5, options); - $('img#loader').hide(); - }); - + var data = new google.visualization.DataTable(); + first = true; + $.each(json[0], function(key, value){ + if(first){ + data.addColumn('datetime',key); + first = false; + } else { + data.addColumn('number',key); + } + }); + $.each(json, function(key, value){first = true; data.addRow($.map(value, function(v) { if(first){first=false;return [new Date(v)];}else{return [(v == null || parseFloat(v) <= 0) ? 0.1 : parseFloat(v)];}}));}); + + var options = {title: id, aggregationTarget: 'category', selectionMode: 'multiple', /*focusTarget: 'category',*/ chartArea:{left:100,top:40}, vAxis:{logScale: true}, interpolateNulls: false, width: "1200", height: "500"}; + new google.visualization.LineChart(document.getElementById(id)).draw(data, options); + }); } \ 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 69c2802..e01ee51 100644 --- a/sai/modules/saimod_sys_log/saimod_sys_log.php +++ b/sai/modules/saimod_sys_log/saimod_sys_log.php @@ -24,74 +24,279 @@ class saimod_sys_log extends \SYSTEM\SAI\SaiModule { 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(){ + public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_stats_name_class_system($filter){ $con = new \SYSTEM\DB\Connection(\SYSTEM\system::getSystemDBInfo()); if(\SYSTEM\system::isSystemDbInfoPG()){ - $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,' + $res = $con->query('SELECT to_timestamp(extract(epoch from '.\SYSTEM\DBD\system_log::FIELD_TIME.')::int - (extract(epoch from '.\SYSTEM\DBD\system_log::FIELD_TIME.')::int % '.$filter.')) as day,' .'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\COUNTER\' then 1 else 0 end) class_SYSTEM_LOG_COUNTER,' .'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.' = \'SYSTEM\LOG\SHUTDOWN_EXCEPTION\' then 1 else 0 end) class_SYSTEM_LOG_SHUTDOWN_EXCEPTION' + .' FROM '.\SYSTEM\DBD\system_log::NAME_PG + .' GROUP BY day' + .' ORDER BY day DESC' + .' LIMIT 30;'); + } else { + } + $result = array(); + while($row = $res->next()){ + $result[] = $row;} + + return \SYSTEM\LOG\JsonResult::toString($result); + } + + public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_stats_name_class_other($filter){ + $con = new \SYSTEM\DB\Connection(\SYSTEM\system::getSystemDBInfo()); + if(\SYSTEM\system::isSystemDbInfoPG()){ + $res = $con->query('SELECT to_timestamp(extract(epoch from '.\SYSTEM\DBD\system_log::FIELD_TIME.')::int - (extract(epoch from '.\SYSTEM\DBD\system_log::FIELD_TIME.')::int % '.$filter.')) as day,' + .'count(*) as count,' .'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('.\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;'); + .' LIMIT 30;'); + } else { } $result = array(); while($row = $res->next()){ $result[] = $row;} - return \SYSTEM\LOG\JsonResult::toString($result); + return \SYSTEM\LOG\JsonResult::toString($result); + } + + public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_stats_name_class_basic($filter){ + $con = new \SYSTEM\DB\Connection(\SYSTEM\system::getSystemDBInfo()); + if(\SYSTEM\system::isSystemDbInfoPG()){ + $res = $con->query('SELECT to_timestamp(extract(epoch from '.\SYSTEM\DBD\system_log::FIELD_TIME.')::int - (extract(epoch from '.\SYSTEM\DBD\system_log::FIELD_TIME.')::int % '.$filter.')) as day,' + .'count(*) as count,' + .'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.' = \'WARNING\' then 1 else 0 end) class_WARNING,' + .'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.' = \'AppError\' then 1 else 0 end) class_AppError' + .' FROM '.\SYSTEM\DBD\system_log::NAME_PG + .' GROUP BY day' + .' ORDER BY day DESC' + .' LIMIT 30;'); + } else { + } + $result = array(); + while($row = $res->next()){ + $result[] = $row;} + + return \SYSTEM\LOG\JsonResult::toString($result); + } + + public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_stats_name_basic_sucess($filter){ + $con = new \SYSTEM\DB\Connection(\SYSTEM\system::getSystemDBInfo()); + if(\SYSTEM\system::isSystemDbInfoPG()){ + $res = $con->query('SELECT to_timestamp(extract(epoch from '.\SYSTEM\DBD\system_log::FIELD_TIME.')::int - (extract(epoch from '.\SYSTEM\DBD\system_log::FIELD_TIME.')::int % '.$filter.')) as day,' + .'count(*) as count,' + .'sum(case when not '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'SYSTEM\LOG\COUNTER\' and' + .' not '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'SYSTEM\LOG\INFO\' and' + .' not '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'INFO\' and' + .' not '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'SYSTEM\LOG\DEPRECATED\' and' + .' not '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'EPRECATED\' ' + .'then 1 else 0 end) class_fail,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'SYSTEM\LOG\INFO\' or ' + .\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'SYSTEM\LOG\INFO\' or ' + .\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'INFO\' or ' + .\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'SYSTEM\LOG\DEPRECATED\' or ' + .\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'EPRECATED\' ' + .'then 1 else 0 end) class_log,' + .'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'SYSTEM\LOG\COUNTER\' then 1 else 0 end) class_sucess' + .' FROM '.\SYSTEM\DBD\system_log::NAME_PG + .' GROUP BY day' + .' ORDER BY day DESC' + .' LIMIT 30;'); + } else { + } + $result = array(); + while($row = $res->next()){ + $result[] = $row;} + + return \SYSTEM\LOG\JsonResult::toString($result); + } + + public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_stats_name_basic_querytime($filter){ + $con = new \SYSTEM\DB\Connection(\SYSTEM\system::getSystemDBInfo()); + if(\SYSTEM\system::isSystemDbInfoPG()){ + $res = $con->query('SELECT to_timestamp(extract(epoch from '.\SYSTEM\DBD\system_log::FIELD_TIME.')::int - (extract(epoch from '.\SYSTEM\DBD\system_log::FIELD_TIME.')::int % '.$filter.')) as day,' + .'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,' + .'variance('.\SYSTEM\DBD\system_log::FIELD_QUERYTIME.') as querytime_var' + .' FROM '.\SYSTEM\DBD\system_log::NAME_PG + .' GROUP BY day' + .' ORDER BY day DESC' + .' LIMIT 30;'); + } else { + } + $result = array(); + while($row = $res->next()){ + $result[] = $row;} + + return \SYSTEM\LOG\JsonResult::toString($result); + } + + public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_stats_name_unique_basic($filter){ + $con = new \SYSTEM\DB\Connection(\SYSTEM\system::getSystemDBInfo()); + if(\SYSTEM\system::isSystemDbInfoPG()){ + $res = $con->query('SELECT to_timestamp(extract(epoch from '.\SYSTEM\DBD\system_log::FIELD_TIME.')::int - (extract(epoch from '.\SYSTEM\DBD\system_log::FIELD_TIME.')::int % '.$filter.')) as day,' + .'count(*) as count,' + .'count(distinct "'.\SYSTEM\DBD\system_log::FIELD_USER.'") as user_unique,' + .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_IP.') as ip_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_FILE.') as file_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_LINE.') as line_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_TRACE.') as trace_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_MESSAGE.') as text_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_CLASS.') as class_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_QUERYTIME.') as querytime_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_TIME.') as time_unique,' + .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_SERVER_NAME.') as server_name_unique' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_SERVER_PORT.') as server_port_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_REQUEST_URI.') as request_uri_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_POST.') as post_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_HTTP_REFERER.') as http_referer_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_HTTP_USER_AGENT.') as http_user_agent_unique' + .' FROM '.\SYSTEM\DBD\system_log::NAME_PG + .' GROUP BY day' + .' ORDER BY day DESC' + .' LIMIT 30;'); + } else { + } + $result = array(); + while($row = $res->next()){ + $result[] = $row;} + + return \SYSTEM\LOG\JsonResult::toString($result); + } + + public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_stats_name_unique_request($filter){ + $con = new \SYSTEM\DB\Connection(\SYSTEM\system::getSystemDBInfo()); + if(\SYSTEM\system::isSystemDbInfoPG()){ + $res = $con->query('SELECT to_timestamp(extract(epoch from '.\SYSTEM\DBD\system_log::FIELD_TIME.')::int - (extract(epoch from '.\SYSTEM\DBD\system_log::FIELD_TIME.')::int % '.$filter.')) as day,' + .'count(*) as count,' + //.'count(distinct "'.\SYSTEM\DBD\system_log::FIELD_USER.'") as user_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_IP.') as ip_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_FILE.') as file_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_LINE.') as line_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_TRACE.') as trace_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_MESSAGE.') as text_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_CLASS.') as class_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_QUERYTIME.') as querytime_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_TIME.') as time_unique,' + .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_SERVER_NAME.') as server_name_unique,' + .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_SERVER_PORT.') as server_port_unique,' + .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_REQUEST_URI.') as request_uri_unique,' + .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_POST.') as post_unique' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_HTTP_REFERER.') as http_referer_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_HTTP_USER_AGENT.') as http_user_agent_unique' + .' FROM '.\SYSTEM\DBD\system_log::NAME_PG + .' GROUP BY day' + .' ORDER BY day DESC' + .' LIMIT 30;'); + } else { + } + $result = array(); + while($row = $res->next()){ + $result[] = $row;} + + return \SYSTEM\LOG\JsonResult::toString($result); + } + + public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_stats_name_unique_exception($filter){ + $con = new \SYSTEM\DB\Connection(\SYSTEM\system::getSystemDBInfo()); + if(\SYSTEM\system::isSystemDbInfoPG()){ + $res = $con->query('SELECT to_timestamp(extract(epoch from '.\SYSTEM\DBD\system_log::FIELD_TIME.')::int - (extract(epoch from '.\SYSTEM\DBD\system_log::FIELD_TIME.')::int % '.$filter.')) as day,' + .'count(*) as count,' + //.'count(distinct "'.\SYSTEM\DBD\system_log::FIELD_USER.'") as user_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_IP.') as ip_unique,' + .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_FILE.') as file_unique,' + .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_LINE.') as line_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_TRACE.') as trace_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_MESSAGE.') as text_unique,' + .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_CLASS.') as class_unique' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_QUERYTIME.') as querytime_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_TIME.') as time_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_SERVER_NAME.') as server_name_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_SERVER_PORT.') as server_port_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_REQUEST_URI.') as request_uri_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_POST.') as post_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_HTTP_REFERER.') as http_referer_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_HTTP_USER_AGENT.') as http_user_agent_unique' + .' FROM '.\SYSTEM\DBD\system_log::NAME_PG + .' GROUP BY day' + .' ORDER BY day DESC' + .' LIMIT 30;'); + } else { + } + $result = array(); + while($row = $res->next()){ + $result[] = $row;} + + return \SYSTEM\LOG\JsonResult::toString($result); + } + + public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_stats_name_unique_referer($filter){ + $con = new \SYSTEM\DB\Connection(\SYSTEM\system::getSystemDBInfo()); + if(\SYSTEM\system::isSystemDbInfoPG()){ + $res = $con->query('SELECT to_timestamp(extract(epoch from '.\SYSTEM\DBD\system_log::FIELD_TIME.')::int - (extract(epoch from '.\SYSTEM\DBD\system_log::FIELD_TIME.')::int % '.$filter.')) as day,' + .'count(*) as count,' + .'count(distinct "'.\SYSTEM\DBD\system_log::FIELD_USER.'") as user_unique,' + .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_IP.') as ip_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_FILE.') as file_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_LINE.') as line_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_TRACE.') as trace_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_MESSAGE.') as text_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_CLASS.') as class_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_QUERYTIME.') as querytime_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_TIME.') as time_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_SERVER_NAME.') as server_name_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_SERVER_PORT.') as server_port_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_REQUEST_URI.') as request_uri_unique,' + //.'count(distinct '.\SYSTEM\DBD\system_log::FIELD_POST.') as post_unique,' + .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_HTTP_REFERER.') as http_referer_unique,' + .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_HTTP_USER_AGENT.') as http_user_agent_unique' + .' FROM '.\SYSTEM\DBD\system_log::NAME_PG + .' GROUP BY day' + .' ORDER BY day DESC' + .' LIMIT 30;'); + } else { + } + $result = array(); + while($row = $res->next()){ + $result[] = $row;} + + return \SYSTEM\LOG\JsonResult::toString($result); + } + + public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_stats_name_basic_visitor($filter){ + $con = new \SYSTEM\DB\Connection(\SYSTEM\system::getSystemDBInfo()); + if(\SYSTEM\system::isSystemDbInfoPG()){ + $res = $con->query('SELECT to_timestamp(extract(epoch from '.\SYSTEM\DBD\system_log::FIELD_TIME.')::int - (extract(epoch from '.\SYSTEM\DBD\system_log::FIELD_TIME.')::int % '.$filter.')) as day,' + .'count(*) as count,' + .'count(distinct "'.\SYSTEM\DBD\system_log::FIELD_USER.'") as user_unique,' + //.'variance(distinct "'.\SYSTEM\DBD\system_log::FIELD_USER.'") as user_var,' + .'count(distinct '.\SYSTEM\DBD\system_log::FIELD_IP.') as ip_unique' + .' FROM '.\SYSTEM\DBD\system_log::NAME_PG + .' GROUP BY day' + .' ORDER BY day DESC' + .' LIMIT 30;'); + } else { + } + $result = array(); + while($row = $res->next()){ + $result[] = $row;} + + return \SYSTEM\LOG\JsonResult::toString($result); } public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_error($error){ diff --git a/sai/modules/saimod_sys_log/saimod_sys_log_filter.tpl b/sai/modules/saimod_sys_log/saimod_sys_log_filter.tpl index cfa9c14..c37d94e 100644 --- a/sai/modules/saimod_sys_log/saimod_sys_log_filter.tpl +++ b/sai/modules/saimod_sys_log/saimod_sys_log_filter.tpl @@ -1,6 +1,6 @@ -