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