]> git.proxmox.com Git - pmg-gui.git/blame - js/DomainStatistics.js
add DomainStatistics class
[pmg-gui.git] / js / DomainStatistics.js
CommitLineData
73360b11
DM
1Ext.define('PMG.DomainStatistics', {
2 extend: 'Ext.panel.Panel',
3 xtype: 'pmgDomainStatistics',
4
5 title: 'Mail Domain Statistics',
6
7 tbar: [ { xtype: 'pmgStatTimeSelector' } ],
8
9 layout: 'fit',
10
11 initComponent: function() {
12 var me = this;
13
14 var fields = [
15 'domain',
16 { type: 'integer', name: 'count_in' },
17 { type: 'integer', name: 'count_out' },
18 { type: 'integer', name: 'spamcount_in' },
19 { type: 'integer', name: 'spamcount_out' },
20 { type: 'integer', name: 'viruscount_in' },
21 { type: 'integer', name: 'viruscount_out' },
22 { type: 'number', name: 'mbytes_in' },
23 { type: 'number', name: 'mbytes_out' }
24 ];
25
26 var store = Ext.create('PMG.data.StatStore', {
27 staturl: '/api2/json/statistics/domains',
28 fields: fields
29 });
30
31 var store_in = Ext.create('Ext.data.ArrayStore', {
32 fields: fields,
33 filters: [ function(item) { return item.data.count_in > 0; } ]
34 });
35
36 var store_out = Ext.create('Ext.data.ArrayStore', {
37 fields: fields,
38 filters: [ function(item) { return item.data.count_out > 0; } ]
39 });
40
41 store.on('load', function(s, records, successful) {
42 if (!successful) {
43 store_in.setData([]);
44 store_out.setData([]);
45 } else {
46 store_in.setData(records);
47 store_out.setData(records);
48 }
49 })
50
51 var render_domain = function(v) {
52 return v === '' ? '--- EMPTY ADDRESS ---' : v;
53 };
54
55 me.items = {
56 xtype: 'tabpanel',
57 border: false,
58 items: [
59 {
60 xtype: 'grid',
61 title: gettext('Incoming'),
62 border: false,
63 disableSelection: true,
64 store: store_in,
65 emptyText: gettext('No data in database.'),
66 viewConfig: {
67 deferEmptyText: false
68 },
69 columns: [
70 {
71 text: gettext('Domain')+ ' (' +
72 gettext('Receiver') + ')',
73 flex: 1,
74 renderer: render_domain,
75 dataIndex: 'domain'
76 },
77 {
78 text: gettext('Traffic') + ' (MB)',
79 dataIndex: 'mbytes_in',
80 renderer: function(v) {
81 return Ext.Number.toFixed(v, 2);
82 }
83 },
84 {
85 text: gettext('Count'),
86 columns: [
87 {
88 text: gettext('Mail'),
89 dataIndex: 'count_in'
90 },
91 {
92 header: gettext('Virus'),
93 dataIndex: 'viruscount_in'
94 },
95 {
96 header: gettext('Spam'),
97 dataIndex: 'spamcount_in'
98 }
99 ]
100 }
101 ]
102 },
103 {
104 xtype: 'grid',
105 title: gettext('Outgoing'),
106 border: false,
107 disableSelection: true,
108 store: store_out,
109 emptyText: gettext('No data in database.'),
110 viewConfig: {
111 deferEmptyText: false
112 },
113 columns: [
114 {
115 text: gettext('Domain')+ ' (' +
116 gettext('Receiver') + ')',
117 flex: 1,
118 renderer: render_domain,
119 dataIndex: 'domain'
120 },
121 {
122 text: gettext('Traffic') + ' (MB)',
123 dataIndex: 'mbytes_out',
124 renderer: function(v) {
125 return Ext.Number.toFixed(v, 2);
126 }
127 },
128 {
129 text: gettext('Count'),
130 columns: [
131 {
132 text: gettext('Mail'),
133 dataIndex: 'count_out'
134 },
135 {
136 header: gettext('Virus'),
137 dataIndex: 'viruscount_out'
138 }
139 ]
140 }
141 ]
142 }
143 ]
144 };
145
146 me.callParent();
147
148 Proxmox.Utils.monStoreErrors(me, store);
149
150 me.on('destroy', store.destroy, store);
151 }
152});