pgadmin4/web/pgadmin/static/js/sqleditor/query_tool_notifications.js

134 lines
3.8 KiB
JavaScript

/////////////////////////////////////////////////////////////
//
// pgAdmin 4 - PostgreSQL Tools
//
// Copyright (C) 2013 - 2020, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
//////////////////////////////////////////////////////////////
import gettext from 'sources/gettext';
import Backgrid from 'pgadmin.backgrid';
import Backbone from 'backbone';
import Alertify from 'pgadmin.alertifyjs';
let NotificationsModel = Backbone.Model.extend({
defaults: {
recorded_time: undefined,
event: undefined,
pid: undefined,
payload: undefined,
},
schema: [{
id: 'recorded_time',
label: gettext('Recorded time'),
cell: 'string',
type: 'text',
editable: false,
cellHeaderClasses: 'width_percent_20',
headerCell: Backgrid.Extension.CustomHeaderCell,
},{
id: 'channel',
label: gettext('Event'),
cell: 'string',
type: 'text',
editable: false,
cellHeaderClasses: 'width_percent_20',
headerCell: Backgrid.Extension.CustomHeaderCell,
},{
id: 'pid',
label: gettext('Process ID'),
cell: 'string',
type: 'text',
editable: false,
cellHeaderClasses: 'width_percent_20',
headerCell: Backgrid.Extension.CustomHeaderCell,
},{
id: 'payload',
label: gettext('Payload'),
cell: 'string',
type: 'text',
editable: false,
cellHeaderClasses: 'width_percent_40',
headerCell: Backgrid.Extension.CustomHeaderCell,
}],
});
let NotificationCollection = Backbone.Collection.extend({
model: NotificationsModel,
});
let queryToolNotifications = {
collection: null,
/* This function is responsible to create and render the
* new backgrid for the notification tab.
*/
renderNotificationsGrid: function(notifications_panel) {
if (!queryToolNotifications.collection)
queryToolNotifications.collection = new NotificationCollection();
let gridCols = [{
name: 'recorded_time',
label: gettext('Recorded time'),
type: 'text',
editable: false,
cell: 'string',
}, {
name: 'channel',
label: gettext('Event'),
type: 'text',
editable: false,
cell: 'string',
}, {
name: 'pid',
label: gettext('Process ID'),
type: 'text',
editable: false,
cell: 'string',
}, {
name: 'payload',
label: gettext('Payload'),
type: 'text',
editable: false,
cell: 'string',
}];
// Set up the grid
let notifications_grid = new Backgrid.Grid({
emptyText: gettext('No data found'),
columns: gridCols,
collection: queryToolNotifications.collection,
className: 'backgrid presentation table table-bordered table-hover table-noouter-border table-bottom-border',
});
// Render the grid
if (notifications_grid && notifications_panel)
notifications_panel.$container.find('.sql-editor-notifications').append(notifications_grid.render().el);
},
// This function is used to raise notify messages and update the
// notification grid.
updateNotifications: function(notify_messages) {
if (notify_messages != null && notify_messages.length > 0) {
for (let i in notify_messages) {
let notify_msg = '';
if (notify_messages[i].payload != '') {
notify_msg = gettext('Asynchronous notification "%s" with payload "%s" received from server process with PID %s', notify_messages[i].channel, notify_messages[i].payload, notify_messages[i].pid);
}
else {
notify_msg = gettext('Asynchronous notification "%s" received from server process with PID %s', notify_messages[i].channel, notify_messages[i].pid);
}
Alertify.info(notify_msg);
}
// Add notify messages to the collection.
queryToolNotifications.collection.add(notify_messages);
}
},
};
module.exports = queryToolNotifications;