/////////////////////////////////////////////////////////////
//
// pgAdmin 4 - PostgreSQL Tools
//
// Copyright (C) 2013 - 2022, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
//////////////////////////////////////////////////////////////
import $ from 'jquery';
import Backbone from 'backbone';
import gettext from 'sources/gettext';
// Backbone model for other statistics
let StatisticsModel = Backbone.Model.extend({
defaults: {
JIT: [],
Triggers: [],
Summary: {},
},
explainToolTip: function(key, value, tooltip) {
key = _.escape(key);
value = _.escape(value);
tooltip.append(`
${key} |
${value} |
`);
},
set_statistics: function(toolTipContainer) {
var self= this,
jit_stats = this.get('JIT'),
triggers_stats = this.get('Triggers'),
summary = this.get('Summary');
if (Object.keys(jit_stats).length > 0 ||
Object.keys(triggers_stats).length > 0 ||
Object.keys(summary).length > 0) {
$('.pg-explain-stats-area').removeClass('d-none');
}
var tooltipTable = $(`
`
);
var tooltip = tooltipTable.find('tbody');
if (Object.keys(jit_stats).length > 0){
tooltip.append('' + gettext('JIT:') + ' |
');
_.each(jit_stats, function(value, key) {
self.explainToolTip(key, value, tooltip);
});
}
if (Object.keys(triggers_stats).length > 0){
tooltip.append('' + gettext('Triggers:') + ' |
');
_.each(triggers_stats, function(triggers, key_id) {
if (triggers instanceof Object) {
_.each(triggers, function(value, key) {
if (key === 'Trigger Name') {
key = _.escape(key);
value = _.escape(value);
tooltip.append(`
${key} |
${value} |
`);
} else {
key = _.escape(key);
value = _.escape(value);
tooltip.append(`
${key} |
${value} |
`);
}
});
}
else {
key_id = _.escape(key_id);
triggers = _.escape(triggers);
tooltip.append(`
${key_id} |
${triggers} |
`);
}
});
}
if (Object.keys(summary).length > 0){
tooltip.append('' + gettext('Summary:') + ' |
');
_.each(summary, function(value, key) {
self.explainToolTip(key, value, tooltip);
});
}
$('.pg-explain-stats-area').off('click').on('click', () => {
// Empty the tooltip content if it has any and add new data
if (Object.keys(jit_stats).length == 0 &&
Object.keys(triggers_stats).length == 0 &&
Object.keys(summary).length == 0) {
return;
}
let toolTipBody = toolTipContainer.find('.details-body');
let toolTipTitle = toolTipContainer.find('.details-title');
toolTipTitle.text('Statistics');
toolTipBody.empty();
toolTipBody.append(tooltipTable);
toolTipContainer.removeClass('d-none');
toolTipBody.scrollTop(0);
});
},
});
module.exports = StatisticsModel;