proxmox-widget-toolkit/node/ServiceView.js
2018-01-11 14:48:13 +01:00

189 lines
4.0 KiB
JavaScript

Ext.define('proxmox-services', {
extend: 'Ext.data.Model',
fields: [ 'service', 'name', 'desc', 'state' ],
idProperty: 'service'
});
Ext.define('Proxmox.node.ServiceView', {
extend: 'Ext.grid.GridPanel',
alias: ['widget.proxmoxNodeServiceView'],
startOnlyServices: {},
initComponent : function() {
var me = this;
if (!me.nodename) {
throw "no node name specified";
}
var rstore = Ext.create('Proxmox.data.UpdateStore', {
interval: 1000,
storeid: 'proxmox-services' + me.nodename,
model: 'proxmox-services',
proxy: {
type: 'proxmox',
url: "/api2/json/nodes/" + me.nodename + "/services"
}
});
var store = Ext.create('Proxmox.data.DiffStore', {
rstore: rstore,
sortAfterUpdate: true,
sorters: [
{
property : 'name',
direction: 'ASC'
}
]
});
var view_service_log = function() {
var sm = me.getSelectionModel();
var rec = sm.getSelection()[0];
var win = Ext.create('Ext.window.Window', {
title: gettext('Syslog') + ': ' + rec.data.service,
modal: true,
items: {
xtype: 'proxmoxLogView',
width: 800,
height: 400,
url: "/api2/extjs/nodes/" + me.nodename + "/syslog?service=" +
rec.data.service,
log_select_timespan: 1
}
});
win.show();
};
var service_cmd = function(cmd) {
var sm = me.getSelectionModel();
var rec = sm.getSelection()[0];
Proxmox.Utils.API2Request({
url: "/nodes/" + me.nodename + "/services/" + rec.data.service + "/" + cmd,
method: 'POST',
failure: function(response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
me.loading = true;
},
success: function(response, opts) {
rstore.startUpdate();
var upid = response.result.data;
var win = Ext.create('Proxmox.window.TaskProgress', {
upid: upid
});
win.show();
}
});
};
var start_btn = new Ext.Button({
text: gettext('Start'),
disabled: true,
handler: function(){
service_cmd("start");
}
});
var stop_btn = new Ext.Button({
text: gettext('Stop'),
disabled: true,
handler: function(){
service_cmd("stop");
}
});
var restart_btn = new Ext.Button({
text: gettext('Restart'),
disabled: true,
handler: function(){
service_cmd("restart");
}
});
var syslog_btn = new Ext.Button({
text: gettext('Syslog'),
disabled: true,
handler: view_service_log
});
var set_button_status = function() {
var sm = me.getSelectionModel();
var rec = sm.getSelection()[0];
if (!rec) {
start_btn.disable();
stop_btn.disable();
restart_btn.disable();
syslog_btn.disable();
return;
}
var service = rec.data.service;
var state = rec.data.state;
syslog_btn.enable();
if (me.startOnlyServices[service]) {
if (state == 'running') {
start_btn.disable();
restart_btn.enable();
} else {
start_btn.enable();
restart_btn.disable();
}
stop_btn.disable();
} else {
if (state == 'running') {
start_btn.disable();
restart_btn.enable();
stop_btn.enable();
} else {
start_btn.enable();
restart_btn.disable();
stop_btn.disable();
}
}
};
me.mon(store, 'refresh', set_button_status);
Proxmox.Utils.monStoreErrors(me, rstore);
Ext.apply(me, {
store: store,
stateful: false,
tbar: [ start_btn, stop_btn, restart_btn, syslog_btn ],
columns: [
{
header: gettext('Name'),
flex: 1,
sortable: true,
dataIndex: 'name'
},
{
header: gettext('Status'),
width: 100,
sortable: true,
dataIndex: 'state'
},
{
header: gettext('Description'),
renderer: Ext.String.htmlEncode,
dataIndex: 'desc',
flex: 2
}
],
listeners: {
selectionchange: set_button_status,
itemdblclick: view_service_log,
activate: rstore.startUpdate,
destroy: rstore.stopUpdate
}
});
me.callParent();
}
});