included todo statistics, updated log visualization

This commit is contained in:
Ulf Gebhardt 2015-10-12 21:01:36 +02:00
parent 16fb43c5cc
commit efe9e65f51
7 changed files with 105 additions and 3 deletions

View File

@ -60,7 +60,7 @@ function load_visualisation(){
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) ? parseFloat(0.00001) : parseFloat(v)];}}));});
$.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) ? parseFloat(0) : parseFloat(v)];}}));});
var options = {title: name, aggregationTarget: 'category', selectionMode: 'multiple', curveType: 'function', /*focusTarget: 'category',*/ chartArea:{left:100,top:40}, vAxis:{logScale: true}, interpolateNulls: false, width: "1200", height: "500"};
new google.visualization.LineChart(document.getElementById('vis')).draw(data, options);

View File

@ -1,3 +1,4 @@
google.load("visualization", "1", {packages:["corechart"]});
function init_saimod_sys_todo() {
$('#tabs_todo a').click(function (e) {
$('#tabs_todo li').each(function(){
@ -44,6 +45,11 @@ function init_saimod_sys_todo_stats() {
$('#tabs_todo li').each(function(){
$(this).removeClass('active');});
$('#menu_stats').parent().addClass('active');
$('#vis_filter_time').change(function(){
load_visualisation();})
$('#vis_filter_type').change(function(){
load_visualisation();})
load_visualisation();
}
function init_saimod_sys_todo_todoopen(){
@ -269,5 +275,33 @@ function init_tinymce(){
forced_root_block : "",
force_br_newlines : true,
force_p_newlines : false
});
});
}
function load_visualisation(){
$('img#loader').show();
var name = $('#vis_filter_type').val();;
var filter = $('#vis_filter_time').val();
$.getJSON('./sai.php?sai_mod=.SYSTEM.SAI.saimod_sys_todo&action=stats&name='+name+'&filter='+filter,function(json){
if(!json || json.status != true || !json.result){
$('img#loader').hide();
return;
}
json = json.result;
$('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) ? parseFloat(0) : parseFloat(v)];}}));});
var options = {title: name, aggregationTarget: 'category', selectionMode: 'multiple', curveType: 'function', /*focusTarget: 'category',*/ chartArea:{left:100,top:40}, vAxis:{logScale: true}, interpolateNulls: false, width: "1200", height: "500"};
new google.visualization.LineChart(document.getElementById('vis')).draw(data, options);
});
}

View File

@ -0,0 +1,16 @@
<?php
namespace SYSTEM\SQL;
class SYS_SAIMOD_TODO_STATS_ASSIGNED extends \SYSTEM\DB\QP {
public static function get_class(){return \get_class();}
public static function mysql(){return
'SELECT DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP('.\SYSTEM\SQL\system_todo::NAME_MYS.'.'.\SYSTEM\SQL\system_todo::FIELD_TIME.') - MOD(UNIX_TIMESTAMP('.\SYSTEM\SQL\system_todo::NAME_MYS.'.'.\SYSTEM\SQL\system_todo::FIELD_TIME.'),?)),"%Y/%m/%d %H:%i:%s") as day,'
.'count(*) as count,'
.'sum(case when '.\SYSTEM\SQL\system_todo_assign::NAME_MYS.'.'.\SYSTEM\SQL\system_todo_assign::FIELD_USER.' IS NOT NULL then 1 else 0 end) assigned,'
.'sum(case when '.\SYSTEM\SQL\system_todo_assign::NAME_MYS.'.'.\SYSTEM\SQL\system_todo_assign::FIELD_USER.' IS NULL then 1 else 0 end) not_assigned'
.' FROM '.\SYSTEM\SQL\system_todo::NAME_MYS
.' LEFT JOIN '.\SYSTEM\SQL\system_todo_assign::NAME_MYS.' ON '.\SYSTEM\SQL\system_todo::FIELD_ID.' = '.\SYSTEM\SQL\system_todo_assign::FIELD_TODO
.' GROUP BY day'
.' ORDER BY day DESC'
.' LIMIT 30;';
}
}

View File

@ -0,0 +1,15 @@
<?php
namespace SYSTEM\SQL;
class SYS_SAIMOD_TODO_STATS_CLOSED extends \SYSTEM\DB\QP {
public static function get_class(){return \get_class();}
public static function mysql(){return
'SELECT DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP('.\SYSTEM\SQL\system_todo::FIELD_TIME.') - MOD(UNIX_TIMESTAMP('.\SYSTEM\SQL\system_todo::FIELD_TIME.'),?)),"%Y/%m/%d %H:%i:%s") as day,'
.'count(*) as count,'
.'sum(case when '.\SYSTEM\SQL\system_todo::FIELD_TIME_CLOSED.' IS NOT NULL then 1 else 0 end) closed,'
.'sum(case when '.\SYSTEM\SQL\system_todo::FIELD_TIME_CLOSED.' IS NULL then 1 else 0 end) open'
.' FROM '.\SYSTEM\SQL\system_todo::NAME_MYS
.' GROUP BY day'
.' ORDER BY day DESC'
.' LIMIT 30;';
}
}

View File

@ -201,6 +201,14 @@ class saimod_sys_todo extends \SYSTEM\SAI\SaiModule {
public static function sai_mod__SYSTEM_SAI_saimod_sys_todo_action_edit($todo, $message){
\SYSTEM\SQL\SYS_SAIMOD_TODO_EDIT::QI(array($message,$message,$todo));
return \SYSTEM\LOG\JsonResult::ok();}
public static function sai_mod__SYSTEM_SAI_saimod_sys_todo_action_stats_name_closed($filter){
return \SYSTEM\LOG\JsonResult::toString(\SYSTEM\SQL\SYS_SAIMOD_TODO_STATS_CLOSED::QA(array($filter)));
}
public static function sai_mod__SYSTEM_SAI_saimod_sys_todo_action_stats_name_assigned($filter){
return \SYSTEM\LOG\JsonResult::toString(\SYSTEM\SQL\SYS_SAIMOD_TODO_STATS_ASSIGNED::QA(array($filter)));
}
public static function sai_mod__SYSTEM_SAI_saimod_sys_todo_action_todo($todo){
$userid = \SYSTEM\SECURITY\Security::getUser()->id;

View File

@ -22,4 +22,31 @@
<th>${table_done}</th>
</tr>
${userstats}
</table>
</table>
<div>
<select id="vis_filter_time">
<option value="2692000">30d</option>
<option value="1209600">14d</option>
<option value="604800">7d</option>
<option value="172800">2d</option>
<option value="86400" selected>1d</option>
<option value="43200">12h</option>
<option value="21600">6h</option>
<option value="14400">4h</option>
<option value="7200">2h</option>
<option value="3600">1h</option>
<option value="1800">30m</option>
<option value="600">10m</option>
<option value="300">5m</option>
<option value="60">1m</option>
<option value="30">30s</option>
<option value="10">10s</option>
<option value="5">5s</option>
<option value="1">1s</option>
</select>
<select id="vis_filter_type">
<option value="closed">closed</option>
<option value="assigned">assigned</option>
</select>
<div id="vis"></div>
</div>

View File

@ -159,6 +159,8 @@ INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `nam
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1025, 42, 3, 1000, 'dotolist', 'filter', 'STRING');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1026, 42, 3, 1000, 'dotolist', 'search', 'STRING');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1027, 42, 3, 1000, 'dotolist', 'page', 'UINT0');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1030, 42, 0, 1000, 'stats', 'name', null);
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1031, 42, 3, 1030, null, 'filter', 'UINT');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1100, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_docu', 'action', NULL);