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