'fingerprint', { type: 'integer', name: 'cid' },
{ type: 'boolean', name: 'insync' },
'memory', 'loadavg', 'uptime', 'rootfs', 'conn_error', 'level',
- { type: 'number', name: 'memory_per',
+ {
+ type: 'number', name: 'memory_per',
calculate: function(data) {
var mem = data.memory;
return Ext.isObject(mem) ? mem.used/mem.total : 0;
- }
+ },
},
- { type: 'number', name: 'rootfs_per',
+ {
+ type: 'number', name: 'rootfs_per',
calculate: function(data) {
var du = data.rootfs;
return Ext.isObject(du) ? du.used/du.total : 0;
- }
- }
+ },
+ },
],
proxy: {
type: 'proxmox',
- url: "/api2/json/config/cluster/status"
+ url: "/api2/json/config/cluster/status",
},
- idProperty: 'cid'
+ idProperty: 'cid',
});
Ext.define('PMG.ClusterJoinNodeWindow', {
extend: 'Proxmox.window.Edit',
xtype: 'pmgClusterJoinNodeWindow',
+ onlineHelp: 'pmgcm_join',
title: gettext('Cluster Join'),
{
xtype: 'textfield',
fieldLabel: 'IP Address',
- name: 'master_ip'
+ name: 'master_ip',
},
{
xtype: 'textfield',
inputType: 'password',
fieldLabel: gettext('Password'),
- name: 'password'
+ name: 'password',
},
{
xtype: 'textfield',
fieldLabel: gettext('Fingerprint'),
- name: 'fingerprint'
- }
- ]
+ name: 'fingerprint',
+ },
+ ],
});
Ext.define('PMG.ClusterAddNodeWindow', {
{
xtype: 'component',
border: false,
- padding: 10,
- html: gettext("Please use the 'Join' button on the node you want to add, using the following IP address and fingerprint.")
+ padding: '10 10 10 10',
+ html: gettext("Please use the 'Join' button on the node you want to add, using the following IP address and fingerprint."),
},
{
xtype: 'container',
xtype: 'textfield',
fieldLabel: gettext('IP Address'),
cbind: { value: '{ipAddress}' },
- editable: false
+ editable: false,
},
{
xtype: 'textfield',
fieldLabel: gettext('Fingerprint'),
cbind: { value: '{fingerprint}' },
- editable: false
- }
- ]
- }
- ]
+ editable: false,
+ },
+ ],
+ },
+ ],
});
Ext.define('PMG.ClusterAdministration', {
parent: null,
data: {
nodecount: 0,
- master: null
- }
+ master: null,
+ },
},
items: [
init: function(view) {
view.store.on('load', this.onLoad, this);
- Proxmox.Utils.monStoreErrors(view, view.getStore());
+ Proxmox.Utils.monStoreErrors(view, view.getStore(), true);
},
onLoad: function(store, records, success) {
url: '/config/cluster/create',
method: 'POST',
waitMsgTarget: view,
- failure: function (response, opts) {
+ failure: function(response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
},
success: function(response, options) {
var win = Ext.create('Proxmox.window.TaskProgress', { upid: upid });
win.show();
win.on('destroy', function() { view.store.load(); });
- }
+ },
});
},
onJoin: function() {
- var view = this.getView();
var win = Ext.create('PMG.ClusterJoinNodeWindow', {});
win.show();
win.on('destroy', function() {
var win = Ext.create('PMG.ClusterAddNodeWindow', {
ipAddress: vm.get('master').get('ip'),
- fingerprint: vm.get('master').get('fingerprint')
+ fingerprint: vm.get('master').get('fingerprint'),
});
win.show();
- }
+ },
},
store: {
autoLoad: true,
- model: 'pmg-cluster'
+ model: 'pmg-cluster',
+ sorters: ['cid'],
},
tbar: [
{
reference: 'createButton',
handler: 'onCreate',
bind: {
- disabled: '{nodecount}'
- }
+ disabled: '{nodecount}',
+ },
},
{
text: gettext('Add'),
reference: 'addButton',
handler: 'onAdd',
bind: {
- disabled: '{!master}'
- }
+ disabled: '{!master}',
+ },
},
{
text: gettext('Join'),
reference: 'joinButton',
handler: 'onJoin',
bind: {
- disabled: '{nodecount}'
- }
- }
+ disabled: '{nodecount}',
+ },
+ },
],
columns: [
{
header: gettext('Node'),
width: 150,
- dataIndex: 'name'
+ dataIndex: 'name',
},
{
header: gettext('Role'),
width: 100,
- dataIndex: 'type'
+ dataIndex: 'type',
},
{
header: gettext('ID'),
width: 80,
- dataIndex: 'cid'
+ dataIndex: 'cid',
},
{
header: gettext('IP'),
width: 150,
- dataIndex: 'ip'
+ dataIndex: 'ip',
},
{
header: gettext('State'),
renderer: function(value, metaData, record) {
var d = record.data;
var state = 'active';
- if (!d.insync) state = 'syncing';
+ if (!d.insync) {
+ state = 'syncing';
+ }
if (d.conn_error) {
metaData.tdCls = 'x-form-invalid-field';
- var html = '<p>' + Ext.htmlEncode(d.conn_error) + '</p>';
+ var html = '<p>' + Ext.htmlEncode(d.conn_error) + '</p>';
html = html.replace(/\n/g, '<br>');
metaData.tdAttr = 'data-qwidth=600 data-qtitle="ERROR" data-qtip="' +
- html.replace(/\"/g,'"') + '"';
+ html.replace(/"/g, '"') + '"';
state = 'error';
}
return state;
},
- dataIndex: 'insync'
+ dataIndex: 'insync',
},
{
header: gettext('Subscription'),
width: 120,
renderer: Proxmox.Utils.format_subscription_level,
- dataIndex: 'level'
+ dataIndex: 'level',
},
{
header: gettext('Uptime'),
width: 150,
renderer: Proxmox.Utils.render_uptime,
- dataIndex: 'uptime'
+ dataIndex: 'uptime',
},
{
header: gettext('Load average'),
renderer: function(value) {
- if (Ext.isArray(value)) {
- return value[0];
+ if (Ext.isDefined(value)) {
+ if (Ext.isArray(value)) {
+ return value[0];
+ }
+ return value.toString();
}
- return value;
+ return '';
},
- dataIndex: 'loadavg'
+ dataIndex: 'loadavg',
},
{
xtype: 'widgetcolumn',
widget: {
xtype: 'progressbarwidget',
- textTpl: '{value:percent}'
+ textTpl: '{value:percent}',
},
header: gettext('RAM usage'),
- dataIndex: 'memory_per'
+ dataIndex: 'memory_per',
},
{
xtype: 'widgetcolumn',
widget: {
xtype: 'progressbarwidget',
- textTpl: '{value:percent}'
+ textTpl: '{value:percent}',
},
header: gettext('HD space'),
- dataIndex: 'rootfs_per'
- }
- ]
- }
- ]
+ dataIndex: 'rootfs_per',
+ },
+ ],
+ },
+ ],
});