]> git.proxmox.com Git - proxmox-widget-toolkit.git/blame - src/node/ServiceView.js
panel/JournalView: fix flickering in journal livemode
[proxmox-widget-toolkit.git] / src / node / ServiceView.js
CommitLineData
d7139140
DM
1Ext.define('proxmox-services', {
2 extend: 'Ext.data.Model',
01031528
TL
3 fields: ['service', 'name', 'desc', 'state'],
4 idProperty: 'service',
d7139140
DM
5});
6
7Ext.define('Proxmox.node.ServiceView', {
8 extend: 'Ext.grid.GridPanel',
9
10 alias: ['widget.proxmoxNodeServiceView'],
11
12 startOnlyServices: {},
13
2815c428
TL
14 restartCommand: "restart", // TODO: default to reload once everywhere supported
15
01031528 16 initComponent: function() {
05a977a2 17 let me = this;
d7139140
DM
18
19 if (!me.nodename) {
20 throw "no node name specified";
21 }
22
05a977a2 23 let rstore = Ext.create('Proxmox.data.UpdateStore', {
d7139140 24 interval: 1000,
d7139140
DM
25 model: 'proxmox-services',
26 proxy: {
27 type: 'proxmox',
01031528
TL
28 url: "/api2/json/nodes/" + me.nodename + "/services",
29 },
d7139140
DM
30 });
31
05a977a2 32 let store = Ext.create('Proxmox.data.DiffStore', {
d7139140
DM
33 rstore: rstore,
34 sortAfterUpdate: true,
35 sorters: [
36 {
01031528
TL
37 property: 'name',
38 direction: 'ASC',
39 },
40 ],
d7139140
DM
41 });
42
05a977a2
TL
43 let view_service_log = function() {
44 let sm = me.getSelectionModel();
45 let rec = sm.getSelection()[0];
46 let win = Ext.create('Ext.window.Window', {
c47f5f46 47 title: gettext('Syslog') + ': ' + rec.data.service,
f21840aa 48 modal: true,
8093ded0
DC
49 width: 800,
50 height: 400,
51 layout: 'fit',
f21840aa
DM
52 items: {
53 xtype: 'proxmoxLogView',
f21840aa
DM
54 url: "/api2/extjs/nodes/" + me.nodename + "/syslog?service=" +
55 rec.data.service,
01031528
TL
56 log_select_timespan: 1,
57 },
f21840aa
DM
58 });
59 win.show();
60 };
61
05a977a2 62 let service_cmd = function(cmd) {
77ff40e4
TL
63 let rec = me.getSelectionModel().getSelection()[0];
64 let service = rec.data.service;
d7139140 65 Proxmox.Utils.API2Request({
77ff40e4 66 url: `/nodes/${me.nodename}/services/${service}/${cmd}`,
d7139140
DM
67 method: 'POST',
68 failure: function(response, opts) {
69 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
70 me.loading = true;
71 },
72 success: function(response, opts) {
73 rstore.startUpdate();
05a977a2 74 let upid = response.result.data;
d7139140 75
05a977a2 76 let win = Ext.create('Proxmox.window.TaskProgress', {
01031528 77 upid: upid,
d7139140
DM
78 });
79 win.show();
01031528 80 },
d7139140
DM
81 });
82 };
83
05a977a2 84 let start_btn = new Ext.Button({
d7139140
DM
85 text: gettext('Start'),
86 disabled: true,
01031528 87 handler: function() {
d7139140 88 service_cmd("start");
01031528 89 },
d7139140
DM
90 });
91
05a977a2 92 let stop_btn = new Ext.Button({
d7139140
DM
93 text: gettext('Stop'),
94 disabled: true,
01031528 95 handler: function() {
d7139140 96 service_cmd("stop");
01031528 97 },
d7139140
DM
98 });
99
05a977a2 100 let restart_btn = new Ext.Button({
d7139140
DM
101 text: gettext('Restart'),
102 disabled: true,
01031528 103 handler: function() {
2815c428 104 service_cmd(me.restartCommand || "restart");
01031528 105 },
d7139140
DM
106 });
107
05a977a2 108 let syslog_btn = new Ext.Button({
ecb07824
DM
109 text: gettext('Syslog'),
110 disabled: true,
01031528 111 handler: view_service_log,
ecb07824
DM
112 });
113
05a977a2
TL
114 let set_button_status = function() {
115 let sm = me.getSelectionModel();
116 let rec = sm.getSelection()[0];
d7139140
DM
117
118 if (!rec) {
119 start_btn.disable();
120 stop_btn.disable();
121 restart_btn.disable();
ecb07824 122 syslog_btn.disable();
d7139140
DM
123 return;
124 }
05a977a2
TL
125 let service = rec.data.service;
126 let state = rec.data.state;
d7139140 127
ecb07824
DM
128 syslog_btn.enable();
129
05a977a2
TL
130 if (state === 'running') {
131 start_btn.disable();
132 restart_btn.enable();
133 } else {
134 start_btn.enable();
135 restart_btn.disable();
136 }
137 if (!me.startOnlyServices[service]) {
138 if (state === 'running') {
d7139140
DM
139 stop_btn.enable();
140 } else {
d7139140
DM
141 stop_btn.disable();
142 }
05a977a2 143 }
d7139140
DM
144 };
145
146 me.mon(store, 'refresh', set_button_status);
147
148 Proxmox.Utils.monStoreErrors(me, rstore);
149
150 Ext.apply(me, {
151 store: store,
152 stateful: false,
01031528 153 tbar: [start_btn, stop_btn, restart_btn, syslog_btn],
d7139140
DM
154 columns: [
155 {
156 header: gettext('Name'),
ab29b73d 157 flex: 1,
d7139140 158 sortable: true,
01031528 159 dataIndex: 'name',
d7139140
DM
160 },
161 {
162 header: gettext('Status'),
163 width: 100,
164 sortable: true,
01031528 165 dataIndex: 'state',
d7139140
DM
166 },
167 {
168 header: gettext('Description'),
169 renderer: Ext.String.htmlEncode,
170 dataIndex: 'desc',
01031528
TL
171 flex: 2,
172 },
d7139140
DM
173 ],
174 listeners: {
175 selectionchange: set_button_status,
f21840aa 176 itemdblclick: view_service_log,
d7139140 177 activate: rstore.startUpdate,
01031528
TL
178 destroy: rstore.stopUpdate,
179 },
d7139140
DM
180 });
181
182 me.callParent();
01031528 183 },
d7139140 184});