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