]> git.proxmox.com Git - pmg-gui.git/blame - js/ReceiverStatistics.js
spam info grid: code cleanups
[pmg-gui.git] / js / ReceiverStatistics.js
CommitLineData
2ca04e02
DM
1Ext.define('PMG.ReceiverDetails', {
2 extend: 'Ext.grid.GridPanel',
3 xtype: 'pmgReceiverDetails',
4
5 dockedItems: [
6 {
7 dock: 'top',
8 xtype: 'panel',
9 itemId: 'info',
10 bodyPadding: 10,
c87d46fb
TL
11 html: gettext('Please select a receiver.'),
12 },
2ca04e02
DM
13 ],
14
15 disableSelection: true,
16
8e346db3
DM
17 plugins: 'gridfilters',
18
367681b7 19 setUrl: function(url, extraparam, title) {
2ca04e02
DM
20 var me = this;
21
367681b7 22 me.store.setUrl(url, extraparam);
eaf3ebec 23 me.store.setRemoteFilter(url !== undefined);
5486028e
DM
24 Proxmox.Utils.setErrorMask(me, false);
25 me.store.reload();
2ca04e02
DM
26
27 var infopanel = me.getComponent('info');
28 if (title) {
29 infopanel.update(title);
30 } else {
31 infopanel.update(gettext('Please select a sender.'));
32 }
33 },
34
35 store: {
36 type: 'pmgStatStore',
c1a5d150 37 autoReload: false,
2ca04e02 38 remoteSort: true,
eaf3ebec 39 remoteFilter: false, // enabled dynamically
2ca04e02
DM
40 fields: [
41 'sender', 'virusinfo',
42 { type: 'integer', name: 'bytes' },
43 { type: 'boolean', name: 'blocked' },
44 { type: 'integer', name: 'spamlevel' },
c87d46fb 45 { type: 'date', dateFormat: 'timestamp', name: 'time' },
2ca04e02
DM
46 ],
47 proxy: {
8e346db3
DM
48 type: 'pmgfilterproxy',
49 filterId: 'x-gridfilter-sender',
c87d46fb 50 sortParam: 'orderby',
2ca04e02
DM
51 },
52 sorters: [
53 {
54 property: 'time',
c87d46fb
TL
55 direction: 'ASC',
56 },
57 ],
2ca04e02
DM
58 },
59
60 columns: [
61 {
62 text: gettext('Sender'),
63 renderer: Ext.htmlEncode,
64 flex: 1,
8e346db3 65 filter: { type: 'string' },
c87d46fb 66 dataIndex: 'sender',
2ca04e02
DM
67 },
68 {
69 header: gettext('Size') + ' (KB)',
70 renderer: function(v) { return Ext.Number.toFixed(v/1024, 0); },
c87d46fb 71 dataIndex: 'bytes',
2ca04e02
DM
72 },
73 {
74 xtype: 'datecolumn',
75 header: gettext('Date'),
76 format: 'Y-m-d',
c87d46fb 77 dataIndex: 'time',
2ca04e02
DM
78 },
79 {
80 xtype: 'datecolumn',
81 header: gettext('Time'),
bd69f90e 82 format: 'H:i:s',
c87d46fb 83 dataIndex: 'time',
2ca04e02
DM
84 },
85 {
86 header: gettext('Virus info'),
c87d46fb 87 dataIndex: 'virusinfo',
2ca04e02
DM
88 },
89 {
90 header: gettext('Score'),
c87d46fb
TL
91 dataIndex: 'spamlevel',
92 },
2ca04e02
DM
93 ],
94
95 initComponent: function() {
96 var me = this;
97 me.callParent();
98
5486028e 99 Proxmox.Utils.monStoreErrors(me, me.store, true);
c87d46fb 100 },
2ca04e02
DM
101});
102
103Ext.define('PMG.ReceiverList', {
104 extend: 'Ext.grid.GridPanel',
105 alias: 'widget.pmgReceiverList',
ff8a07c6 106
e9837921
DM
107 title: gettext('Statistics') + ': ' + gettext('Receiver') +
108 ' (' + gettext('Incoming') +')',
ff8a07c6 109
2ca04e02
DM
110 multiColumnSort: true,
111 plugins: 'gridfilters',
112
64fb657f 113 emptyText: gettext('No data in database'),
2ca04e02 114 viewConfig: {
c87d46fb 115 deferEmptyText: false,
2ca04e02
DM
116 },
117
c87d46fb 118 tbar: [{ xtype: 'pmgStatTimeSelector' }],
ff8a07c6 119
2ca04e02
DM
120 store: {
121 type: 'pmgStatStore',
122 staturl: '/api2/json/statistics/receiver',
123 remoteSort: true,
124 remoteFilter: true,
125 fields: [
126 'receiver',
127 { type: 'integer', name: 'count' },
128 { type: 'integer', name: 'bytes' },
c87d46fb 129 { type: 'integer', name: 'viruscount' },
2ca04e02
DM
130 ],
131 proxy: {
132 type: 'pmgfilterproxy',
133 sortParam: 'orderby',
c87d46fb 134 filterId: 'x-gridfilter-receiver',
2ca04e02
DM
135 },
136 sorters: [
137 {
138 property: 'count',
c87d46fb 139 direction: 'DESC',
2ca04e02
DM
140 },
141 {
142 property: 'bytes',
c87d46fb 143 direction: 'DESC',
2ca04e02
DM
144 },
145 {
146 property: 'receiver',
c87d46fb
TL
147 direction: 'ASC',
148 },
149 ],
2ca04e02 150 },
ff8a07c6 151
2ca04e02
DM
152 columns: [
153 {
154 text: gettext('Receiver'),
155 flex: 1,
156 renderer: Ext.htmlEncode,
157 dataIndex: 'receiver',
158 filter: {
159 type: 'string',
160 itemDefaults: {
161 // any Ext.form.field.Text configs accepted
c87d46fb
TL
162 },
163 },
2ca04e02
DM
164 },
165 {
166 text: gettext('Count'),
167 columns: [
168 {
169 text: gettext('Mail'),
c87d46fb 170 dataIndex: 'count',
2ca04e02
DM
171 },
172 {
173 header: gettext('Virus'),
c87d46fb 174 dataIndex: 'viruscount',
2ca04e02
DM
175 },
176 {
177 header: gettext('Spam'),
c87d46fb
TL
178 dataIndex: 'spamcount',
179 },
180 ],
2ca04e02
DM
181 },
182 {
183 text: gettext('Size') + ' (KB)',
184 dataIndex: 'bytes',
185 renderer: function(v) {
186 return Ext.Number.toFixed(v/1024, 0);
c87d46fb
TL
187 },
188 },
2ca04e02 189 ],
ff8a07c6 190
2ca04e02
DM
191 initComponent: function() {
192 var me = this;
193 me.callParent();
194
5486028e 195 Proxmox.Utils.monStoreErrors(me, me.store, true);
c87d46fb 196 },
ff8a07c6
DM
197});
198
2ca04e02
DM
199Ext.define('PMG.ReceiverStatistics', {
200 extend: 'Ext.panel.Panel',
201 xtype: 'pmgReceiverStatistics',
202
203 layout: 'border',
204 border: false,
205 defaults: {
c87d46fb 206 border: false,
2ca04e02
DM
207 },
208
209 controller: {
210 xclass: 'Ext.app.ViewController',
ff8a07c6 211
2ca04e02 212 selectionChange: function(grid, selected, eOpts) {
c87d46fb 213 var details = this.lookupReference('details');
2ca04e02 214 if (selected.length > 0) {
367681b7 215 var url = "/api2/json/statistics/detail";
2ca04e02 216 var receiver = selected[0].data.receiver;
367681b7
SI
217 var extraparam = { address: receiver, type: 'receiver' };
218 details.setUrl(url, extraparam, '<b>' + gettext('Receiver') + ':</b> ' + Ext.htmlEncode(receiver));
2ca04e02
DM
219 } else {
220 details.setUrl();
221 }
c87d46fb 222 },
2ca04e02
DM
223 },
224
225 items: [
226 {
227 xtype: 'pmgReceiverList',
228 multiColumnSort: true,
229 region: 'center',
230 layout: 'fit',
231 flex: 1,
232
c87d46fb 233 listeners: { selectionchange: 'selectionChange' },
2ca04e02
DM
234 },
235 {
236 xtype: 'pmgReceiverDetails',
237 region: 'east',
238 reference: 'details',
239 split: true,
c87d46fb
TL
240 flex: 1,
241 },
242 ],
2ca04e02 243});