]> git.proxmox.com Git - pmg-gui.git/blob - js/SenderStatistics.js
SenderStatistics.js - use new PMG.FilterProxy class
[pmg-gui.git] / js / SenderStatistics.js
1 Ext.define('PMG.SenderDetails', {
2 extend: 'Ext.grid.GridPanel',
3 xtype: 'pmgSenderDetails',
4
5 dockedItems: [
6 {
7 dock: 'top',
8 xtype: 'panel',
9 itemId: 'info',
10 bodyPadding: 10,
11 html: gettext('Please select a sender.')
12 }
13 ],
14
15 disableSelection: true,
16
17 setUrl: function(url, title) {
18 var me = this;
19
20 me.store.setUrl(url);
21
22 var infopanel = me.getComponent('info');
23 if (title) {
24 infopanel.update(title);
25 } else {
26 infopanel.update(gettext('Please select a sender.'));
27 }
28 },
29
30 store: {
31 type: 'pmgStatStore',
32 remoteSort: true,
33 fields: [
34 'receiver', 'virusname',
35 { type: 'integer', name: 'bytes' },
36 { type: 'boolean', name: 'blocked' },
37 { type: 'integer', name: 'spamlevel' },
38 { type: 'date', dateFormat: 'timestamp', name: 'time' }
39 ],
40 proxy: {
41 type: 'proxmox',
42 sortParam: 'orderby'
43 },
44 sorters: [
45 {
46 property: 'time',
47 direction: 'ASC'
48 }
49 ]
50 },
51
52 columns: [
53 {
54 text: gettext('Receiver'),
55 renderer: Ext.htmlEncode,
56 flex: 1,
57 dataIndex: 'receiver'
58 },
59 {
60 header: gettext('Size') + ' (KB)',
61 renderer: function(v) { return Ext.Number.toFixed(v/1024, 0); },
62 dataIndex: 'bytes'
63 },
64 {
65 xtype: 'datecolumn',
66 header: gettext('Date'),
67 format: 'Y-m-d',
68 dataIndex: 'time'
69 },
70 {
71 xtype: 'datecolumn',
72 header: gettext('Time'),
73 format: 'H:m:s',
74 dataIndex: 'time'
75 },
76 ]
77 });
78
79 Ext.define('PMG.SenderList', {
80 extend: 'Ext.grid.GridPanel',
81 alias: 'widget.pmgSenderList',
82
83 title: gettext('Statistics') + ': ' + gettext('Sender'),
84
85 multiColumnSort: true,
86 plugins: 'gridfilters',
87
88 emptyText: gettext('No data in database.'),
89 viewConfig: {
90 deferEmptyText: false
91 },
92
93 tbar: [ { xtype: 'pmgStatTimeSelector' } ],
94
95 store: {
96 type: 'pmgStatStore',
97 staturl: '/api2/json/statistics/sender',
98 remoteSort: true,
99 remoteFilter: true,
100 fields: [
101 'sender',
102 { type: 'integer', name: 'count' },
103 { type: 'integer', name: 'bytes' },
104 { type: 'integer', name: 'viruscount' }
105 ],
106 proxy: {
107 type: 'pmgfilterproxy',
108 sortParam: 'orderby',
109 filterId: 'x-gridfilter-sender'
110 },
111 sorters: [
112 {
113 property: 'count',
114 direction: 'DESC'
115 },
116 {
117 property: 'bytes',
118 direction: 'DESC'
119 },
120 {
121 property: 'sender',
122 direction: 'ASC'
123 }
124 ]
125 },
126
127 columns: [
128 {
129 text: gettext('Sender'),
130 flex: 1,
131 renderer: Ext.htmlEncode,
132 dataIndex: 'sender',
133 filter: {
134 type: 'string',
135 itemDefaults: {
136 // any Ext.form.field.Text configs accepted
137 }
138 }
139 },
140 {
141 text: gettext('Count'),
142 dataIndex: 'count'
143 },
144 {
145 text: gettext('Size') + ' (KB)',
146 dataIndex: 'bytes',
147 renderer: function(v) {
148 return Ext.Number.toFixed(v/1024, 0);
149 }
150 }
151 ],
152
153 initComponent: function() {
154 var me = this;
155 me.callParent();
156
157 Proxmox.Utils.monStoreErrors(me, me.store);
158 }
159 });
160
161 Ext.define('PMG.SenderStatistics', {
162 extend: 'Ext.panel.Panel',
163 xtype: 'pmgSenderStatistics',
164
165 layout: 'border',
166 border: false,
167 defaults: {
168 border: false,
169 },
170
171 controller: {
172 xclass: 'Ext.app.ViewController',
173
174 selectionChange: function(grid, selected, eOpts) {
175 var details = this.lookupReference('details');
176 if (selected.length > 0) {
177 var sender = selected[0].data.sender;
178 var url = "/api2/json/statistics/sender/" +
179 encodeURIComponent(sender);
180 details.setUrl(url, '<b>' + gettext('Sender') + ':</b> ' + Ext.htmlEncode(sender));
181 } else {
182 details.setUrl();
183 }
184 }
185 },
186
187 items: [
188 {
189 xtype: 'pmgSenderList',
190 multiColumnSort: true,
191 region: 'center',
192 layout: 'fit',
193 flex: 1,
194
195 listeners: { selectionchange: 'selectionChange' },
196 },
197 {
198 xtype: 'pmgSenderDetails',
199 region: 'east',
200 reference: 'details',
201 split: true,
202 flex: 1
203 }
204 ]
205 });