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