pve-manager/www/manager/dc/Summary.js
2012-03-26 10:39:10 +02:00

271 lines
5.3 KiB
JavaScript

Ext.define('PVE.dc.NodeView', {
extend: 'Ext.grid.GridPanel',
alias: ['widget.pveDcNodeView'],
initComponent : function() {
var me = this;
var rstore = Ext.create('PVE.data.UpdateStore', {
interval: 3000,
storeid: 'pve-dc-nodes',
model: 'pve-dc-nodes',
proxy: {
type: 'pve',
url: "/api2/json/cluster/status"
},
filters: {
property: 'type',
value : 'node'
}
});
var store = Ext.create('PVE.data.DiffStore', { rstore: rstore });
Ext.apply(me, {
store: store,
stateful: false,
columns: [
{
header: gettext('Name'),
width: 200,
sortable: true,
dataIndex: 'name'
},
{
header: 'ID',
width: 50,
sortable: true,
dataIndex: 'nodeid'
},
{
header: gettext('Online'),
width: 100,
sortable: true,
dataIndex: 'state',
renderer: PVE.Utils.format_boolean
},
{
header: gettext('Support'),
width: 100,
sortable: true,
dataIndex: 'level',
renderer: PVE.Utils.render_support_level
},
{
header: gettext('Estranged'),
width: 100,
sortable: true,
dataIndex: 'estranged',
renderer: PVE.Utils.format_boolean
},
{
header: gettext('Server Address'),
width: 100,
sortable: true,
dataIndex: 'ip'
},
{
header: gettext('Services'),
flex: 1,
width: 80,
sortable: true,
dataIndex: 'pmxcfs',
renderer: function(value, metaData, record) {
var list = [];
var data = record.data;
if (data) {
if (data.pmxcfs) {
list.push('PVECluster');
}
if (data.rgmanager) {
list.push('RGManager');
}
}
return list.join(', ');
}
}
],
listeners: {
show: rstore.startUpdate,
hide: rstore.stopUpdate,
destroy: rstore.stopUpdate
}
});
me.callParent();
}
}, function() {
Ext.define('pve-dc-nodes', {
extend: 'Ext.data.Model',
fields: [ 'id', 'type', 'name', 'state', 'nodeid', 'ip',
'pmxcfs', 'rgmanager', 'estranged', 'level' ],
idProperty: 'id'
});
});
Ext.define('PVE.dc.HAServiceView', {
extend: 'Ext.grid.GridPanel',
alias: ['widget.pveHaServiceView'],
initComponent : function() {
var me = this;
var rstore = Ext.create('PVE.data.UpdateStore', {
interval: 3000,
storeid: 'pve-ha-services',
model: 'pve-ha-services',
proxy: {
type: 'pve',
url: "/api2/json/cluster/status"
},
filters: {
property: 'type',
value : 'group'
}
});
var store = Ext.create('PVE.data.DiffStore', { rstore: rstore });
var noClusterText = gettext("Standalone node - no cluster defined");
var status = Ext.create('Ext.Component', {
padding: 2,
html: ' ',
dock: 'bottom'
});
Ext.apply(me, {
store: store,
stateful: false,
//tbar: [ 'start', 'stop' ],
bbar: [ status ],
columns: [
{
header: gettext('Name'),
flex: 1,
sortable: true,
dataIndex: 'name'
},
{
header: gettext('Owner'),
flex: 1,
sortable: true,
dataIndex: 'owner'
},
{
header: gettext('Status'),
width: 80,
sortable: true,
dataIndex: 'state_str'
},
{
header: gettext('Restarts'),
width: 80,
sortable: true,
dataIndex: 'restarts'
},
{
header: gettext('Last transition'),
width: 200,
sortable: true,
dataIndex: 'last_transition'
},
{
header: gettext('Last owner'),
flex: 1,
sortable: true,
dataIndex: 'last_owner'
}
],
listeners: {
show: rstore.startUpdate,
hide: rstore.stopUpdate,
destroy: rstore.stopUpdate
}
});
me.callParent();
rstore.on('load', function(s, records, success) {
if (!success) {
return;
}
var cluster_rec = rstore.getById('cluster');
var quorum_rec = rstore.getById('quorum');
if (!(cluster_rec && quorum_rec)) {
status.update(noClusterText);
return;
}
var cluster_raw = cluster_rec.raw;
var quorum_raw = quorum_rec.raw;
if (!(cluster_raw && quorum_raw)) {
status.update(noClusterText);
return;
}
status.update("Quorate: " + PVE.Utils.format_boolean(quorum_raw.quorate));
});
}
}, function() {
Ext.define('pve-ha-services', {
extend: 'Ext.data.Model',
fields: [ 'id', 'type', 'name', 'owner', 'last_owner', 'state_str', 'restarts',
{ name: 'last_transition', type: 'date', dateFormat: 'timestamp'}
],
idProperty: 'id'
});
});
Ext.define('PVE.dc.Summary', {
extend: 'Ext.panel.Panel',
alias: ['widget.pveDcSummary'],
initComponent: function() {
var me = this;
var hagrid = Ext.create('PVE.dc.HAServiceView', {
title: gettext('HA Service Status'),
region: 'south',
border: false,
split: true,
flex: 1
});
var nodegrid = Ext.create('PVE.dc.NodeView', {
title: gettext('Nodes'),
border: false,
region: 'center',
flex: 3
});
Ext.apply(me, {
layout: 'border',
items: [ nodegrid, hagrid ],
listeners: {
show: function() {
hagrid.fireEvent('show', hagrid);
nodegrid.fireEvent('show', hagrid);
},
hide: function() {
hagrid.fireEvent('hide', hagrid);
nodegrid.fireEvent('hide', hagrid);
}
}
});
me.callParent();
}
});