mirror of
https://git.proxmox.com/git/pmg-gui
synced 2025-05-29 23:24:43 +00:00
227 lines
5.1 KiB
JavaScript
227 lines
5.1 KiB
JavaScript
Ext.define('PMG.GeneralMailStatistics', {
|
|
extend: 'Ext.panel.Panel',
|
|
xtype: 'pmgGeneralMailStatistics',
|
|
|
|
scrollable: true,
|
|
|
|
bodyPadding: '10 0 0 0',
|
|
border: false,
|
|
defaults: {
|
|
width: 700,
|
|
padding: '0 0 10 10',
|
|
},
|
|
|
|
layout: 'column',
|
|
|
|
title: gettext('Statistics') + ': ' + gettext('Mail'),
|
|
|
|
tbar: [{ xtype: 'pmgStatTimeSelector' }],
|
|
|
|
getInData: function(data) {
|
|
var res = [];
|
|
|
|
res.push({
|
|
name: gettext("Incoming Mails"),
|
|
value: data.count_in,
|
|
percentage: 1,
|
|
});
|
|
|
|
res.push({
|
|
name: gettext("Junk Mails"),
|
|
value: data.junk_in,
|
|
percentage: data.junk_in/data.count_in,
|
|
});
|
|
|
|
res.push({
|
|
name: gettext("Greylisted Mails"),
|
|
value: data.glcount,
|
|
percentage: data.glcount/data.count_in,
|
|
});
|
|
|
|
res.push({
|
|
name: gettext("Spam Mails"),
|
|
value: data.spamcount_in,
|
|
percentage: data.spamcount_in/data.count_in,
|
|
});
|
|
|
|
res.push({
|
|
name: gettext("SPF rejects"),
|
|
value: data.spfcount,
|
|
percentage: data.spfcount/data.count_in,
|
|
});
|
|
|
|
res.push({
|
|
name: gettext("Bounces"),
|
|
value: data.bounces_in,
|
|
percentage: data.bounces_in/data.count_in,
|
|
});
|
|
|
|
res.push({
|
|
name: gettext("Virus Mails"),
|
|
value: data.viruscount_in,
|
|
percentage: data.viruscount_in/data.count_in,
|
|
});
|
|
|
|
return res;
|
|
},
|
|
|
|
getOutData: function(data) {
|
|
var res = [];
|
|
|
|
res.push({
|
|
name: gettext("Outgoing Mails"),
|
|
value: data.count_out,
|
|
percentage: 1,
|
|
});
|
|
|
|
res.push({
|
|
name: gettext("Bounces"),
|
|
value: data.bounces_out,
|
|
percentage: data.bounces_out/data.count_out,
|
|
});
|
|
|
|
res.push({
|
|
name: gettext("Virus Mails"),
|
|
value: data.viruscount_out,
|
|
percentage: data.viruscount_out/data.count_out,
|
|
});
|
|
|
|
return res;
|
|
},
|
|
|
|
getGeneralData: function(data) {
|
|
var res = [];
|
|
|
|
res.push({
|
|
name: gettext("Total Mails"),
|
|
value: data.count,
|
|
percentage: 1,
|
|
});
|
|
|
|
res.push({
|
|
name: gettext("Incoming Mails"),
|
|
value: data.count_in,
|
|
percentage: data.count_in/data.count,
|
|
});
|
|
|
|
res.push({
|
|
name: gettext("Outgoing Mails"),
|
|
value: data.count_out,
|
|
percentage: data.count_out/data.count,
|
|
});
|
|
|
|
res.push({
|
|
name: gettext("Virus Outbreaks"),
|
|
value: data.viruscount_out,
|
|
});
|
|
|
|
res.push({
|
|
name: gettext("Avg. Mail Processing Time"),
|
|
value: Ext.String.format(gettext("{0} seconds"),
|
|
Ext.Number.toFixed(data.avptime, 2)),
|
|
});
|
|
|
|
res.push({
|
|
name: gettext("Incoming Mail Traffic"),
|
|
value: Ext.Number.toFixed(data.bytes_in/(1024*1024), 2) + ' MiB',
|
|
});
|
|
|
|
res.push({
|
|
name: gettext("Outgoing Mail Traffic"),
|
|
value: Ext.Number.toFixed(data.bytes_out/(1024*1024), 2) + ' MiB',
|
|
});
|
|
return res;
|
|
},
|
|
|
|
initComponent: function() {
|
|
var me = this;
|
|
|
|
var countstore = Ext.create('PMG.data.StatStore', {
|
|
includeTimeSpan: true,
|
|
staturl: '/api2/json/statistics/mailcount',
|
|
fields: [
|
|
{ type: 'integer', name: 'count' },
|
|
{ type: 'integer', name: 'count_in' },
|
|
{ type: 'integer', name: 'count_out' },
|
|
{ type: 'integer', name: 'spamcount_in' },
|
|
{ type: 'integer', name: 'spamcount_out' },
|
|
{ type: 'integer', name: 'viruscount_in' },
|
|
{ type: 'integer', name: 'viruscount_out' },
|
|
{ type: 'integer', name: 'bounces_in' },
|
|
{ type: 'integer', name: 'bounces_out' },
|
|
{ type: 'date', dateFormat: 'timestamp', name: 'time' },
|
|
],
|
|
});
|
|
|
|
var totalgrid = Ext.createWidget('pmgMailStatGrid', {
|
|
dockedItems: [
|
|
{
|
|
dock: 'top',
|
|
title: gettext("Total Mail Count"),
|
|
xtype: 'proxmoxRRDChart',
|
|
fields: ['count', 'count_in', 'count_out'],
|
|
fieldTitles: [
|
|
gettext('Total Mail Count'),
|
|
gettext('Incoming Mails'), gettext('Outgoing Mails')],
|
|
store: countstore,
|
|
},
|
|
],
|
|
});
|
|
|
|
var ingrid = Ext.createWidget('pmgMailStatGrid', {
|
|
dockedItems: [
|
|
{
|
|
dock: 'top',
|
|
title: gettext("Incoming Mails"),
|
|
xtype: 'proxmoxRRDChart',
|
|
fields: ['count_in', 'spamcount_in', 'viruscount_in', 'bounces_in'],
|
|
fieldTitles: [
|
|
gettext('Incoming Mails'), gettext('Junk Mails'),
|
|
gettext('Virus Mails'), gettext('Bounces')],
|
|
store: countstore,
|
|
},
|
|
],
|
|
});
|
|
|
|
var outgrid = Ext.createWidget('pmgMailStatGrid', {
|
|
dockedItems: [
|
|
{
|
|
dock: 'top',
|
|
title: gettext("Outgoing Mails"),
|
|
xtype: 'proxmoxRRDChart',
|
|
fields: ['count_out', 'viruscount_out', 'bounces_out'],
|
|
fieldTitles: [
|
|
gettext('Outgoing Mails'),
|
|
gettext('Virus Mails'), gettext('Bounces')],
|
|
store: countstore,
|
|
},
|
|
],
|
|
});
|
|
|
|
var infostore = Ext.create('PMG.data.StatStore', {
|
|
staturl: "/api2/json/statistics/mail",
|
|
fields: ['name', 'value', 'percentage'],
|
|
listeners: {
|
|
load: function(store, records, success) {
|
|
if (!success || records.length <= 0) {
|
|
return;
|
|
}
|
|
var data = me.getGeneralData(records[0].data);
|
|
totalgrid.store.setData(data);
|
|
data = me.getInData(records[0].data);
|
|
ingrid.store.setData(data);
|
|
data = me.getOutData(records[0].data);
|
|
outgrid.store.setData(data);
|
|
},
|
|
},
|
|
});
|
|
|
|
me.items = [totalgrid, ingrid, outgrid];
|
|
|
|
me.callParent();
|
|
|
|
me.on('destroy', infostore.destroy, infostore);
|
|
me.on('destroy', countstore.destroy, countstore);
|
|
},
|
|
});
|