extend: 'Ext.window.Window',
alias: 'widget.proxmoxTaskProgress',
+ taskDone: Ext.emptyFn,
+
initComponent: function() {
- var me = this;
+ let me = this;
if (!me.upid) {
throw "no task specified";
}
- var task = Proxmox.Utils.parse_task_upid(me.upid);
+ let task = Proxmox.Utils.parse_task_upid(me.upid);
- var statstore = Ext.create('Proxmox.data.ObjectStore', {
+ let statstore = Ext.create('Proxmox.data.ObjectStore', {
url: "/api2/json/nodes/" + task.node + "/tasks/" + me.upid + "/status",
interval: 1000,
rows: {
status: { defaultValue: 'unknown' },
- exitstatus: { defaultValue: 'unknown' }
- }
+ exitstatus: { defaultValue: 'unknown' },
+ },
});
- me.on('destroy', statstore.stopUpdate);
+ me.on('destroy', statstore.stopUpdate);
- var getObjectValue = function(key, defaultValue) {
- var rec = statstore.getById(key);
+ let getObjectValue = function(key, defaultValue) {
+ let rec = statstore.getById(key);
if (rec) {
return rec.data.value;
}
return defaultValue;
};
- var pbar = Ext.create('Ext.ProgressBar', { text: 'running...' });
+ let pbar = Ext.create('Ext.ProgressBar', { text: 'running...' });
me.mon(statstore, 'load', function() {
- var status = getObjectValue('status');
+ let status = getObjectValue('status');
if (status === 'stopped') {
- var exitstatus = getObjectValue('exitstatus');
- if (exitstatus == 'OK') {
+ let exitstatus = getObjectValue('exitstatus');
+ if (exitstatus === 'OK') {
pbar.reset();
pbar.updateText("Done!");
Ext.Function.defer(me.close, 1000, me);
me.close();
Ext.Msg.alert('Task failed', exitstatus);
}
+ me.taskDone(exitstatus === 'OK');
}
});
- var descr = Proxmox.Utils.format_task_description(task.type, task.id);
+ let descr = Proxmox.Utils.format_task_description(task.type, task.id);
Ext.apply(me, {
title: gettext('Task') + ': ' + descr,
bodyPadding: 5,
items: pbar,
buttons: [
- {
+ {
text: gettext('Details'),
- handler: function() {
- var win = Ext.create('Proxmox.window.TaskViewer', {
- upid: me.upid
+ handler: function() {
+ let win = Ext.create('Proxmox.window.TaskViewer', {
+ taskDone: me.taskDone,
+ upid: me.upid,
});
win.show();
me.close();
- }
- }
- ]
+ },
+ },
+ ],
});
me.callParent();
statstore.startUpdate();
pbar.wait();
- }
+ },
});
// fixme: how can we avoid those lint errors?
-/*jslint confusion: true */
Ext.define('Proxmox.window.TaskViewer', {
extend: 'Ext.window.Window',
alias: 'widget.proxmoxTaskViewer',
+ extraTitle: '', // string to prepend after the generic task title
+
+ taskDone: Ext.emptyFn,
+
initComponent: function() {
- var me = this;
+ let me = this;
if (!me.upid) {
throw "no task specified";
}
- var task = Proxmox.Utils.parse_task_upid(me.upid);
+ let task = Proxmox.Utils.parse_task_upid(me.upid);
- var statgrid;
+ let statgrid;
- var rows = {
+ let rows = {
status: {
header: gettext('Status'),
defaultValue: 'unknown',
renderer: function(value) {
- if (value != 'stopped') {
+ if (value !== 'stopped') {
return value;
}
- var es = statgrid.getObjectValue('exitstatus');
+ let es = statgrid.getObjectValue('exitstatus');
if (es) {
return value + ': ' + es;
}
- }
+ return 'unknown';
+ },
},
- exitstatus: {
- visible: false
+ exitstatus: {
+ visible: false,
},
type: {
header: gettext('Task type'),
- required: true
+ required: true,
},
user: {
header: gettext('User name'),
- required: true
+ renderer: Ext.String.htmlEncode,
+ required: true,
},
node: {
header: gettext('Node'),
- required: true
+ required: true,
},
pid: {
header: gettext('Process ID'),
- required: true
+ required: true,
+ },
+ task_id: {
+ header: gettext('Task ID'),
},
starttime: {
header: gettext('Start Time'),
- required: true,
- renderer: Proxmox.Utils.render_timestamp
+ required: true,
+ renderer: Proxmox.Utils.render_timestamp,
},
upid: {
- header: gettext('Unique task ID')
- }
+ header: gettext('Unique task ID'),
+ renderer: Ext.String.htmlEncode,
+ },
};
- var statstore = Ext.create('Proxmox.data.ObjectStore', {
+ let statstore = Ext.create('Proxmox.data.ObjectStore', {
url: "/api2/json/nodes/" + task.node + "/tasks/" + me.upid + "/status",
interval: 1000,
- rows: rows
+ rows: rows,
});
- me.on('destroy', statstore.stopUpdate);
+ me.on('destroy', statstore.stopUpdate);
- var stop_task = function() {
+ let stop_task = function() {
Proxmox.Utils.API2Request({
url: "/nodes/" + task.node + "/tasks/" + me.upid,
waitMsgTarget: me,
method: 'DELETE',
failure: function(response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
- }
+ },
});
};
- var stop_btn1 = new Ext.Button({
+ let stop_btn1 = new Ext.Button({
text: gettext('Stop'),
disabled: true,
- handler: stop_task
+ handler: stop_task,
});
- var stop_btn2 = new Ext.Button({
+ let stop_btn2 = new Ext.Button({
text: gettext('Stop'),
disabled: true,
- handler: stop_task
+ handler: stop_task,
});
statgrid = Ext.create('Proxmox.grid.ObjectGrid', {
title: gettext('Status'),
layout: 'fit',
- tbar: [ stop_btn1 ],
+ tbar: [stop_btn1],
rstore: statstore,
rows: rows,
- border: false
+ border: false,
});
- var logView = Ext.create('Proxmox.panel.LogView', {
+ let logView = Ext.create('Proxmox.panel.LogView', {
title: gettext('Output'),
- tbar: [ stop_btn2 ],
+ tbar: [stop_btn2],
border: false,
- url: "/api2/extjs/nodes/" + task.node + "/tasks/" + me.upid + "/log"
+ url: "/api2/extjs/nodes/" + task.node + "/tasks/" + me.upid + "/log",
});
me.mon(statstore, 'load', function() {
- var status = statgrid.getObjectValue('status');
-
+ let status = statgrid.getObjectValue('status');
+
if (status === 'stopped') {
- logView.requestUpdate(undefined, true);
logView.scrollToEnd = false;
+ logView.requestUpdate();
statstore.stopUpdate();
+ me.taskDone(statgrid.getObjectValue('exitstatus') === 'OK');
}
stop_btn1.setDisabled(status !== 'running');
statstore.startUpdate();
Ext.apply(me, {
- title: "Task viewer: " + task.desc,
+ title: "Task viewer: " + task.desc + me.extraTitle,
width: 800,
height: 400,
layout: 'fit',
items: [{
xtype: 'tabpanel',
region: 'center',
- items: [ logView, statgrid ]
- }]
+ items: [logView, statgrid],
+ }],
});
me.callParent();
logView.fireEvent('show', logView);
- }
+ },
});