]> git.proxmox.com Git - proxmox-widget-toolkit.git/blame - window/TaskViewer.js
bump version to 1.0-13
[proxmox-widget-toolkit.git] / window / TaskViewer.js
CommitLineData
06694509
DM
1Ext.define('Proxmox.window.TaskProgress', {
2 extend: 'Ext.window.Window',
3 alias: 'widget.proxmoxTaskProgress',
4
5 initComponent: function() {
6 var me = this;
7
8 if (!me.upid) {
9 throw "no task specified";
10 }
11
12 var task = Proxmox.Utils.parse_task_upid(me.upid);
13
14 var statstore = Ext.create('Proxmox.data.ObjectStore', {
15 url: "/api2/json/nodes/" + task.node + "/tasks/" + me.upid + "/status",
16 interval: 1000,
17 rows: {
18 status: { defaultValue: 'unknown' },
19 exitstatus: { defaultValue: 'unknown' }
20 }
21 });
22
23 me.on('destroy', statstore.stopUpdate);
24
25 var getObjectValue = function(key, defaultValue) {
26 var rec = statstore.getById(key);
27 if (rec) {
28 return rec.data.value;
29 }
30 return defaultValue;
31 };
32
33 var pbar = Ext.create('Ext.ProgressBar', { text: 'running...' });
34
35 me.mon(statstore, 'load', function() {
36 var status = getObjectValue('status');
37 if (status === 'stopped') {
38 var exitstatus = getObjectValue('exitstatus');
39 if (exitstatus == 'OK') {
40 pbar.reset();
41 pbar.updateText("Done!");
42 Ext.Function.defer(me.close, 1000, me);
43 } else {
44 me.close();
45 Ext.Msg.alert('Task failed', exitstatus);
46 }
47 }
48 });
49
53ac9bca 50 var descr = Proxmox.Utils.format_task_description(task.type, task.id);
06694509
DM
51
52 Ext.apply(me, {
d7139140 53 title: gettext('Task') + ': ' + descr,
06694509
DM
54 width: 300,
55 layout: 'auto',
56 modal: true,
57 bodyPadding: 5,
58 items: pbar,
59 buttons: [
60 {
61 text: gettext('Details'),
62 handler: function() {
63 var win = Ext.create('Proxmox.window.TaskViewer', {
64 upid: me.upid
65 });
66 win.show();
67 me.close();
68 }
69 }
70 ]
71 });
72
73 me.callParent();
74
75 statstore.startUpdate();
76
77 pbar.wait();
78 }
79});
80
81// fixme: how can we avoid those lint errors?
82/*jslint confusion: true */
83
84Ext.define('Proxmox.window.TaskViewer', {
85 extend: 'Ext.window.Window',
86 alias: 'widget.proxmoxTaskViewer',
87
641df09e
TL
88 extraTitle: '', // string to prepend after the generic task title
89
06694509
DM
90 initComponent: function() {
91 var me = this;
92
93 if (!me.upid) {
94 throw "no task specified";
95 }
96
97 var task = Proxmox.Utils.parse_task_upid(me.upid);
98
99 var statgrid;
100
101 var rows = {
102 status: {
103 header: gettext('Status'),
104 defaultValue: 'unknown',
105 renderer: function(value) {
106 if (value != 'stopped') {
107 return value;
108 }
109 var es = statgrid.getObjectValue('exitstatus');
110 if (es) {
111 return value + ': ' + es;
112 }
113 }
114 },
115 exitstatus: {
116 visible: false
117 },
118 type: {
119 header: gettext('Task type'),
120 required: true
121 },
122 user: {
123 header: gettext('User name'),
124 required: true
125 },
126 node: {
127 header: gettext('Node'),
128 required: true
129 },
130 pid: {
131 header: gettext('Process ID'),
132 required: true
133 },
134 starttime: {
135 header: gettext('Start Time'),
136 required: true,
137 renderer: Proxmox.Utils.render_timestamp
138 },
139 upid: {
140 header: gettext('Unique task ID')
141 }
142 };
143
144 var statstore = Ext.create('Proxmox.data.ObjectStore', {
145 url: "/api2/json/nodes/" + task.node + "/tasks/" + me.upid + "/status",
146 interval: 1000,
147 rows: rows
148 });
149
150 me.on('destroy', statstore.stopUpdate);
151
152 var stop_task = function() {
153 Proxmox.Utils.API2Request({
154 url: "/nodes/" + task.node + "/tasks/" + me.upid,
155 waitMsgTarget: me,
156 method: 'DELETE',
157 failure: function(response, opts) {
158 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
159 }
160 });
161 };
162
163 var stop_btn1 = new Ext.Button({
164 text: gettext('Stop'),
165 disabled: true,
166 handler: stop_task
167 });
168
169 var stop_btn2 = new Ext.Button({
170 text: gettext('Stop'),
171 disabled: true,
172 handler: stop_task
173 });
174
175 statgrid = Ext.create('Proxmox.grid.ObjectGrid', {
176 title: gettext('Status'),
177 layout: 'fit',
178 tbar: [ stop_btn1 ],
179 rstore: statstore,
180 rows: rows,
181 border: false
182 });
183
184 var logView = Ext.create('Proxmox.panel.LogView', {
185 title: gettext('Output'),
186 tbar: [ stop_btn2 ],
187 border: false,
188 url: "/api2/extjs/nodes/" + task.node + "/tasks/" + me.upid + "/log"
189 });
190
191 me.mon(statstore, 'load', function() {
192 var status = statgrid.getObjectValue('status');
193
194 if (status === 'stopped') {
195 logView.requestUpdate(undefined, true);
196 logView.scrollToEnd = false;
197 statstore.stopUpdate();
198 }
199
200 stop_btn1.setDisabled(status !== 'running');
201 stop_btn2.setDisabled(status !== 'running');
202 });
203
204 statstore.startUpdate();
205
206 Ext.apply(me, {
641df09e 207 title: "Task viewer: " + task.desc + me.extraTitle,
06694509
DM
208 width: 800,
209 height: 400,
210 layout: 'fit',
211 modal: true,
212 items: [{
213 xtype: 'tabpanel',
214 region: 'center',
215 items: [ logView, statgrid ]
216 }]
217 });
218
219 me.callParent();
220
221 logView.fireEvent('show', logView);
222 }
223});
224