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