]> git.proxmox.com Git - pmg-gui.git/blame - js/SenderStatistics.js
jslint: add Proxmox global to files
[pmg-gui.git] / js / SenderStatistics.js
CommitLineData
ff735274 1/*global Proxmox*/
0dd929ec 2Ext.define('PMG.SenderDetails', {
6d979e4e 3 extend: 'Ext.grid.GridPanel',
0dd929ec 4 xtype: 'pmgSenderDetails',
ff8a07c6 5
0dd929ec
DM
6 dockedItems: [
7 {
8 dock: 'top',
9 xtype: 'panel',
10 itemId: 'info',
11 bodyPadding: 10,
12 html: gettext('Please select a sender.')
13 }
14 ],
ff8a07c6 15
0dd929ec 16 disableSelection: true,
ff8a07c6 17
8e346db3
DM
18 plugins: 'gridfilters',
19
0dd929ec
DM
20 setUrl: function(url, title) {
21 var me = this;
97eeb9a8 22
0dd929ec 23 me.store.setUrl(url);
eaf3ebec 24 me.store.setRemoteFilter(url !== undefined);
5486028e
DM
25 Proxmox.Utils.setErrorMask(me, false);
26 me.store.reload();
0dd929ec
DM
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 },
ff8a07c6 35
0dd929ec
DM
36 store: {
37 type: 'pmgStatStore',
c1a5d150 38 autoReload: false,
0dd929ec 39 remoteSort: true,
eaf3ebec 40 remoteFilter: false, // enabled dynamically
0dd929ec 41 fields: [
cc28836a 42 'receiver', 'virusinfo',
0dd929ec
DM
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: {
8e346db3
DM
49 type: 'pmgfilterproxy',
50 filterId: 'x-gridfilter-receiver',
0dd929ec
DM
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,
8e346db3 66 filter: { type: 'string' },
0dd929ec
DM
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'),
bd69f90e 83 format: 'H:i:s',
0dd929ec
DM
84 dataIndex: 'time'
85 },
a61d685f
DM
86 ],
87
88 initComponent: function() {
89 var me = this;
90 me.callParent();
91
5486028e 92 Proxmox.Utils.monStoreErrors(me, me.store, true);
a61d685f 93 }
0dd929ec
DM
94});
95
96Ext.define('PMG.SenderList', {
97 extend: 'Ext.grid.GridPanel',
98 alias: 'widget.pmgSenderList',
99
e9837921
DM
100 title: gettext('Statistics') + ': ' + gettext('Sender') +
101 ' (' + gettext('Outgoing') +')',
0dd929ec
DM
102
103 multiColumnSort: true,
6d979e4e 104 plugins: 'gridfilters',
ff8a07c6 105
0dd929ec
DM
106 emptyText: gettext('No data in database.'),
107 viewConfig: {
108 deferEmptyText: false
109 },
110
111 tbar: [ { xtype: 'pmgStatTimeSelector' } ],
112
6d979e4e
DM
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: {
f4fedcee 125 type: 'pmgfilterproxy',
6d979e4e 126 sortParam: 'orderby',
f4fedcee 127 filterId: 'x-gridfilter-sender'
6d979e4e
DM
128 },
129 sorters: [
130 {
131 property: 'count',
132 direction: 'DESC'
97eeb9a8
DM
133 },
134 {
135 property: 'bytes',
136 direction: 'DESC'
137 },
138 {
139 property: 'sender',
140 direction: 'ASC'
6d979e4e
DM
141 }
142 ]
143 },
ff8a07c6 144
6d979e4e
DM
145 columns: [
146 {
147 text: gettext('Sender'),
148 flex: 1,
0dd929ec 149 renderer: Ext.htmlEncode,
6d979e4e
DM
150 dataIndex: 'sender',
151 filter: {
152 type: 'string',
153 itemDefaults: {
0dd929ec 154 // any Ext.form.field.Text configs accepted
6d979e4e 155 }
0dd929ec 156 }
6d979e4e
DM
157 },
158 {
159 text: gettext('Count'),
16e23ef4
DM
160 columns: [
161 {
162 text: gettext('Mail'),
163 dataIndex: 'count'
164 },
165 {
166 header: gettext('Virus'),
167 dataIndex: 'viruscount'
168 }
169 ]
6d979e4e
DM
170 },
171 {
172 text: gettext('Size') + ' (KB)',
173 dataIndex: 'bytes',
174 renderer: function(v) {
175 return Ext.Number.toFixed(v/1024, 0);
176 }
177 }
0dd929ec
DM
178 ],
179
180 initComponent: function() {
181 var me = this;
182 me.callParent();
183
5486028e 184 Proxmox.Utils.monStoreErrors(me, me.store, true);
0dd929ec
DM
185 }
186});
187
188Ext.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 }
6d979e4e
DM
231 ]
232});