]>
git.proxmox.com Git - proxmox-widget-toolkit.git/blob - src/window/TaskViewer.js
1 Ext
.define('Proxmox.window.TaskProgress', {
2 extend
: 'Ext.window.Window',
3 alias
: 'widget.proxmoxTaskProgress',
12 initComponent: function() {
16 throw "no task specified";
19 let task
= Proxmox
.Utils
.parse_task_upid(me
.upid
);
21 let statstore
= Ext
.create('Proxmox.data.ObjectStore', {
22 url
: `/api2/json/nodes/${task.node}/tasks/${encodeURIComponent(me.upid)}/status`,
25 status
: { defaultValue
: 'unknown' },
26 exitstatus
: { defaultValue
: 'unknown' },
30 me
.on('destroy', statstore
.stopUpdate
);
32 let getObjectValue = function(key
, defaultValue
) {
33 let rec
= statstore
.getById(key
);
35 return rec
.data
.value
;
40 let pbar
= Ext
.create('Ext.ProgressBar', { text
: 'running...' });
42 me
.mon(statstore
, 'load', function() {
43 let status
= getObjectValue('status');
44 if (status
=== 'stopped') {
45 let exitstatus
= getObjectValue('exitstatus');
46 if (exitstatus
=== 'OK') {
48 pbar
.updateText("Done!");
49 Ext
.Function
.defer(me
.close
, 1000, me
);
52 Ext
.Msg
.alert('Task failed', exitstatus
);
54 me
.taskDone(exitstatus
=== 'OK');
58 let descr
= Proxmox
.Utils
.format_task_description(task
.type
, task
.id
);
61 title
: gettext('Task') + ': ' + descr
,
65 text
: gettext('Details'),
67 Ext
.create('Proxmox.window.TaskViewer', {
69 taskDone
: me
.taskDone
,
80 statstore
.startUpdate();
86 // fixme: how can we avoid those lint errors?
88 Ext
.define('Proxmox.window.TaskViewer', {
89 extend
: 'Ext.window.Window',
90 alias
: 'widget.proxmoxTaskViewer',
92 extraTitle
: '', // string to prepend after the generic task title
94 taskDone
: Ext
.emptyFn
,
96 initComponent: function() {
100 throw "no task specified";
103 let task
= Proxmox
.Utils
.parse_task_upid(me
.upid
);
109 header
: gettext('Status'),
110 defaultValue
: 'unknown',
111 renderer: function(value
) {
112 if (value
!== 'stopped') {
115 let es
= statgrid
.getObjectValue('exitstatus');
117 return value
+ ': ' + es
;
126 header
: gettext('Task type'),
130 header
: gettext('User name'),
131 renderer: function(value
) {
133 let tokenid
= statgrid
.getObjectValue('tokenid');
135 user
+= `!${tokenid} (API Token)`;
137 return Ext
.String
.htmlEncode(user
);
142 header
: gettext('API Token'),
143 renderer
: Ext
.String
.htmlEncode
,
147 header
: gettext('Node'),
151 header
: gettext('Process ID'),
155 header
: gettext('Task ID'),
158 header
: gettext('Start Time'),
160 renderer
: Proxmox
.Utils
.render_timestamp
,
163 header
: gettext('Unique task ID'),
164 renderer
: Ext
.String
.htmlEncode
,
169 if (typeof me
.endtime
=== 'object') {
171 me
.endtime
= parseInt(me
.endtime
.getTime()/1000, 10);
174 header
: gettext('End Time'),
176 renderer: function() {
177 return Proxmox
.Utils
.render_timestamp(me
.endtime
);
183 header
: gettext('Duration'),
185 renderer: function() {
186 let starttime
= statgrid
.getObjectValue('starttime');
187 let endtime
= me
.endtime
|| Date
.now()/1000;
188 let duration
= endtime
- starttime
;
189 return Proxmox
.Utils
.format_duration_human(duration
);
193 let statstore
= Ext
.create('Proxmox.data.ObjectStore', {
194 url
: "/api2/json/nodes/" + task
.node
+ "/tasks/" + encodeURIComponent(me
.upid
) + "/status",
199 me
.on('destroy', statstore
.stopUpdate
);
201 let stop_task = function() {
202 Proxmox
.Utils
.API2Request({
203 url
: "/nodes/" + task
.node
+ "/tasks/" + encodeURIComponent(me
.upid
),
206 failure: function(response
, opts
) {
207 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
212 let stop_btn1
= new Ext
.Button({
213 text
: gettext('Stop'),
218 let stop_btn2
= new Ext
.Button({
219 text
: gettext('Stop'),
224 statgrid
= Ext
.create('Proxmox.grid.ObjectGrid', {
225 title
: gettext('Status'),
233 let logView
= Ext
.create('Proxmox.panel.LogView', {
234 title
: gettext('Output'),
237 url
: "/api2/extjs/nodes/" + task
.node
+ "/tasks/" + encodeURIComponent(me
.upid
) + "/log",
240 me
.mon(statstore
, 'load', function() {
241 let status
= statgrid
.getObjectValue('status');
243 if (status
=== 'stopped') {
244 logView
.scrollToEnd
= false;
245 logView
.requestUpdate();
246 statstore
.stopUpdate();
247 me
.taskDone(statgrid
.getObjectValue('exitstatus') === 'OK');
250 stop_btn1
.setDisabled(status
!== 'running');
251 stop_btn2
.setDisabled(status
!== 'running');
254 statstore
.startUpdate();
257 title
: "Task viewer: " + task
.desc
+ me
.extraTitle
,
265 items
: [logView
, statgrid
],
271 logView
.fireEvent('show', logView
);