diff --git a/js/SenderStatistics.js b/js/SenderStatistics.js index 57927f1..ee1a9aa 100644 --- a/js/SenderStatistics.js +++ b/js/SenderStatistics.js @@ -1,14 +1,79 @@ Ext.define('PMG.SenderStatistics', { - extend: 'Ext.panel.Panel', + extend: 'Ext.grid.GridPanel', xtype: 'pmgSenderStatistics', title: gettext('Statistics') + ': ' + gettext('Sender'), tbar: [ { xtype: 'pmgStatTimeSelector' } ], - layout: 'fit' + layout: 'fit', + plugins: 'gridfilters', + store: { + type: 'pmgStatStore', + staturl: '/api2/json/statistics/sender', + remoteSort: true, + remoteFilter: true, + fields: [ + 'sender', + { type: 'integer', name: 'count' }, + { type: 'integer', name: 'bytes' }, + { type: 'integer', name: 'viruscount' } + ], + proxy: { + type: 'proxmox', + sortParam: 'orderby', + getParams: function(operation) { + var me = this, i; + if (!operation.isReadOperation) { + return {}; + } + var params = Ext.data.RestProxy.prototype.getParams.apply(me, arguments); + + var filters = operation.getFilters() || []; + for (i = 0; i < filters.length; i++) { + filter = filters[i]; + if (filter.config.id === 'x-gridfilter-sender') { + var v = filter.getValue(); + if (v !== undefined && v !== '') { + params.filter = v; + } + } + } + return params; + } + }, + sorters: [ + { + property: 'count', + direction: 'DESC' + } + ] + }, + + columns: [ + { + text: gettext('Sender'), + flex: 1, + dataIndex: 'sender', + filter: { + type: 'string', + itemDefaults: { + // any Ext.form.field.Text configs accepted + } + } + }, + { + text: gettext('Count'), + dataIndex: 'count' + }, + { + text: gettext('Size') + ' (KB)', + dataIndex: 'bytes', + renderer: function(v) { + return Ext.Number.toFixed(v/1024, 0); + } + } + ] }); - -