]>
Commit | Line | Data |
---|---|---|
93d09a01 DM |
1 | Ext.define('PMG.GeneralMailStatistics', { |
2 | extend: 'Ext.panel.Panel', | |
3 | xtype: 'pmgGeneralMailStatistics', | |
4 | ||
5 | scrollable: true, | |
c87d46fb | 6 | |
8051d921 | 7 | bodyPadding: '10 0 0 0', |
50531ef9 | 8 | border: false, |
93d09a01 | 9 | defaults: { |
8051d921 | 10 | width: 700, |
c87d46fb | 11 | padding: '0 0 10 10', |
93d09a01 DM |
12 | }, |
13 | ||
8051d921 DM |
14 | layout: 'column', |
15 | ||
3755c9e0 | 16 | title: gettext('Statistics') + ': ' + gettext('Mail'), |
93d09a01 | 17 | |
c87d46fb | 18 | tbar: [{ xtype: 'pmgStatTimeSelector' }], |
93d09a01 DM |
19 | |
20 | getInData: function(data) { | |
21 | var res = []; | |
22 | ||
23 | res.push({ | |
24 | name: gettext("Incoming Mails"), | |
25 | value: data.count_in, | |
c87d46fb | 26 | percentage: 1, |
93d09a01 | 27 | }); |
c87d46fb | 28 | |
93d09a01 DM |
29 | res.push({ |
30 | name: gettext("Junk Mails"), | |
31 | value: data.junk_in, | |
c87d46fb | 32 | percentage: data.junk_in/data.count_in, |
93d09a01 | 33 | }); |
c87d46fb | 34 | |
93d09a01 DM |
35 | res.push({ |
36 | name: gettext("Greylisted Mails"), | |
37 | value: data.glcount, | |
c87d46fb | 38 | percentage: data.glcount/data.count_in, |
93d09a01 DM |
39 | }); |
40 | ||
41 | res.push({ | |
42 | name: gettext("Spam Mails"), | |
43 | value: data.spamcount_in, | |
c87d46fb | 44 | percentage: data.spamcount_in/data.count_in, |
93d09a01 | 45 | }); |
c87d46fb | 46 | |
93d09a01 DM |
47 | res.push({ |
48 | name: gettext("SPF rejects"), | |
49 | value: data.spfcount, | |
c87d46fb | 50 | percentage: data.spfcount/data.count_in, |
93d09a01 DM |
51 | }); |
52 | ||
53 | res.push({ | |
54 | name: gettext("Bounces"), | |
55 | value: data.bounces_in, | |
c87d46fb | 56 | percentage: data.bounces_in/data.count_in, |
93d09a01 DM |
57 | }); |
58 | ||
59 | res.push({ | |
60 | name: gettext("Virus Mails"), | |
61 | value: data.viruscount_in, | |
c87d46fb | 62 | percentage: data.viruscount_in/data.count_in, |
93d09a01 DM |
63 | }); |
64 | ||
65 | return res; | |
66 | }, | |
c87d46fb | 67 | |
93d09a01 DM |
68 | getOutData: function(data) { |
69 | var res = []; | |
70 | ||
71 | res.push({ | |
72 | name: gettext("Outgoing Mails"), | |
73 | value: data.count_out, | |
c87d46fb | 74 | percentage: 1, |
93d09a01 | 75 | }); |
c87d46fb | 76 | |
93d09a01 DM |
77 | res.push({ |
78 | name: gettext("Bounces"), | |
79 | value: data.bounces_out, | |
c87d46fb | 80 | percentage: data.bounces_out/data.count_out, |
93d09a01 DM |
81 | }); |
82 | ||
83 | res.push({ | |
84 | name: gettext("Virus Mails"), | |
85 | value: data.viruscount_out, | |
c87d46fb | 86 | percentage: data.viruscount_out/data.count_out, |
93d09a01 DM |
87 | }); |
88 | ||
89 | return res; | |
90 | }, | |
91 | ||
92 | getGeneralData: function(data) { | |
93 | var res = []; | |
c87d46fb | 94 | |
93d09a01 DM |
95 | res.push({ |
96 | name: gettext("Total Mails"), | |
97 | value: data.count, | |
c87d46fb | 98 | percentage: 1, |
93d09a01 | 99 | }); |
c87d46fb | 100 | |
93d09a01 DM |
101 | res.push({ |
102 | name: gettext("Incoming Mails"), | |
103 | value: data.count_in, | |
c87d46fb | 104 | percentage: data.count_in/data.count, |
93d09a01 DM |
105 | }); |
106 | ||
107 | res.push({ | |
108 | name: gettext("Outgoing Mails"), | |
109 | value: data.count_out, | |
c87d46fb | 110 | percentage: data.count_out/data.count, |
93d09a01 | 111 | }); |
c87d46fb | 112 | |
93d09a01 DM |
113 | res.push({ |
114 | name: gettext("Virus Outbreaks"), | |
c87d46fb | 115 | value: data.viruscount_out, |
93d09a01 | 116 | }); |
c87d46fb | 117 | |
93d09a01 | 118 | res.push({ |
13444d53 | 119 | name: gettext("Avg. Mail Processing Time"), |
93d09a01 | 120 | value: Ext.String.format(gettext("{0} seconds"), |
c87d46fb | 121 | Ext.Number.toFixed(data.avptime, 2)), |
93d09a01 DM |
122 | }); |
123 | ||
124 | res.push({ | |
125 | name: gettext("Incoming Mail Traffic"), | |
c87d46fb | 126 | value: Ext.Number.toFixed(data.bytes_in/(1024*1024), 2) + ' MiB', |
93d09a01 DM |
127 | }); |
128 | ||
129 | res.push({ | |
130 | name: gettext("Outgoing Mail Traffic"), | |
c87d46fb | 131 | value: Ext.Number.toFixed(data.bytes_out/(1024*1024), 2) + ' MiB', |
93d09a01 DM |
132 | }); |
133 | return res; | |
134 | }, | |
135 | ||
136 | initComponent: function() { | |
137 | var me = this; | |
138 | ||
139 | var countstore = Ext.create('PMG.data.StatStore', { | |
140 | includeTimeSpan: true, | |
141 | staturl: '/api2/json/statistics/mailcount', | |
142 | fields: [ | |
143 | { type: 'integer', name: 'count' }, | |
144 | { type: 'integer', name: 'count_in' }, | |
145 | { type: 'integer', name: 'count_out' }, | |
146 | { type: 'integer', name: 'spamcount_in' }, | |
147 | { type: 'integer', name: 'spamcount_out' }, | |
148 | { type: 'integer', name: 'viruscount_in' }, | |
9fe99203 | 149 | { type: 'integer', name: 'viruscount_out' }, |
93d09a01 DM |
150 | { type: 'integer', name: 'bounces_in' }, |
151 | { type: 'integer', name: 'bounces_out' }, | |
c87d46fb TL |
152 | { type: 'date', dateFormat: 'timestamp', name: 'time' }, |
153 | ], | |
93d09a01 | 154 | }); |
c87d46fb | 155 | |
93d09a01 DM |
156 | var totalgrid = Ext.createWidget('pmgMailStatGrid', { |
157 | dockedItems: [ | |
158 | { | |
159 | dock: 'top', | |
160 | title: gettext("Total Mail Count"), | |
161 | xtype: 'proxmoxRRDChart', | |
162 | fields: ['count', 'count_in', 'count_out'], | |
163 | fieldTitles: [ | |
164 | gettext('Total Mail Count'), | |
165 | gettext('Incoming Mails'), gettext('Outgoing Mails')], | |
c87d46fb TL |
166 | store: countstore, |
167 | }, | |
168 | ], | |
93d09a01 | 169 | }); |
c87d46fb | 170 | |
93d09a01 DM |
171 | var ingrid = Ext.createWidget('pmgMailStatGrid', { |
172 | dockedItems: [ | |
173 | { | |
174 | dock: 'top', | |
175 | title: gettext("Incoming Mails"), | |
176 | xtype: 'proxmoxRRDChart', | |
177 | fields: ['count_in', 'spamcount_in', 'viruscount_in', 'bounces_in'], | |
178 | fieldTitles: [ | |
126df33c | 179 | gettext('Incoming Mails'), gettext('Junk Mails'), |
93d09a01 | 180 | gettext('Virus Mails'), gettext('Bounces')], |
c87d46fb TL |
181 | store: countstore, |
182 | }, | |
183 | ], | |
93d09a01 | 184 | }); |
c87d46fb | 185 | |
93d09a01 DM |
186 | var outgrid = Ext.createWidget('pmgMailStatGrid', { |
187 | dockedItems: [ | |
188 | { | |
189 | dock: 'top', | |
190 | title: gettext("Outgoing Mails"), | |
191 | xtype: 'proxmoxRRDChart', | |
192 | fields: ['count_out', 'viruscount_out', 'bounces_out'], | |
193 | fieldTitles: [ | |
194 | gettext('Outgoing Mails'), | |
195 | gettext('Virus Mails'), gettext('Bounces')], | |
c87d46fb TL |
196 | store: countstore, |
197 | }, | |
198 | ], | |
93d09a01 DM |
199 | }); |
200 | ||
201 | var infostore = Ext.create('PMG.data.StatStore', { | |
202 | staturl: "/api2/json/statistics/mail", | |
c87d46fb | 203 | fields: ['name', 'value', 'percentage'], |
93d09a01 | 204 | listeners: { |
f4de85b4 DC |
205 | load: function(store, records, success) { |
206 | if (!success || records.length <= 0) { | |
207 | return; | |
208 | } | |
93d09a01 DM |
209 | var data = me.getGeneralData(records[0].data); |
210 | totalgrid.store.setData(data); | |
211 | data = me.getInData(records[0].data); | |
212 | ingrid.store.setData(data); | |
213 | data = me.getOutData(records[0].data); | |
214 | outgrid.store.setData(data); | |
c87d46fb TL |
215 | }, |
216 | }, | |
93d09a01 DM |
217 | }); |
218 | ||
c87d46fb TL |
219 | me.items = [totalgrid, ingrid, outgrid]; |
220 | ||
93d09a01 DM |
221 | me.callParent(); |
222 | ||
223 | me.on('destroy', infostore.destroy, infostore); | |
224 | me.on('destroy', countstore.destroy, countstore); | |
c87d46fb | 225 | }, |
93d09a01 | 226 | }); |