]>
git.proxmox.com Git - proxmox-widget-toolkit.git/blob - src/node/ServiceView.js
1 Ext
.define('proxmox-services', {
2 extend
: 'Ext.data.Model',
3 fields
: ['service', 'name', 'desc', 'state', 'unit-state', 'active-state'],
7 Ext
.define('Proxmox.node.ServiceView', {
8 extend
: 'Ext.grid.GridPanel',
10 alias
: ['widget.proxmoxNodeServiceView'],
12 startOnlyServices
: {},
14 restartCommand
: "restart", // TODO: default to reload once everywhere supported
16 initComponent: function() {
20 throw "no node name specified";
23 let rstore
= Ext
.create('Proxmox.data.UpdateStore', {
25 model
: 'proxmox-services',
28 url
: `/api2/json/nodes/${me.nodename}/services`,
32 let store
= Ext
.create('Proxmox.data.DiffStore', {
34 sortAfterUpdate
: true,
43 let view_service_log = function() {
44 let { data
: { service
} } = me
.getSelectionModel().getSelection()[0];
45 Ext
.create('Ext.window.Window', {
46 title
: gettext('Syslog') + ': ' + service
,
52 xtype
: 'proxmoxLogView',
53 url
: `/api2/extjs/nodes/${me.nodename}/syslog?service=${service}`,
54 log_select_timespan
: 1,
60 let service_cmd = function(cmd
) {
61 let { data
: { service
} } = me
.getSelectionModel().getSelection()[0];
62 Proxmox
.Utils
.API2Request({
63 url
: `/nodes/${me.nodename}/services/${service}/${cmd}`,
65 failure: function(response
, opts
) {
66 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
69 success: function(response
, opts
) {
71 Ext
.create('Proxmox.window.TaskProgress', {
72 upid
: response
.result
.data
,
79 let start_btn
= new Ext
.Button({
80 text
: gettext('Start'),
82 handler
: () => service_cmd("start"),
84 let stop_btn
= new Ext
.Button({
85 text
: gettext('Stop'),
87 handler
: () => service_cmd("stop"),
89 let restart_btn
= new Ext
.Button({
90 text
: gettext('Restart'),
92 handler
: () => service_cmd(me
.restartCommand
|| "restart"),
94 let syslog_btn
= new Ext
.Button({
95 text
: gettext('Syslog'),
97 handler
: view_service_log
,
100 let set_button_status = function() {
101 let sm
= me
.getSelectionModel();
102 let rec
= sm
.getSelection()[0];
107 restart_btn
.disable();
108 syslog_btn
.disable();
111 let service
= rec
.data
.service
;
112 let state
= rec
.data
.state
;
113 let unit
= rec
.data
['unit-state'];
117 if (state
=== 'running') {
118 if (me
.startOnlyServices
[service
]) {
120 restart_btn
.enable();
123 restart_btn
.enable();
126 } else if (unit
!== undefined && (unit
=== 'masked' || unit
=== 'unknown' || unit
=== 'not-found')) {
128 restart_btn
.disable();
133 restart_btn
.disable();
137 me
.mon(store
, 'refresh', set_button_status
);
139 Proxmox
.Utils
.monStoreErrors(me
, rstore
);
144 stripeRows
: false, // does not work with getRowClass()
145 getRowClass: function(record
, index
) {
146 let unitState
= record
.get('unit-state');
150 if (unitState
=== 'masked' || unitState
=== 'not-found') {
151 return "proxmox-disabled-row";
152 } else if (unitState
=== 'unknown') {
153 if (record
.get('name') === 'syslog') {
154 return "proxmox-disabled-row"; // replaced by journal on most hosts
156 return "proxmox-warning-row";
172 header
: gettext('Name'),
178 header
: gettext('Status'),
182 renderer
: (value
, meta
, rec
) => {
183 const unitState
= rec
.get('unit-state');
184 if (unitState
=== 'masked') {
185 return gettext('disabled');
186 } else if (unitState
=== 'not-found') {
187 return gettext('not installed');
194 header
: gettext('Active'),
198 dataIndex
: 'active-state',
201 header
: gettext('Unit'),
204 hidden
: Proxmox
?.Setup
?.auth_cookie_name
!== 'PVEAuthCookie', // FIXME currently only PVE supports it
205 dataIndex
: 'unit-state',
208 header
: gettext('Description'),
209 renderer
: Ext
.String
.htmlEncode
,
215 selectionchange
: set_button_status
,
216 itemdblclick
: view_service_log
,
217 activate
: rstore
.startUpdate
,
218 destroy
: rstore
.stopUpdate
,