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