Ext.define('pmg-spam-level-distribution', { extend: 'Ext.data.Model', fields: [ 'level', 'count', { type: 'string', name: 'label', convert: function(v, rec) { if (rec.data.level >= 10) { return 'Level >= 10'; } else { return 'Level ' + rec.data.level; } } } ], proxy: { type: 'proxmox', url: "/api2/json/statistics/spam" }, idProperty: 'level' }); Ext.define('PMG.SpamLevelChart1', { extend: 'Ext.chart.CartesianChart', xtype: 'pmgSpamLevelChart1', title: gettext('Spam Level Distribution'), height: 350, animation: false, flipXY: true, store: { autoLoad: true, model: 'pmg-spam-level-distribution' }, //define the x and y-axis configuration. axes: [{ type: 'numeric', position: 'bottom', title: 'Count', grid: true, minimum: 0 }, { type: 'category', position: 'left' }], //define the actual bar series. series: [{ type: 'bar', xField: 'label', yField: 'count', axis: 'bottom' }] }); Ext.define('PMG.SpamLevelChart', { extend: 'Ext.grid.GridPanel', xtype: 'pmgSpamLevelChart', disableSelection: true, hideHeaders: true, title: gettext('Spam Level Distribution'), store: { autoLoad: true, model: 'pmg-spam-level-distribution' }, columns: [ { flex: 1, dataIndex: 'label' }, { width: 150, dataIndex: 'count' }, ] }); Ext.define('PMG.VirusTop10', { extend: 'Ext.grid.GridPanel', xtype: 'pmgVirusTop10', title: gettext('Virus Charts (Top 10)'), disableSelection: true, emptyText: gettext('No virus names in database.'), viewConfig: { deferEmptyText: false }, store: { fields: [ 'name', 'count' ], proxy: { type: 'proxmox', url: "/api2/json/statistics/virus" }, }, columns: [ { header: gettext('Name'), flex: 1, dataIndex: 'name' }, { header: gettext('Count'), width: 150, dataIndex: 'count' } ] }); Ext.define('PMG.MailStatGrid', { extend: 'Ext.grid.GridPanel', xtype: 'pmgMailStatGrid', disableSelection: true, hideHeaders: true, store: { fields: [ 'name', 'value', 'percentage' ], }, columns: [ { flex: 1, dataIndex: 'name' }, { width: 150, dataIndex: 'value' }, { width: 300, xtype: 'widgetcolumn', dataIndex: 'percentage', widget: { xtype: 'progressbarwidget', textTpl: ['{percent:number("0")}%' ] }, onWidgetAttach: function (column, widget, rec) { if (rec.data.percentage === undefined) { widget.setStyle("visibility: hidden"); } else { widget.setStyle("visibility: visible"); } } } ] }); Ext.define('PMG.MailTrafficStatistics', { extend: 'Ext.panel.Panel', xtype: 'pmgMailTrafficStatistics', title: gettext('Mail'), border: false, scrollable: true, bodyPadding: '0 0 10 0', defaults: { collapsible: true, animCollapse: false, margin: '10 10 0 10' }, controller: { xclass: 'Ext.app.ViewController', getJunkData: 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("Virus Mails"), value: data.viruscount, percentage: data.viruscount/data.count_in }); 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 Precessing 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.traffic_in/(1024*1024), 2) + ' MByte' }); res.push({ name: gettext("Outgoing Mail Traffic"), value: Ext.Number.toFixed(data.traffic_out/(1024*1024), 2) + ' MByte' }); return res; }, onReload: function() { var controller = this; var view = this.getView(); var generalGrid = this.lookupReference('general') var junkGrid = this.lookupReference('junk') Proxmox.Utils.API2Request({ url: '/api2/extjs/statistics/mail', method: 'GET', success: function(response) { generalGrid.store.setData(controller.getGeneralData(response.result.data)); junkGrid.store.setData(controller.getJunkData(response.result.data)); }, failure: function(response, opts) { Proxmox.Utils.setErrorMask(view, response.htmlStatus); generalGrid.store.setData([]); junkGrid.store.setData([]); } }); }, init: function(view) { this.onReload(); } }, items: [ { xtype: 'pmgMailStatGrid', title: gettext('General Mail Statistics'), reference: 'general', }, { xtype: 'pmgMailStatGrid', title: gettext('Junk Mail Statistics'), reference: 'junk', }, { xtype: 'pmgSpamLevelChart1', }, { xtype: 'pmgSpamLevelChart', }, { xtype: 'pmgVirusTop10', } ] }); Ext.define('PMG.SpamMailStatistics', { extend: 'Ext.grid.GridPanel', xtype: 'pmgSpamMailStatistics', title: gettext('Spam'), border: false }); Ext.define('PMG.VirusMailStatistics', { extend: 'Ext.panel.Panel', xtype: 'pmgVirusMailStatistics', title: gettext('Virus'), border: false }); Ext.define('PMG.MailStatistics', { extend: 'Ext.tab.Panel', xtype: 'pmgMailStatistics', border: false, title: 'General Mail Statistics', items: [ { xtype: 'pmgMailTrafficStatistics', itemId: 'mail' }, { xtype: 'pmgSpamMailStatistics', itemId: 'spam' }, { xtype: 'pmgVirusMailStatistics', itemId: 'virus' } ] });