]> git.proxmox.com Git - pmg-gui.git/blame - js/GeneralMailStatistics.js
quarantines: use a check mark for the dark mode filter
[pmg-gui.git] / js / GeneralMailStatistics.js
CommitLineData
93d09a01
DM
1Ext.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});