]> git.proxmox.com Git - pmg-gui.git/blob - js/SenderStatistics.js
jslint: remove trailing commas
[pmg-gui.git] / js / SenderStatistics.js
1 /*global Proxmox*/
2 Ext.define('PMG.SenderDetails', {
3 extend: 'Ext.grid.GridPanel',
4 xtype: 'pmgSenderDetails',
5
6 dockedItems: [
7 {
8 dock: 'top',
9 xtype: 'panel',
10 itemId: 'info',
11 bodyPadding: 10,
12 html: gettext('Please select a sender.')
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 'receiver', '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-receiver',
51 sortParam: 'orderby'
52 },
53 sorters: [
54 {
55 property: 'time',
56 direction: 'ASC'
57 }
58 ]
59 },
60
61 columns: [
62 {
63 text: gettext('Receiver'),
64 renderer: Ext.htmlEncode,
65 flex: 1,
66 filter: { type: 'string' },
67 dataIndex: 'receiver'
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
88 initComponent: function() {
89 var me = this;
90 me.callParent();
91
92 Proxmox.Utils.monStoreErrors(me, me.store, true);
93 }
94 });
95
96 Ext.define('PMG.SenderList', {
97 extend: 'Ext.grid.GridPanel',
98 alias: 'widget.pmgSenderList',
99
100 title: gettext('Statistics') + ': ' + gettext('Sender') +
101 ' (' + gettext('Outgoing') +')',
102
103 multiColumnSort: true,
104 plugins: 'gridfilters',
105
106 emptyText: gettext('No data in database.'),
107 viewConfig: {
108 deferEmptyText: false
109 },
110
111 tbar: [ { xtype: 'pmgStatTimeSelector' } ],
112
113 store: {
114 type: 'pmgStatStore',
115 staturl: '/api2/json/statistics/sender',
116 remoteSort: true,
117 remoteFilter: true,
118 fields: [
119 'sender',
120 { type: 'integer', name: 'count' },
121 { type: 'integer', name: 'bytes' },
122 { type: 'integer', name: 'viruscount' }
123 ],
124 proxy: {
125 type: 'pmgfilterproxy',
126 sortParam: 'orderby',
127 filterId: 'x-gridfilter-sender'
128 },
129 sorters: [
130 {
131 property: 'count',
132 direction: 'DESC'
133 },
134 {
135 property: 'bytes',
136 direction: 'DESC'
137 },
138 {
139 property: 'sender',
140 direction: 'ASC'
141 }
142 ]
143 },
144
145 columns: [
146 {
147 text: gettext('Sender'),
148 flex: 1,
149 renderer: Ext.htmlEncode,
150 dataIndex: 'sender',
151 filter: {
152 type: 'string',
153 itemDefaults: {
154 // any Ext.form.field.Text configs accepted
155 }
156 }
157 },
158 {
159 text: gettext('Count'),
160 columns: [
161 {
162 text: gettext('Mail'),
163 dataIndex: 'count'
164 },
165 {
166 header: gettext('Virus'),
167 dataIndex: 'viruscount'
168 }
169 ]
170 },
171 {
172 text: gettext('Size') + ' (KB)',
173 dataIndex: 'bytes',
174 renderer: function(v) {
175 return Ext.Number.toFixed(v/1024, 0);
176 }
177 }
178 ],
179
180 initComponent: function() {
181 var me = this;
182 me.callParent();
183
184 Proxmox.Utils.monStoreErrors(me, me.store, true);
185 }
186 });
187
188 Ext.define('PMG.SenderStatistics', {
189 extend: 'Ext.panel.Panel',
190 xtype: 'pmgSenderStatistics',
191
192 layout: 'border',
193 border: false,
194 defaults: {
195 border: false
196 },
197
198 controller: {
199 xclass: 'Ext.app.ViewController',
200
201 selectionChange: function(grid, selected, eOpts) {
202 var details = this.lookupReference('details');
203 if (selected.length > 0) {
204 var sender = selected[0].data.sender;
205 var url = "/api2/json/statistics/sender/" +
206 encodeURIComponent(sender);
207 details.setUrl(url, '<b>' + gettext('Sender') + ':</b> ' + Ext.htmlEncode(sender));
208 } else {
209 details.setUrl();
210 }
211 }
212 },
213
214 items: [
215 {
216 xtype: 'pmgSenderList',
217 multiColumnSort: true,
218 region: 'center',
219 layout: 'fit',
220 flex: 1,
221
222 listeners: { selectionchange: 'selectionChange' }
223 },
224 {
225 xtype: 'pmgSenderDetails',
226 region: 'east',
227 reference: 'details',
228 split: true,
229 flex: 1
230 }
231 ]
232 });