]> git.proxmox.com Git - proxmox-widget-toolkit.git/blame - window/TaskViewer.js
use eslint and execute as check target
[proxmox-widget-toolkit.git] / window / TaskViewer.js
CommitLineData
06694509
DM
1Ext.define('Proxmox.window.TaskProgress', {
2 extend: 'Ext.window.Window',
3 alias: 'widget.proxmoxTaskProgress',
4
fde8e8bb
TL
5 taskDone: Ext.emptyFn,
6
06694509 7 initComponent: function() {
05a977a2 8 let me = this;
06694509
DM
9
10 if (!me.upid) {
11 throw "no task specified";
12 }
13
05a977a2 14 let task = Proxmox.Utils.parse_task_upid(me.upid);
06694509 15
05a977a2 16 let statstore = Ext.create('Proxmox.data.ObjectStore', {
06694509
DM
17 url: "/api2/json/nodes/" + task.node + "/tasks/" + me.upid + "/status",
18 interval: 1000,
19 rows: {
20 status: { defaultValue: 'unknown' },
01031528
TL
21 exitstatus: { defaultValue: 'unknown' },
22 },
06694509
DM
23 });
24
13fc756d 25 me.on('destroy', statstore.stopUpdate);
06694509 26
05a977a2
TL
27 let getObjectValue = function(key, defaultValue) {
28 let rec = statstore.getById(key);
06694509
DM
29 if (rec) {
30 return rec.data.value;
31 }
32 return defaultValue;
33 };
34
05a977a2 35 let pbar = Ext.create('Ext.ProgressBar', { text: 'running...' });
06694509
DM
36
37 me.mon(statstore, 'load', function() {
05a977a2 38 let status = getObjectValue('status');
06694509 39 if (status === 'stopped') {
05a977a2
TL
40 let exitstatus = getObjectValue('exitstatus');
41 if (exitstatus === 'OK') {
06694509
DM
42 pbar.reset();
43 pbar.updateText("Done!");
44 Ext.Function.defer(me.close, 1000, me);
45 } else {
46 me.close();
47 Ext.Msg.alert('Task failed', exitstatus);
48 }
05a977a2 49 me.taskDone(exitstatus === 'OK');
06694509
DM
50 }
51 });
52
05a977a2 53 let descr = Proxmox.Utils.format_task_description(task.type, task.id);
06694509
DM
54
55 Ext.apply(me, {
d7139140 56 title: gettext('Task') + ': ' + descr,
06694509
DM
57 width: 300,
58 layout: 'auto',
59 modal: true,
60 bodyPadding: 5,
61 items: pbar,
62 buttons: [
13fc756d 63 {
06694509 64 text: gettext('Details'),
13fc756d 65 handler: function() {
05a977a2 66 let win = Ext.create('Proxmox.window.TaskViewer', {
fde8e8bb 67 taskDone: me.taskDone,
01031528 68 upid: me.upid,
06694509
DM
69 });
70 win.show();
71 me.close();
01031528
TL
72 },
73 },
74 ],
06694509
DM
75 });
76
77 me.callParent();
78
79 statstore.startUpdate();
80
81 pbar.wait();
01031528 82 },
06694509
DM
83});
84
85// fixme: how can we avoid those lint errors?
06694509
DM
86
87Ext.define('Proxmox.window.TaskViewer', {
88 extend: 'Ext.window.Window',
89 alias: 'widget.proxmoxTaskViewer',
90
641df09e
TL
91 extraTitle: '', // string to prepend after the generic task title
92
fde8e8bb
TL
93 taskDone: Ext.emptyFn,
94
06694509 95 initComponent: function() {
05a977a2 96 let me = this;
06694509
DM
97
98 if (!me.upid) {
99 throw "no task specified";
100 }
101
05a977a2 102 let task = Proxmox.Utils.parse_task_upid(me.upid);
06694509 103
05a977a2 104 let statgrid;
06694509 105
05a977a2 106 let rows = {
06694509
DM
107 status: {
108 header: gettext('Status'),
109 defaultValue: 'unknown',
110 renderer: function(value) {
05a977a2 111 if (value !== 'stopped') {
06694509
DM
112 return value;
113 }
05a977a2 114 let es = statgrid.getObjectValue('exitstatus');
06694509
DM
115 if (es) {
116 return value + ': ' + es;
117 }
05a977a2 118 return 'unknown';
01031528 119 },
06694509 120 },
13fc756d 121 exitstatus: {
01031528 122 visible: false,
06694509
DM
123 },
124 type: {
125 header: gettext('Task type'),
01031528 126 required: true,
06694509
DM
127 },
128 user: {
129 header: gettext('User name'),
92d1c20d 130 renderer: Ext.String.htmlEncode,
01031528 131 required: true,
06694509
DM
132 },
133 node: {
134 header: gettext('Node'),
01031528 135 required: true,
06694509
DM
136 },
137 pid: {
138 header: gettext('Process ID'),
01031528 139 required: true,
06694509 140 },
21efafeb
TL
141 task_id: {
142 header: gettext('Task ID'),
143 },
06694509
DM
144 starttime: {
145 header: gettext('Start Time'),
13fc756d 146 required: true,
01031528 147 renderer: Proxmox.Utils.render_timestamp,
06694509
DM
148 },
149 upid: {
92d1c20d
DC
150 header: gettext('Unique task ID'),
151 renderer: Ext.String.htmlEncode,
01031528 152 },
06694509
DM
153 };
154
05a977a2 155 let statstore = Ext.create('Proxmox.data.ObjectStore', {
06694509
DM
156 url: "/api2/json/nodes/" + task.node + "/tasks/" + me.upid + "/status",
157 interval: 1000,
01031528 158 rows: rows,
06694509
DM
159 });
160
13fc756d 161 me.on('destroy', statstore.stopUpdate);
06694509 162
05a977a2 163 let stop_task = function() {
06694509
DM
164 Proxmox.Utils.API2Request({
165 url: "/nodes/" + task.node + "/tasks/" + me.upid,
166 waitMsgTarget: me,
167 method: 'DELETE',
168 failure: function(response, opts) {
169 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
01031528 170 },
06694509
DM
171 });
172 };
173
05a977a2 174 let stop_btn1 = new Ext.Button({
06694509
DM
175 text: gettext('Stop'),
176 disabled: true,
01031528 177 handler: stop_task,
06694509
DM
178 });
179
05a977a2 180 let stop_btn2 = new Ext.Button({
06694509
DM
181 text: gettext('Stop'),
182 disabled: true,
01031528 183 handler: stop_task,
06694509
DM
184 });
185
186 statgrid = Ext.create('Proxmox.grid.ObjectGrid', {
187 title: gettext('Status'),
188 layout: 'fit',
01031528 189 tbar: [stop_btn1],
06694509
DM
190 rstore: statstore,
191 rows: rows,
01031528 192 border: false,
06694509
DM
193 });
194
05a977a2 195 let logView = Ext.create('Proxmox.panel.LogView', {
06694509 196 title: gettext('Output'),
01031528 197 tbar: [stop_btn2],
06694509 198 border: false,
01031528 199 url: "/api2/extjs/nodes/" + task.node + "/tasks/" + me.upid + "/log",
06694509
DM
200 });
201
202 me.mon(statstore, 'load', function() {
05a977a2 203 let status = statgrid.getObjectValue('status');
13fc756d 204
06694509 205 if (status === 'stopped') {
06694509 206 logView.scrollToEnd = false;
65bb3b67 207 logView.requestUpdate();
06694509 208 statstore.stopUpdate();
05a977a2 209 me.taskDone(statgrid.getObjectValue('exitstatus') === 'OK');
06694509
DM
210 }
211
212 stop_btn1.setDisabled(status !== 'running');
213 stop_btn2.setDisabled(status !== 'running');
214 });
215
216 statstore.startUpdate();
217
218 Ext.apply(me, {
641df09e 219 title: "Task viewer: " + task.desc + me.extraTitle,
06694509
DM
220 width: 800,
221 height: 400,
222 layout: 'fit',
223 modal: true,
224 items: [{
225 xtype: 'tabpanel',
226 region: 'center',
01031528
TL
227 items: [logView, statgrid],
228 }],
06694509
DM
229 });
230
231 me.callParent();
232
233 logView.fireEvent('show', logView);
01031528 234 },
06694509
DM
235});
236