]>
git.proxmox.com Git - proxmox-widget-toolkit.git/blob - src/node/Tasks.js
1 Ext
.define('Proxmox.node.Tasks', {
2 extend
: 'Ext.grid.GridPanel',
4 alias
: ['widget.proxmoxNodeTasks'],
6 stateId
: 'grid-node-tasks',
8 sortableColumns
: false,
11 initComponent: function() {
15 throw "no node name specified";
18 let store
= Ext
.create('Ext.data.BufferedStore', {
22 model
: 'proxmox-tasks',
27 url
: "/api2/json/nodes/" + me
.nodename
+ "/tasks",
31 store
.on('prefetch', function() {
32 // we want to update the scrollbar on every store load
33 // since the total count might be different
34 // the buffered grid plugin does this only on scrolling itself
35 // and even reduces the scrollheight again when scrolling up
40 let filter_errors
= 0;
42 let updateProxyParams = function() {
44 errors
: filter_errors
,
47 params
.userfilter
= userfilter
;
50 params
.vmid
= me
.vmidFilter
;
52 store
.proxy
.extraParams
= params
;
57 let reload_task
= Ext
.create('Ext.util.DelayedTask', function() {
62 let run_task_viewer = function() {
63 let sm
= me
.getSelectionModel();
64 let rec
= sm
.getSelection()[0];
69 let win
= Ext
.create('Proxmox.window.TaskViewer', {
71 endtime
: rec
.data
.endtime
,
76 let view_btn
= new Ext
.Button({
77 text
: gettext('View'),
79 handler
: run_task_viewer
,
82 Proxmox
.Utils
.monStoreErrors(me
, store
, true);
88 stripeRows
: false, // does not work with getRowClass()
90 getRowClass: function(record
, index
) {
91 let status
= record
.get('status');
94 let parsed
= Proxmox
.Utils
.parse_task_status(status
);
95 if (parsed
=== 'error') {
96 return "proxmox-invalid-row";
97 } else if (parsed
=== 'warning') {
98 return "proxmox-warning-row";
107 text
: gettext('Refresh'), // FIXME: smart-auto-refresh store
108 handler
: () => store
.reload(),
111 gettext('User name') +':',
117 enableKeyEvents
: true,
119 keyup: function(field
, e
) {
120 userfilter
= field
.getValue();
121 reload_task
.delay(500);
124 }, ' ', gettext('Only Errors') + ':', ' ',
128 checked
: filter_errors
,
130 change: function(field
, checked
) {
131 filter_errors
= checked
? 1 : 0;
132 reload_task
.delay(10);
139 header
: gettext("Start Time"),
140 dataIndex
: 'starttime',
142 renderer: function(value
) {
143 return Ext
.Date
.format(value
, "M d H:i:s");
147 header
: gettext("End Time"),
148 dataIndex
: 'endtime',
150 renderer: function(value
, metaData
, record
) {
152 metaData
.tdCls
= "x-grid-row-loading";
155 return Ext
.Date
.format(value
, "M d H:i:s");
159 header
: gettext("Duration"),
162 renderer: function(value
, metaData
, record
) {
163 let start
= record
.data
.starttime
;
165 let end
= record
.data
.endtime
|| Date
.now();
166 let duration
= end
- start
;
170 return Proxmox
.Utils
.format_duration_human(duration
);
172 return Proxmox
.Utils
.unknownText
;
176 header
: gettext("Node"),
181 header
: gettext("User name"),
186 header
: gettext("Description"),
189 renderer
: Proxmox
.Utils
.render_upid
,
192 header
: gettext("Status"),
195 renderer: function(value
, metaData
, record
) {
196 if (value
=== undefined && !record
.data
.endtime
) {
197 metaData
.tdCls
= "x-grid-row-loading";
201 let parsed
= Proxmox
.Utils
.parse_task_status(value
);
203 case 'unknown': return Proxmox
.Utils
.unknownText
;
204 case 'error': return Proxmox
.Utils
.errorText
+ ': ' + value
;
205 case 'ok': // fall-through
206 case 'warning': // fall-through
207 default: return value
;
213 itemdblclick
: run_task_viewer
,
214 selectionchange: function(v
, selections
) {
215 view_btn
.setDisabled(!(selections
&& selections
[0]));
217 show: function() { reload_task
.delay(10); },
218 destroy: function() { reload_task
.cancel(); },