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