mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-05-12 11:38:01 +00:00
165 lines
3.2 KiB
JavaScript
165 lines
3.2 KiB
JavaScript
// fixme: how can we avoid those lint errors?
|
|
/*jslint confusion: true */
|
|
|
|
Ext.define('PVE.window.TaskViewer', {
|
|
extend: 'Ext.window.Window',
|
|
requires: [
|
|
'PVE.Utils'
|
|
],
|
|
alias: 'widget.pveTaskViewer',
|
|
|
|
initComponent: function() {
|
|
var me = this;
|
|
|
|
if (!me.upid) {
|
|
throw "no task specified";
|
|
}
|
|
|
|
var task = PVE.Utils.parse_task_upid(me.upid);
|
|
|
|
var rows = {
|
|
status: {
|
|
header: 'Status',
|
|
defaultValue: 'unknown'
|
|
},
|
|
type: {
|
|
header: 'Task type',
|
|
required: true
|
|
},
|
|
user: {
|
|
header: 'User name',
|
|
required: true
|
|
},
|
|
node: {
|
|
header: 'Node',
|
|
required: true
|
|
},
|
|
pid: {
|
|
header: 'Process ID',
|
|
required: true
|
|
},
|
|
starttime: {
|
|
header: 'Start time',
|
|
required: true,
|
|
renderer: PVE.Utils.render_timestamp
|
|
},
|
|
upid: {
|
|
header: 'Unique task ID'
|
|
}
|
|
};
|
|
|
|
var store = Ext.create('Ext.data.Store', {
|
|
model: 'pve-string-list',
|
|
pageSize: 200,
|
|
buffered: true,
|
|
proxy: {
|
|
type: 'pve',
|
|
startParam: 'start',
|
|
limitParam: 'limit',
|
|
url: "/api2/json/nodes/" + task.node + "/tasks/" + me.upid + "/log"
|
|
}
|
|
});
|
|
|
|
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() {
|
|
PVE.Utils.API2Request({
|
|
url: "/nodes/" + task.node + "/tasks/" + me.upid,
|
|
waitMsgTarget: me,
|
|
method: 'DELETE',
|
|
failure: function(response, opts) {
|
|
Ext.Msg.alert('Error', response.htmlStatus);
|
|
},
|
|
callback: function() {
|
|
store.load();
|
|
}
|
|
});
|
|
};
|
|
|
|
var stop_btn1 = new Ext.Button({
|
|
text: 'Stop',
|
|
disabled: true,
|
|
handler: stop_task
|
|
});
|
|
|
|
var stop_btn2 = new Ext.Button({
|
|
text: 'Stop',
|
|
disabled: true,
|
|
handler: stop_task
|
|
});
|
|
|
|
var statgrid = Ext.create('PVE.grid.ObjectGrid', {
|
|
title: 'Status',
|
|
layout: 'fit',
|
|
tbar: [ stop_btn1 ],
|
|
rstore: statstore,
|
|
rows: rows,
|
|
border: false
|
|
});
|
|
|
|
me.mon(statstore, 'load', function() {
|
|
var status = statgrid.getObjectValue('status');
|
|
|
|
store.load();
|
|
|
|
if (status === 'stopped') {
|
|
statstore.stopUpdate();
|
|
}
|
|
|
|
stop_btn1.setDisabled(status !== 'running');
|
|
stop_btn2.setDisabled(status !== 'running');
|
|
});
|
|
|
|
statstore.startUpdate();
|
|
|
|
Ext.applyIf(me, {
|
|
title: "Task viewer: " + task.desc,
|
|
width: 800,
|
|
height: 400,
|
|
layout: 'fit',
|
|
modal: true,
|
|
bodyPadding: 5,
|
|
items: [{
|
|
xtype: 'tabpanel',
|
|
region: 'center',
|
|
items: [
|
|
{
|
|
title: 'Output',
|
|
tbar: [ stop_btn2 ],
|
|
border: false,
|
|
xtype: 'gridpanel',
|
|
features: [ {ftype: 'selectable'}],
|
|
store: store,
|
|
stateful: false,
|
|
verticalScrollerType: 'paginggridscroller',
|
|
disableSelection: true,
|
|
invalidateScrollerOnRefresh: false,
|
|
viewConfig: {
|
|
loadMask: false,
|
|
trackOver: false,
|
|
stripeRows: false
|
|
},
|
|
hideHeaders: true,
|
|
columns: [
|
|
//{ header: "Line", dataIndex: 'n', width: 50 },
|
|
{ header: "Text", dataIndex: 't', flex: 1 }
|
|
]
|
|
},
|
|
statgrid
|
|
]
|
|
}]
|
|
});
|
|
|
|
me.callParent();
|
|
|
|
store.guaranteeRange(0, store.pageSize - 1);
|
|
}
|
|
});
|
|
|