]> git.proxmox.com Git - pve-manager.git/blob - www/manager/dc/Summary.js
add subscription status to datacenter summary
[pve-manager.git] / www / manager / dc / Summary.js
1 Ext.define('PVE.dc.NodeView', {
2 extend: 'Ext.grid.GridPanel',
3
4 alias: ['widget.pveDcNodeView'],
5
6 initComponent : function() {
7 var me = this;
8
9 var rstore = Ext.create('PVE.data.UpdateStore', {
10 interval: 3000,
11 storeid: 'pve-dc-nodes',
12 model: 'pve-dc-nodes',
13 proxy: {
14 type: 'pve',
15 url: "/api2/json/cluster/status"
16 },
17 filters: {
18 property: 'type',
19 value : 'node'
20 }
21 });
22
23 var store = Ext.create('PVE.data.DiffStore', { rstore: rstore });
24
25 Ext.apply(me, {
26 store: store,
27 stateful: false,
28 columns: [
29 {
30 header: gettext('Name'),
31 width: 200,
32 sortable: true,
33 dataIndex: 'name'
34 },
35 {
36 header: 'ID',
37 width: 50,
38 sortable: true,
39 dataIndex: 'nodeid'
40 },
41 {
42 header: gettext('Online'),
43 width: 100,
44 sortable: true,
45 dataIndex: 'state',
46 renderer: PVE.Utils.format_boolean
47 },
48 {
49 header: gettext('Support'),
50 width: 100,
51 sortable: true,
52 dataIndex: 'level',
53 renderer: PVE.Utils.render_support_level
54 },
55 {
56 header: gettext('Estranged'),
57 width: 100,
58 sortable: true,
59 dataIndex: 'estranged',
60 renderer: PVE.Utils.format_boolean
61 },
62 {
63 header: gettext('Server Address'),
64 width: 100,
65 sortable: true,
66 dataIndex: 'ip'
67 },
68 {
69 header: gettext('Services'),
70 flex: 1,
71 width: 80,
72 sortable: true,
73 dataIndex: 'pmxcfs',
74 renderer: function(value, metaData, record) {
75 var list = [];
76 var data = record.data;
77 if (data) {
78 if (data.pmxcfs) {
79 list.push('PVECluster');
80 }
81 if (data.rgmanager) {
82 list.push('RGManager');
83 }
84
85 }
86 return list.join(', ');
87 }
88 }
89 ],
90 listeners: {
91 show: rstore.startUpdate,
92 hide: rstore.stopUpdate,
93 destroy: rstore.stopUpdate
94 }
95 });
96
97 me.callParent();
98 }
99 }, function() {
100
101 Ext.define('pve-dc-nodes', {
102 extend: 'Ext.data.Model',
103 fields: [ 'id', 'type', 'name', 'state', 'nodeid', 'ip',
104 'pmxcfs', 'rgmanager', 'estranged', 'level' ],
105 idProperty: 'id'
106 });
107
108 });
109
110 Ext.define('PVE.dc.HAServiceView', {
111 extend: 'Ext.grid.GridPanel',
112
113 alias: ['widget.pveHaServiceView'],
114
115 initComponent : function() {
116 var me = this;
117
118 var rstore = Ext.create('PVE.data.UpdateStore', {
119 interval: 3000,
120 storeid: 'pve-ha-services',
121 model: 'pve-ha-services',
122 proxy: {
123 type: 'pve',
124 url: "/api2/json/cluster/status"
125 },
126 filters: {
127 property: 'type',
128 value : 'group'
129 }
130 });
131
132 var store = Ext.create('PVE.data.DiffStore', { rstore: rstore });
133
134 var noClusterText = gettext("Standalone node - no cluster defined");
135 var status = Ext.create('Ext.Component', {
136 padding: 2,
137 html: ' ',
138 dock: 'bottom'
139 });
140
141 Ext.apply(me, {
142 store: store,
143 stateful: false,
144 //tbar: [ 'start', 'stop' ],
145 bbar: [ status ],
146 columns: [
147 {
148 header: gettext('Name'),
149 flex: 1,
150 sortable: true,
151 dataIndex: 'name'
152 },
153 {
154 header: gettext('Owner'),
155 flex: 1,
156 sortable: true,
157 dataIndex: 'owner'
158 },
159 {
160 header: gettext('Status'),
161 width: 80,
162 sortable: true,
163 dataIndex: 'state_str'
164 },
165 {
166 header: gettext('Restarts'),
167 width: 80,
168 sortable: true,
169 dataIndex: 'restarts'
170 },
171 {
172 header: gettext('Last transition'),
173 width: 200,
174 sortable: true,
175 dataIndex: 'last_transition'
176 },
177 {
178 header: gettext('Last owner'),
179 flex: 1,
180 sortable: true,
181 dataIndex: 'last_owner'
182 }
183 ],
184 listeners: {
185 show: rstore.startUpdate,
186 hide: rstore.stopUpdate,
187 destroy: rstore.stopUpdate
188 }
189 });
190
191 me.callParent();
192
193 rstore.on('load', function(s, records, success) {
194 if (!success) {
195 return;
196 }
197
198 var cluster_rec = rstore.getById('cluster');
199 var quorum_rec = rstore.getById('quorum');
200
201 if (!(cluster_rec && quorum_rec)) {
202 status.update(noClusterText);
203 return;
204 }
205
206 var cluster_raw = cluster_rec.raw;
207 var quorum_raw = quorum_rec.raw;
208 if (!(cluster_raw && quorum_raw)) {
209 status.update(noClusterText);
210 return;
211 }
212
213 status.update("Quorate: " + PVE.Utils.format_boolean(quorum_raw.quorate));
214 });
215
216 }
217 }, function() {
218
219 Ext.define('pve-ha-services', {
220 extend: 'Ext.data.Model',
221 fields: [ 'id', 'type', 'name', 'owner', 'last_owner', 'state_str', 'restarts',
222 { name: 'last_transition', type: 'date', dateFormat: 'timestamp'}
223 ],
224 idProperty: 'id'
225 });
226
227 });
228
229
230 Ext.define('PVE.dc.Summary', {
231 extend: 'Ext.panel.Panel',
232
233 alias: ['widget.pveDcSummary'],
234
235 initComponent: function() {
236 var me = this;
237
238 var hagrid = Ext.create('PVE.dc.HAServiceView', {
239 title: gettext('HA Service Status'),
240 region: 'south',
241 border: false,
242 split: true,
243 flex: 1
244 });
245
246 var nodegrid = Ext.create('PVE.dc.NodeView', {
247 title: gettext('Nodes'),
248 border: false,
249 region: 'center',
250 flex: 3
251 });
252
253 Ext.apply(me, {
254 layout: 'border',
255 items: [ nodegrid, hagrid ],
256 listeners: {
257 show: function() {
258 hagrid.fireEvent('show', hagrid);
259 nodegrid.fireEvent('show', hagrid);
260 },
261 hide: function() {
262 hagrid.fireEvent('hide', hagrid);
263 nodegrid.fireEvent('hide', hagrid);
264 }
265 }
266 });
267
268 me.callParent();
269 }
270 });