use TaskViewer & TaskProgress window from widget toolkit

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Reviewed-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
Thomas Lamprecht 2017-12-06 18:30:16 +01:00 committed by Dominik Csapak
parent 9fccc702ec
commit 8cbc11a70c
19 changed files with 20 additions and 244 deletions

View File

@ -75,7 +75,6 @@ JSSRC= \
panel/GaugeWidget.js \
panel/HealthWidget.js \
window/LoginWindow.js \
window/TaskViewer.js \
window/Wizard.js \
window/NotesEdit.js \
window/Backup.js \

View File

@ -96,7 +96,7 @@ Ext.define('PVE.node.CephMonList', {
params: { service: "mon." + rec.data.name },
success: function(response, options) {
var upid = response.result.data;
var win = Ext.create('PVE.window.TaskProgress', { upid: upid });
var win = Ext.create('Proxmox.window.TaskProgress', { upid: upid });
win.show();
},
failure: function(response, opts) {
@ -151,7 +151,7 @@ Ext.define('PVE.node.CephMonList', {
method: 'DELETE',
success: function(response, options) {
var upid = response.result.data;
var win = Ext.create('PVE.window.TaskProgress', { upid: upid });
var win = Ext.create('Proxmox.window.TaskProgress', { upid: upid });
win.show();
},
failure: function(response, opts) {

View File

@ -403,7 +403,7 @@ Ext.define('PVE.node.CephOsdTree', {
method: 'POST',
success: function(response, options) {
var upid = response.result.data;
var win = Ext.create('PVE.window.TaskProgress', { upid: upid });
var win = Ext.create('Proxmox.window.TaskProgress', { upid: upid });
win.show();
me.mon(win, 'close', reload, me);
},

View File

@ -43,7 +43,7 @@ Ext.define('PVE.dc.Tasks', {
return;
}
var win = Ext.create('PVE.window.TaskViewer', {
var win = Ext.create('Proxmox.window.TaskViewer', {
upid: rec.data.upid
});
win.show();

View File

@ -320,7 +320,7 @@ Ext.define('PVE.lxc.CreateWizard', {
success: function(response, opts){
var upid = response.result.data;
var win = Ext.create('PVE.window.TaskViewer', {
var win = Ext.create('Proxmox.window.TaskViewer', {
upid: upid
});
win.show();

View File

@ -17,7 +17,7 @@ Ext.define('PVE.window.MPResize', {
},
success: function(response, opts) {
var upid = response.result.data;
var win = Ext.create('PVE.window.TaskViewer', { upid: upid });
var win = Ext.create('Proxmox.window.TaskViewer', { upid: upid });
win.show();
me.close();
}

View File

@ -26,7 +26,7 @@ Ext.define('PVE.window.LxcSnapshot', {
},
success: function(response, options) {
var upid = response.result.data;
var win = Ext.create('PVE.window.TaskProgress', { upid: upid });
var win = Ext.create('Proxmox.window.TaskProgress', { upid: upid });
win.show();
me.close();
}

View File

@ -181,7 +181,7 @@ Ext.define('PVE.lxc.SnapshotTree', {
},
success: function(response, options) {
var upid = response.result.data;
var win = Ext.create('PVE.window.TaskProgress', { upid: upid });
var win = Ext.create('Proxmox.window.TaskProgress', { upid: upid });
win.show();
}
});
@ -217,7 +217,7 @@ Ext.define('PVE.lxc.SnapshotTree', {
},
success: function(response, options) {
var upid = response.result.data;
var win = Ext.create('PVE.window.TaskProgress', { upid: upid });
var win = Ext.create('Proxmox.window.TaskProgress', { upid: upid });
win.show();
}
});

View File

@ -204,7 +204,7 @@ Ext.define('PVE.node.DiskList', {
},
success: function(response, options) {
var upid = response.result.data;
var win = Ext.create('PVE.window.TaskProgress', {
var win = Ext.create('Proxmox.window.TaskProgress', {
upid: upid
});
win.show();

View File

@ -27,7 +27,7 @@ Ext.define('PVE.window.HDMove', {
},
success: function(response, options) {
var upid = response.result.data;
var win = Ext.create('PVE.window.TaskViewer', { upid: upid });
var win = Ext.create('Proxmox.window.TaskViewer', { upid: upid });
win.show();
me.close();
}

View File

@ -26,7 +26,7 @@ Ext.define('PVE.window.Snapshot', {
},
success: function(response, options) {
var upid = response.result.data;
var win = Ext.create('PVE.window.TaskProgress', { upid: upid });
var win = Ext.create('Proxmox.window.TaskProgress', { upid: upid });
win.show();
me.close();
}

View File

@ -179,7 +179,7 @@ Ext.define('PVE.qemu.SnapshotTree', {
},
success: function(response, options) {
var upid = response.result.data;
var win = Ext.create('PVE.window.TaskProgress', { upid: upid });
var win = Ext.create('Proxmox.window.TaskProgress', { upid: upid });
win.show();
}
});
@ -215,7 +215,7 @@ Ext.define('PVE.qemu.SnapshotTree', {
},
success: function(response, options) {
var upid = response.result.data;
var win = Ext.create('PVE.window.TaskProgress', { upid: upid });
var win = Ext.create('Proxmox.window.TaskProgress', { upid: upid });
win.show();
}
});

View File

@ -124,7 +124,7 @@ Ext.define('PVE.storage.TemplateDownload', {
success: function(response, options) {
var upid = response.result.data;
Ext.create('PVE.window.TaskViewer', {
Ext.create('Proxmox.window.TaskViewer', {
upid: upid,
listeners: {
destroy: me.reloadGrid

View File

@ -93,7 +93,7 @@ Ext.define('PVE.window.Backup', {
var upid = response.result.data;
var win = Ext.create('PVE.window.TaskViewer', {
var win = Ext.create('Proxmox.window.TaskViewer', {
upid: upid,
listeners: {
close: function() {

View File

@ -29,7 +29,7 @@ Ext.define('PVE.window.BulkAction', {
success: function(response, options) {
var upid = response.result.data;
var win = Ext.create('PVE.window.TaskViewer', {
var win = Ext.create('Proxmox.window.TaskViewer', {
upid: upid
});
win.show();

View File

@ -43,7 +43,7 @@ Ext.define('PVE.window.Migrate', {
var upid = response.result.data;
var extraTitle = Ext.String.format(' ({0} ---> {1})', view.nodename, params.target);
Ext.create('PVE.window.TaskViewer', {
Ext.create('Proxmox.window.TaskViewer', {
upid: upid,
extraTitle: extraTitle
}).show();

View File

@ -86,7 +86,7 @@ Ext.define('PVE.window.Restore', {
success: function(response, options) {
var upid = response.result.data;
var win = Ext.create('PVE.window.TaskViewer', {
var win = Ext.create('Proxmox.window.TaskViewer', {
upid: upid
});
win.show();

View File

@ -75,7 +75,7 @@ Ext.define('PVE.window.SafeDestroy', {
view.hide();
var upid = response.result.data;
var win = Ext.create('PVE.window.TaskProgress', {
var win = Ext.create('Proxmox.window.TaskProgress', {
upid: upid,
listeners: {
destroy: function () {

View File

@ -1,223 +0,0 @@
Ext.define('PVE.window.TaskProgress', {
extend: 'Ext.window.Window',
alias: 'widget.pveTaskProgress',
initComponent: function() {
var me = this;
if (!me.upid) {
throw "no task specified";
}
var task = Proxmox.Utils.parse_task_upid(me.upid);
var statstore = Ext.create('PVE.data.ObjectStore', {
url: "/api2/json/nodes/" + task.node + "/tasks/" + me.upid + "/status",
interval: 1000,
rows: {
status: { defaultValue: 'unknown' },
exitstatus: { defaultValue: 'unknown' }
}
});
me.on('destroy', statstore.stopUpdate);
var getObjectValue = function(key, defaultValue) {
var rec = statstore.getById(key);
if (rec) {
return rec.data.value;
}
return defaultValue;
};
var pbar = Ext.create('Ext.ProgressBar', { text: 'running...' });
me.mon(statstore, 'load', function() {
var status = getObjectValue('status');
if (status === 'stopped') {
var exitstatus = getObjectValue('exitstatus');
if (exitstatus == 'OK') {
pbar.reset();
pbar.updateText("Done!");
Ext.Function.defer(me.close, 1000, me);
} else {
me.close();
Ext.Msg.alert('Task failed', exitstatus);
}
}
});
var descr = Proxmox.Utils.format_task_description(task.type, task.id);
Ext.apply(me, {
title: "Task: " + descr,
width: 300,
layout: 'auto',
modal: true,
bodyPadding: 5,
items: pbar,
buttons: [
{
text: gettext('Details'),
handler: function() {
var win = Ext.create('PVE.window.TaskViewer', {
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('PVE.window.TaskViewer', {
extend: 'Ext.window.Window',
alias: 'widget.pveTaskViewer',
extraTitle: '', // string to prepend after the generic task title
initComponent: function() {
var me = this;
if (!me.upid) {
throw "no task specified";
}
var task = Proxmox.Utils.parse_task_upid(me.upid);
var statgrid;
var rows = {
status: {
header: gettext('Status'),
defaultValue: 'unknown',
renderer: function(value) {
if (value != 'stopped') {
return value;
}
var es = statgrid.getObjectValue('exitstatus');
if (es) {
return value + ': ' + es;
}
}
},
exitstatus: {
visible: false
},
type: {
header: gettext('Task type'),
required: true
},
user: {
header: gettext('User name'),
required: true
},
node: {
header: gettext('Node'),
required: true
},
pid: {
header: gettext('Process ID'),
required: true
},
starttime: {
header: gettext('Start Time'),
required: true,
renderer: Proxmox.Utils.render_timestamp
},
upid: {
header: gettext('Unique task ID')
}
};
var statstore = Ext.create('PVE.data.ObjectStore', {
url: "/api2/json/nodes/" + task.node + "/tasks/" + me.upid + "/status",
interval: 1000,
rows: rows
});
me.on('destroy', statstore.stopUpdate);
var 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({
text: gettext('Stop'),
disabled: true,
handler: stop_task
});
var stop_btn2 = new Ext.Button({
text: gettext('Stop'),
disabled: true,
handler: stop_task
});
statgrid = Ext.create('Proxmox.grid.ObjectGrid', {
title: gettext('Status'),
layout: 'fit',
tbar: [ stop_btn1 ],
rstore: statstore,
rows: rows,
border: false
});
var logView = Ext.create('PVE.panel.LogView', {
title: gettext('Output'),
tbar: [ stop_btn2 ],
border: false,
url: "/api2/extjs/nodes/" + task.node + "/tasks/" + me.upid + "/log"
});
me.mon(statstore, 'load', function() {
var status = statgrid.getObjectValue('status');
if (status === 'stopped') {
logView.requestUpdate(undefined, true);
logView.scrollToEnd = false;
statstore.stopUpdate();
}
stop_btn1.setDisabled(status !== 'running');
stop_btn2.setDisabled(status !== 'running');
});
statstore.startUpdate();
Ext.apply(me, {
title: "Task viewer: " + task.desc + me.extraTitle,
width: 800,
height: 400,
layout: 'fit',
modal: true,
items: [{
xtype: 'tabpanel',
region: 'center',
items: [ logView, statgrid ]
}]
});
me.callParent();
logView.fireEvent('show', logView);
}
});