root / ui / static / synnefo.js @ dd604c16
History | View | Annotate | Download (21.4 kB)
1 | 146b6003 | Dimitris Moraitis | var flavors = [], images = [], servers = [], disks = [], cpus = [], ram = [];
|
---|---|---|---|
2 | 267403ca | Dimitris Moraitis | var changes_since = 0, deferred = 0, update_request = false, load_request = false, pending_actions = []; |
3 | 22afb635 | Vangelis Koukis | var API_URL = "/api/v1.1"; |
4 | cf5c41d0 | Christodoulos Psaltis | var serverlength = 0; |
5 | 146b6003 | Dimitris Moraitis | |
6 | c5a032c4 | Markos Gogoulos | function ISODateString(d){ |
7 | c5a032c4 | Markos Gogoulos | //return a date in an ISO 8601 format using UTC.
|
8 | c5a032c4 | Markos Gogoulos | //do not include time zone info (Z) at the end
|
9 | c5a032c4 | Markos Gogoulos | //taken from the Mozilla Developer Center
|
10 | 267403ca | Dimitris Moraitis | function pad(n){ return n<10 ? '0'+n : n } |
11 | 267403ca | Dimitris Moraitis | return d.getUTCFullYear()+ '-' + |
12 | 267403ca | Dimitris Moraitis | pad(d.getUTCMonth()+1) + '-' + |
13 | 267403ca | Dimitris Moraitis | pad(d.getUTCDate()) + 'T' +
|
14 | 267403ca | Dimitris Moraitis | pad(d.getUTCHours()) + ':' +
|
15 | 038383b1 | Dimitris Moraitis | pad(d.getUTCMinutes()) + ':' +
|
16 | 038383b1 | Dimitris Moraitis | pad(d.getUTCSeconds()) +'Z'
|
17 | 038383b1 | Dimitris Moraitis | } |
18 | 038383b1 | Dimitris Moraitis | |
19 | 038383b1 | Dimitris Moraitis | function parse_error(responseText){ |
20 | 038383b1 | Dimitris Moraitis | var errors = [];
|
21 | a8e592c7 | Dimitris Moraitis | if (responseText.length == 0){ |
22 | a8e592c7 | Dimitris Moraitis | errors[0] = {'code': 503}; |
23 | a8e592c7 | Dimitris Moraitis | } else {
|
24 | a8e592c7 | Dimitris Moraitis | responseObj = JSON.parse(responseText); |
25 | a8e592c7 | Dimitris Moraitis | //console.info(inp);
|
26 | a8e592c7 | Dimitris Moraitis | for (var err in responseObj){ |
27 | a8e592c7 | Dimitris Moraitis | errors[errors.length] = responseObj[err]; |
28 | a8e592c7 | Dimitris Moraitis | } |
29 | 038383b1 | Dimitris Moraitis | } |
30 | 038383b1 | Dimitris Moraitis | return errors;
|
31 | 267403ca | Dimitris Moraitis | } |
32 | c5a032c4 | Markos Gogoulos | |
33 | 41cad45d | Dimitris Moraitis | // indexOf prototype for IE
|
34 | 41cad45d | Dimitris Moraitis | if (!Array.prototype.indexOf) {
|
35 | 41cad45d | Dimitris Moraitis | Array.prototype.indexOf = function(elt /*, from*/) { |
36 | 41cad45d | Dimitris Moraitis | var len = this.length; |
37 | 41cad45d | Dimitris Moraitis | var from = Number(arguments[1]) || 0; |
38 | 41cad45d | Dimitris Moraitis | from = (from < 0)
|
39 | 41cad45d | Dimitris Moraitis | ? Math.ceil(from) |
40 | 41cad45d | Dimitris Moraitis | : Math.floor(from); |
41 | 41cad45d | Dimitris Moraitis | if (from < 0) |
42 | 41cad45d | Dimitris Moraitis | from += len; |
43 | 41cad45d | Dimitris Moraitis | |
44 | 41cad45d | Dimitris Moraitis | for (; from < len; from++) {
|
45 | 41cad45d | Dimitris Moraitis | if (from in this && |
46 | 41cad45d | Dimitris Moraitis | this[from] === elt)
|
47 | 41cad45d | Dimitris Moraitis | return from;
|
48 | 41cad45d | Dimitris Moraitis | } |
49 | 41cad45d | Dimitris Moraitis | return -1; |
50 | 41cad45d | Dimitris Moraitis | }; |
51 | 41cad45d | Dimitris Moraitis | } |
52 | 41cad45d | Dimitris Moraitis | |
53 | 41cad45d | Dimitris Moraitis | |
54 | 3d286f84 | Dimitris Moraitis | function update_confirmations(){ |
55 | dcf153ce | Christodoulos Psaltis | // hide all confirm boxes to begin with
|
56 | dcf153ce | Christodoulos Psaltis | $('div.confirm_single').hide(); |
57 | 695e1b21 | Dimitris Moraitis | $('div.confirm_multiple').hide(); |
58 | dcf153ce | Christodoulos Psaltis | |
59 | 990772be | Dimitris Moraitis | // standard view only
|
60 | 990772be | Dimitris Moraitis | if ($.cookie("list") != '1') { |
61 | dcf153ce | Christodoulos Psaltis | for (i=0;i<pending_actions.length;i++){ |
62 | dcf153ce | Christodoulos Psaltis | // show single confirms
|
63 | 990772be | Dimitris Moraitis | $("div.machine#"+pending_actions[i][1]+' .confirm_single').show(); |
64 | 990772be | Dimitris Moraitis | } |
65 | 990772be | Dimitris Moraitis | } |
66 | dcf153ce | Christodoulos Psaltis | |
67 | dcf153ce | Christodoulos Psaltis | // if more than one pending action show multiple confirm box
|
68 | dcf153ce | Christodoulos Psaltis | if (pending_actions.length>1 || $.cookie("list") == '1' && pending_actions.length == 1){ |
69 | 3d286f84 | Dimitris Moraitis | $('div.confirm_multiple span.actionLen').text(pending_actions.length); |
70 | 3d286f84 | Dimitris Moraitis | $('div.confirm_multiple').show(); |
71 | 3d286f84 | Dimitris Moraitis | } |
72 | 3d286f84 | Dimitris Moraitis | } |
73 | 3d286f84 | Dimitris Moraitis | |
74 | 42f67a2a | Dimitris Moraitis | function list_view() { |
75 | cf5c41d0 | Christodoulos Psaltis | serverlength = 0; // reset server length |
76 | 1a49199e | Dimitris Moraitis | changes_since = 0; // to reload full list |
77 | 3d286f84 | Dimitris Moraitis | pending_actions = []; // clear pending actions
|
78 | 3d286f84 | Dimitris Moraitis | update_confirmations(); |
79 | 1a49199e | Dimitris Moraitis | clearTimeout(deferred); // clear old deferred calls
|
80 | 1c7978ce | Dimitris Moraitis | try {
|
81 | 267403ca | Dimitris Moraitis | update_request.abort(); // cancel pending ajax updates
|
82 | 267403ca | Dimitris Moraitis | load_request.abort(); |
83 | 1c7978ce | Dimitris Moraitis | }catch(err){}
|
84 | 42f67a2a | Dimitris Moraitis | $.cookie("list", '1'); // set list cookie |
85 | 267403ca | Dimitris Moraitis | |
86 | 267403ca | Dimitris Moraitis | uri = $("#list").attr("href"); |
87 | 267403ca | Dimitris Moraitis | load_request = $.ajax({
|
88 | 267403ca | Dimitris Moraitis | url: uri,
|
89 | 267403ca | Dimitris Moraitis | type: "GET", |
90 | 267403ca | Dimitris Moraitis | timeout: TIMEOUT,
|
91 | 267403ca | Dimitris Moraitis | dataType: "html", |
92 | 267403ca | Dimitris Moraitis | error: function(jqXHR, textStatus, errorThrown) { |
93 | 267403ca | Dimitris Moraitis | return false; |
94 | 267403ca | Dimitris Moraitis | }, |
95 | 267403ca | Dimitris Moraitis | success: function(data, textStatus, jqXHR) { |
96 | aa1e0cab | Markos Gogoulos | $("a#list")[0].className += ' activelink'; |
97 | aa1e0cab | Markos Gogoulos | $("a#standard")[0].className = ''; |
98 | 267403ca | Dimitris Moraitis | $("div#machinesview").html(data); |
99 | 267403ca | Dimitris Moraitis | } |
100 | 267403ca | Dimitris Moraitis | }); |
101 | 267403ca | Dimitris Moraitis | |
102 | 42f67a2a | Dimitris Moraitis | return false; |
103 | 42f67a2a | Dimitris Moraitis | } |
104 | 42f67a2a | Dimitris Moraitis | |
105 | 42f67a2a | Dimitris Moraitis | function standard_view() { |
106 | cf5c41d0 | Christodoulos Psaltis | serverlength = 0; // reset server length |
107 | 1a49199e | Dimitris Moraitis | changes_since = 0; // to reload full list |
108 | 3d286f84 | Dimitris Moraitis | pending_actions = []; // clear pending actions
|
109 | 3d286f84 | Dimitris Moraitis | update_confirmations(); |
110 | 1a49199e | Dimitris Moraitis | clearTimeout(deferred); // clear old deferred calls
|
111 | 1c7978ce | Dimitris Moraitis | try {
|
112 | 1c7978ce | Dimitris Moraitis | update_request.abort() // cancel pending ajax updates
|
113 | 267403ca | Dimitris Moraitis | load_request.abort(); |
114 | 1c7978ce | Dimitris Moraitis | }catch(err){}
|
115 | 42f67a2a | Dimitris Moraitis | $.cookie("list", '0'); |
116 | 267403ca | Dimitris Moraitis | |
117 | 267403ca | Dimitris Moraitis | uri = $("a#standard").attr("href"); |
118 | 267403ca | Dimitris Moraitis | load_request = $.ajax({
|
119 | 267403ca | Dimitris Moraitis | url: uri,
|
120 | 267403ca | Dimitris Moraitis | type: "GET", |
121 | 267403ca | Dimitris Moraitis | timeout: TIMEOUT,
|
122 | 267403ca | Dimitris Moraitis | dataType: "html", |
123 | 267403ca | Dimitris Moraitis | error: function(jqXHR, textStatus, errorThrown) { |
124 | 267403ca | Dimitris Moraitis | return false; |
125 | 267403ca | Dimitris Moraitis | }, |
126 | 267403ca | Dimitris Moraitis | success: function(data, textStatus, jqXHR) { |
127 | aa1e0cab | Markos Gogoulos | $("a#standard")[0].className += ' activelink'; |
128 | aa1e0cab | Markos Gogoulos | $("a#list")[0].className = ''; |
129 | 267403ca | Dimitris Moraitis | $("div#machinesview").html(data); |
130 | 267403ca | Dimitris Moraitis | } |
131 | 267403ca | Dimitris Moraitis | }); |
132 | 267403ca | Dimitris Moraitis | |
133 | 42f67a2a | Dimitris Moraitis | return false; |
134 | 42f67a2a | Dimitris Moraitis | } |
135 | 42f67a2a | Dimitris Moraitis | |
136 | 42f67a2a | Dimitris Moraitis | function choose_view() { |
137 | 42f67a2a | Dimitris Moraitis | if ($.cookie("list")=='1') { |
138 | 42f67a2a | Dimitris Moraitis | list_view(); |
139 | 42f67a2a | Dimitris Moraitis | } else {
|
140 | 42f67a2a | Dimitris Moraitis | standard_view(); |
141 | 42f67a2a | Dimitris Moraitis | } |
142 | 42f67a2a | Dimitris Moraitis | } |
143 | 42f67a2a | Dimitris Moraitis | |
144 | 42f67a2a | Dimitris Moraitis | function toggleMenu() { |
145 | 42f67a2a | Dimitris Moraitis | var primary = $("ul.css-tabs li a.primary"); |
146 | 42f67a2a | Dimitris Moraitis | var secondary = $("ul.css-tabs li a.secondary"); |
147 | 42f67a2a | Dimitris Moraitis | var all = $("ul.css-tabs li a"); |
148 | 42f67a2a | Dimitris Moraitis | var toggled = $('ul.css-tabs li a.current').hasClass('secondary'); |
149 | 42f67a2a | Dimitris Moraitis | |
150 | 42f67a2a | Dimitris Moraitis | // if anything is still moving, do nothing
|
151 | 42f67a2a | Dimitris Moraitis | if ($(":animated").length) { |
152 | 42f67a2a | Dimitris Moraitis | return;
|
153 | 42f67a2a | Dimitris Moraitis | } |
154 | 42f67a2a | Dimitris Moraitis | |
155 | 42f67a2a | Dimitris Moraitis | // nothing is current to begin with
|
156 | 42f67a2a | Dimitris Moraitis | $('ul.css-tabs li a.current').removeClass('current'); |
157 | 42f67a2a | Dimitris Moraitis | |
158 | 42f67a2a | Dimitris Moraitis | // move stuff around
|
159 | 42f67a2a | Dimitris Moraitis | all.animate({top:'30px'}, {complete: function() { |
160 | 42f67a2a | Dimitris Moraitis | $(this).hide(); |
161 | 42f67a2a | Dimitris Moraitis | if (toggled) {
|
162 | 42f67a2a | Dimitris Moraitis | primary.show(); |
163 | 42f67a2a | Dimitris Moraitis | primary.animate({top:'9px'}, {complete: function() { |
164 | 42f67a2a | Dimitris Moraitis | $('ul.css-tabs li a.primary#machines').addClass('current'); |
165 | 42f67a2a | Dimitris Moraitis | $('a#machines').click(); |
166 | 42f67a2a | Dimitris Moraitis | }}); |
167 | 42f67a2a | Dimitris Moraitis | } else {
|
168 | 42f67a2a | Dimitris Moraitis | secondary.show(); |
169 | 42f67a2a | Dimitris Moraitis | secondary.animate({top:'9px'}, {complete: function() { |
170 | 42f67a2a | Dimitris Moraitis | $('ul.css-tabs li a.secondary#files').addClass('current'); |
171 | 42f67a2a | Dimitris Moraitis | $('a#files').click(); |
172 | 42f67a2a | Dimitris Moraitis | }}); |
173 | 42f67a2a | Dimitris Moraitis | } |
174 | 42f67a2a | Dimitris Moraitis | }}); |
175 | 42f67a2a | Dimitris Moraitis | |
176 | 42f67a2a | Dimitris Moraitis | // rotate arrow icon
|
177 | 42f67a2a | Dimitris Moraitis | if (toggled) {
|
178 | 42f67a2a | Dimitris Moraitis | $("#arrow").rotate({animateAngle: (0), bind:[{"click":function(){toggleMenu()}}]}); |
179 | 42f67a2a | Dimitris Moraitis | $("#arrow").rotateAnimation(0); |
180 | 42f67a2a | Dimitris Moraitis | } else {
|
181 | 42f67a2a | Dimitris Moraitis | $("#arrow").rotate({animateAngle: (-180), bind:[{"click":function(){toggleMenu()}}]}); |
182 | 42f67a2a | Dimitris Moraitis | $("#arrow").rotateAnimation(-180); |
183 | 42f67a2a | Dimitris Moraitis | } |
184 | 42f67a2a | Dimitris Moraitis | } |
185 | 42f67a2a | Dimitris Moraitis | |
186 | 42f67a2a | Dimitris Moraitis | // confirmation overlay generation
|
187 | 42f67a2a | Dimitris Moraitis | function confirm_action(action_string, action_function, serverIDs, serverNames) { |
188 | 42f67a2a | Dimitris Moraitis | if (serverIDs.length == 1){ |
189 | 42f67a2a | Dimitris Moraitis | $("#yes-no h3").text('You are about to ' + action_string + ' vm ' + serverNames[0]); |
190 | 42f67a2a | Dimitris Moraitis | } else if (serverIDs.length > 1){ |
191 | eae0a59a | Dimitris Moraitis | $("#yes-no h3").text('You are about to ' + action_string + ' ' + serverIDs.length + ' machines'); |
192 | 42f67a2a | Dimitris Moraitis | } else {
|
193 | 42f67a2a | Dimitris Moraitis | return false; |
194 | 42f67a2a | Dimitris Moraitis | } |
195 | 42f67a2a | Dimitris Moraitis | // action confirmation overlay
|
196 | 42f67a2a | Dimitris Moraitis | var triggers = $("a#confirmation").overlay({ |
197 | 42f67a2a | Dimitris Moraitis | // some mask tweaks suitable for modal dialogs
|
198 | 42f67a2a | Dimitris Moraitis | mask: {
|
199 | 42f67a2a | Dimitris Moraitis | color: '#ebecff', |
200 | 42f67a2a | Dimitris Moraitis | opacity: '0.9' |
201 | 42f67a2a | Dimitris Moraitis | }, |
202 | 42f67a2a | Dimitris Moraitis | top: 'center', |
203 | 42f67a2a | Dimitris Moraitis | load: false |
204 | 42f67a2a | Dimitris Moraitis | }); |
205 | 42f67a2a | Dimitris Moraitis | // yes or no?
|
206 | 42f67a2a | Dimitris Moraitis | var buttons = $("#yes-no button").click(function(e) { |
207 | 42f67a2a | Dimitris Moraitis | // get user input
|
208 | 42f67a2a | Dimitris Moraitis | var yes = buttons.index(this) === 0; |
209 | 42f67a2a | Dimitris Moraitis | //close the confirmation window
|
210 | 42f67a2a | Dimitris Moraitis | $("a#confirmation").overlay().close(); |
211 | 42f67a2a | Dimitris Moraitis | // return true=yes or false=no
|
212 | 42f67a2a | Dimitris Moraitis | if (yes) {
|
213 | 42f67a2a | Dimitris Moraitis | action_function(serverIDs); |
214 | 42f67a2a | Dimitris Moraitis | } |
215 | 42f67a2a | Dimitris Moraitis | }); |
216 | 42f67a2a | Dimitris Moraitis | $("a#confirmation").data('overlay').load(); |
217 | 42f67a2a | Dimitris Moraitis | return false; |
218 | 42f67a2a | Dimitris Moraitis | } |
219 | 42f67a2a | Dimitris Moraitis | |
220 | 42f67a2a | Dimitris Moraitis | // get and show a list of running and terminated machines
|
221 | 146b6003 | Dimitris Moraitis | function update_vms(interval) { |
222 | aa819ce8 | Dimitris Moraitis | try{ console.info('updating machines'); } catch(err){} |
223 | 22afb635 | Vangelis Koukis | var uri= API_URL + '/servers/detail'; |
224 | ce4f9227 | Mike Muzurakis | |
225 | c5a032c4 | Markos Gogoulos | if (changes_since != 0) |
226 | ab5282e4 | Dimitris Moraitis | uri+='?changes-since='+changes_since
|
227 | 1a49199e | Dimitris Moraitis | |
228 | 1c7978ce | Dimitris Moraitis | update_request = $.ajax({
|
229 | 1a49199e | Dimitris Moraitis | url: uri,
|
230 | 42f67a2a | Dimitris Moraitis | type: "GET", |
231 | 42f67a2a | Dimitris Moraitis | timeout: TIMEOUT,
|
232 | 42f67a2a | Dimitris Moraitis | dataType: "json", |
233 | 146b6003 | Dimitris Moraitis | error: function(jqXHR, textStatus, errorThrown) { |
234 | 1a49199e | Dimitris Moraitis | // don't forget to try again later
|
235 | 146b6003 | Dimitris Moraitis | if (interval) {
|
236 | 1c7978ce | Dimitris Moraitis | clearTimeout(deferred); // clear old deferred calls
|
237 | 1a49199e | Dimitris Moraitis | deferred = setTimeout(update_vms,interval,interval); |
238 | 146b6003 | Dimitris Moraitis | } |
239 | 1a49199e | Dimitris Moraitis | // as for now, just show an error message
|
240 | 0317c509 | Dimitris Moraitis | try { console.info('update_vms errback:' + jqXHR.status ) } catch(err) {} |
241 | 038383b1 | Dimitris Moraitis | ajax_error(jqXHR.status, undefined, 'Update VMs', jqXHR.responseText); |
242 | 1a49199e | Dimitris Moraitis | return false; |
243 | 1a49199e | Dimitris Moraitis | }, |
244 | 1a49199e | Dimitris Moraitis | success: function(data, textStatus, jqXHR) { |
245 | 267403ca | Dimitris Moraitis | // create changes_since string if necessary
|
246 | 267403ca | Dimitris Moraitis | if (jqXHR.getResponseHeader('Date') != null){ |
247 | 267403ca | Dimitris Moraitis | changes_since_date = new Date(jqXHR.getResponseHeader('Date')); |
248 | 267403ca | Dimitris Moraitis | changes_since = ISODateString(changes_since_date); |
249 | 267403ca | Dimitris Moraitis | } |
250 | 267403ca | Dimitris Moraitis | |
251 | 1c7978ce | Dimitris Moraitis | if (interval) {
|
252 | 1c7978ce | Dimitris Moraitis | clearTimeout(deferred); // clear old deferred calls
|
253 | 0317c509 | Dimitris Moraitis | deferred = setTimeout(update_vms,interval,interval); |
254 | 0317c509 | Dimitris Moraitis | } |
255 | 0317c509 | Dimitris Moraitis | |
256 | 0317c509 | Dimitris Moraitis | if (jqXHR.status == 200 || jqXHR.status == 203) { |
257 | 1a49199e | Dimitris Moraitis | try {
|
258 | 7e45ddef | Dimitris Moraitis | servers = data.servers.values; |
259 | 038383b1 | Dimitris Moraitis | } catch(err) { ajax_error('400', undefined, 'Update VMs', jqXHR.responseText);} |
260 | 1a49199e | Dimitris Moraitis | update_machines_view(data); |
261 | 0317c509 | Dimitris Moraitis | } else if (jqXHR.status != 304){ |
262 | 0317c509 | Dimitris Moraitis | try { console.info('update_vms callback:' + jqXHR.status ) } catch(err) {} |
263 | 038383b1 | Dimitris Moraitis | //ajax_error(jqXHR.status, undefined, 'Update VMs', jqXHR.responseText);
|
264 | 1a49199e | Dimitris Moraitis | } |
265 | 1a49199e | Dimitris Moraitis | return false; |
266 | 42f67a2a | Dimitris Moraitis | } |
267 | 42f67a2a | Dimitris Moraitis | }); |
268 | 42f67a2a | Dimitris Moraitis | return false; |
269 | 42f67a2a | Dimitris Moraitis | } |
270 | 42f67a2a | Dimitris Moraitis | |
271 | 146b6003 | Dimitris Moraitis | // get and show a list of available standard and custom images
|
272 | 42f67a2a | Dimitris Moraitis | function update_images() { |
273 | 42f67a2a | Dimitris Moraitis | $.ajax({
|
274 | 73c2c75b | Markos Gogoulos | url: API_URL + '/images/detail', |
275 | 42f67a2a | Dimitris Moraitis | type: "GET", |
276 | 42f67a2a | Dimitris Moraitis | //async: false,
|
277 | 42f67a2a | Dimitris Moraitis | dataType: "json", |
278 | 42f67a2a | Dimitris Moraitis | timeout: TIMEOUT,
|
279 | 42f67a2a | Dimitris Moraitis | error: function(jqXHR, textStatus, errorThrown) { |
280 | 038383b1 | Dimitris Moraitis | ajax_error(jqXHR.status, undefined, 'Update Images', jqXHR.responseText); |
281 | 42f67a2a | Dimitris Moraitis | }, |
282 | 42f67a2a | Dimitris Moraitis | success: function(data, textStatus, jqXHR) { |
283 | 146b6003 | Dimitris Moraitis | try {
|
284 | 73c2c75b | Markos Gogoulos | images = data.images.values; |
285 | d134b632 | Dimitris Moraitis | update_wizard_images(); |
286 | 146b6003 | Dimitris Moraitis | } catch(err){
|
287 | 146b6003 | Dimitris Moraitis | ajax_error("NO_IMAGES");
|
288 | 146b6003 | Dimitris Moraitis | } |
289 | 42f67a2a | Dimitris Moraitis | } |
290 | 42f67a2a | Dimitris Moraitis | }); |
291 | 42f67a2a | Dimitris Moraitis | return false; |
292 | 42f67a2a | Dimitris Moraitis | } |
293 | 42f67a2a | Dimitris Moraitis | |
294 | d134b632 | Dimitris Moraitis | function update_wizard_images() { |
295 | d134b632 | Dimitris Moraitis | if ($("ul#standard-images li").toArray().length + $("ul#custom-images li").toArray().length == 0) { |
296 | d134b632 | Dimitris Moraitis | $.each(images, function(i,image){ |
297 | d134b632 | Dimitris Moraitis | var img = $('#image-template').clone().attr("id","img-"+image.id).fadeIn("slow"); |
298 | d134b632 | Dimitris Moraitis | img.find("label").attr('for',"img-radio-" + image.id); |
299 | d134b632 | Dimitris Moraitis | img.find(".image-title").text(image.name);
|
300 | 73c2c75b | Markos Gogoulos | if (image.metadata) {
|
301 | 73c2c75b | Markos Gogoulos | if (image.metadata.values.description != undefined) { |
302 | 73c2c75b | Markos Gogoulos | img.find(".description").text(image.metadata.values.description);
|
303 | 73c2c75b | Markos Gogoulos | } |
304 | 73c2c75b | Markos Gogoulos | if (image.metadata.values.size != undefined) { |
305 | afa2ebd2 | Mike Muzurakis | img.find("#size").text(image.metadata.values.size);
|
306 | 73c2c75b | Markos Gogoulos | } |
307 | 73c2c75b | Markos Gogoulos | } |
308 | d134b632 | Dimitris Moraitis | img.find("input.radio").attr('id',"img-radio-" + image.id); |
309 | d134b632 | Dimitris Moraitis | if (i==0) img.find("input.radio").attr("checked","checked"); |
310 | a64e74f0 | Markos Gogoulos | var image_logo = os_icon(image.metadata);
|
311 | a64e74f0 | Markos Gogoulos | img.find("img.image-logo").attr('src','static/os_logos/'+image_logo+'.png'); |
312 | 73c2c75b | Markos Gogoulos | if (image.metadata) {
|
313 | 73c2c75b | Markos Gogoulos | if (image.metadata.values.serverId != undefined) { |
314 | 73c2c75b | Markos Gogoulos | img.appendTo("ul#custom-images");
|
315 | 73c2c75b | Markos Gogoulos | } else {
|
316 | 73c2c75b | Markos Gogoulos | img.appendTo("ul#standard-images");
|
317 | 73c2c75b | Markos Gogoulos | } |
318 | 73c2c75b | Markos Gogoulos | } else {
|
319 | 73c2c75b | Markos Gogoulos | img.appendTo("ul#standard-images");
|
320 | 73c2c75b | Markos Gogoulos | } |
321 | d134b632 | Dimitris Moraitis | }); |
322 | d134b632 | Dimitris Moraitis | } |
323 | d134b632 | Dimitris Moraitis | } |
324 | d134b632 | Dimitris Moraitis | |
325 | d134b632 | Dimitris Moraitis | function update_wizard_flavors(){ |
326 | d134b632 | Dimitris Moraitis | // sliders for selecting VM flavor
|
327 | d134b632 | Dimitris Moraitis | $("#cpu:range").rangeinput({min:0, |
328 | d134b632 | Dimitris Moraitis | value:0, |
329 | d134b632 | Dimitris Moraitis | step:1, |
330 | d134b632 | Dimitris Moraitis | progress: true, |
331 | d134b632 | Dimitris Moraitis | max:cpus.length-1}); |
332 | d134b632 | Dimitris Moraitis | |
333 | d134b632 | Dimitris Moraitis | $("#storage:range").rangeinput({min:0, |
334 | d134b632 | Dimitris Moraitis | value:0, |
335 | d134b632 | Dimitris Moraitis | step:1, |
336 | d134b632 | Dimitris Moraitis | progress: true, |
337 | d134b632 | Dimitris Moraitis | max:disks.length-1}); |
338 | d134b632 | Dimitris Moraitis | |
339 | d134b632 | Dimitris Moraitis | $("#ram:range").rangeinput({min:0, |
340 | d134b632 | Dimitris Moraitis | value:0, |
341 | d134b632 | Dimitris Moraitis | step:1, |
342 | d134b632 | Dimitris Moraitis | progress: true, |
343 | d134b632 | Dimitris Moraitis | max:ram.length-1}); |
344 | d134b632 | Dimitris Moraitis | $("#small").click(); |
345 | afa2ebd2 | Mike Muzurakis | |
346 | d134b632 | Dimitris Moraitis | // update the indicators when sliding
|
347 | d134b632 | Dimitris Moraitis | $("#cpu:range").data().rangeinput.onSlide(function(event,value){ |
348 | d134b632 | Dimitris Moraitis | $("#cpu-indicator")[0].value = cpus[Number(value)]; |
349 | afa2ebd2 | Mike Muzurakis | $("#cpu-indicator").addClass('selectedrange'); |
350 | d134b632 | Dimitris Moraitis | }); |
351 | d134b632 | Dimitris Moraitis | $("#cpu:range").data().rangeinput.change(function(event,value){ |
352 | d134b632 | Dimitris Moraitis | $("#cpu-indicator")[0].value = cpus[Number(value)]; |
353 | 94adeabb | Mike Muzurakis | $("#custom").click(); |
354 | afa2ebd2 | Mike Muzurakis | $("#custom input").attr('checked', 'checked'); |
355 | afa2ebd2 | Mike Muzurakis | $("#cpu-indicator").removeClass('selectedrange'); |
356 | d134b632 | Dimitris Moraitis | }); |
357 | d134b632 | Dimitris Moraitis | $("#ram:range").data().rangeinput.onSlide(function(event,value){ |
358 | d134b632 | Dimitris Moraitis | $("#ram-indicator")[0].value = ram[Number(value)]; |
359 | afa2ebd2 | Mike Muzurakis | $("#ram-indicator").addClass('selectedrange'); |
360 | d134b632 | Dimitris Moraitis | }); |
361 | d134b632 | Dimitris Moraitis | $("#ram:range").data().rangeinput.change(function(event,value){ |
362 | d134b632 | Dimitris Moraitis | $("#ram-indicator")[0].value = ram[Number(value)]; |
363 | d134b632 | Dimitris Moraitis | $("#custom").click(); |
364 | 94adeabb | Mike Muzurakis | $("#custom input").attr('checked', 'checked'); |
365 | afa2ebd2 | Mike Muzurakis | $("#ram-indicator").removeClass('selectedrange'); |
366 | d134b632 | Dimitris Moraitis | }); |
367 | d134b632 | Dimitris Moraitis | $("#storage:range").data().rangeinput.onSlide(function(event,value){ |
368 | d134b632 | Dimitris Moraitis | $("#storage-indicator")[0].value = disks[Number(value)]; |
369 | afa2ebd2 | Mike Muzurakis | $("#storage-indicator").addClass('selectedrange'); |
370 | d134b632 | Dimitris Moraitis | }); |
371 | d134b632 | Dimitris Moraitis | $("#storage:range").data().rangeinput.change(function(event,value){ |
372 | d134b632 | Dimitris Moraitis | $("#storage-indicator")[0].value = disks[Number(value)]; |
373 | d134b632 | Dimitris Moraitis | $("#custom").click(); |
374 | 94adeabb | Mike Muzurakis | $("#custom input").attr('checked', 'checked'); |
375 | afa2ebd2 | Mike Muzurakis | $("#storage-indicator").removeClass('selectedrange'); |
376 | d134b632 | Dimitris Moraitis | }); |
377 | d134b632 | Dimitris Moraitis | } |
378 | d134b632 | Dimitris Moraitis | |
379 | 42f67a2a | Dimitris Moraitis | Array.prototype.unique = function () { |
380 | 42f67a2a | Dimitris Moraitis | var r = new Array(); |
381 | 42f67a2a | Dimitris Moraitis | o:for(var i = 0, n = this.length; i < n; i++) |
382 | 42f67a2a | Dimitris Moraitis | { |
383 | 42f67a2a | Dimitris Moraitis | for(var x = 0, y = r.length; x < y; x++) |
384 | 42f67a2a | Dimitris Moraitis | { |
385 | 42f67a2a | Dimitris Moraitis | if(r[x]==this[i]) |
386 | 42f67a2a | Dimitris Moraitis | { |
387 | 42f67a2a | Dimitris Moraitis | continue o;
|
388 | 42f67a2a | Dimitris Moraitis | } |
389 | 42f67a2a | Dimitris Moraitis | } |
390 | 42f67a2a | Dimitris Moraitis | r[r.length] = this[i];
|
391 | 42f67a2a | Dimitris Moraitis | } |
392 | 42f67a2a | Dimitris Moraitis | return r;
|
393 | 42f67a2a | Dimitris Moraitis | } |
394 | 42f67a2a | Dimitris Moraitis | |
395 | 42f67a2a | Dimitris Moraitis | // get and configure flavor selection
|
396 | 42f67a2a | Dimitris Moraitis | function update_flavors() { |
397 | 42f67a2a | Dimitris Moraitis | $.ajax({
|
398 | f1641e4d | Markos Gogoulos | url: API_URL + '/flavors/detail', |
399 | 42f67a2a | Dimitris Moraitis | type: "GET", |
400 | 42f67a2a | Dimitris Moraitis | //async: false,
|
401 | 42f67a2a | Dimitris Moraitis | dataType: "json", |
402 | 42f67a2a | Dimitris Moraitis | timeout: TIMEOUT,
|
403 | 42f67a2a | Dimitris Moraitis | error: function(jqXHR, textStatus, errorThrown) { |
404 | 146b6003 | Dimitris Moraitis | try {
|
405 | 038383b1 | Dimitris Moraitis | ajax_error(jqXHR.status, undefined, 'Update Flavors', jqXHR.responseText); |
406 | 146b6003 | Dimitris Moraitis | } catch (err) {
|
407 | 146b6003 | Dimitris Moraitis | ajax_error(err); |
408 | 146b6003 | Dimitris Moraitis | } |
409 | 42f67a2a | Dimitris Moraitis | }, |
410 | 42f67a2a | Dimitris Moraitis | success: function(data, textStatus, jqXHR) { |
411 | f1641e4d | Markos Gogoulos | flavors = data.flavors.values; |
412 | 42f67a2a | Dimitris Moraitis | $.each(flavors, function(i, flavor) { |
413 | 42f67a2a | Dimitris Moraitis | cpus[i] = flavor['cpu'];
|
414 | 42f67a2a | Dimitris Moraitis | disks[i] = flavor['disk'];
|
415 | 42f67a2a | Dimitris Moraitis | ram[i] = flavor['ram'];
|
416 | 42f67a2a | Dimitris Moraitis | }); |
417 | 42f67a2a | Dimitris Moraitis | cpus = cpus.unique(); |
418 | 42f67a2a | Dimitris Moraitis | disks = disks.unique(); |
419 | 42f67a2a | Dimitris Moraitis | ram = ram.unique(); |
420 | d134b632 | Dimitris Moraitis | update_wizard_flavors(); |
421 | 42f67a2a | Dimitris Moraitis | } |
422 | 42f67a2a | Dimitris Moraitis | }); |
423 | 42f67a2a | Dimitris Moraitis | return false; |
424 | 42f67a2a | Dimitris Moraitis | } |
425 | 1a49199e | Dimitris Moraitis | |
426 | b335768e | Markos Gogoulos | // return flavorRef from cpu, disk, ram values
|
427 | 42f67a2a | Dimitris Moraitis | function identify_flavor(cpu, disk, ram){ |
428 | 42f67a2a | Dimitris Moraitis | for (i=0;i<flavors.length;i++){ |
429 | 42f67a2a | Dimitris Moraitis | if (flavors[i]['cpu'] == cpu && flavors[i]['disk']==disk && flavors[i]['ram']==ram) { |
430 | 42f67a2a | Dimitris Moraitis | return flavors[i]['id'] |
431 | 42f67a2a | Dimitris Moraitis | } |
432 | 42f67a2a | Dimitris Moraitis | } |
433 | 42f67a2a | Dimitris Moraitis | return 0; |
434 | 42f67a2a | Dimitris Moraitis | } |
435 | 42f67a2a | Dimitris Moraitis | |
436 | 45ab204d | Markos Gogoulos | // return image entry from imageRef
|
437 | 45ab204d | Markos Gogoulos | function get_image(imageRef) { |
438 | 45ab204d | Markos Gogoulos | for (i=0;i<images.length;i++){ |
439 | 45ab204d | Markos Gogoulos | if (images[i]['id'] == imageRef) { |
440 | 45ab204d | Markos Gogoulos | return images[i];
|
441 | 45ab204d | Markos Gogoulos | } |
442 | 45ab204d | Markos Gogoulos | } |
443 | 45ab204d | Markos Gogoulos | return 0; |
444 | 45ab204d | Markos Gogoulos | } |
445 | 45ab204d | Markos Gogoulos | |
446 | dcf153ce | Christodoulos Psaltis | // update the actions in list view
|
447 | e32c2a5d | Dimitris Moraitis | function updateActions() { |
448 | e32c2a5d | Dimitris Moraitis | var states = [];
|
449 | e32c2a5d | Dimitris Moraitis | var on = [];
|
450 | e32c2a5d | Dimitris Moraitis | var checked = $("table.list-machines tbody input[type='checkbox']:checked"); |
451 | e32c2a5d | Dimitris Moraitis | // disable all actions to begin with
|
452 | e32c2a5d | Dimitris Moraitis | for (action in actions) { |
453 | e32c2a5d | Dimitris Moraitis | $("#action-" + action).removeClass('enabled'); |
454 | e32c2a5d | Dimitris Moraitis | } |
455 | e32c2a5d | Dimitris Moraitis | |
456 | e32c2a5d | Dimitris Moraitis | // are there multiple machines selected?
|
457 | e32c2a5d | Dimitris Moraitis | if (checked.length>1) |
458 | e32c2a5d | Dimitris Moraitis | states[0] = 'multiple'; |
459 | e32c2a5d | Dimitris Moraitis | |
460 | e32c2a5d | Dimitris Moraitis | // check the states of selected machines
|
461 | e32c2a5d | Dimitris Moraitis | checked.each(function(i,checkbox) {
|
462 | e32c2a5d | Dimitris Moraitis | states[states.length] = checkbox.className; |
463 | e32c2a5d | Dimitris Moraitis | var ip = $("#" + checkbox.id.replace('input-','') + ".ip span.public").text(); |
464 | e32c2a5d | Dimitris Moraitis | if (ip.replace('undefined','').length) |
465 | e32c2a5d | Dimitris Moraitis | states[states.length] = 'network';
|
466 | e32c2a5d | Dimitris Moraitis | }); |
467 | e32c2a5d | Dimitris Moraitis | |
468 | e32c2a5d | Dimitris Moraitis | // decide which actions should be enabled
|
469 | e32c2a5d | Dimitris Moraitis | for (a in actions) { |
470 | e32c2a5d | Dimitris Moraitis | var enabled = false; |
471 | e32c2a5d | Dimitris Moraitis | for (var s =0; s<states.length; s++) { |
472 | e32c2a5d | Dimitris Moraitis | if (actions[a].indexOf(states[s]) != -1 ) { |
473 | e32c2a5d | Dimitris Moraitis | enabled = true;
|
474 | e32c2a5d | Dimitris Moraitis | } else {
|
475 | e32c2a5d | Dimitris Moraitis | enabled = false;
|
476 | e32c2a5d | Dimitris Moraitis | break;
|
477 | e32c2a5d | Dimitris Moraitis | } |
478 | e32c2a5d | Dimitris Moraitis | } |
479 | e32c2a5d | Dimitris Moraitis | if (enabled)
|
480 | e32c2a5d | Dimitris Moraitis | on[on.length]=a; |
481 | e32c2a5d | Dimitris Moraitis | } |
482 | e32c2a5d | Dimitris Moraitis | // enable those actions
|
483 | e32c2a5d | Dimitris Moraitis | for (action in on) { |
484 | e32c2a5d | Dimitris Moraitis | $("#action-" + on[action]).addClass('enabled'); |
485 | e32c2a5d | Dimitris Moraitis | } |
486 | e32c2a5d | Dimitris Moraitis | } |
487 | 146b6003 | Dimitris Moraitis | |
488 | 0971fa71 | Markos Gogoulos | //create server action
|
489 | 0971fa71 | Markos Gogoulos | function create_vm(machineName, imageRef, flavorRef){ |
490 | 45ab204d | Markos Gogoulos | |
491 | 45ab204d | Markos Gogoulos | var image_logo = os_icon(get_image(imageRef).metadata);
|
492 | 45ab204d | Markos Gogoulos | |
493 | 0971fa71 | Markos Gogoulos | var payload = {
|
494 | 0971fa71 | Markos Gogoulos | "server": {
|
495 | 0971fa71 | Markos Gogoulos | "name": machineName,
|
496 | 0971fa71 | Markos Gogoulos | "imageRef": imageRef,
|
497 | 0971fa71 | Markos Gogoulos | "flavorRef" : flavorRef,
|
498 | 0971fa71 | Markos Gogoulos | "metadata" : {
|
499 | 45ab204d | Markos Gogoulos | "OS" : image_logo
|
500 | 038383b1 | Dimitris Moraitis | } |
501 | 0971fa71 | Markos Gogoulos | } |
502 | 0971fa71 | Markos Gogoulos | }; |
503 | 7e45ddef | Dimitris Moraitis | var uri = API_URL + '/servers'; |
504 | 0971fa71 | Markos Gogoulos | |
505 | 0971fa71 | Markos Gogoulos | $.ajax({
|
506 | 7e45ddef | Dimitris Moraitis | url: uri,
|
507 | 0971fa71 | Markos Gogoulos | type: "POST", |
508 | 7e45ddef | Dimitris Moraitis | contentType: "application/json", |
509 | 0971fa71 | Markos Gogoulos | dataType: "json", |
510 | 0971fa71 | Markos Gogoulos | data: JSON.stringify(payload),
|
511 | 0971fa71 | Markos Gogoulos | timeout: TIMEOUT,
|
512 | 0971fa71 | Markos Gogoulos | error: function(jqXHR, textStatus, errorThrown) { |
513 | 038383b1 | Dimitris Moraitis | ajax_error(jqXHR.status, undefined, 'Create VM', jqXHR.responseText); |
514 | 0971fa71 | Markos Gogoulos | }, |
515 | 0971fa71 | Markos Gogoulos | success: function(data, textStatus, jqXHR) { |
516 | 0971fa71 | Markos Gogoulos | if ( jqXHR.status == '202') { |
517 | 0971fa71 | Markos Gogoulos | ajax_success("CREATE_VM_SUCCESS", data.server.adminPass);
|
518 | 0971fa71 | Markos Gogoulos | } else {
|
519 | 038383b1 | Dimitris Moraitis | ajax_error(jqXHR.status, undefined, 'Create VM', jqXHR.responseText); |
520 | 0971fa71 | Markos Gogoulos | } |
521 | 0971fa71 | Markos Gogoulos | } |
522 | 0971fa71 | Markos Gogoulos | }); |
523 | 0971fa71 | Markos Gogoulos | } |
524 | 0971fa71 | Markos Gogoulos | |
525 | 42f67a2a | Dimitris Moraitis | // reboot action
|
526 | 42f67a2a | Dimitris Moraitis | function reboot(serverIDs){ |
527 | 42f67a2a | Dimitris Moraitis | if (!serverIDs.length){
|
528 | a1a31201 | Dimitris Moraitis | //ajax_success('DEFAULT');
|
529 | 42f67a2a | Dimitris Moraitis | return false; |
530 | 42f67a2a | Dimitris Moraitis | } |
531 | 42f67a2a | Dimitris Moraitis | // ajax post reboot call
|
532 | 42f67a2a | Dimitris Moraitis | var payload = {
|
533 | 42f67a2a | Dimitris Moraitis | "reboot": {"type" : "HARD"} |
534 | 42f67a2a | Dimitris Moraitis | }; |
535 | a1a31201 | Dimitris Moraitis | var serverID = serverIDs.pop();
|
536 | 42f67a2a | Dimitris Moraitis | |
537 | 42f67a2a | Dimitris Moraitis | $.ajax({
|
538 | 0971fa71 | Markos Gogoulos | url: API_URL + '/servers/' + serverID + '/action', |
539 | 7e45ddef | Dimitris Moraitis | type: "POST", |
540 | 7e45ddef | Dimitris Moraitis | contentType: "application/json", |
541 | 42f67a2a | Dimitris Moraitis | dataType: "json", |
542 | 42f67a2a | Dimitris Moraitis | data: JSON.stringify(payload),
|
543 | 42f67a2a | Dimitris Moraitis | timeout: TIMEOUT,
|
544 | 42f67a2a | Dimitris Moraitis | error: function(jqXHR, textStatus, errorThrown) { |
545 | 038383b1 | Dimitris Moraitis | display_failure(jqXHR.status, serverID, 'Reboot', jqXHR.responseText)
|
546 | 42f67a2a | Dimitris Moraitis | }, |
547 | 42f67a2a | Dimitris Moraitis | success: function(data, textStatus, jqXHR) { |
548 | 583932c4 | Christodoulos Psaltis | if ( jqXHR.status == '202') { |
549 | 583932c4 | Christodoulos Psaltis | try {
|
550 | 583932c4 | Christodoulos Psaltis | console.info('rebooted ' + serverID);
|
551 | a1a31201 | Dimitris Moraitis | } catch(err) {}
|
552 | a1a31201 | Dimitris Moraitis | // indicate that the action succeeded
|
553 | a1a31201 | Dimitris Moraitis | display_success(serverID); |
554 | a1a31201 | Dimitris Moraitis | // continue with the rest of the servers
|
555 | 42f67a2a | Dimitris Moraitis | reboot(serverIDs); |
556 | 583932c4 | Christodoulos Psaltis | } else {
|
557 | 038383b1 | Dimitris Moraitis | ajax_error(jqXHR.status, serverID, 'Reboot', jqXHR.responseText);
|
558 | 42f67a2a | Dimitris Moraitis | } |
559 | 42f67a2a | Dimitris Moraitis | } |
560 | 42f67a2a | Dimitris Moraitis | }); |
561 | 583932c4 | Christodoulos Psaltis | |
562 | 42f67a2a | Dimitris Moraitis | return false; |
563 | 42f67a2a | Dimitris Moraitis | } |
564 | 42f67a2a | Dimitris Moraitis | |
565 | 42f67a2a | Dimitris Moraitis | // shutdown action
|
566 | 42f67a2a | Dimitris Moraitis | function shutdown(serverIDs) { |
567 | 42f67a2a | Dimitris Moraitis | if (!serverIDs.length){
|
568 | a1a31201 | Dimitris Moraitis | //ajax_success('DEFAULT');
|
569 | 42f67a2a | Dimitris Moraitis | return false; |
570 | 42f67a2a | Dimitris Moraitis | } |
571 | 42f67a2a | Dimitris Moraitis | // ajax post shutdown call
|
572 | 42f67a2a | Dimitris Moraitis | var payload = {
|
573 | 42f67a2a | Dimitris Moraitis | "shutdown": {"timeout" : "5"} |
574 | 42f67a2a | Dimitris Moraitis | }; |
575 | 42f67a2a | Dimitris Moraitis | |
576 | a1a31201 | Dimitris Moraitis | var serverID = serverIDs.pop()
|
577 | 42f67a2a | Dimitris Moraitis | $.ajax({
|
578 | 0971fa71 | Markos Gogoulos | url: API_URL + '/servers/' + serverID + '/action', |
579 | 42f67a2a | Dimitris Moraitis | type: "POST", |
580 | 7e45ddef | Dimitris Moraitis | contentType: "application/json", |
581 | 42f67a2a | Dimitris Moraitis | dataType: "json", |
582 | 42f67a2a | Dimitris Moraitis | data: JSON.stringify(payload),
|
583 | 42f67a2a | Dimitris Moraitis | timeout: TIMEOUT,
|
584 | 42f67a2a | Dimitris Moraitis | error: function(jqXHR, textStatus, errorThrown) { |
585 | 038383b1 | Dimitris Moraitis | display_failure(jqXHR.status, serverID, 'Shutdown', jqXHR.responseText)
|
586 | 42f67a2a | Dimitris Moraitis | }, |
587 | 42f67a2a | Dimitris Moraitis | success: function(data, textStatus, jqXHR) { |
588 | 42f67a2a | Dimitris Moraitis | if ( jqXHR.status == '202') { |
589 | 583932c4 | Christodoulos Psaltis | try {
|
590 | 583932c4 | Christodoulos Psaltis | console.info('suspended ' + serverID);
|
591 | a1a31201 | Dimitris Moraitis | } catch(err) {}
|
592 | a1a31201 | Dimitris Moraitis | // indicate that the action succeeded
|
593 | a1a31201 | Dimitris Moraitis | display_success(serverID); |
594 | a1a31201 | Dimitris Moraitis | // continue with the rest of the servers
|
595 | 42f67a2a | Dimitris Moraitis | shutdown(serverIDs); |
596 | 42f67a2a | Dimitris Moraitis | } else {
|
597 | 038383b1 | Dimitris Moraitis | ajax_error(jqXHR.status, serverID, 'Shutdown', jqXHR.responseText);
|
598 | 748139ba | Christodoulos Psaltis | } |
599 | 748139ba | Christodoulos Psaltis | } |
600 | 42f67a2a | Dimitris Moraitis | }); |
601 | 583932c4 | Christodoulos Psaltis | |
602 | 42f67a2a | Dimitris Moraitis | return false; |
603 | 42f67a2a | Dimitris Moraitis | } |
604 | 42f67a2a | Dimitris Moraitis | |
605 | 42f67a2a | Dimitris Moraitis | // destroy action
|
606 | 42f67a2a | Dimitris Moraitis | function destroy(serverIDs) { |
607 | 42f67a2a | Dimitris Moraitis | if (!serverIDs.length){
|
608 | a1a31201 | Dimitris Moraitis | //ajax_success('DEFAULT');
|
609 | 42f67a2a | Dimitris Moraitis | return false; |
610 | 42f67a2a | Dimitris Moraitis | } |
611 | f15025bc | Christodoulos Psaltis | // ajax post destroy call can have an empty request body
|
612 | f15025bc | Christodoulos Psaltis | var payload = {};
|
613 | 42f67a2a | Dimitris Moraitis | |
614 | 42f67a2a | Dimitris Moraitis | serverID = serverIDs.pop() |
615 | 42f67a2a | Dimitris Moraitis | $.ajax({
|
616 | 0971fa71 | Markos Gogoulos | url: API_URL + '/servers/' + serverID, |
617 | 42f67a2a | Dimitris Moraitis | type: "DELETE", |
618 | 7e45ddef | Dimitris Moraitis | contentType: "application/json", |
619 | 42f67a2a | Dimitris Moraitis | dataType: "json", |
620 | 42f67a2a | Dimitris Moraitis | data: JSON.stringify(payload),
|
621 | 42f67a2a | Dimitris Moraitis | timeout: TIMEOUT,
|
622 | 42f67a2a | Dimitris Moraitis | error: function(jqXHR, textStatus, errorThrown) { |
623 | 038383b1 | Dimitris Moraitis | display_failure(jqXHR.status, serverID, 'Destroy', jqXHR.responseText)
|
624 | 42f67a2a | Dimitris Moraitis | }, |
625 | 42f67a2a | Dimitris Moraitis | success: function(data, textStatus, jqXHR) { |
626 | 2d5cea9b | Markos Gogoulos | if ( jqXHR.status == '204') { |
627 | 583932c4 | Christodoulos Psaltis | try {
|
628 | f15025bc | Christodoulos Psaltis | console.info('destroyed ' + serverID);
|
629 | a1a31201 | Dimitris Moraitis | } catch (err) {}
|
630 | a1a31201 | Dimitris Moraitis | // indicate that the action succeeded
|
631 | a1a31201 | Dimitris Moraitis | display_success(serverID); |
632 | a1a31201 | Dimitris Moraitis | // continue with the rest of the servers
|
633 | 38b1f387 | Christodoulos Psaltis | destroy(serverIDs); |
634 | 42f67a2a | Dimitris Moraitis | } else {
|
635 | 038383b1 | Dimitris Moraitis | ajax_error(jqXHR.status, serverID, 'Destroy', jqXHR.responseText);
|
636 | 748139ba | Christodoulos Psaltis | } |
637 | 748139ba | Christodoulos Psaltis | } |
638 | 42f67a2a | Dimitris Moraitis | }); |
639 | 583932c4 | Christodoulos Psaltis | |
640 | 42f67a2a | Dimitris Moraitis | return false; |
641 | 42f67a2a | Dimitris Moraitis | } |
642 | 42f67a2a | Dimitris Moraitis | |
643 | 42f67a2a | Dimitris Moraitis | // start action
|
644 | 42f67a2a | Dimitris Moraitis | function start(serverIDs){ |
645 | 42f67a2a | Dimitris Moraitis | if (!serverIDs.length){
|
646 | a1a31201 | Dimitris Moraitis | //ajax_success('DEFAULT');
|
647 | 42f67a2a | Dimitris Moraitis | return false; |
648 | 42f67a2a | Dimitris Moraitis | } |
649 | 42f67a2a | Dimitris Moraitis | // ajax post start call
|
650 | 42f67a2a | Dimitris Moraitis | var payload = {
|
651 | 42f67a2a | Dimitris Moraitis | "start": {"type" : "NORMAL"} |
652 | 42f67a2a | Dimitris Moraitis | }; |
653 | 42f67a2a | Dimitris Moraitis | |
654 | a1a31201 | Dimitris Moraitis | var serverID = serverIDs.pop()
|
655 | 42f67a2a | Dimitris Moraitis | $.ajax({
|
656 | 0971fa71 | Markos Gogoulos | url: API_URL + '/servers/' + serverID + '/action', |
657 | 42f67a2a | Dimitris Moraitis | type: "POST", |
658 | 7e45ddef | Dimitris Moraitis | contentType: "application/json", |
659 | 42f67a2a | Dimitris Moraitis | dataType: "json", |
660 | 42f67a2a | Dimitris Moraitis | data: JSON.stringify(payload),
|
661 | 42f67a2a | Dimitris Moraitis | timeout: TIMEOUT,
|
662 | 42f67a2a | Dimitris Moraitis | error: function(jqXHR, textStatus, errorThrown) { |
663 | 038383b1 | Dimitris Moraitis | display_failure(jqXHR.status, serverID, 'Start', jqXHR.responseText)
|
664 | 42f67a2a | Dimitris Moraitis | }, |
665 | 42f67a2a | Dimitris Moraitis | success: function(data, textStatus, jqXHR) { |
666 | 42f67a2a | Dimitris Moraitis | if ( jqXHR.status == '202') { |
667 | 583932c4 | Christodoulos Psaltis | try {
|
668 | 583932c4 | Christodoulos Psaltis | console.info('started ' + serverID);
|
669 | a1a31201 | Dimitris Moraitis | } catch(err) {}
|
670 | a1a31201 | Dimitris Moraitis | // indicate that the action succeeded
|
671 | a1a31201 | Dimitris Moraitis | display_success(serverID); |
672 | a1a31201 | Dimitris Moraitis | // continue with the rest of the servers
|
673 | 42f67a2a | Dimitris Moraitis | start(serverIDs); |
674 | 42f67a2a | Dimitris Moraitis | } else {
|
675 | 038383b1 | Dimitris Moraitis | ajax_error(jqXHR.status, serverID, 'Start', jqXHR.responseText);
|
676 | 748139ba | Christodoulos Psaltis | } |
677 | 748139ba | Christodoulos Psaltis | } |
678 | 42f67a2a | Dimitris Moraitis | }); |
679 | 583932c4 | Christodoulos Psaltis | |
680 | 42f67a2a | Dimitris Moraitis | return false; |
681 | 42f67a2a | Dimitris Moraitis | } |
682 | 6902f72e | clopy | |
683 | 5186eb04 | Christodoulos Psaltis | // get server metadata
|
684 | 5186eb04 | Christodoulos Psaltis | function get_metadata(serverID) { |
685 | 5186eb04 | Christodoulos Psaltis | $.ajax({
|
686 | 5186eb04 | Christodoulos Psaltis | url: API_URL + '/servers/' + serverID + '/meta', |
687 | 5186eb04 | Christodoulos Psaltis | type: "GET", |
688 | 5186eb04 | Christodoulos Psaltis | //async: false,
|
689 | 5186eb04 | Christodoulos Psaltis | dataType: "json", |
690 | 5186eb04 | Christodoulos Psaltis | timeout: TIMEOUT,
|
691 | 5186eb04 | Christodoulos Psaltis | error: function(jqXHR, textStatus, errorThrown) { |
692 | 5186eb04 | Christodoulos Psaltis | try {
|
693 | 5186eb04 | Christodoulos Psaltis | ajax_error(jqXHR.status, undefined, 'Get metadata', jqXHR.responseText); |
694 | 5186eb04 | Christodoulos Psaltis | } catch (err) {
|
695 | 5186eb04 | Christodoulos Psaltis | ajax_error(err); |
696 | 5186eb04 | Christodoulos Psaltis | } |
697 | 5186eb04 | Christodoulos Psaltis | }, |
698 | 5186eb04 | Christodoulos Psaltis | success: function(data, textStatus, jqXHR) { |
699 | dd604c16 | Christodoulos Psaltis | list_metadata(data); |
700 | 5186eb04 | Christodoulos Psaltis | } |
701 | 5186eb04 | Christodoulos Psaltis | }); |
702 | 5186eb04 | Christodoulos Psaltis | return false; |
703 | 5186eb04 | Christodoulos Psaltis | } |
704 | 5186eb04 | Christodoulos Psaltis | |
705 | 6902f72e | clopy | // show the welcome screen
|
706 | 6902f72e | clopy | function showWelcome() { |
707 | f5ebca32 | Mike Muzurakis | $("#view-select").fadeOut("fast"); |
708 | cebcd8ea | Mike Muzurakis | $("#machinesview.standard").fadeOut("fast"); |
709 | 6902f72e | clopy | $("#createcontainer").addClass('emptycreatecontainer') |
710 | 6902f72e | clopy | $("#create").addClass('emptycreate') |
711 | f5ebca32 | Mike Muzurakis | $("#emptymachineslist").fadeIn("fast"); |
712 | f5ebca32 | Mike Muzurakis | $("#createbody").fadeIn("fast"); |
713 | ce4f9227 | Mike Muzurakis | $("#create").css("display", "block"); |
714 | 6902f72e | clopy | } |
715 | 6902f72e | clopy | |
716 | 6902f72e | clopy | // hide the welcome screen
|
717 | 6902f72e | clopy | function hideWelcome() { |
718 | 6902f72e | clopy | $("#emptymachineslist").fadeOut("fast"); |
719 | 6902f72e | clopy | $("#createbody").fadeOut("fast"); |
720 | 6902f72e | clopy | $("#createcontainer").removeClass('emptycreatecontainer') |
721 | 6902f72e | clopy | $("#create").removeClass('emptycreate') |
722 | 6902f72e | clopy | $("#view-select").fadeIn("fast"); |
723 | cebcd8ea | Mike Muzurakis | $("#machinesview.standard").fadeIn("fast"); |
724 | ce4f9227 | Mike Muzurakis | $("div#view-select").show(); |
725 | ce4f9227 | Mike Muzurakis | $("#create").css("display", "inline"); |
726 | 6902f72e | clopy | } |