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