pve-manager/www/manager/window/TaskViewer.js
2011-10-11 12:48:28 +02:00

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);
}
});