]> git.proxmox.com Git - pve-manager.git/blob - www/new/node/Tasks.js
imported from svn 'pve-manager/pve2'
[pve-manager.git] / www / new / node / Tasks.js
1 Ext.define('PVE.node.Tasks', {
2 extend: 'Ext.grid.GridPanel',
3
4 alias: ['widget.pveNodeTasks'],
5
6 initComponent : function() {
7 var me = this;
8
9 var nodename = me.pveSelNode.data.node;
10 if (!nodename)
11 throw "no node name specified";
12
13 var store = Ext.create('Ext.data.Store', {
14 pageSize: 500,
15 buffered: true,
16 remoteFilter: true,
17 model: 'pve-tasks',
18 proxy: {
19 type: 'pve',
20 startParam: 'start',
21 limitParam: 'limit',
22
23 url: "/api2/json/nodes/" + nodename + "/tasks"
24 },
25 });
26
27 var userfilter = '';
28 var filter_errors = 0;
29
30 // fixme: scroller update fails
31 // http://www.sencha.com/forum/showthread.php?133677-scroller-does-not-adjust-to-the-filtered-grid-data&p=602887
32 var reload_task = new Ext.util.DelayedTask(function() {
33 var params = {
34 errors: filter_errors
35 };
36 if (userfilter)
37 params.userfilter = userfilter;
38
39 store.proxy.extraParams = params;
40 store.filter();
41 });
42
43 var run_task_viewer = function() {
44 var sm = me.getSelectionModel();
45 var rec = sm.getLastSelected();
46 if (!rec)
47 return;
48
49 var win = Ext.create('PVE.window.TaskViewer', {
50 upid: rec.data.upid
51 });
52 win.show();
53 };
54
55 var view_btn = new Ext.Button({
56 text: 'View',
57 disabled: true,
58 handler: run_task_viewer
59 });
60
61
62 Ext.apply(me, {
63 store: store,
64 stateful: false,
65 verticalScrollerType: 'paginggridscroller',
66 loadMask: true,
67 invalidateScrollerOnRefresh: false,
68 viewConfig: {
69 trackOver: false,
70 stripeRows: false, // does not work with getRowClass()
71
72 getRowClass: function(record, index) {
73 var status = record.get('status');
74
75 if (status && status != 'OK')
76 return "x-form-invalid-field";
77 }
78 },
79 tbar: [
80 view_btn, '->', 'User:', ' ',
81 {
82 xtype: 'textfield',
83 width: 200,
84 value: userfilter,
85 enableKeyEvents: true,
86 listeners: {
87 keyup: function(field, e) {
88 userfilter = field.getValue();
89 reload_task.delay(500);
90 }
91 }
92 }, ' ', 'Only Errors:', ' ',
93 {
94 xtype: 'checkbox',
95 hideLabel: true,
96 checked: filter_errors,
97 listeners: {
98 change: function(field, checked) {
99 filter_errors = checked ? 1 : 0;
100 reload_task.delay(10);
101 }
102 }
103 }, ' '
104 ],
105 sortableColumns: false,
106 columns: [
107 {
108 header: "Start Time", dataIndex: 'starttime',
109 width: 100,
110 renderer: function(value) {
111 return Ext.Date.format(value, "M d H:i:s");
112 }
113 },
114 {
115 header: "End Time", dataIndex: 'endtime',
116 width: 100,
117 renderer: function(value, metaData, record) {
118 return Ext.Date.format(value,"M d H:i:s");
119 }
120 },
121 {
122 header: "Node", dataIndex: 'node',
123 width: 100
124 },
125 {
126 header: "User", dataIndex: 'user',
127 width: 150
128 },
129 {
130 header: "Description", dataIndex: 'upid',
131 flex: 1,
132 renderer: PVE.Utils.render_upid
133 },
134 {
135 header: "Status", dataIndex: 'status',
136 width: 200,
137 renderer: function(value, metaData, record) {
138 if (value == 'OK')
139 return 'OK';
140 // metaData.attr = 'style="color:red;"';
141 return "ERROR: " + value;
142 }
143 }
144 ],
145 listeners: {
146 itemdblclick: run_task_viewer,
147 selectionchange: function(v, selections) {
148 view_btn.setDisabled(!(selections && selections[0]));
149 },
150 show: function() { reload_task.delay(10); }
151 }
152 });
153
154 me.callParent();
155
156 store.guaranteeRange(0, store.pageSize - 1);
157 }
158 });
159