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