]>
git.proxmox.com Git - pmg-gui.git/blob - js/Dashboard.js
1 Ext
.define('PMG.Dashboard', {
2 extend
: 'Ext.panel.Panel',
6 xclass
: 'Ext.app.ViewController',
8 openDashboardOptions: function() {
10 var viewModel
= me
.getViewModel();
11 Ext
.create('Ext.window.Window', {
14 title
: gettext('Dashboard Options'),
20 bodyPadding
: '10 10 10 10',
21 defaultButton
: 'savebutton',
23 xtype
: 'proxmoxintegerfield',
30 value
: viewModel
.get('hours'),
31 fieldLabel
: gettext('Hours to show'),
34 text
: gettext('Save'),
35 reference
: 'loginButton',
38 var win
= this.up('window');
39 var hours
= win
.down('#hours').getValue();
40 me
.setHours(hours
, true);
48 setHours: function(hours
, setState
) {
50 var viewModel
= me
.getViewModel();
51 viewModel
.set('hours', hours
);
54 Ext
.Array
.forEach(['recentmails', 'receivers'], function(item
) {
55 viewModel
.getStore(item
).reload();
59 var sp
= Ext
.state
.Manager
.getProvider();
60 sp
.set('dashboard-hours', hours
);
64 updateMailStats: function(store
, records
, success
) {
69 var viewModel
= me
.getViewModel();
75 var avg_ptime
= 'N/A';
77 records
.forEach(function(item
) {
78 bytes_in
+= item
.data
.bytes_in
;
79 bytes_out
+= item
.data
.bytes_out
;
81 count
+= (item
.data
.count
*item
.data
.timespan
)/60;
82 ptime
+= item
.data
.ptimesum
;
86 avg_ptime
= (ptime
/count
).toFixed(2) + " s";
89 viewModel
.set('bytes_in', Proxmox
.Utils
.format_size(bytes_in
));
90 viewModel
.set('bytes_out', Proxmox
.Utils
.format_size(bytes_out
));
91 viewModel
.set('avg_ptime', avg_ptime
);
94 updateClusterStats: function(store
, records
, success
) {
99 var viewmodel
= me
.getViewModel();
101 var subStatus
= 2; // 2 = all good, 1 = different leves, 0 = none
107 var count
= records
.length
;
110 records
.forEach(function(item
) {
111 // subscription level check
112 if (subStatus
&& item
.data
.level
) {
113 if (subLevel
!== "" && subLevel
!== item
.data
.level
) {
115 } else if (subLevel
=== "") {
116 subLevel
= item
.data
.level
;
122 if (item
.data
.name
=== Proxmox
.NodeName
) {
123 let repoStatus
= me
.lookup('nodeInfo').down('#repositoryStatus');
124 repoStatus
.setSubscriptionStatus(!!item
.data
.level
);
128 cpu
+= item
.data
.cpu
|| 0;
130 var memory
= item
.data
.memory
|| { used
: 0, total
: 1 };
131 mem
+= memory
.used
/memory
.total
;
133 var rootfs
= item
.data
.rootfs
|| { used
: 0, total
: 1 };
134 hd
+= rootfs
.used
/rootfs
.total
;
136 if (item
.data
.conn_error
&& count
> 1) {
139 name
: item
.data
.name
,
140 msg
: item
.data
.conn_error
,
145 var subscriptionPanel
= me
.lookup('subscription');
146 subscriptionPanel
.setSubStatus(subStatus
);
148 // the node info already displays this information in case there is no cluster
149 me
.lookup('clusterResources').setHidden(records
.length
=== 1);
155 var cpuPanel
= me
.lookup('cpu');
156 cpuPanel
.updateValue(cpu
);
158 var memPanel
= me
.lookup('mem');
159 memPanel
.updateValue(mem
);
161 var hdPanel
= me
.lookup('hd');
162 hdPanel
.updateValue(hd
);
164 if (errors
.length
&& !viewmodel
.get('error_shown')) {
166 errors
.forEach(function(error
) {
167 text
+= error
.name
+ ':<br>' + error
.msg
+ '<br>';
169 Ext
.Msg
.alert(gettext('Error'), text
);
170 viewmodel
.set('error_shown', true);
174 updateRepositoryStatus: function(store
, records
, success
) {
180 let repoStatus
= me
.lookup('nodeInfo').down('#repositoryStatus');
181 repoStatus
.setRepositoryInfo(records
[0].data
['standard-repos']);
184 init: function(view
) {
186 var sp
= Ext
.state
.Manager
.getProvider();
187 var hours
= sp
.get('dashboard-hours') || 12;
188 me
.setHours(hours
, false);
194 timespan
: 300, // in seconds
195 hours
: 12, // in hours
204 storeid
: 'dash-cluster',
210 extraParams
: { list_single_node
: 1 },
212 url
: '/api2/json/config/cluster/status',
215 load
: 'updateClusterStats',
219 storeid
: 'dash-recent',
226 url
: '/api2/json/statistics/recent',
229 timespan
: '{timespan}',
234 type
: 'number', name
: 'count',
235 convert
: PMG
.Utils
.convert_field_to_per_min
,
238 type
: 'number', name
: 'count_in',
239 convert
: PMG
.Utils
.convert_field_to_per_min
,
242 type
: 'number', name
: 'count_out',
243 convert
: PMG
.Utils
.convert_field_to_per_min
,
246 type
: 'number', name
: 'spam',
247 convert
: PMG
.Utils
.convert_field_to_per_min
,
250 type
: 'number', name
: 'spam_in',
251 convert
: PMG
.Utils
.convert_field_to_per_min
,
254 type
: 'number', name
: 'spam_out',
255 convert
: PMG
.Utils
.convert_field_to_per_min
,
258 type
: 'number', name
: 'virus',
259 convert
: PMG
.Utils
.convert_field_to_per_min
,
262 type
: 'number', name
: 'virus_in',
263 convert
: PMG
.Utils
.convert_field_to_per_min
,
265 { type
: 'integer', name
: 'virus_out' },
266 { type
: 'integer', name
: 'bytes_in' },
267 { type
: 'integer', name
: 'bytes_out' },
268 { type
: 'number', name
: 'ptimesum' },
269 { type
: 'date', dateFormat
: 'timestamp', name
: 'time' },
272 load
: 'updateMailStats',
276 storeid
: 'dash-receivers',
283 url
: '/api2/json/statistics/recentreceivers',
289 { type
: 'integer', name
: 'count' },
290 { type
: 'string', name
: 'receiver' },
294 storeid
: 'dash-repositories',
302 url
: '/api2/json/nodes/localhost/apt/repositories',
305 load
: 'updateRepositoryStatus',
312 title
: gettext('Dashboard') + ' (' +
313 Ext
.String
.format(gettext('{0} hours'), '{hours}') + ')',
321 bodyPadding
: '20 0 0 20',
332 handler
: 'openDashboardOptions',
342 iconCls
: 'fa fa-tachometer',
343 title
: gettext('E-Mail Volume'),
349 xtype
: 'pmgMiniGraph',
351 store
: '{recentmails}',
357 fieldTitles
: [gettext('Mails / min')],
372 fieldTitles
: [gettext('Spam / min')],
396 xtype
: 'pmgMailProcessing',
397 title
: gettext('E-Mail Processing'),
398 iconCls
: 'fa fa-hourglass-half',
402 'bytes_in': '{bytes_in}',
403 'bytes_out': '{bytes_out}',
404 'avg_ptime': '{avg_ptime}',
409 iconCls
: 'fa fa-ticket',
410 title
: gettext('Subscription'),
411 reference
: 'subscription',
412 xtype
: 'pmgSubscriptionInfo',
419 xtype
: 'pmgNodeInfoPanel',
420 reference
: 'nodeInfo',
422 bodyPadding
: '15 5 15 5',
423 iconCls
: 'fa fa-tasks',
427 iconCls
: 'fa fa-list',
428 title
: gettext('Top Receivers'),
430 bodyPadding
: '20 20 20 20',
439 store
: '{receivers}',
441 emptyText
: gettext('No data in database'),
442 // remove all borders/lines/headers
454 dataIndex
: 'receiver',
456 text
: gettext('Receiver'),
461 text
: gettext('Count'),
468 iconCls
: 'fa fa-tasks',
469 title
: gettext('Cluster Resources (average)'),
470 reference
: 'clusterResources',
472 bodyPadding
: '0 20 0 20',
478 xtype
: 'proxmoxGauge',
479 spriteFontSize
: '20px',
484 title
: gettext('CPU'),
488 title
: gettext('Memory'),
492 title
: gettext('Storage'),