diff --git a/js/messages.php b/js/messages.php
index 62950be11b..e032af73ac 100644
--- a/js/messages.php
+++ b/js/messages.php
@@ -90,6 +90,13 @@ $js_messages['strChartIssuedQueriesTitle'] = __('Questions (executed statements
$js_messages['strChartQueryPie'] = __('Query statistics');
/* server status monitor */
+$js_messages['strIncompatibleMonitorConfig'] = __('Local monitor configuration icompatible');
+$js_messages['strIncompatibleMonitorConfigDescription'] = __('The chart arrangement configuration in your browsers local storage is not compatible anymore to the newer version of the monitor dialog. It is very likely that your current configuration will not work anymore. Please reset your configuration to default in the Settings menu.');
+
+$js_messages['strQueryCacheEfficiency'] = __('Query cache efficiency');
+$js_messages['strQueryCacheUsage'] = __('Query cache usage');
+$js_messages['strQueryCacheUsed'] = __('Query cache used');
+
$js_messages['strSystemCPUUsage'] = __('System CPU Usage');
$js_messages['strSystemMemory'] = __('System memory');
$js_messages['strSystemSwap'] = __('System swap');
diff --git a/js/server_status.js b/js/server_status.js
index c798bd33c9..870f9b1205 100644
--- a/js/server_status.js
+++ b/js/server_status.js
@@ -662,17 +662,19 @@ $(function() {
return false;
});
+});
- function serverResponseError() {
- var btns = {};
- btns[PMA_messages['strReloadPage']] = function() {
- window.location.reload();
- };
- $('#emptyDialog').attr('title', PMA_messages['strRefreshFailed']);
- $('#emptyDialog').html(
- '
' +
- PMA_messages['strInvalidResponseExplanation']
- );
- $('#emptyDialog').dialog({ buttons: btns });
- }
-});
\ No newline at end of file
+
+// Needs to be global as server_status_monitor.js uses it too
+function serverResponseError() {
+ var btns = {};
+ btns[PMA_messages['strReloadPage']] = function() {
+ window.location.reload();
+ };
+ $('#emptyDialog').attr('title', PMA_messages['strRefreshFailed']);
+ $('#emptyDialog').html(
+ '
' +
+ PMA_messages['strInvalidResponseExplanation']
+ );
+ $('#emptyDialog').dialog({ buttons: btns });
+}
diff --git a/js/server_status_monitor.js b/js/server_status_monitor.js
index cb01ca7934..f8a179d9f7 100644
--- a/js/server_status_monitor.js
+++ b/js/server_status_monitor.js
@@ -16,6 +16,11 @@ $(function() {
// Holds about to created chart
var newChart = null;
var chartSpacing;
+
+ // Whenever the monitor object (runtime.charts) or the settings object (monitorSettings)
+ // changes in a way incompatible to the previous version, increase this number
+ // It will reset the users monitor and settings object in his localStorage to the default configuration
+ var monitorProtocolVersion = '1.0';
// Runtime parameter of the monitor, is being fully set in initGrid()
var runtime = {
@@ -51,103 +56,158 @@ $(function() {
// Allows drag and drop rearrange and print/edit icons on charts
var editMode = false;
-
+
+ /* List of preconfigured charts that the user may select */
var presetCharts = {
- 'cpu-WINNT': {
- title: PMA_messages['strSystemCPUUsage'],
- nodes: [{ dataType: 'cpu', name: PMA_messages['strAverageLoad'], dataPoint: 'loadavg', unit: '%'}]
+ // Query cache efficiency
+ 'qce': {
+ title: PMA_messages['strQueryCacheEfficiency'],
+ nodes: [ {
+ name: PMA_messages['strQueryCacheEfficiency'],
+ dataPoints: [{type: 'statusvar', name: 'Qcache_hits'}, {type: 'statusvar', name: 'Com_select'}],
+ unit: '%',
+ transformFn: 'qce'
+ } ]
},
- 'memory-WINNT': {
- title: PMA_messages['strSystemMemory'],
- nodes: [
- { dataType: 'memory', name: PMA_messages['strTotalMemory'], dataPoint: 'MemTotal', valueDivisor: 1024, unit: PMA_messages['strMiB'] },
- { dataType: 'memory', name: PMA_messages['strUsedMemory'], dataPoint: 'MemUsed', valueDivisor: 1024, unit: PMA_messages['strMiB'] }
- ]
- },
- 'swap-WINNT': {
- title: PMA_messages['strSystemSwap'],
- nodes: [
- { dataType: 'memory', name: PMA_messages['strTotalSwap'], dataPoint: 'SwapTotal', valueDivisor: 1024, unit: PMA_messages['strMiB'] },
- { dataType: 'memory', name: PMA_messages['strUsedSwap'], dataPoint: 'SwapUsed', valueDivisor: 1024, unit: PMA_messages['strMiB'] }
- ]
- },
- 'cpu-Linux': {
- title: PMA_messages['strSystemCPUUsage'],
- nodes: [
- { dataType: 'cpu',
- name: PMA_messages['strAverageLoad'],
- unit: '%',
- transformFn: 'cpu-linux'
- }
- ]
- },
- 'memory-Linux': {
- title: PMA_messages['strSystemMemory'],
- nodes: [
- { dataType: 'memory', name: PMA_messages['strUsedMemory'], dataPoint: 'MemUsed', valueDivisor: 1024, unit: PMA_messages['strMiB'] },
- { dataType: 'memory', name: PMA_messages['strCachedMemory'], dataPoint: 'Cached', valueDivisor: 1024, unit: PMA_messages['strMiB'] },
- { dataType: 'memory', name: PMA_messages['strBufferedMemory'], dataPoint: 'Buffers', valueDivisor: 1024, unit: PMA_messages['strMiB'] },
- { dataType: 'memory', name: PMA_messages['strFreeMemory'], dataPoint: 'MemFree', valueDivisor: 1024, unit: PMA_messages['strMiB'] }
- ],
- settings: {
- chart: {
- type: 'area',
- animation: false
- },
- plotOptions: {
- area: {
- stacking: 'percent'
- }
- }
- }
- },
- 'swap-Linux': {
- title: PMA_messages['strSystemSwap'],
- nodes: [
- { dataType: 'memory', name: PMA_messages['strTotalSwap'], dataPoint: 'SwapUsed', valueDivisor: 1024, unit: PMA_messages['strMiB'] },
- { dataType: 'memory', name: PMA_messages['strCachedSwap'], dataPoint: 'SwapCached', valueDivisor: 1024, unit: PMA_messages['strMiB'] },
- { dataType: 'memory', name: PMA_messages['strFreeSwap'], dataPoint: 'SwapFree', valueDivisor: 1024, unit: PMA_messages['strMiB'] }
- ],
- settings: {
- chart: {
- type: 'area',
- animation: false
- },
- plotOptions: {
- area: {
- stacking: 'percent'
- }
- }
- }
+ // Query cache usage
+ 'qcu': {
+ title: PMA_messages['strQueryCacheUsage'],
+ nodes: [ {
+ name: PMA_messages['strQueryCacheUsed'],
+ dataPoints: [{type: 'statusvar', name: 'Qcache_free_memory'}, {type: 'servervar', name: 'query_cache_size'}],
+ unit: '%',
+ transformFn: 'qcu'
+ } ]
}
};
+
+ /* Add OS specific system info charts to the preset chart list */
+ switch(server_os) {
+ case 'WINNT':
+ $.extend(presetCharts, {
+ 'cpu': {
+ title: PMA_messages['strSystemCPUUsage'],
+ nodes: [ {
+ name: PMA_messages['strAverageLoad'],
+ dataPoints: [{ type: 'cpu', name: 'loadavg'}],
+ unit: '%'
+ } ]
+ },
+
+ 'memory': {
+ title: PMA_messages['strSystemMemory'],
+ nodes: [ {
+ name: PMA_messages['strTotalMemory'],
+ dataPoints: [{ type: 'memory', name: 'MemTotal' }],
+ valueDivisor: 1024,
+ unit: PMA_messages['strMiB']
+ }, {
+ dataType: 'memory',
+ name: PMA_messages['strUsedMemory'],
+ dataPoints: [{ type: 'memory', name: 'MemUsed' }],
+ valueDivisor: 1024,
+ unit: PMA_messages['strMiB']
+ } ]
+ },
+
+ 'swap': {
+ title: PMA_messages['strSystemSwap'],
+ nodes: [ {
+ name: PMA_messages['strTotalSwap'],
+ dataPoints: [{ type: 'memory', name: 'SwapTotal' }],
+ valueDivisor: 1024,
+ unit: PMA_messages['strMiB']
+ }, {
+ name: PMA_messages['strUsedSwap'],
+ dataPoints: [{ type: 'memory', name: 'SwapUsed' }],
+ valueDivisor: 1024,
+ unit: PMA_messages['strMiB']
+ } ]
+ }
+ });
+ break;
+
+ case 'Linux':
+ $.extend(presetCharts, {
+ 'cpu': {
+ title: PMA_messages['strSystemCPUUsage'],
+ nodes: [ {
+ name: PMA_messages['strAverageLoad'],
+ dataPoints: [{ type: 'cpu', name: 'irrelevant' }],
+ unit: '%',
+ transformFn: 'cpu-linux'
+ } ]
+ },
+ 'memory': {
+ title: PMA_messages['strSystemMemory'],
+ nodes: [
+ { name: PMA_messages['strUsedMemory'], dataPoints: [{ type: 'memory', name: 'MemUsed' }], valueDivisor: 1024, unit: PMA_messages['strMiB'] },
+ { name: PMA_messages['strCachedMemory'], dataPoints: [{ type: 'memory', name: 'Cached' }], valueDivisor: 1024, unit: PMA_messages['strMiB'] },
+ { name: PMA_messages['strBufferedMemory'], dataPoints: [{ type: 'memory', name: 'Buffers' }], valueDivisor: 1024, unit: PMA_messages['strMiB'] },
+ { name: PMA_messages['strFreeMemory'], dataPoints: [{ type: 'memory', name: 'MemFree' }], valueDivisor: 1024, unit: PMA_messages['strMiB'] }
+ ],
+ settings: {
+ chart: {
+ type: 'area',
+ animation: false
+ },
+ plotOptions: {
+ area: {
+ stacking: 'percent'
+ }
+ }
+ }
+ },
+ 'swap': {
+ title: PMA_messages['strSystemSwap'],
+ nodes: [
+ { name: PMA_messages['strUsedSwap'], dataPoints: [{ type: 'memory', name: 'SwapUsed' }], valueDivisor: 1024, unit: PMA_messages['strMiB'] },
+ { name: PMA_messages['strCachedSwap'], dataPoints: [{ type: 'memory', name: 'SwapCached' }], valueDivisor: 1024, unit: PMA_messages['strMiB'] },
+ { name: PMA_messages['strFreeSwap'], dataPoints: [{ type: 'memory', name: 'SwapFree' }], valueDivisor: 1024, unit: PMA_messages['strMiB'] }
+ ],
+ settings: {
+ chart: {
+ type: 'area',
+ animation: false
+ },
+ plotOptions: {
+ area: {
+ stacking: 'percent'
+ }
+ }
+ }
+ }
+ });
+ break;
+ }
- // Default setting
+ // Default setting for the chart grid
defaultChartGrid = {
'c0': { title: PMA_messages['strQuestions'],
- nodes: [{ dataType: 'statusvar', name: PMA_messages['strQuestions'], dataPoint: 'Questions', display: 'differential' }]
+ nodes: [{name: PMA_messages['strQuestions'], dataPoints: [{ type: 'statusvar', name: 'Questions' }], display: 'differential' }]
},
'c1': {
title: PMA_messages['strChartConnectionsTitle'],
- nodes: [ { dataType: 'statusvar', name: PMA_messages['strConnections'], dataPoint: 'Connections', display: 'differential' },
- { dataType: 'proc', name: PMA_messages['strProcesses'], dataPoint: 'processes'} ]
+ nodes: [ { name: PMA_messages['strConnections'], dataPoints: [{ type: 'statusvar', name: 'Connections' }], display: 'differential' },
+ { name: PMA_messages['strProcesses'], dataPoints: [{ type: 'proc', name: 'processes' }] } ]
},
'c2': {
title: PMA_messages['strTraffic'],
nodes: [
- { dataType: 'statusvar', name: PMA_messages['strBytesSent'], dataPoint: 'Bytes_sent', display: 'differential', valueDivisor: 1024, unit: PMA_messages['strKiB'] },
- { dataType: 'statusvar', name: PMA_messages['strBytesReceived'], dataPoint: 'Bytes_received', display: 'differential', valueDivisor: 1024, unit: PMA_messages['strKiB'] }
+ { name: PMA_messages['strBytesSent'], dataPoints: [{ type: 'statusvar', name: 'Bytes_sent' }], display: 'differential', valueDivisor: 1024, unit: PMA_messages['strKiB'] },
+ { name: PMA_messages['strBytesReceived'], dataPoints: [{ type: 'statusvar', name: 'Bytes_received' }], display: 'differential', valueDivisor: 1024, unit: PMA_messages['strKiB'] }
]
}
};
- // Server is localhost => We can add cpu/memory/swap
+ // Server is localhost => We can add cpu/memory/swap to the default chart
if (server_db_isLocal) {
- defaultChartGrid['c3'] = presetCharts['cpu-' + server_os];
- defaultChartGrid['c4'] = presetCharts['memory-' + server_os];
- defaultChartGrid['c5'] = presetCharts['swap-' + server_os];
+ defaultChartGrid['c3'] = presetCharts['cpu'];
+ defaultChartGrid['c4'] = presetCharts['memory'];
+ defaultChartGrid['c5'] = presetCharts['swap'];
}
+ /* Buttons that are on the top right corner of each chart */
var gridbuttons = {
cogButton: {
//enabled: true,
@@ -368,9 +428,11 @@ $(function() {
dlgButtons[PMA_messages['strAddChart']] = function() {
var type = $('input[name="chartType"]:checked').val();
- if (type == 'cpu' || type == 'memory' || type == 'swap') {
- newChart = presetCharts[type + '-' + server_os];
+ if (type == 'preset') {
+ newChart = presetCharts[$('div#addChartDialog select[name="presetCharts"]').prop('value')];
} else {
+ // If user builds his own chart, it's being set/updated each time he adds a series
+ // So here we only warn if he didn't add a series yet
if (! newChart || ! newChart.nodes || newChart.nodes.length == 0) {
alert(PMA_messages['strAddOneSeriesWarning']);
return;
@@ -395,6 +457,17 @@ $(function() {
$(this).dialog("close");
};
+ var $presetList = $('div#addChartDialog select[name="presetCharts"]');
+ if ($presetList.html().length == 0) {
+ $.each(presetCharts, function(key, value) {
+ $presetList.append('');
+ });
+ $presetList.change(function() {
+ $('input#chartPreset').trigger('click');
+ $('input[name="chartTitle"]').attr('value', presetCharts[$(this).prop('value')].title);
+ });
+ }
+
$('div#addChartDialog').dialog({
width: 'auto',
height: 'auto',
@@ -500,6 +573,7 @@ $(function() {
$('a[href="#clearMonitorConfig"]').click(function() {
window.localStorage.removeItem('monitorCharts');
window.localStorage.removeItem('monitorSettings');
+ window.localStorage.removeItem('monitorVersion');
$(this).hide();
rebuildGrid();
});
@@ -712,8 +786,7 @@ $(function() {
}
var serie = {
- dataType: 'statusvar',
- dataPoint: $('input#variableInput').attr('value'),
+ dataPoints: [{ type: 'statusvar', name: $('input#variableInput').attr('value') }],
name: $('input#variableInput').attr('value'),
display: $('input[name="differentialValue"]').attr('checked') ? 'differential' : ''
};
@@ -733,7 +806,7 @@ $(function() {
var str = serie.display == 'differential' ? ', ' + PMA_messages['strDifferential'] : '';
str += serie.valueDivisor ? (', ' + $.sprintf(PMA_messages['strDividedBy'], serie.valueDivisor)) : '';
- $('#seriesPreview').append('- ' + serie.dataPoint + str + '
');
+ $('#seriesPreview').append('- ' + serie.name + str + '
');
newChart.nodes.push(serie);
@@ -769,6 +842,19 @@ $(function() {
}
$('a[href="#clearMonitorConfig"]').toggle(runtime.charts != null);
+
+ if (runtime.charts != null && monitorProtocolVersion != window.localStorage['monitorVersion']) {
+ $('div#emptyDialog').attr('title',PMA_messages['strIncompatibleMonitorConfig']);
+ $('div#emptyDialog').html(PMA_messages['strIncompatibleMonitorConfigDescription']);
+
+ var dlgBtns = {};
+ dlgBtns[PMA_messages['strClose']] = function() { $(this).dialog('close'); };
+
+ $('div#emptyDialog').dialog({
+ width: 400,
+ buttons: dlgBtns
+ });
+ }
}
if (runtime.charts == null) {
@@ -1033,7 +1119,7 @@ $(function() {
var htmlStr = '
Chart title:
';
htmlStr += '
Series: