165 lines
5.5 KiB
JavaScript
165 lines
5.5 KiB
JavaScript
import { PMA_ajaxShowMessage } from '../../utils/show_ajax_messages';
|
|
import { PMA_highlightSQL } from '../../utils/sql';
|
|
import { PMA_Messages as PMA_messages } from '../../variables/export_variables';
|
|
import { PMA_commonParams } from '../../variables/common_params';
|
|
import { PMA_getImage } from '../../functions/get_image';
|
|
import { escapeHtml } from '../../utils/Sanitise';
|
|
import { jQuery as $ } from '../../utils/JqueryExtended';
|
|
// object to store process list state information
|
|
class ProcessList {
|
|
constructor () {
|
|
// denotes whether auto refresh is on or off
|
|
this.autoRefresh = false;
|
|
// stores the GET request which refresh process list
|
|
this.refreshRequest = null;
|
|
// stores the timeout id returned by setTimeout
|
|
this.refreshTimeout = null;
|
|
// the refresh interval in seconds
|
|
this.refreshInterval = null;
|
|
// the refresh URL (required to save last used option)
|
|
// i.e. full or sorting url
|
|
this.refreshUrl = null;
|
|
this.init = this.init.bind(this);
|
|
this.killProcessHandler = this.killProcessHandler.bind(this);
|
|
this.refresh = this.refresh.bind(this);
|
|
this.abortRefresh = this.abortRefresh.bind(this);
|
|
this.setRefreshLabel = this.setRefreshLabel.bind(this);
|
|
this.getUrlParams = this.getUrlParams.bind(this);
|
|
}
|
|
/**
|
|
* Handles killing of a process
|
|
*
|
|
* @return void
|
|
*/
|
|
init () {
|
|
this.setRefreshLabel();
|
|
if (this.refreshUrl === null) {
|
|
this.refreshUrl = 'server_status_processes.php' +
|
|
PMA_commonParams.get('common_query');
|
|
}
|
|
if (this.refreshInterval === null) {
|
|
this.refreshInterval = $('#id_refreshRate').val();
|
|
} else {
|
|
$('#id_refreshRate').val(this.refreshInterval);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Handles killing of a process
|
|
*
|
|
* @param object the event object
|
|
*
|
|
* @return void
|
|
*/
|
|
killProcessHandler (event, elementRef) {
|
|
event.preventDefault();
|
|
var url = $(elementRef).attr('href');
|
|
// Get row element of the process to be killed.
|
|
var $tr = $(elementRef).closest('tr');
|
|
$.getJSON(url, function (data) {
|
|
// Check if process was killed or not.
|
|
if (data.hasOwnProperty('success') && data.success) {
|
|
// remove the row of killed process.
|
|
$tr.remove();
|
|
// As we just removed a row, reapply odd-even classes
|
|
// to keep table stripes consistent
|
|
var $tableProcessListTr = $('#tableprocesslist').find('> tbody > tr');
|
|
$tableProcessListTr.filter(':even').removeClass('odd').addClass('even');
|
|
$tableProcessListTr.filter(':odd').removeClass('even').addClass('odd');
|
|
// Show process killed message
|
|
PMA_ajaxShowMessage(data.message, false);
|
|
} else {
|
|
// Show process error message
|
|
PMA_ajaxShowMessage(data.error, false);
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Handles Auto Refreshing
|
|
*
|
|
* @param object the event object
|
|
*
|
|
* @return void
|
|
*/
|
|
refresh () {
|
|
// abort any previous pending requests
|
|
// this is necessary, it may go into
|
|
// multiple loops causing unnecessary
|
|
// requests even after leaving the page.
|
|
this.abortRefresh();
|
|
// if auto refresh is enabled
|
|
if (this.autoRefresh) {
|
|
var interval = parseInt(this.refreshInterval, 10) * 1000;
|
|
var urlParams = this.getUrlParams();
|
|
this.refreshRequest = $.get(this.refreshUrl,
|
|
urlParams,
|
|
function (data) {
|
|
if (data.hasOwnProperty('success') && data.success) {
|
|
var $newTable = $(data.message);
|
|
$('#tableprocesslist').html($newTable.html());
|
|
PMA_highlightSQL($('#tableprocesslist'));
|
|
}
|
|
this.refreshTimeout = setTimeout(
|
|
this.refresh,
|
|
interval
|
|
);
|
|
}.bind(this));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Stop current request and clears timeout
|
|
*
|
|
* @return void
|
|
*/
|
|
abortRefresh () {
|
|
if (this.refreshRequest !== null) {
|
|
this.refreshRequest.abort();
|
|
this.refreshRequest = null;
|
|
}
|
|
clearTimeout(this.refreshTimeout);
|
|
}
|
|
|
|
/**
|
|
* Set label of refresh button
|
|
* change between play & pause
|
|
*
|
|
* @return void
|
|
*/
|
|
setRefreshLabel () {
|
|
var img = 'play';
|
|
var label = PMA_messages.strStartRefresh;
|
|
if (this.autoRefresh) {
|
|
img = 'pause';
|
|
label = PMA_messages.strStopRefresh;
|
|
this.refresh();
|
|
}
|
|
$('a#toggleRefresh').html(PMA_getImage(img) + escapeHtml(label));
|
|
}
|
|
|
|
/**
|
|
* Return the Url Parameters
|
|
* for autorefresh request,
|
|
* includes showExecuting if the filter is checked
|
|
*
|
|
* @return urlParams - url parameters with autoRefresh request
|
|
*/
|
|
getUrlParams () {
|
|
var urlParams = { 'ajax_request': true, 'refresh': true };
|
|
if ($('#showExecuting').is(':checked')) {
|
|
urlParams.showExecuting = true;
|
|
return urlParams;
|
|
}
|
|
return urlParams;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Instance is exported to ensure that every time the import
|
|
* will have the instance only and not the class itself
|
|
*/
|
|
let processList = new ProcessList();
|
|
|
|
export default processList;
|