]>
Commit | Line | Data |
---|---|---|
06694509 DM |
1 | Ext.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 | ||
50 | // fixme: ?? | |
51 | //var descr = Proxmox.Utils.format_task_description(task.type, task.id); | |
52 | ||
53 | Ext.apply(me, { | |
54 | title: "Task: " + me.upid, | |
55 | width: 300, | |
56 | layout: 'auto', | |
57 | modal: true, | |
58 | bodyPadding: 5, | |
59 | items: pbar, | |
60 | buttons: [ | |
61 | { | |
62 | text: gettext('Details'), | |
63 | handler: function() { | |
64 | var win = Ext.create('Proxmox.window.TaskViewer', { | |
65 | upid: me.upid | |
66 | }); | |
67 | win.show(); | |
68 | me.close(); | |
69 | } | |
70 | } | |
71 | ] | |
72 | }); | |
73 | ||
74 | me.callParent(); | |
75 | ||
76 | statstore.startUpdate(); | |
77 | ||
78 | pbar.wait(); | |
79 | } | |
80 | }); | |
81 | ||
82 | // fixme: how can we avoid those lint errors? | |
83 | /*jslint confusion: true */ | |
84 | ||
85 | Ext.define('Proxmox.window.TaskViewer', { | |
86 | extend: 'Ext.window.Window', | |
87 | alias: 'widget.proxmoxTaskViewer', | |
88 | ||
89 | initComponent: function() { | |
90 | var me = this; | |
91 | ||
92 | if (!me.upid) { | |
93 | throw "no task specified"; | |
94 | } | |
95 | ||
96 | var task = Proxmox.Utils.parse_task_upid(me.upid); | |
97 | ||
98 | var statgrid; | |
99 | ||
100 | var rows = { | |
101 | status: { | |
102 | header: gettext('Status'), | |
103 | defaultValue: 'unknown', | |
104 | renderer: function(value) { | |
105 | if (value != 'stopped') { | |
106 | return value; | |
107 | } | |
108 | var es = statgrid.getObjectValue('exitstatus'); | |
109 | if (es) { | |
110 | return value + ': ' + es; | |
111 | } | |
112 | } | |
113 | }, | |
114 | exitstatus: { | |
115 | visible: false | |
116 | }, | |
117 | type: { | |
118 | header: gettext('Task type'), | |
119 | required: true | |
120 | }, | |
121 | user: { | |
122 | header: gettext('User name'), | |
123 | required: true | |
124 | }, | |
125 | node: { | |
126 | header: gettext('Node'), | |
127 | required: true | |
128 | }, | |
129 | pid: { | |
130 | header: gettext('Process ID'), | |
131 | required: true | |
132 | }, | |
133 | starttime: { | |
134 | header: gettext('Start Time'), | |
135 | required: true, | |
136 | renderer: Proxmox.Utils.render_timestamp | |
137 | }, | |
138 | upid: { | |
139 | header: gettext('Unique task ID') | |
140 | } | |
141 | }; | |
142 | ||
143 | var statstore = Ext.create('Proxmox.data.ObjectStore', { | |
144 | url: "/api2/json/nodes/" + task.node + "/tasks/" + me.upid + "/status", | |
145 | interval: 1000, | |
146 | rows: rows | |
147 | }); | |
148 | ||
149 | me.on('destroy', statstore.stopUpdate); | |
150 | ||
151 | var stop_task = function() { | |
152 | Proxmox.Utils.API2Request({ | |
153 | url: "/nodes/" + task.node + "/tasks/" + me.upid, | |
154 | waitMsgTarget: me, | |
155 | method: 'DELETE', | |
156 | failure: function(response, opts) { | |
157 | Ext.Msg.alert(gettext('Error'), response.htmlStatus); | |
158 | } | |
159 | }); | |
160 | }; | |
161 | ||
162 | var stop_btn1 = new Ext.Button({ | |
163 | text: gettext('Stop'), | |
164 | disabled: true, | |
165 | handler: stop_task | |
166 | }); | |
167 | ||
168 | var stop_btn2 = new Ext.Button({ | |
169 | text: gettext('Stop'), | |
170 | disabled: true, | |
171 | handler: stop_task | |
172 | }); | |
173 | ||
174 | statgrid = Ext.create('Proxmox.grid.ObjectGrid', { | |
175 | title: gettext('Status'), | |
176 | layout: 'fit', | |
177 | tbar: [ stop_btn1 ], | |
178 | rstore: statstore, | |
179 | rows: rows, | |
180 | border: false | |
181 | }); | |
182 | ||
183 | var logView = Ext.create('Proxmox.panel.LogView', { | |
184 | title: gettext('Output'), | |
185 | tbar: [ stop_btn2 ], | |
186 | border: false, | |
187 | url: "/api2/extjs/nodes/" + task.node + "/tasks/" + me.upid + "/log" | |
188 | }); | |
189 | ||
190 | me.mon(statstore, 'load', function() { | |
191 | var status = statgrid.getObjectValue('status'); | |
192 | ||
193 | if (status === 'stopped') { | |
194 | logView.requestUpdate(undefined, true); | |
195 | logView.scrollToEnd = false; | |
196 | statstore.stopUpdate(); | |
197 | } | |
198 | ||
199 | stop_btn1.setDisabled(status !== 'running'); | |
200 | stop_btn2.setDisabled(status !== 'running'); | |
201 | }); | |
202 | ||
203 | statstore.startUpdate(); | |
204 | ||
205 | Ext.apply(me, { | |
206 | // fixme: better title | |
207 | title: "Task viewer: " + me.upid, | |
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 |