]>
Commit | Line | Data |
---|---|---|
1 | Ext.define('PVE.panel.StatusView', { | |
2 | extend: 'Ext.panel.Panel', | |
3 | alias: 'widget.pveStatusView', | |
4 | ||
5 | layout: { | |
6 | type: 'column', | |
7 | }, | |
8 | ||
9 | title: gettext('Status'), | |
10 | ||
11 | getRecordValue: function(key, store) { | |
12 | if (!key) { | |
13 | throw "no key given"; | |
14 | } | |
15 | var me = this; | |
16 | ||
17 | if (store === undefined) { | |
18 | store = me.getStore(); | |
19 | } | |
20 | ||
21 | var rec = store.getById(key); | |
22 | if (rec) { | |
23 | return rec.data.value; | |
24 | } | |
25 | ||
26 | return ''; | |
27 | }, | |
28 | ||
29 | fieldRenderer: function(val, max) { | |
30 | if (max === undefined) { | |
31 | return val; | |
32 | } | |
33 | ||
34 | if (!Ext.isNumeric(max) || max === 1) { | |
35 | return PVE.Utils.render_usage(val); | |
36 | } | |
37 | return PVE.Utils.render_size_usage(val, max); | |
38 | }, | |
39 | ||
40 | fieldCalculator: function(used, max) { | |
41 | if (!Ext.isNumeric(max) && Ext.isNumeric(used)) { | |
42 | return used; | |
43 | } else if (!Ext.isNumeric(used)) { | |
44 | /* we come here if the field is from a node | |
45 | * where the records are not mem and maxmem | |
46 | * but mem.used and mem.total | |
47 | */ | |
48 | if (used.used !== undefined && | |
49 | used.total !== undefined) { | |
50 | return used.used/used.total; | |
51 | } | |
52 | } | |
53 | ||
54 | return used/max; | |
55 | }, | |
56 | ||
57 | updateField: function(field) { | |
58 | var me = this; | |
59 | var text = ''; | |
60 | var renderer = me.fieldRenderer; | |
61 | if (Ext.isFunction(field.renderer)) { | |
62 | renderer = field.renderer; | |
63 | } | |
64 | if (field.multiField === true) { | |
65 | field.updateValue(renderer.call(field, me.getStore().getRecord())); | |
66 | } else if (field.textField !== undefined) { | |
67 | field.updateValue(renderer.call(field, me.getRecordValue(field.textField))); | |
68 | } else if (field.valueField !== undefined) { | |
69 | var used = me.getRecordValue(field.valueField); | |
70 | /* string and int */ | |
71 | var max = field.maxField !== undefined ? me.getRecordValue(field.maxField) : 1; | |
72 | ||
73 | var calculate = me.fieldCalculator; | |
74 | ||
75 | if (Ext.isFunction(field.calculate)) { | |
76 | calculate = field.calculate; | |
77 | } | |
78 | field.updateValue(renderer.call(field, used, max), calculate(used, max)); | |
79 | } | |
80 | }, | |
81 | ||
82 | getStore: function() { | |
83 | var me = this; | |
84 | if (!me.rstore) { | |
85 | throw "there is no rstore"; | |
86 | } | |
87 | ||
88 | return me.rstore; | |
89 | }, | |
90 | ||
91 | updateTitle: function() { | |
92 | var me = this; | |
93 | me.setTitle(me.getRecordValue('name')); | |
94 | }, | |
95 | ||
96 | updateValues: function(store, records, success) { | |
97 | if (!success) { | |
98 | return; // do not update if store load was not successful | |
99 | } | |
100 | var me = this; | |
101 | var itemsToUpdate = me.query('pveInfoWidget'); | |
102 | ||
103 | itemsToUpdate.forEach(me.updateField, me); | |
104 | ||
105 | me.updateTitle(store); | |
106 | }, | |
107 | ||
108 | initComponent: function() { | |
109 | var me = this; | |
110 | ||
111 | if (!me.rstore) { | |
112 | throw "no rstore given"; | |
113 | } | |
114 | ||
115 | if (!me.title) { | |
116 | throw "no title given"; | |
117 | } | |
118 | ||
119 | Proxmox.Utils.monStoreErrors(me, me.rstore); | |
120 | ||
121 | me.callParent(); | |
122 | ||
123 | me.mon(me.rstore, 'load', 'updateValues'); | |
124 | }, | |
125 | ||
126 | }); |