diff --git a/js/server_status.js b/js/server_status.js index e846281408..0a9a0e6343 100644 --- a/js/server_status.js +++ b/js/server_status.js @@ -549,31 +549,39 @@ $(function() { /**** Monitor charting implementation ****/ - /* Holds all charts */ - var chartGrid = null; - /* Object that contains a list of required nodes that need to be retrieved from the server for chart updates */ - var requiredData = []; /* Saves the previous ajax response for differential values */ var oldChartData = null; - /* Stores the timeout handler so it can be cleared */ - var refreshTimeout = null; - // Holding about to created chart + // Holds about to created chart var newChart = null; - // Chart auto increment - var chartAI = 0; - // To play/pause the monitor - var redrawCharts = false; - // To cancel the automatic refresh when gridRefresh has changed - var gridTimeoutCallBack = null; - // Holds displayed timespan of all charts - var xmin=-1, xmax=-1; + + // Runtime parameter of the monitor + var runtime = { + // Holds all visible charts in the grid + charts: null, + // Current max points per chart (needed for auto calculation) + gridMaxPoints: 20, + // displayed time frame + xmin: -1, + xmax: -1, + // Stores the timeout handler so it can be cleared + refreshTimeout: null, + // Stores the GET request to refresh the charts + refreshRequest: null, + // Chart auto increment + chartAI: 0, + // To play/pause the monitor + redrawCharts: false, + // Object that contains a list of nodes that need to be retrieved from the server for chart updates + dataList: [] + } var monitorSettings = null; var defaultMonitorSettings = { + columns: 4, chartSize: { width: 295, height: 250 }, - // Max points in each chart - gridMaxPoints: 20, + // Max points in each chart. Settings it to 'auto' sets gridMaxPoints to (chartwidth - 40) / 12 + gridMaxPoints: 'auto', /* Refresh rate of all grid charts in ms */ gridRefresh: 5000 } @@ -723,10 +731,14 @@ $(function() { $('a[href="#endChartEditMode"]').toggle(editMode); if(editMode) { - $( "#chartGrid" ).sortable(); - $( "#chartGrid" ).disableSelection(); + $("#chartGrid").sortableTable({ + events: { + drop: function() { console.log('dropped'); } + } + }); + } else { - $( "#chartGrid" ).sortable('destroy'); + $("#chartGrid td").sortable('destroy'); saveMonitor(); // Save settings } @@ -744,7 +756,7 @@ $(function() { .attr('value')) || monitorSettings.chartSize.height }; - $.each(chartGrid, function(key, value) { + $.each(runtime.charts, function(key, value) { value.chart.setSize( monitorSettings.chartSize.width, monitorSettings.chartSize.height, @@ -752,24 +764,30 @@ $(function() { ); }); + if(monitorSettings.gridMaxPoints == 'auto') + runtime.gridMaxPoints = Math.round((monitorSettings.chartSize.width - 40) / 12); + + runtime.xmin = new Date().getTime() - server_time_diff - runtime.gridMaxPoints * monitorSettings.gridRefresh; + runtime.xmax = new Date().getTime() - server_time_diff + monitorSettings.gridRefresh; + saveMonitor(); // Save settings }); $('div#statustabs_charting div.popupContent select[name="gridChartRefresh"]').change(function() { monitorSettings.gridRefresh = parseInt(this.value) * 1000; - clearTimeout(refreshTimeout); + clearTimeout(runtime.refreshTimeout); - if(gridTimeoutCallBack) - gridTimeoutCallBack.abort(); + if(runtime.refreshRequest) + runtime.refreshRequest.abort(); - xmin = new Date().getTime() - server_time_diff - monitorSettings.gridMaxPoints * monitorSettings.gridRefresh; - xmax = new Date().getTime() - server_time_diff + monitorSettings.gridRefresh; + runtime.xmin = new Date().getTime() - server_time_diff - runtime.gridMaxPoints * monitorSettings.gridRefresh; + runtime.xmax = new Date().getTime() - server_time_diff + monitorSettings.gridRefresh; - $.each(chartGrid, function(key, value) { - value.chart.xAxis[0].setExtremes(xmin, xmax, false); + $.each(runtime.charts, function(key, value) { + value.chart.xAxis[0].setExtremes(runtime.xmin, runtime.xmax, false); }); - refreshTimeout = setTimeout(refreshChartGrid, monitorSettings.gridRefresh); + runtime.refreshTimeout = setTimeout(refreshChartGrid, monitorSettings.gridRefresh); saveMonitor(); // Save settings }); @@ -819,12 +837,12 @@ $(function() { }); $('a[href="#pauseCharts"]').click(function() { - redrawCharts = ! redrawCharts; - if(! redrawCharts) + runtime.redrawCharts = ! runtime.redrawCharts; + if(! runtime.redrawCharts) $(this).html(' ' + PMA_messages['strResumeMonitor']); else { $(this).html(' ' + PMA_messages['strPauseMonitor']); - if(chartGrid == null) { + if(runtime.charts == null) { initGrid(); $('a[href="#settingsPopup"]').show(); } @@ -1052,17 +1070,18 @@ $(function() { var settings; var series; + /* Apply default values & config */ if(window.localStorage) { if(window.localStorage['monitorCharts']) - chartGrid = $.parseJSON(window.localStorage['monitorCharts']); + runtime.charts = $.parseJSON(window.localStorage['monitorCharts']); if(window.localStorage['monitorSettings']) monitorSettings = $.parseJSON(window.localStorage['monitorSettings']); - $('a[href="#clearMonitorConfig"]').toggle(chartGrid != null); + $('a[href="#clearMonitorConfig"]').toggle(runtime.charts != null); } - if(chartGrid == null) - chartGrid = defaultChartGrid; + if(runtime.charts == null) + runtime.charts = defaultChartGrid; if(monitorSettings == null) monitorSettings = defaultMonitorSettings; @@ -1071,7 +1090,16 @@ $(function() { $('select[name="gridChartRefresh"]').attr('value',monitorSettings.gridRefresh / 1000); - $.each(chartGrid, function(key, value) { + if(monitorSettings.gridMaxPoints == 'auto') + runtime.gridMaxPoints = Math.round((monitorSettings.chartSize.width - 40) / 12); + else + runtime.gridMaxPoints = monitorSettings.gridMaxPoints; + + runtime.xmin = new Date().getTime() - server_time_diff - runtime.gridMaxPoints * monitorSettings.gridRefresh; + runtime.xmax = new Date().getTime() - server_time_diff + monitorSettings.gridRefresh; + + /* Add all charts */ + $.each(runtime.charts, function(key, value) { addChart(value,true); }); @@ -1084,14 +1112,9 @@ $(function() { for(var j=0; j'); + var numCharts = $('table#chartGrid .monitorChart').length; + + if(numCharts == 0 || !( numCharts % monitorSettings.columns)) + $('table#chartGrid').append(''); + + $('table#chartGrid tr:last').append('
'); } chartObj.chart = PMA_createChart(settings); chartObj.numPoints = 0; if(initialize != true) { - chartGrid['c'+chartAI] = chartObj; + runtime.charts['c'+runtime.chartAI] = chartObj; buildRequiredDataList(); } // Edit,Print icon only in edit mode $('ul#chartGrid li svg *[zIndex=20], li svg *[zIndex=21], li svg *[zIndex=19]').toggle(editMode) - chartAI++; + runtime.chartAI++; } function removeChart(chartObj) { @@ -1198,9 +1226,9 @@ $(function() { if(! htmlnode ) return; - $.each(chartGrid, function(key, value) { + $.each(runtime.charts, function(key, value) { if(value.chart.options.chart.renderTo == htmlnode) { - delete chartGrid[key]; + delete runtime.charts[key]; return false; } }); @@ -1219,13 +1247,13 @@ $(function() { function refreshChartGrid() { /* Send to server */ - gridTimeoutCallBack = $.post('server_status.php?'+url_query, { ajax_request: true, chart_data: 1, type: 'chartgrid', requiredData: $.toJSON(requiredData) },function(data) { + runtime.refreshRequest = $.post('server_status.php?'+url_query, { ajax_request: true, chart_data: 1, type: 'chartgrid', requiredData: $.toJSON(runtime.dataList) },function(data) { var chartData = $.parseJSON(data); var value, i=0; var diff; /* Update values in each graph */ - $.each(chartGrid, function(key, elem) { + $.each(runtime.charts, function(key, elem) { // If newly added chart, we have no data for it yet if(! chartData[key]) return; // Draw all points @@ -1233,14 +1261,14 @@ $(function() { value = chartData[key][j].y; if(i==0 && j==0) { - if(oldChartData==null) diff = chartData.x - xmax; + if(oldChartData==null) diff = chartData.x - runtime.xmax; else diff = parseInt(chartData.x - oldChartData.x); - xmin+= diff; - xmax+= diff; + runtime.xmin+= diff; + runtime.xmax+= diff; } - elem.chart.xAxis[0].setExtremes(xmin, xmax, false); + elem.chart.xAxis[0].setExtremes(runtime.xmin, runtime.xmax, false); if(elem.nodes[j].display == 'differential') { if(oldChartData == null || oldChartData[key] == null) continue; @@ -1253,8 +1281,7 @@ $(function() { if(elem.nodes[j].transformFn) { value = elem.nodes[j].transformFn( chartData[key][j], - (oldChartData == null) ? null : oldChartData[key][j], - j + (oldChartData == null) ? null : oldChartData[key][j] ); } @@ -1262,28 +1289,28 @@ $(function() { elem.chart.series[j].addPoint( { x: chartData.x, y: value }, false, - elem.numPoints >= monitorSettings.gridMaxPoints + elem.numPoints >= runtime.gridMaxPoints ); } i++; - chartGrid[key].numPoints++; - if(redrawCharts) + runtime.charts[key].numPoints++; + if(runtime.redrawCharts) elem.chart.redraw(); }); oldChartData = chartData; - refreshTimeout = setTimeout(refreshChartGrid, monitorSettings.gridRefresh); + runtime.refreshTimeout = setTimeout(refreshChartGrid, monitorSettings.gridRefresh); }); } /* Build list of nodes that need to be retrieved */ function buildRequiredDataList() { - requiredData = {}; - $.each(chartGrid, function(key, chart) { - requiredData[key] = chart.nodes; + runtime.dataList = {}; + $.each(runtime.charts, function(key, chart) { + runtime.dataList[key] = chart.nodes; }); } @@ -1410,7 +1437,7 @@ $(function() { function saveMonitor() { var gridCopy = {}; - $.each(chartGrid, function(key, elem) { + $.each(runtime.charts, function(key, elem) { gridCopy[key] = {}; gridCopy[key].nodes = elem.nodes; gridCopy[key].settings = elem.settings; diff --git a/server_status.php b/server_status.php index 42377aa2b8..2d7f324595 100644 --- a/server_status.php +++ b/server_status.php @@ -231,10 +231,9 @@ if (isset($_REQUEST['ajax_request']) && $_REQUEST['ajax_request'] == true) { } // Cut off big selects, but append byte count therefor - if(strlen($row['argument']) > 310) - $row['argument'] = substr($row['argument'],0,301) . '... [' . - PMA_localizeNumber(number_format(strlen($row['argument']), 2)). - ' ' . __('Bytes') . ']'; + if(strlen($row['argument']) > 180) + $row['argument'] = substr($row['argument'],0,160) . '... [' . + PMA_formatByteDown(strlen($row['argument']), 2).']'; } $return['rows'][] = $row; $i++; @@ -266,6 +265,7 @@ $GLOBALS['js_include'][] = 'jquery/jquery.tablesorter.js'; $GLOBALS['js_include'][] = 'jquery/jquery.cookie.js'; // For tab persistence $GLOBALS['js_include'][] = 'jquery/jquery.json-2.2.js'; $GLOBALS['js_include'][] = 'jquery/jquery.sprintf.js'; +$GLOBALS['js_include'][] = 'jquery/jquery.sortableTable.js'; // Charting $GLOBALS['js_include'][] = 'highcharts/highcharts.js'; /* Files required for chart exporting */ @@ -1406,9 +1406,9 @@ function printMonitor() { -