diff --git a/web/pgadmin/dashboard/static/js/dashboard.js b/web/pgadmin/dashboard/static/js/dashboard.js
index 03846bb..10e3c8c 100644
--- a/web/pgadmin/dashboard/static/js/dashboard.js
+++ b/web/pgadmin/dashboard/static/js/dashboard.js
@@ -23,85 +23,33 @@ function(url_for, gettext, r, $, _, pgAdmin, Backbone, Backgrid, Flotr,
is_database_dashboard = false;
// Custom BackGrid cell, Responsible for cancelling active sessions
- var cancelQueryCell = Backgrid.Extension.DeleteCell.extend({
+ var customDashboardActionCell = Backgrid.Extension.DeleteCell.extend({
render: function () {
this.$el.empty();
- this.$el.html(
- ""
- );
+ var self = this,
+ cell_action = self.column.get('cell_action');
+ // if cancel query button then
+ if (cell_action === 'cancel') {
+ this.$el.html(
+ ""
+ );
+ } else {
+ this.$el.html(
+ ""
+ );
+ }
this.delegateEvents();
return this;
},
deleteRow: function(e) {
- var self = this;
- e.preventDefault();
-
- var canDeleteRow = Backgrid.callByNeed(
- self.column.get('canDeleteRow'), self.column, self.model
- );
- // If we are not allowed to cancel the query, return from here
- if(!canDeleteRow)
- return;
-
- // This will refresh the grid
- var refresh_grid = function() {
- if(is_server_dashboard) {
- $('#btn_server_activity_refresh').click();
- } else if(is_database_dashboard) {
- $('#btn_database_activity_refresh').click();
- }
- };
-
- var title = gettext('Cancel Active Query?'),
- txtConfirm = gettext('Are you sure you wish to cancel the active query?');
-
- alertify.confirm(
- title,
- txtConfirm,
- function(evt) {
- $.ajax({
- url: cancel_query_url + self.model.get('pid'),
- type:'DELETE',
- success: function(res) {
- if (res == gettext('Success')) {
- alertify.success(gettext('Active query cancelled successfully.'));
- refresh_grid();
- } else {
- alertify.error(gettext('An error occurred whilst cancelling the active query.'));
- }
- },
- error: function(xhr, status, error) {
- try {
- var err = $.parseJSON(xhr.responseText);
- if (err.success == 0) {
- alertify.error(err.errormsg);
- }
- } catch (e) {}
- }
- });
- },
- function(evt) {
- return true;
- }
- );
- }
- });
+ var self = this,
+ title, txtConfirm, txtSuccess, txtError, action_url,
+ cell_action = self.column.get('cell_action');
- var terminateSessionCell = Backgrid.Extension.DeleteCell.extend({
- render: function () {
- this.$el.empty();
- this.$el.html(
- ""
- );
- this.delegateEvents();
- return this;
- },
- deleteRow: function(e) {
- var self = this;
e.preventDefault();
var canDeleteRow = Backgrid.callByNeed(
@@ -120,22 +68,33 @@ function(url_for, gettext, r, $, _, pgAdmin, Backbone, Backgrid, Flotr,
}
};
- var title = gettext('Terminate Session?'),
+ if (cell_action === 'cancel') {
+ title = gettext('Cancel Active Query?');
+ txtConfirm = gettext('Are you sure you wish to cancel the active query?');
+ txtSuccess = gettext('Active query cancelled successfully.')
+ txtError = gettext('An error occurred whilst cancelling the active query.')
+ action_url = cancel_query_url + self.model.get('pid')
+ } else {
+ title = gettext('Terminate Session?');
txtConfirm = gettext('Are you sure you wish to terminate the session?');
+ txtSuccess = gettext('Session terminateed successfully.')
+ txtError = gettext('An error occurred whilst terminateing the active query.')
+ action_url = terminate_session_url + self.model.get('pid')
+ }
alertify.confirm(
title,
txtConfirm,
function(evt) {
$.ajax({
- url: terminate_session_url + self.model.get('pid'),
+ url: action_url,
type:'DELETE',
success: function(res) {
if (res == gettext('Success')) {
- alertify.success(gettext('Session terminateed successfully.'));
+ alertify.success(txtSuccess);
refresh_grid();
} else {
- alertify.error(gettext('An error occurred whilst terminateing the active query.'));
+ alertify.error(txtError);
}
},
error: function(xhr, status, error) {
@@ -155,6 +114,7 @@ function(url_for, gettext, r, $, _, pgAdmin, Backbone, Backgrid, Flotr,
}
});
+
// Subnode Cell, which will display subnode control
var SessionDetailsCell = Backgrid.Extension.ObjectCell.extend({
enterEditMode: function () {
@@ -737,17 +697,19 @@ function(url_for, gettext, r, $, _, pgAdmin, Backbone, Backgrid, Flotr,
// Add cancel active query button
server_activity_columns.unshift({
name: "pg-backform-delete", label: "",
- cell: cancelQueryCell,
+ cell: customDashboardActionCell,
+ cell_action: 'cancel',
editable: false, cell_priority: -1,
- canDeleteRow: pgAdmin.Dashboard.can_cancel_active_query,
+ canDeleteRow: pgAdmin.Dashboard.can_take_action,
postgres_version: version
});
server_activity_columns.unshift({
name: "pg-backform-delete", label: "",
- cell: terminateSessionCell,
+ cell: customDashboardActionCell,
+ cell_action: 'terminate',
editable: false, cell_priority: -1,
- canDeleteRow: pgAdmin.Dashboard.can_terminate_session,
+ canDeleteRow: pgAdmin.Dashboard.can_take_action,
postgres_version: version
});
@@ -1082,16 +1044,18 @@ function(url_for, gettext, r, $, _, pgAdmin, Backbone, Backgrid, Flotr,
database_activity_columns.unshift({
name: "pg-backform-delete", label: "",
- cell: cancelQueryCell,
+ cell: customDashboardActionCell,
+ cell_action: 'cancel',
editable: false, cell_priority: -1,
- canDeleteRow: pgAdmin.Dashboard.can_cancel_active_query,
+ canDeleteRow: pgAdmin.Dashboard.can_take_action,
postgres_version: version
});
database_activity_columns.unshift({
name: "pg-backform-delete", label: "",
- cell: terminateSessionCell,
+ cell: customDashboardActionCell,
+ cell_action: 'terminate',
editable: false, cell_priority: -1,
- canDeleteRow: pgAdmin.Dashboard.can_terminate_session,
+ canDeleteRow: pgAdmin.Dashboard.can_take_action,
postgres_version: version
});
@@ -1264,12 +1228,15 @@ function(url_for, gettext, r, $, _, pgAdmin, Backbone, Backgrid, Flotr,
toggleVisibility: function(flag) {
dashboardVisible = flag;
},
- can_cancel_active_query: function(m) {
+ can_take_action: function(m) {
// We will validate if user is allowed to cancel the active query
// If there is only one active session means it probably our main
// connection session
var active_sessions = m.collection.where({'state': 'active'}),
- pg_version = this.get('postgres_version') || null;
+ pg_version = this.get('postgres_version') || null,
+ cell_action = this.get('cell_action') || null,
+ is_cancel_session = cell_action === 'cancel',
+ txtAction = is_cancel_session ? gettext('cancel') : gettext('terminate');
// With PG10, We have background process showing on dashboard
// We will not allow user to cancel them as they will fail with error
@@ -1278,17 +1245,21 @@ function(url_for, gettext, r, $, _, pgAdmin, Backbone, Backgrid, Flotr,
// Background processes do not have database field populated
if (pg_version && pg_version >= 100000 && !m.get('datname')) {
alertify.info(
- gettext('You cannot cancel background worker processes.')
+ gettext('You cannot ') +
+ txtAction +
+ gettext(' background worker processes.')
);
return false;
// If it is the last active connection on maintenance db then error out
} else if (maintenance_database == m.get('datname') &&
m.get('state') == 'active' && active_sessions.length == 1) {
alertify.error(
- gettext('You are not allowed to cancel the main active session.')
+ gettext('You are not allowed to ') +
+ txtAction +
+ gettext(' the main active session.')
);
return false;
- } else if(m.get('state') == 'idle') {
+ } else if(is_cancel_session && m.get('state') == 'idle') {
// If this session is already idle then do nothing
alertify.info(
gettext('The session is already in idle state.')
@@ -1303,49 +1274,13 @@ function(url_for, gettext, r, $, _, pgAdmin, Backbone, Backgrid, Flotr,
} else {
// Do not allow to cancel someone else session to non-super user
alertify.error(
- gettext('Superuser privileges are required to cancel another users query.')
+ gettext('Superuser privileges are required to ') +
+ txtAction +
+ gettext(' another users query.')
);
return false;
}
- },
- can_terminate_session: function(m) {
- // We will validate if user is allowed to cancel the active query
- // If there is only one active session means it probably our main
- // connection session
- var active_sessions = m.collection.where({'state': 'active'}),
- pg_version = this.get('postgres_version') || null;
-
- // With PG10, We have background process showing on dashboard
- // We will not allow user to cancel them as they will fail with error
- // anyway, so better usability we will throw our on notification
-
- // Background processes do not have database field populated
- if (pg_version && pg_version >= 100000 && !m.get('datname')) {
- alertify.info(
- gettext('You cannot terminate background worker processes.')
- );
- return false;
- // If it is the last active connection on maintenance db then error out
- } else if (maintenance_database == m.get('datname') &&
- m.get('state') == 'active' && active_sessions.length == 1) {
- alertify.error(
- gettext('You are not allowed to terminate the main active session.')
- );
- return false;
- } else if(is_super_user) {
- // Super user can do anything
- return true;
- } else if (current_user && current_user == m.get('usename')) {
- // Non-super user can terminate only their active queries
- return true;
- } else {
- // Do not allow to cancel someone else session to non-super user
- alertify.error(
- gettext('Superuser privileges are required to terminate another users query.')
- );
- return false;
- }
- },
+ }
};
return pgAdmin.Dashboard;