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