]>
git.proxmox.com Git - pmg-gui.git/blob - js/ClusterAdministration.js
1 Ext
.define('pmg-cluster', {
2 extend
: 'Ext.data.Model',
4 'type', 'name', 'ip', 'hostrsapubkey', 'rootrsapubkey',
5 'fingerprint', { type
: 'integer', name
: 'cid' },
6 { type
: 'boolean', name
: 'insync' },
7 'memory', 'loadavg', 'uptime', 'rootfs', 'conn_error', 'level',
9 type
: 'number', name
: 'memory_per',
10 calculate: function(data
) {
11 var mem
= data
.memory
;
12 return Ext
.isObject(mem
) ? mem
.used
/mem
.total
: 0;
16 type
: 'number', name
: 'rootfs_per',
17 calculate: function(data
) {
19 return Ext
.isObject(du
) ? du
.used
/du
.total
: 0;
25 url
: "/api2/json/config/cluster/status",
30 Ext
.define('PMG.ClusterJoinNodeWindow', {
31 extend
: 'Proxmox.window.Edit',
32 xtype
: 'pmgClusterJoinNodeWindow',
33 onlineHelp
: 'pmgcm_join',
35 title
: gettext('Cluster Join'),
41 url
: '/config/cluster/join',
46 fieldLabel
: 'IP Address',
51 inputType
: 'password',
52 fieldLabel
: gettext('Password'),
57 fieldLabel
: gettext('Fingerprint'),
63 Ext
.define('PMG.ClusterAddNodeWindow', {
64 extend
: 'Ext.window.Window',
65 xtype
: 'pmgClusterAddNodeWindow',
66 mixins
: ['Proxmox.Mixin.CBind'],
72 title
: gettext('Cluster Join') + ' : ' + gettext('Information'),
76 fingerprint
: undefined,
82 padding
: '10 10 10 10',
83 html
: gettext("Please use the 'Join' button on the node you want to add, using the following IP address and fingerprint."),
89 padding
: '0 10 10 10',
93 fieldLabel
: gettext('IP Address'),
94 cbind
: { value
: '{ipAddress}' },
99 fieldLabel
: gettext('Fingerprint'),
100 cbind
: { value
: '{fingerprint}' },
108 Ext
.define('PMG.ClusterAdministration', {
109 extend
: 'Ext.tab.Panel',
110 xtype
: 'pmgClusterAdministration',
112 title
: gettext('Cluster Administration'),
115 defaults
: { border
: false },
128 title
: gettext('Nodes'),
130 xclass
: 'Ext.app.ViewController',
132 init: function(view
) {
133 view
.store
.on('load', this.onLoad
, this);
134 Proxmox
.Utils
.monStoreErrors(view
, view
.getStore(), true);
137 onLoad: function(store
, records
, success
) {
138 var vm
= this.getViewModel();
139 if (!success
|| !records
) {
142 vm
.set('nodecount', records
.length
);
145 Ext
.Array
.each(records
, function(ni
) {
146 if (ni
.data
.type
=== 'master') {
150 vm
.set('master', master
);
153 onCreate: function() {
154 var view
= this.getView();
156 Proxmox
.Utils
.API2Request({
157 url
: '/config/cluster/create',
160 failure: function(response
, opts
) {
161 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
163 success: function(response
, options
) {
164 var upid
= response
.result
.data
;
165 var win
= Ext
.create('Proxmox.window.TaskProgress', { upid
: upid
});
167 win
.on('destroy', function() { view
.store
.load(); });
173 var win
= Ext
.create('PMG.ClusterJoinNodeWindow', {});
175 win
.on('destroy', function() {
181 var vm
= this.getViewModel();
183 var win
= Ext
.create('PMG.ClusterAddNodeWindow', {
184 ipAddress
: vm
.get('master').get('ip'),
185 fingerprint
: vm
.get('master').get('fingerprint'),
193 model
: 'pmg-cluster',
198 text
: gettext('Create'),
199 reference
: 'createButton',
202 disabled
: '{nodecount}',
206 text
: gettext('Add'),
207 reference
: 'addButton',
210 disabled
: '{!master}',
214 text
: gettext('Join'),
215 reference
: 'joinButton',
218 disabled
: '{nodecount}',
224 header
: gettext('Node'),
229 header
: gettext('Role'),
234 header
: gettext('ID'),
240 header
: gettext('IP'),
245 header
: gettext('State'),
247 renderer: function(value
, metaData
, record
) {
249 var state
= 'active';
254 metaData
.tdCls
= 'x-form-invalid-field';
255 var html
= '<p>' + Ext
.htmlEncode(d
.conn_error
) + '</p>';
256 html
= html
.replace(/\n/g, '<br>');
257 metaData
.tdAttr
= 'data-qwidth=600 data-qtitle="ERROR" data-qtip="' +
258 html
.replace(/"/g, '"') + '"';
266 header: gettext('Subscription
'),
268 renderer: Proxmox.Utils.format_subscription_level,
272 header: gettext('Uptime
'),
274 renderer: Proxmox.Utils.render_uptime,
278 header: gettext('Load average
'),
279 renderer: function(value) {
280 if (Ext.isDefined(value)) {
281 if (Ext.isArray(value)) {
284 return value.toString();
288 dataIndex: 'loadavg
',
291 xtype: 'widgetcolumn
',
293 xtype: 'progressbarwidget
',
294 textTpl: '{value
:percent
}',
296 header: gettext('RAM usage
'),
297 dataIndex: 'memory_per
',
300 xtype: 'widgetcolumn
',
302 xtype: 'progressbarwidget
',
303 textTpl: '{value
:percent
}',
305 header: gettext('HD space
'),
306 dataIndex: 'rootfs_per
',