]>
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',
7 initComponent: function() {
11 throw "no task specified";
14 let task
= Proxmox
.Utils
.parse_task_upid(me
.upid
);
16 let statstore
= Ext
.create('Proxmox.data.ObjectStore', {
17 url
: "/api2/json/nodes/" + task
.node
+ "/tasks/" + me
.upid
+ "/status",
20 status
: { defaultValue
: 'unknown' },
21 exitstatus
: { defaultValue
: 'unknown' },
25 me
.on('destroy', statstore
.stopUpdate
);
27 let getObjectValue = function(key
, defaultValue
) {
28 let rec
= statstore
.getById(key
);
30 return rec
.data
.value
;
35 let pbar
= Ext
.create('Ext.ProgressBar', { text
: 'running...' });
37 me
.mon(statstore
, 'load', function() {
38 let status
= getObjectValue('status');
39 if (status
=== 'stopped') {
40 let exitstatus
= getObjectValue('exitstatus');
41 if (exitstatus
=== 'OK') {
43 pbar
.updateText("Done!");
44 Ext
.Function
.defer(me
.close
, 1000, me
);
47 Ext
.Msg
.alert('Task failed', exitstatus
);
49 me
.taskDone(exitstatus
=== 'OK');
53 let descr
= Proxmox
.Utils
.format_task_description(task
.type
, task
.id
);
56 title
: gettext('Task') + ': ' + descr
,
64 text
: gettext('Details'),
66 let win
= Ext
.create('Proxmox.window.TaskViewer', {
67 taskDone
: me
.taskDone
,
79 statstore
.startUpdate();
85 // fixme: how can we avoid those lint errors?
87 Ext
.define('Proxmox.window.TaskViewer', {
88 extend
: 'Ext.window.Window',
89 alias
: 'widget.proxmoxTaskViewer',
91 extraTitle
: '', // string to prepend after the generic task title
93 taskDone
: Ext
.emptyFn
,
95 initComponent: function() {
99 throw "no task specified";
102 let task
= Proxmox
.Utils
.parse_task_upid(me
.upid
);
108 header
: gettext('Status'),
109 defaultValue
: 'unknown',
110 renderer: function(value
) {
111 if (value
!== 'stopped') {
114 let es
= statgrid
.getObjectValue('exitstatus');
116 return value
+ ': ' + es
;
125 header
: gettext('Task type'),
129 header
: gettext('User name'),
130 renderer: function(value
) {
132 let tokenid
= statgrid
.getObjectValue('tokenid');
134 user
+= `!${tokenid} (API Token)`;
136 return Ext
.String
.htmlEncode(user
);
141 header
: gettext('API Token'),
142 renderer
: Ext
.String
.htmlEncode
,
146 header
: gettext('Node'),
150 header
: gettext('Process ID'),
154 header
: gettext('Task ID'),
157 header
: gettext('Start Time'),
159 renderer
: Proxmox
.Utils
.render_timestamp
,
162 header
: gettext('Unique task ID'),
163 renderer
: Ext
.String
.htmlEncode
,
168 if (typeof me
.endtime
=== 'object') {
170 me
.endtime
= parseInt(me
.endtime
.getTime()/1000, 10);
173 header
: gettext('End Time'),
175 renderer: function() {
176 return Proxmox
.Utils
.render_timestamp(me
.endtime
);
182 header
: gettext('Duration'),
184 renderer: function() {
185 let starttime
= statgrid
.getObjectValue('starttime');
186 let endtime
= me
.endtime
|| Date
.now()/1000;
187 let duration
= endtime
- starttime
;
188 return Proxmox
.Utils
.format_duration_human(duration
);
192 let statstore
= Ext
.create('Proxmox.data.ObjectStore', {
193 url
: "/api2/json/nodes/" + task
.node
+ "/tasks/" + me
.upid
+ "/status",
198 me
.on('destroy', statstore
.stopUpdate
);
200 let stop_task = function() {
201 Proxmox
.Utils
.API2Request({
202 url
: "/nodes/" + task
.node
+ "/tasks/" + me
.upid
,
205 failure: function(response
, opts
) {
206 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
211 let stop_btn1
= new Ext
.Button({
212 text
: gettext('Stop'),
217 let stop_btn2
= new Ext
.Button({
218 text
: gettext('Stop'),
223 statgrid
= Ext
.create('Proxmox.grid.ObjectGrid', {
224 title
: gettext('Status'),
232 let logView
= Ext
.create('Proxmox.panel.LogView', {
233 title
: gettext('Output'),
236 url
: "/api2/extjs/nodes/" + task
.node
+ "/tasks/" + me
.upid
+ "/log",
239 me
.mon(statstore
, 'load', function() {
240 let status
= statgrid
.getObjectValue('status');
242 if (status
=== 'stopped') {
243 logView
.scrollToEnd
= false;
244 logView
.requestUpdate();
245 statstore
.stopUpdate();
246 me
.taskDone(statgrid
.getObjectValue('exitstatus') === 'OK');
249 stop_btn1
.setDisabled(status
!== 'running');
250 stop_btn2
.setDisabled(status
!== 'running');
253 statstore
.startUpdate();
256 title
: "Task viewer: " + task
.desc
+ me
.extraTitle
,
264 items
: [logView
, statgrid
],
270 logView
.fireEvent('show', logView
);