Statistics
| Branch: | Tag: | Revision:

root / ui / static / synnefo.js @ 3cb179cd

History | View | Annotate | Download (49.2 kB)

1 a5bc3755 Vangelis Koukis
//
2 a5bc3755 Vangelis Koukis
// Copyright 2011 GRNET S.A. All rights reserved.
3 72872ba2 Christodoulos Psaltis
//
4 a5bc3755 Vangelis Koukis
// Redistribution and use in source and binary forms, with or
5 a5bc3755 Vangelis Koukis
// without modification, are permitted provided that the following
6 a5bc3755 Vangelis Koukis
// conditions are met:
7 72872ba2 Christodoulos Psaltis
//
8 a5bc3755 Vangelis Koukis
//   1. Redistributions of source code must retain the above
9 a5bc3755 Vangelis Koukis
//      copyright notice, this list of conditions and the following
10 a5bc3755 Vangelis Koukis
//      disclaimer.
11 72872ba2 Christodoulos Psaltis
//
12 a5bc3755 Vangelis Koukis
//   2. Redistributions in binary form must reproduce the above
13 a5bc3755 Vangelis Koukis
//      copyright notice, this list of conditions and the following
14 a5bc3755 Vangelis Koukis
//      disclaimer in the documentation and/or other materials
15 a5bc3755 Vangelis Koukis
//      provided with the distribution.
16 72872ba2 Christodoulos Psaltis
//
17 a5bc3755 Vangelis Koukis
// THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
18 a5bc3755 Vangelis Koukis
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 a5bc3755 Vangelis Koukis
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 a5bc3755 Vangelis Koukis
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
21 a5bc3755 Vangelis Koukis
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 a5bc3755 Vangelis Koukis
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 a5bc3755 Vangelis Koukis
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
24 a5bc3755 Vangelis Koukis
// USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25 a5bc3755 Vangelis Koukis
// AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 a5bc3755 Vangelis Koukis
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27 a5bc3755 Vangelis Koukis
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 a5bc3755 Vangelis Koukis
// POSSIBILITY OF SUCH DAMAGE.
29 72872ba2 Christodoulos Psaltis
//
30 a5bc3755 Vangelis Koukis
// The views and conclusions contained in the software and
31 a5bc3755 Vangelis Koukis
// documentation are those of the authors and should not be
32 a5bc3755 Vangelis Koukis
// interpreted as representing official policies, either expressed
33 a5bc3755 Vangelis Koukis
// or implied, of GRNET S.A.
34 a5bc3755 Vangelis Koukis
//
35 22afb635 Vangelis Koukis
var API_URL = "/api/v1.1";
36 f533f224 Vangelis Koukis
var changes_since = 0, deferred = 0, update_request = false, load_request = false, pending_actions = [];
37 f533f224 Vangelis Koukis
var flavors = [], images = [], servers = [], disks = [], cpus = [], ram = [];
38 f533f224 Vangelis Koukis
var networks = [], networks_changes_since = 0;
39 f533f224 Vangelis Koukis
40 146b6003 Dimitris Moraitis
41 f533f224 Vangelis Koukis
//FIXME: authentication
42 be066a83 Markos Gogoulos
//if cookie with value X-Auth-Token exists, set the value on the headers.
43 d994d118 Markos Gogoulos
    $.ajaxSetup({
44 8b17cf6e Markos Gogoulos
        'beforeSend': function(xhr) {
45 89b6b240 Georgios Gousios
            //if ($.cookie("X-Auth-Token") != null) {
46 be066a83 Markos Gogoulos
              xhr.setRequestHeader("X-Auth-Token", $.cookie("X-Auth-Token"));
47 89b6b240 Georgios Gousios
            //} else {
48 89b6b240 Georgios Gousios
            //    $.cookie("X-Auth-Token", "46e427d657b20defe352804f0eb6f8a2"); // set X-Auth-Token cookie
49 89b6b240 Georgios Gousios
            //}
50 8b17cf6e Markos Gogoulos
        }
51 d994d118 Markos Gogoulos
    });
52 d994d118 Markos Gogoulos
53 c5a032c4 Markos Gogoulos
function ISODateString(d){
54 b02144c8 Vangelis Koukis
    //return a date in an ISO 8601 format using UTC.
55 c5a032c4 Markos Gogoulos
    //do not include time zone info (Z) at the end
56 b02144c8 Vangelis Koukis
    //taken from the Mozilla Developer Center
57 267403ca Dimitris Moraitis
    function pad(n){ return n<10 ? '0'+n : n }
58 267403ca Dimitris Moraitis
    return  d.getUTCFullYear()+ '-' +
59 f533f224 Vangelis Koukis
            pad(d.getUTCMonth()+1) + '-' +
60 f533f224 Vangelis Koukis
            pad(d.getUTCDate()) + 'T' +
61 f533f224 Vangelis Koukis
            pad(d.getUTCHours()) + ':' +
62 f533f224 Vangelis Koukis
            pad(d.getUTCMinutes()) + ':' +
63 f533f224 Vangelis Koukis
            pad(d.getUTCSeconds()) +'Z'
64 038383b1 Dimitris Moraitis
}
65 038383b1 Dimitris Moraitis
66 f533f224 Vangelis Koukis
function parse_error(responseText, errorCode){
67 f533f224 Vangelis Koukis
    var errors = [];
68 f533f224 Vangelis Koukis
    try {
69 f533f224 Vangelis Koukis
        responseObj = JSON.parse(responseText);
70 f533f224 Vangelis Koukis
    }
71 f533f224 Vangelis Koukis
    catch(err) {
72 f533f224 Vangelis Koukis
        errors[0] = {'code': errorCode};
73 f533f224 Vangelis Koukis
        return errors;
74 f533f224 Vangelis Koukis
    }
75 f533f224 Vangelis Koukis
    for (var err in responseObj){
76 f533f224 Vangelis Koukis
        errors[errors.length] = responseObj[err];
77 f533f224 Vangelis Koukis
    }
78 f533f224 Vangelis Koukis
    return errors;
79 267403ca Dimitris Moraitis
}
80 c5a032c4 Markos Gogoulos
81 41cad45d Dimitris Moraitis
// indexOf prototype for IE
82 41cad45d Dimitris Moraitis
if (!Array.prototype.indexOf) {
83 41cad45d Dimitris Moraitis
  Array.prototype.indexOf = function(elt /*, from*/) {
84 41cad45d Dimitris Moraitis
    var len = this.length;
85 41cad45d Dimitris Moraitis
    var from = Number(arguments[1]) || 0;
86 41cad45d Dimitris Moraitis
    from = (from < 0)
87 41cad45d Dimitris Moraitis
         ? Math.ceil(from)
88 41cad45d Dimitris Moraitis
         : Math.floor(from);
89 41cad45d Dimitris Moraitis
    if (from < 0)
90 41cad45d Dimitris Moraitis
      from += len;
91 41cad45d Dimitris Moraitis
92 41cad45d Dimitris Moraitis
    for (; from < len; from++) {
93 41cad45d Dimitris Moraitis
      if (from in this &&
94 41cad45d Dimitris Moraitis
          this[from] === elt)
95 41cad45d Dimitris Moraitis
        return from;
96 41cad45d Dimitris Moraitis
    }
97 41cad45d Dimitris Moraitis
    return -1;
98 41cad45d Dimitris Moraitis
  };
99 41cad45d Dimitris Moraitis
}
100 41cad45d Dimitris Moraitis
101 a70fb308 Christodoulos Psaltis
function update_confirmations() {
102 dcf153ce Christodoulos Psaltis
    // hide all confirm boxes to begin with
103 f533f224 Vangelis Koukis
    $('#machines-pane div.confirm_single').hide();
104 f533f224 Vangelis Koukis
    $('#machines-pane div.confirm_multiple').hide();
105 a70fb308 Christodoulos Psaltis
    var action_type = [];
106 9b2ab29a Christodoulos Psaltis
    // standard view or single view
107 9b2ab29a Christodoulos Psaltis
    if ($.cookie("view") == '0' || $.cookie("view") == '2') {
108 9044c6eb Christodoulos Psaltis
        for (var i=0; i<pending_actions.length; i++) {
109 dcf153ce Christodoulos Psaltis
            // show single confirms
110 a70fb308 Christodoulos Psaltis
            if (pending_actions[i][0] == reboot) {
111 9044c6eb Christodoulos Psaltis
                action_type = "reboot";
112 a70fb308 Christodoulos Psaltis
            } else if (pending_actions[i][0] == shutdown) {
113 9044c6eb Christodoulos Psaltis
                action_type = "shutdown";
114 a70fb308 Christodoulos Psaltis
            } else if (pending_actions[i][0] == start) {
115 9044c6eb Christodoulos Psaltis
                action_type = "start";
116 9044c6eb Christodoulos Psaltis
            } else if (pending_actions[i][0] == open_console) {
117 9044c6eb Christodoulos Psaltis
                action_type = "console";
118 a70fb308 Christodoulos Psaltis
            } else {
119 9044c6eb Christodoulos Psaltis
                action_type = "destroy";
120 a70fb308 Christodoulos Psaltis
            }
121 9b2ab29a Christodoulos Psaltis
            $("#machines-pane #" + pending_actions[i][1] +
122 9b2ab29a Christodoulos Psaltis
            " div.action-container." + action_type + " div.confirm_single").show();
123 dc3e66b9 Mike Muzurakis
        }
124 f533f224 Vangelis Koukis
    }
125 f533f224 Vangelis Koukis
    // if more than one pending action show multiple confirm box
126 f533f224 Vangelis Koukis
    if (pending_actions.length>1 || $.cookie("view") == '1' && pending_actions.length == 1){
127 f533f224 Vangelis Koukis
        $('#machines-pane div.confirm_multiple span.actionLen').text(pending_actions.length);
128 f533f224 Vangelis Koukis
        $('#machines-pane div.confirm_multiple').show();
129 f533f224 Vangelis Koukis
    }
130 f533f224 Vangelis Koukis
}
131 dcf153ce Christodoulos Psaltis
132 f533f224 Vangelis Koukis
function update_network_confirmations(){
133 f533f224 Vangelis Koukis
    // hide all confirm boxes to begin with
134 f533f224 Vangelis Koukis
    $('#networks-pane div.confirm_multiple').hide();
135 f533f224 Vangelis Koukis
136 f533f224 Vangelis Koukis
    for (var i=0;i<pending_actions.length;i++){
137 f533f224 Vangelis Koukis
        // show single confirms depending on the action
138 f533f224 Vangelis Koukis
        if (pending_actions[i][0] == delete_network) {
139 f533f224 Vangelis Koukis
            $("#networks-pane div.network#net-"+pending_actions[i][1]).children('.confirm_single').show();
140 f533f224 Vangelis Koukis
        } else if (pending_actions[i][0] == remove_server_from_network) {
141 f533f224 Vangelis Koukis
            $("#networks-pane div.network #net-"+pending_actions[i][1]+"-server-"+pending_actions[i][2]).children('.confirm_single').show();
142 f533f224 Vangelis Koukis
        } // else {}
143 f533f224 Vangelis Koukis
    }
144 f533f224 Vangelis Koukis
145 f533f224 Vangelis Koukis
    // if more than one pending action show multiple confirm box
146 f533f224 Vangelis Koukis
    if (pending_actions.length > 1){
147 f533f224 Vangelis Koukis
        $('#networks-pane div.confirm_multiple span.actionLen').text(pending_actions.length);
148 f533f224 Vangelis Koukis
        $('#networks-pane div.confirm_multiple').show();
149 f533f224 Vangelis Koukis
    }
150 3d286f84 Dimitris Moraitis
}
151 3d286f84 Dimitris Moraitis
152 42f67a2a Dimitris Moraitis
function list_view() {
153 f533f224 Vangelis Koukis
    changes_since = 0; // to reload full list
154 f533f224 Vangelis Koukis
    pending_actions = []; // clear pending actions
155 f533f224 Vangelis Koukis
    update_confirmations();
156 f533f224 Vangelis Koukis
    clearTimeout(deferred);    // clear old deferred calls
157 f533f224 Vangelis Koukis
    try {
158 f533f224 Vangelis Koukis
        update_request.abort(); // cancel pending ajax updates
159 f533f224 Vangelis Koukis
        load_request.abort();
160 f533f224 Vangelis Koukis
    }catch(err){}
161 f533f224 Vangelis Koukis
    $.cookie("view", '1'); // set list cookie
162 f533f224 Vangelis Koukis
    uri = $("a#list").attr("href");
163 267403ca Dimitris Moraitis
    load_request = $.ajax({
164 267403ca Dimitris Moraitis
        url: uri,
165 267403ca Dimitris Moraitis
        type: "GET",
166 267403ca Dimitris Moraitis
        timeout: TIMEOUT,
167 267403ca Dimitris Moraitis
        dataType: "html",
168 f533f224 Vangelis Koukis
        error: function(jqXHR, textStatus, errorThrown) {
169 f533f224 Vangelis Koukis
            return false;
170 f533f224 Vangelis Koukis
        },
171 267403ca Dimitris Moraitis
        success: function(data, textStatus, jqXHR) {
172 f533f224 Vangelis Koukis
            $("a#list")[0].className += ' activelink';
173 f533f224 Vangelis Koukis
            $("a#standard")[0].className = '';
174 f533f224 Vangelis Koukis
            $("a#single")[0].className = '';
175 f533f224 Vangelis Koukis
            $("div#machinesview").html(data);
176 f533f224 Vangelis Koukis
        }
177 f533f224 Vangelis Koukis
    });
178 f533f224 Vangelis Koukis
    return false;
179 f533f224 Vangelis Koukis
}
180 b02144c8 Vangelis Koukis
181 f533f224 Vangelis Koukis
function single_view() {
182 f533f224 Vangelis Koukis
    changes_since = 0; // to reload full list
183 f533f224 Vangelis Koukis
    pending_actions = []; // clear pending actions
184 f533f224 Vangelis Koukis
    update_confirmations();
185 f533f224 Vangelis Koukis
    clearTimeout(deferred);    // clear old deferred calls
186 f533f224 Vangelis Koukis
    try {
187 f533f224 Vangelis Koukis
        update_request.abort(); // cancel pending ajax updates
188 f533f224 Vangelis Koukis
        load_request.abort();
189 f533f224 Vangelis Koukis
    }catch(err){}
190 f533f224 Vangelis Koukis
    $.cookie("view", '2'); // set list cookie
191 f533f224 Vangelis Koukis
    uri = $("a#single").attr("href");
192 f533f224 Vangelis Koukis
    load_request = $.ajax({
193 f533f224 Vangelis Koukis
        url: uri,
194 f533f224 Vangelis Koukis
        type: "GET",
195 f533f224 Vangelis Koukis
        timeout: TIMEOUT,
196 f533f224 Vangelis Koukis
        dataType: "html",
197 f533f224 Vangelis Koukis
        error: function(jqXHR, textStatus, errorThrown) {
198 f533f224 Vangelis Koukis
            return false;
199 f533f224 Vangelis Koukis
        },
200 f533f224 Vangelis Koukis
        success: function(data, textStatus, jqXHR) {
201 f533f224 Vangelis Koukis
            $("a#single")[0].className += ' activelink';
202 f533f224 Vangelis Koukis
            $("a#standard")[0].className = '';
203 f533f224 Vangelis Koukis
            $("a#list")[0].className = '';
204 f533f224 Vangelis Koukis
            $("div#machinesview").html(data);
205 f533f224 Vangelis Koukis
        }
206 f533f224 Vangelis Koukis
    });
207 42f67a2a Dimitris Moraitis
    return false;
208 42f67a2a Dimitris Moraitis
}
209 42f67a2a Dimitris Moraitis
210 42f67a2a Dimitris Moraitis
function standard_view() {
211 f533f224 Vangelis Koukis
    changes_since = 0; // to reload full list
212 f533f224 Vangelis Koukis
    pending_actions = []; // clear pending actions
213 f533f224 Vangelis Koukis
    update_confirmations();
214 f533f224 Vangelis Koukis
    clearTimeout(deferred);    // clear old deferred calls
215 f533f224 Vangelis Koukis
    try {
216 f533f224 Vangelis Koukis
        update_request.abort() // cancel pending ajax updates
217 f533f224 Vangelis Koukis
        load_request.abort();
218 f533f224 Vangelis Koukis
    }catch(err){}
219 f533f224 Vangelis Koukis
    $.cookie("view", '0');
220 267403ca Dimitris Moraitis
    uri = $("a#standard").attr("href");
221 267403ca Dimitris Moraitis
    load_request = $.ajax({
222 267403ca Dimitris Moraitis
        url: uri,
223 267403ca Dimitris Moraitis
        type: "GET",
224 267403ca Dimitris Moraitis
        timeout: TIMEOUT,
225 267403ca Dimitris Moraitis
        dataType: "html",
226 f533f224 Vangelis Koukis
        error: function(jqXHR, textStatus, errorThrown) {
227 f533f224 Vangelis Koukis
            return false;
228 f533f224 Vangelis Koukis
        },
229 267403ca Dimitris Moraitis
        success: function(data, textStatus, jqXHR) {
230 f533f224 Vangelis Koukis
            $("a#standard")[0].className += ' activelink';
231 f533f224 Vangelis Koukis
            $("a#list")[0].className = '';
232 f533f224 Vangelis Koukis
            $("a#single")[0].className = '';
233 f533f224 Vangelis Koukis
            $("div#machinesview").html(data);
234 f533f224 Vangelis Koukis
        }
235 f533f224 Vangelis Koukis
    });
236 42f67a2a Dimitris Moraitis
    return false;
237 42f67a2a Dimitris Moraitis
}
238 42f67a2a Dimitris Moraitis
239 42f67a2a Dimitris Moraitis
function choose_view() {
240 f533f224 Vangelis Koukis
    if ($.cookie("view")=='1') {
241 42f67a2a Dimitris Moraitis
        list_view();
242 f533f224 Vangelis Koukis
    } else if ($.cookie("view")=='2'){
243 f533f224 Vangelis Koukis
        single_view();
244 42f67a2a Dimitris Moraitis
    } else {
245 42f67a2a Dimitris Moraitis
        standard_view();
246 42f67a2a Dimitris Moraitis
    }
247 42f67a2a Dimitris Moraitis
}
248 42f67a2a Dimitris Moraitis
249 e4f32f27 Mike Muzurakis
// return value from metadata key "OS", if it exists
250 e4f32f27 Mike Muzurakis
function os_icon(metadata) {
251 e4f32f27 Mike Muzurakis
    if (!metadata) {
252 e4f32f27 Mike Muzurakis
        return 'unknown';
253 e4f32f27 Mike Muzurakis
    }
254 e4f32f27 Mike Muzurakis
    if (metadata.values.OS == undefined || metadata.values.OS == '') {
255 e4f32f27 Mike Muzurakis
        return 'unknown';
256 e4f32f27 Mike Muzurakis
    } else {
257 e4f32f27 Mike Muzurakis
        if (os_icons.indexOf(metadata.values.OS) == -1) {
258 e4f32f27 Mike Muzurakis
            return 'unknown';
259 e4f32f27 Mike Muzurakis
        } else {
260 e4f32f27 Mike Muzurakis
            return metadata.values.OS;
261 e4f32f27 Mike Muzurakis
        }
262 e4f32f27 Mike Muzurakis
    }
263 e4f32f27 Mike Muzurakis
}
264 e4f32f27 Mike Muzurakis
265 e4f32f27 Mike Muzurakis
function os_icon_from_value(metadata) {
266 e4f32f27 Mike Muzurakis
    if (!metadata) {
267 e4f32f27 Mike Muzurakis
        return 'unknown';
268 e4f32f27 Mike Muzurakis
    }
269 e4f32f27 Mike Muzurakis
if (metadata == undefined || metadata == '') {
270 e4f32f27 Mike Muzurakis
        return 'unknown';
271 e4f32f27 Mike Muzurakis
    } else {
272 e4f32f27 Mike Muzurakis
        if (os_icons.indexOf(metadata) == -1) {
273 e4f32f27 Mike Muzurakis
            return 'unknown';
274 e4f32f27 Mike Muzurakis
        } else {
275 e4f32f27 Mike Muzurakis
            return metadata;
276 e4f32f27 Mike Muzurakis
        }
277 e4f32f27 Mike Muzurakis
    }
278 e4f32f27 Mike Muzurakis
}
279 e4f32f27 Mike Muzurakis
280 f533f224 Vangelis Koukis
// get and show a list of running and terminated machines
281 f533f224 Vangelis Koukis
function update_vms(interval) {
282 f533f224 Vangelis Koukis
    try{ console.info('updating machines'); } catch(err){}
283 f533f224 Vangelis Koukis
    var uri= API_URL + '/servers/detail';
284 b02144c8 Vangelis Koukis
285 f533f224 Vangelis Koukis
    if (changes_since != 0)
286 f533f224 Vangelis Koukis
        uri+='?changes-since='+changes_since
287 b02144c8 Vangelis Koukis
288 f533f224 Vangelis Koukis
    update_request = $.ajax({
289 f533f224 Vangelis Koukis
        cache: false,
290 f533f224 Vangelis Koukis
        url: uri,
291 f533f224 Vangelis Koukis
        type: "GET",
292 f533f224 Vangelis Koukis
        timeout: TIMEOUT,
293 f533f224 Vangelis Koukis
        dataType: "json",
294 f533f224 Vangelis Koukis
        error: function(jqXHR, textStatus, errorThrown) {
295 f533f224 Vangelis Koukis
            // don't forget to try again later
296 f533f224 Vangelis Koukis
            if (interval) {
297 f533f224 Vangelis Koukis
                clearTimeout(deferred);    // clear old deferred calls
298 f533f224 Vangelis Koukis
                deferred = setTimeout(function() {update_vms(interval);},interval,interval);
299 f533f224 Vangelis Koukis
            }
300 f533f224 Vangelis Koukis
            // as for now, just show an error message
301 f533f224 Vangelis Koukis
            try { console.info('update_vms errback:' + jqXHR.status ) } catch(err) {}
302 f533f224 Vangelis Koukis
            ajax_error(jqXHR.status, undefined, 'Update VMs', jqXHR.responseText);
303 f533f224 Vangelis Koukis
            return false;
304 f533f224 Vangelis Koukis
            },
305 f533f224 Vangelis Koukis
        success: function(data, textStatus, jqXHR) {
306 f533f224 Vangelis Koukis
            // create changes_since string if necessary
307 f533f224 Vangelis Koukis
            if (jqXHR.getResponseHeader('Date') != null){
308 f533f224 Vangelis Koukis
                changes_since_date = new Date(jqXHR.getResponseHeader('Date'));
309 f533f224 Vangelis Koukis
                changes_since = ISODateString(changes_since_date);
310 f533f224 Vangelis Koukis
            }
311 b02144c8 Vangelis Koukis
312 f533f224 Vangelis Koukis
            if (interval) {
313 f533f224 Vangelis Koukis
                clearTimeout(deferred);    // clear old deferred calls
314 f533f224 Vangelis Koukis
                deferred = setTimeout(function() {update_vms(interval);},interval,interval);
315 f533f224 Vangelis Koukis
            }
316 42f67a2a Dimitris Moraitis
317 f533f224 Vangelis Koukis
            if (jqXHR.status == 200 || jqXHR.status == 203) {
318 f533f224 Vangelis Koukis
                try {
319 f533f224 Vangelis Koukis
                    servers = data.servers.values;
320 882ceb8f Dimitris Moraitis
                    jQuery.parseJSON(data);
321 882ceb8f Dimitris Moraitis
                    update_machines_view(data);
322 9b2ab29a Christodoulos Psaltis
                } catch(err) { ajax_error('400', undefined, 'Update VMs', jqXHR.responseText);}
323 f533f224 Vangelis Koukis
            } else if (jqXHR.status != 304){
324 f533f224 Vangelis Koukis
                try { console.info('update_vms callback:' + jqXHR.status ) } catch(err) {}
325 f533f224 Vangelis Koukis
                /*
326 f533f224 Vangelis Koukis
                FIXME:  Here it should return the error, however Opera does not support 304.
327 f533f224 Vangelis Koukis
                        Instead 304 it returns 0. To dealt with this we treat 0 as an
328 f533f224 Vangelis Koukis
                        304, which should be corrected (Bug #317).
329 f533f224 Vangelis Koukis
                */
330 f533f224 Vangelis Koukis
                //ajax_error(jqXHR.status, undefined, 'Update VMs', jqXHR.responseText);
331 f533f224 Vangelis Koukis
            }
332 f533f224 Vangelis Koukis
            return false;
333 f533f224 Vangelis Koukis
        }
334 42f67a2a Dimitris Moraitis
    });
335 f533f224 Vangelis Koukis
    return false;
336 f533f224 Vangelis Koukis
}
337 f533f224 Vangelis Koukis
338 f533f224 Vangelis Koukis
// get a list of running and terminated machines, used in network view
339 f533f224 Vangelis Koukis
function update_networks(interval) {
340 f533f224 Vangelis Koukis
    try{ console.info('updating networks'); } catch(err){}
341 f533f224 Vangelis Koukis
    var uri= API_URL + '/servers/detail';
342 f533f224 Vangelis Koukis
343 f533f224 Vangelis Koukis
    if (changes_since != 0)
344 f533f224 Vangelis Koukis
        uri+='?changes-since='+changes_since
345 f533f224 Vangelis Koukis
346 f533f224 Vangelis Koukis
    update_request = $.ajax({
347 f533f224 Vangelis Koukis
        cache: false,
348 f533f224 Vangelis Koukis
        url: uri,
349 f533f224 Vangelis Koukis
        type: "GET",
350 f533f224 Vangelis Koukis
        timeout: TIMEOUT,
351 f533f224 Vangelis Koukis
        dataType: "json",
352 f533f224 Vangelis Koukis
        error: function(jqXHR, textStatus, errorThrown) {
353 f533f224 Vangelis Koukis
            // don't forget to try again later
354 f533f224 Vangelis Koukis
            if (interval) {
355 f533f224 Vangelis Koukis
                clearTimeout(deferred);    // clear old deferred calls
356 f533f224 Vangelis Koukis
                deferred = setTimeout(function() {update_networks(interval);},interval,interval);
357 f533f224 Vangelis Koukis
            }
358 f533f224 Vangelis Koukis
            // as for now, just show an error message
359 f533f224 Vangelis Koukis
            try { console.info('update_networks errback:' + jqXHR.status ) } catch(err) {}
360 f533f224 Vangelis Koukis
            ajax_error(jqXHR.status, undefined, 'Update networks', jqXHR.responseText);
361 f533f224 Vangelis Koukis
            return false;
362 f533f224 Vangelis Koukis
            },
363 f533f224 Vangelis Koukis
        success: function(data, textStatus, jqXHR) {
364 f533f224 Vangelis Koukis
            // create changes_since string if necessary
365 f533f224 Vangelis Koukis
            if (jqXHR.getResponseHeader('Date') != null){
366 f533f224 Vangelis Koukis
                changes_since_date = new Date(jqXHR.getResponseHeader('Date'));
367 f533f224 Vangelis Koukis
                changes_since = ISODateString(changes_since_date);
368 f533f224 Vangelis Koukis
            }
369 f533f224 Vangelis Koukis
370 f533f224 Vangelis Koukis
            if (interval) {
371 f533f224 Vangelis Koukis
                clearTimeout(deferred);    // clear old deferred calls
372 f533f224 Vangelis Koukis
                deferred = setTimeout(function() {update_networks(interval);},interval,interval);
373 f533f224 Vangelis Koukis
            }
374 f533f224 Vangelis Koukis
375 f533f224 Vangelis Koukis
            if (jqXHR.status == 200 || jqXHR.status == 203) {
376 f533f224 Vangelis Koukis
                try {
377 f533f224 Vangelis Koukis
                    servers = data.servers.values;
378 882ceb8f Dimitris Moraitis
                    jQuery.parseJSON(data);
379 882ceb8f Dimitris Moraitis
                    update_network_names(data);
380 f533f224 Vangelis Koukis
                } catch(err) { ajax_error('400', undefined, 'Update networks', jqXHR.responseText);}
381 f533f224 Vangelis Koukis
            } else if (jqXHR.status == 304) {
382 f533f224 Vangelis Koukis
                update_network_names();
383 f533f224 Vangelis Koukis
            }
384 f533f224 Vangelis Koukis
            else {
385 f533f224 Vangelis Koukis
                try { console.info('update_networks callback:' + jqXHR.status ) } catch(err) {}
386 f533f224 Vangelis Koukis
                /*
387 f533f224 Vangelis Koukis
                FIXME:  Here it should return the error, however Opera does not support 304.
388 f533f224 Vangelis Koukis
                        Instead 304 it returns 0. To dealt with this we treat 0 as an
389 f533f224 Vangelis Koukis
                        304, which should be corrected (Bug #317).
390 f533f224 Vangelis Koukis
                */
391 f533f224 Vangelis Koukis
                //ajax_error(jqXHR.status, undefined, 'Update networks', jqXHR.responseText);
392 f533f224 Vangelis Koukis
                update_network_names();
393 f533f224 Vangelis Koukis
            }
394 f533f224 Vangelis Koukis
            return false;
395 42f67a2a Dimitris Moraitis
        }
396 42f67a2a Dimitris Moraitis
    });
397 42f67a2a Dimitris Moraitis
    return false;
398 42f67a2a Dimitris Moraitis
}
399 42f67a2a Dimitris Moraitis
400 f533f224 Vangelis Koukis
// get and show a list of public and private networks
401 f533f224 Vangelis Koukis
function update_network_names(servers_data) {
402 f533f224 Vangelis Koukis
    try{ console.info('updating network names'); } catch(err){}
403 f533f224 Vangelis Koukis
    var uri= API_URL + '/networks/detail';
404 f533f224 Vangelis Koukis
405 f533f224 Vangelis Koukis
    if (networks_changes_since != 0)
406 f533f224 Vangelis Koukis
        //FIXME: Comment out the following, until metadata do not 304 when changed
407 f533f224 Vangelis Koukis
        uri+='?changes-since=' + networks_changes_since
408 ce4f9227 Mike Muzurakis
409 1c7978ce Dimitris Moraitis
    update_request = $.ajax({
410 c8bde382 Mike Muzurakis
        cache: false,
411 1a49199e Dimitris Moraitis
        url: uri,
412 42f67a2a Dimitris Moraitis
        type: "GET",
413 42f67a2a Dimitris Moraitis
        timeout: TIMEOUT,
414 42f67a2a Dimitris Moraitis
        dataType: "json",
415 146b6003 Dimitris Moraitis
        error: function(jqXHR, textStatus, errorThrown) {
416 f533f224 Vangelis Koukis
            // as for now, just show an error message
417 f533f224 Vangelis Koukis
            try {
418 f533f224 Vangelis Koukis
                console.info('update_network names errback:' + jqXHR.status )
419 f533f224 Vangelis Koukis
            } catch(err) {}
420 f533f224 Vangelis Koukis
            ajax_error(jqXHR.status, undefined, 'Update network names', jqXHR.responseText);
421 f533f224 Vangelis Koukis
            return false;
422 f533f224 Vangelis Koukis
            },
423 1a49199e Dimitris Moraitis
        success: function(data, textStatus, jqXHR) {
424 e6561111 Mike Muzurakis
            // create changes_since string if necessary
425 e6561111 Mike Muzurakis
            if (jqXHR.getResponseHeader('Date') != null){
426 f533f224 Vangelis Koukis
                changes_since_date = new Date(jqXHR.getResponseHeader('Date'));
427 f533f224 Vangelis Koukis
                networks_changes_since = ISODateString(changes_since_date);
428 f533f224 Vangelis Koukis
            }
429 f533f224 Vangelis Koukis
430 f533f224 Vangelis Koukis
            if (jqXHR.status == 200 || jqXHR.status == 203) {
431 f533f224 Vangelis Koukis
                try {
432 f533f224 Vangelis Koukis
                    networks = data.networks.values;
433 882ceb8f Dimitris Moraitis
                    jQuery.parseJSON(data);
434 882ceb8f Dimitris Moraitis
                    update_networks_view(servers_data, data);
435 f533f224 Vangelis Koukis
                } catch(err) {
436 f533f224 Vangelis Koukis
                    ajax_error('400', undefined, 'Update network names', jqXHR.responseText);
437 f533f224 Vangelis Koukis
                }
438 f533f224 Vangelis Koukis
            } else if (jqXHR.status == 304) {
439 f533f224 Vangelis Koukis
                update_networks_view(servers_data);
440 f533f224 Vangelis Koukis
            } else if (jqXHR.status != 304){
441 f533f224 Vangelis Koukis
                try { console.info('update_network_names callback:' + jqXHR.status ) } catch(err) {}
442 f533f224 Vangelis Koukis
                /*
443 f533f224 Vangelis Koukis
                FIXME:  Here it should return the error, however Opera does not support 304.
444 f533f224 Vangelis Koukis
                        Instead 304 it returns 0. To dealt with this we treat 0 as an
445 f533f224 Vangelis Koukis
                        304, which should be corrected (Bug #317).
446 f533f224 Vangelis Koukis
                */
447 f533f224 Vangelis Koukis
                //ajax_error(jqXHR.status, undefined, 'Update network names', jqXHR.responseText);
448 f533f224 Vangelis Koukis
                update_networks_view(servers_data);
449 f533f224 Vangelis Koukis
            }
450 f533f224 Vangelis Koukis
            return false;
451 42f67a2a Dimitris Moraitis
        }
452 42f67a2a Dimitris Moraitis
    });
453 42f67a2a Dimitris Moraitis
    return false;
454 42f67a2a Dimitris Moraitis
}
455 42f67a2a Dimitris Moraitis
456 146b6003 Dimitris Moraitis
// get and show a list of available standard and custom images
457 b02144c8 Vangelis Koukis
function update_images() {
458 42f67a2a Dimitris Moraitis
    $.ajax({
459 73c2c75b Markos Gogoulos
        url: API_URL + '/images/detail',
460 42f67a2a Dimitris Moraitis
        type: "GET",
461 42f67a2a Dimitris Moraitis
        //async: false,
462 42f67a2a Dimitris Moraitis
        dataType: "json",
463 42f67a2a Dimitris Moraitis
        timeout: TIMEOUT,
464 b02144c8 Vangelis Koukis
        error: function(jqXHR, textStatus, errorThrown) {
465 038383b1 Dimitris Moraitis
                    ajax_error(jqXHR.status, undefined, 'Update Images', jqXHR.responseText);
466 42f67a2a Dimitris Moraitis
                    },
467 42f67a2a Dimitris Moraitis
        success: function(data, textStatus, jqXHR) {
468 146b6003 Dimitris Moraitis
            try {
469 f533f224 Vangelis Koukis
                images = data.images.values;
470 ddf929a7 Christodoulos Psaltis
                jQuery.parseJSON(data);
471 f533f224 Vangelis Koukis
                update_wizard_images();
472 f533f224 Vangelis Koukis
            } catch(err){
473 f533f224 Vangelis Koukis
                ajax_error("NO_IMAGES");
474 f533f224 Vangelis Koukis
            }
475 42f67a2a Dimitris Moraitis
        }
476 42f67a2a Dimitris Moraitis
    });
477 42f67a2a Dimitris Moraitis
    return false;
478 42f67a2a Dimitris Moraitis
}
479 42f67a2a Dimitris Moraitis
480 d134b632 Dimitris Moraitis
function update_wizard_images() {
481 f533f224 Vangelis Koukis
    if ($("ul#standard-images li").toArray().length + $("ul#custom-images li").toArray().length == 0) {
482 f533f224 Vangelis Koukis
        $.each(images, function(i,image){
483 f533f224 Vangelis Koukis
            var img = $('#image-template').clone().attr("id","img-"+image.id).fadeIn("slow");
484 f533f224 Vangelis Koukis
            img.find("label").attr('for',"img-radio-" + image.id);
485 f533f224 Vangelis Koukis
            img.find(".image-title").text(image.name);
486 73c2c75b Markos Gogoulos
            if (image.metadata) {
487 73c2c75b Markos Gogoulos
                if (image.metadata.values.description != undefined) {
488 73c2c75b Markos Gogoulos
                    img.find(".description").text(image.metadata.values.description);
489 73c2c75b Markos Gogoulos
                }
490 73c2c75b Markos Gogoulos
                if (image.metadata.values.size != undefined) {
491 f533f224 Vangelis Koukis
                    img.find("#size").text(image.metadata.values.size);
492 73c2c75b Markos Gogoulos
                }
493 73c2c75b Markos Gogoulos
            }
494 f533f224 Vangelis Koukis
            img.find("input.radio").attr('id',"img-radio-" + image.id);
495 f533f224 Vangelis Koukis
            if (i==0) img.find("input.radio").attr("checked","checked");
496 a64e74f0 Markos Gogoulos
            var image_logo = os_icon(image.metadata);
497 f533f224 Vangelis Koukis
            img.find("img.image-logo").attr('src','static/icons/os/'+image_logo+'.png');
498 73c2c75b Markos Gogoulos
            if (image.metadata) {
499 73c2c75b Markos Gogoulos
                if (image.metadata.values.serverId != undefined) {
500 73c2c75b Markos Gogoulos
                    img.appendTo("ul#custom-images");
501 73c2c75b Markos Gogoulos
                } else {
502 73c2c75b Markos Gogoulos
                    img.appendTo("ul#standard-images");
503 73c2c75b Markos Gogoulos
                }
504 73c2c75b Markos Gogoulos
            } else {
505 73c2c75b Markos Gogoulos
                img.appendTo("ul#standard-images");
506 73c2c75b Markos Gogoulos
            }
507 f533f224 Vangelis Koukis
        });
508 f533f224 Vangelis Koukis
    }
509 d134b632 Dimitris Moraitis
}
510 d134b632 Dimitris Moraitis
511 d134b632 Dimitris Moraitis
function update_wizard_flavors(){
512 f533f224 Vangelis Koukis
    // sliders for selecting VM flavor
513 f533f224 Vangelis Koukis
    $("#cpu:range").rangeinput({min:0,
514 f533f224 Vangelis Koukis
                               value:0,
515 f533f224 Vangelis Koukis
                               step:1,
516 f533f224 Vangelis Koukis
                               progress: true,
517 f533f224 Vangelis Koukis
                               max:cpus.length-1});
518 f533f224 Vangelis Koukis
519 f533f224 Vangelis Koukis
    $("#storage:range").rangeinput({min:0,
520 f533f224 Vangelis Koukis
                               value:0,
521 f533f224 Vangelis Koukis
                               step:1,
522 f533f224 Vangelis Koukis
                               progress: true,
523 f533f224 Vangelis Koukis
                               max:disks.length-1});
524 f533f224 Vangelis Koukis
525 f533f224 Vangelis Koukis
    $("#ram:range").rangeinput({min:0,
526 f533f224 Vangelis Koukis
                               value:0,
527 f533f224 Vangelis Koukis
                               step:1,
528 f533f224 Vangelis Koukis
                               progress: true,
529 f533f224 Vangelis Koukis
                               max:ram.length-1});
530 f533f224 Vangelis Koukis
    $("#small").click();
531 f533f224 Vangelis Koukis
532 f533f224 Vangelis Koukis
    // update the indicators when sliding
533 f533f224 Vangelis Koukis
    $("#cpu:range").data().rangeinput.onSlide(function(event,value){
534 f533f224 Vangelis Koukis
        $("#cpu-indicator")[0].value = cpus[Number(value)];
535 afa2ebd2 Mike Muzurakis
        $("#cpu-indicator").addClass('selectedrange');
536 f533f224 Vangelis Koukis
    });
537 f533f224 Vangelis Koukis
    $("#cpu:range").data().rangeinput.change(function(event,value){
538 f533f224 Vangelis Koukis
        $("#cpu-indicator")[0].value = cpus[Number(value)];
539 f533f224 Vangelis Koukis
        $("#custom").click();
540 f533f224 Vangelis Koukis
        $("#cpu-indicator").removeClass('selectedrange');
541 f533f224 Vangelis Koukis
    });
542 f533f224 Vangelis Koukis
    $("#ram:range").data().rangeinput.onSlide(function(event,value){
543 f533f224 Vangelis Koukis
        $("#ram-indicator")[0].value = ram[Number(value)];
544 afa2ebd2 Mike Muzurakis
        $("#ram-indicator").addClass('selectedrange');
545 f533f224 Vangelis Koukis
    });
546 f533f224 Vangelis Koukis
    $("#ram:range").data().rangeinput.change(function(event,value){
547 f533f224 Vangelis Koukis
        $("#ram-indicator")[0].value = ram[Number(value)];
548 f533f224 Vangelis Koukis
        $("#custom").click();
549 f533f224 Vangelis Koukis
        $("#ram-indicator").removeClass('selectedrange');
550 f533f224 Vangelis Koukis
    });
551 f533f224 Vangelis Koukis
    $("#storage:range").data().rangeinput.onSlide(function(event,value){
552 f533f224 Vangelis Koukis
        $("#storage-indicator")[0].value = disks[Number(value)];
553 afa2ebd2 Mike Muzurakis
        $("#storage-indicator").addClass('selectedrange');
554 f533f224 Vangelis Koukis
    });
555 f533f224 Vangelis Koukis
    $("#storage:range").data().rangeinput.change(function(event,value){
556 f533f224 Vangelis Koukis
        $("#storage-indicator")[0].value = disks[Number(value)];
557 f533f224 Vangelis Koukis
        $("#custom").click();
558 f533f224 Vangelis Koukis
        $("#storage-indicator").removeClass('selectedrange');
559 f533f224 Vangelis Koukis
    });
560 d134b632 Dimitris Moraitis
}
561 d134b632 Dimitris Moraitis
562 42f67a2a Dimitris Moraitis
Array.prototype.unique = function () {
563 f533f224 Vangelis Koukis
    var r = new Array();
564 f533f224 Vangelis Koukis
    o:for(var i = 0, n = this.length; i < n; i++)
565 f533f224 Vangelis Koukis
    {
566 f533f224 Vangelis Koukis
        for(var x = 0, y = r.length; x < y; x++)
567 f533f224 Vangelis Koukis
        {
568 f533f224 Vangelis Koukis
            if(r[x]==this[i])
569 f533f224 Vangelis Koukis
            {
570 f533f224 Vangelis Koukis
                continue o;
571 f533f224 Vangelis Koukis
            }
572 f533f224 Vangelis Koukis
        }
573 f533f224 Vangelis Koukis
        r[r.length] = this[i];
574 f533f224 Vangelis Koukis
    }
575 f533f224 Vangelis Koukis
    return r;
576 42f67a2a Dimitris Moraitis
}
577 42f67a2a Dimitris Moraitis
578 42f67a2a Dimitris Moraitis
// get and configure flavor selection
579 b02144c8 Vangelis Koukis
function update_flavors() {
580 42f67a2a Dimitris Moraitis
    $.ajax({
581 f1641e4d Markos Gogoulos
        url: API_URL + '/flavors/detail',
582 42f67a2a Dimitris Moraitis
        type: "GET",
583 42f67a2a Dimitris Moraitis
        //async: false,
584 42f67a2a Dimitris Moraitis
        dataType: "json",
585 42f67a2a Dimitris Moraitis
        timeout: TIMEOUT,
586 b02144c8 Vangelis Koukis
        error: function(jqXHR, textStatus, errorThrown) {
587 146b6003 Dimitris Moraitis
            try {
588 f533f224 Vangelis Koukis
                ajax_error(jqXHR.status, undefined, 'Update Flavors', jqXHR.responseText);
589 f533f224 Vangelis Koukis
            } catch (err) {
590 f533f224 Vangelis Koukis
                ajax_error(err);
591 f533f224 Vangelis Koukis
            }
592 66307c9e Christodoulos Psaltis
            // start updating vm list
593 66307c9e Christodoulos Psaltis
            update_vms(UPDATE_INTERVAL);
594 42f67a2a Dimitris Moraitis
        },
595 42f67a2a Dimitris Moraitis
        success: function(data, textStatus, jqXHR) {
596 9b2ab29a Christodoulos Psaltis
597 882ceb8f Dimitris Moraitis
            try {
598 882ceb8f Dimitris Moraitis
                flavors = data.flavors.values;
599 882ceb8f Dimitris Moraitis
                jQuery.parseJSON(data);
600 882ceb8f Dimitris Moraitis
                $.each(flavors, function(i, flavor) {
601 882ceb8f Dimitris Moraitis
                    cpus[i] = flavor['cpu'];
602 882ceb8f Dimitris Moraitis
                    disks[i] = flavor['disk'];
603 882ceb8f Dimitris Moraitis
                    ram[i] = flavor['ram'];
604 882ceb8f Dimitris Moraitis
                });
605 882ceb8f Dimitris Moraitis
                cpus = cpus.unique();
606 882ceb8f Dimitris Moraitis
                disks = disks.unique();
607 882ceb8f Dimitris Moraitis
                ram = ram.unique();
608 882ceb8f Dimitris Moraitis
                update_wizard_flavors();
609 882ceb8f Dimitris Moraitis
            } catch(err){
610 882ceb8f Dimitris Moraitis
                ajax_error("NO_FLAVORS");
611 882ceb8f Dimitris Moraitis
            }
612 66307c9e Christodoulos Psaltis
            // start updating vm list
613 66307c9e Christodoulos Psaltis
            update_vms(UPDATE_INTERVAL);
614 42f67a2a Dimitris Moraitis
        }
615 42f67a2a Dimitris Moraitis
    });
616 42f67a2a Dimitris Moraitis
    return false;
617 42f67a2a Dimitris Moraitis
}
618 1a49199e Dimitris Moraitis
619 b335768e Markos Gogoulos
// return flavorRef from cpu, disk, ram values
620 42f67a2a Dimitris Moraitis
function identify_flavor(cpu, disk, ram){
621 42f67a2a Dimitris Moraitis
    for (i=0;i<flavors.length;i++){
622 42f67a2a Dimitris Moraitis
        if (flavors[i]['cpu'] == cpu && flavors[i]['disk']==disk && flavors[i]['ram']==ram) {
623 42f67a2a Dimitris Moraitis
            return flavors[i]['id']
624 42f67a2a Dimitris Moraitis
        }
625 42f67a2a Dimitris Moraitis
    }
626 42f67a2a Dimitris Moraitis
    return 0;
627 42f67a2a Dimitris Moraitis
}
628 42f67a2a Dimitris Moraitis
629 45ab204d Markos Gogoulos
// return image entry from imageRef
630 45ab204d Markos Gogoulos
function get_image(imageRef) {
631 45ab204d Markos Gogoulos
    for (i=0;i<images.length;i++){
632 45ab204d Markos Gogoulos
        if (images[i]['id'] == imageRef) {
633 45ab204d Markos Gogoulos
            return images[i];
634 45ab204d Markos Gogoulos
        }
635 45ab204d Markos Gogoulos
    }
636 45ab204d Markos Gogoulos
    return 0;
637 45ab204d Markos Gogoulos
}
638 45ab204d Markos Gogoulos
639 f533f224 Vangelis Koukis
// return machine entry from serverID
640 f533f224 Vangelis Koukis
function get_machine(serverID) {
641 f533f224 Vangelis Koukis
    for (i=0;i<servers.length;i++){
642 f533f224 Vangelis Koukis
        if (servers[i]['id'] == serverID) {
643 f533f224 Vangelis Koukis
            return servers[i];
644 f533f224 Vangelis Koukis
        }
645 f533f224 Vangelis Koukis
    }
646 f533f224 Vangelis Koukis
    return 0;
647 f533f224 Vangelis Koukis
}
648 f533f224 Vangelis Koukis
649 f533f224 Vangelis Koukis
// update the actions in icon view, per server
650 f533f224 Vangelis Koukis
function update_iconview_actions(serverID, server_status) {
651 dc3e66b9 Mike Muzurakis
    if ($.cookie("view")=='2') {
652 dc3e66b9 Mike Muzurakis
        // remove .disable from all actions to begin with
653 6a738cca Christodoulos Psaltis
        $('#machinesview-single #' + serverID + ' div.single-action').show();
654 dc3e66b9 Mike Muzurakis
        // decide which actions should be disabled
655 dc3e66b9 Mike Muzurakis
        for (current_action in actions) {
656 dc3e66b9 Mike Muzurakis
            if (actions[current_action].indexOf(server_status) == -1 ) {
657 6a738cca Christodoulos Psaltis
                $('#machinesview-single #' + serverID + ' div.action-' + current_action).hide();
658 dc3e66b9 Mike Muzurakis
            }
659 dc3e66b9 Mike Muzurakis
        }
660 dc3e66b9 Mike Muzurakis
    } else {
661 dc3e66b9 Mike Muzurakis
        // remove .disable from all actions to begin with
662 19697f4f Mike Muzurakis
        $('#machinesview-icon.standard #' + serverID + ' div.actions').find('a').removeClass('disabled');
663 dc3e66b9 Mike Muzurakis
        // decide which actions should be disabled
664 dc3e66b9 Mike Muzurakis
        for (current_action in actions) {
665 dc3e66b9 Mike Muzurakis
            if (actions[current_action].indexOf(server_status) == -1 ) {
666 dc3e66b9 Mike Muzurakis
                $('#machinesview-icon.standard #' + serverID + ' a.action-' + current_action).addClass('disabled');
667 dc3e66b9 Mike Muzurakis
            }
668 f533f224 Vangelis Koukis
        }
669 f533f224 Vangelis Koukis
    }
670 f533f224 Vangelis Koukis
}
671 f533f224 Vangelis Koukis
672 dcf153ce Christodoulos Psaltis
// update the actions in list view
673 f533f224 Vangelis Koukis
function update_listview_actions() {
674 f533f224 Vangelis Koukis
    var states = [];
675 f533f224 Vangelis Koukis
    var on = [];
676 f533f224 Vangelis Koukis
    var checked = $("table.list-machines tbody input[type='checkbox']:checked");
677 f533f224 Vangelis Koukis
    // disable all actions to begin with
678 f533f224 Vangelis Koukis
    $('#machinesview .list div.actions').children().removeClass('enabled');
679 f533f224 Vangelis Koukis
680 f533f224 Vangelis Koukis
    // are there multiple machines selected?
681 f533f224 Vangelis Koukis
    if (checked.length>1)
682 f533f224 Vangelis Koukis
        states[0] = 'multiple';
683 f533f224 Vangelis Koukis
684 f533f224 Vangelis Koukis
    // check the states of selected machines
685 f533f224 Vangelis Koukis
    checked.each(function(i,checkbox) {
686 f533f224 Vangelis Koukis
        states[states.length] = checkbox.className;
687 f533f224 Vangelis Koukis
        var ip = $("#" + checkbox.id.replace('input-','') + ".ip span.public").text();
688 f533f224 Vangelis Koukis
        if (ip.replace('undefined','').length)
689 f533f224 Vangelis Koukis
            states[states.length] = 'network';
690 f533f224 Vangelis Koukis
    });
691 f533f224 Vangelis Koukis
692 f533f224 Vangelis Koukis
    // decide which actions should be enabled
693 f533f224 Vangelis Koukis
    for (a in actions) {
694 f533f224 Vangelis Koukis
        var enabled = false;
695 f533f224 Vangelis Koukis
        for (var s =0; s<states.length; s++) {
696 f533f224 Vangelis Koukis
            if (actions[a].indexOf(states[s]) != -1 ) {
697 f533f224 Vangelis Koukis
                enabled = true;
698 f533f224 Vangelis Koukis
            } else {
699 f533f224 Vangelis Koukis
                enabled = false;
700 f533f224 Vangelis Koukis
                break;
701 f533f224 Vangelis Koukis
            }
702 f533f224 Vangelis Koukis
        }
703 f533f224 Vangelis Koukis
        if (enabled)
704 f533f224 Vangelis Koukis
            on[on.length]=a;
705 f533f224 Vangelis Koukis
    }
706 f533f224 Vangelis Koukis
    // enable those actions
707 f533f224 Vangelis Koukis
    for (action in on) {
708 f533f224 Vangelis Koukis
        $("#action-" + on[action]).addClass('enabled');
709 f533f224 Vangelis Koukis
    }
710 e32c2a5d Dimitris Moraitis
}
711 146b6003 Dimitris Moraitis
712 0971fa71 Markos Gogoulos
//create server action
713 0971fa71 Markos Gogoulos
function create_vm(machineName, imageRef, flavorRef){
714 45ab204d Markos Gogoulos
    var image_logo = os_icon(get_image(imageRef).metadata);
715 f533f224 Vangelis Koukis
    var uri = API_URL + '/servers';
716 0971fa71 Markos Gogoulos
    var payload = {
717 0971fa71 Markos Gogoulos
        "server": {
718 0971fa71 Markos Gogoulos
            "name": machineName,
719 0971fa71 Markos Gogoulos
            "imageRef": imageRef,
720 0971fa71 Markos Gogoulos
            "flavorRef" : flavorRef,
721 0971fa71 Markos Gogoulos
            "metadata" : {
722 45ab204d Markos Gogoulos
                "OS" : image_logo
723 038383b1 Dimitris Moraitis
            }
724 0971fa71 Markos Gogoulos
        }
725 0971fa71 Markos Gogoulos
    };
726 0971fa71 Markos Gogoulos
727 0971fa71 Markos Gogoulos
    $.ajax({
728 7e45ddef Dimitris Moraitis
    url: uri,
729 0971fa71 Markos Gogoulos
    type: "POST",
730 f533f224 Vangelis Koukis
    contentType: "application/json",
731 b02144c8 Vangelis Koukis
    dataType: "json",
732 0971fa71 Markos Gogoulos
    data: JSON.stringify(payload),
733 0971fa71 Markos Gogoulos
    timeout: TIMEOUT,
734 b02144c8 Vangelis Koukis
    error: function(jqXHR, textStatus, errorThrown) {
735 ddf929a7 Christodoulos Psaltis
                // close wizard and show error box
736 ddf929a7 Christodoulos Psaltis
                $('#machines-pane a#create').data('overlay').close();
737 038383b1 Dimitris Moraitis
                ajax_error(jqXHR.status, undefined, 'Create VM', jqXHR.responseText);
738 0971fa71 Markos Gogoulos
           },
739 0971fa71 Markos Gogoulos
    success: function(data, textStatus, jqXHR) {
740 0971fa71 Markos Gogoulos
                if ( jqXHR.status == '202') {
741 b02144c8 Vangelis Koukis
                    ajax_success("CREATE_VM_SUCCESS", data.server.adminPass);
742 0971fa71 Markos Gogoulos
                } else {
743 ddf929a7 Christodoulos Psaltis
                    // close wizard and show error box
744 ddf929a7 Christodoulos Psaltis
                    $('#machines-pane a#create').data('overlay').close();
745 038383b1 Dimitris Moraitis
                    ajax_error(jqXHR.status, undefined, 'Create VM', jqXHR.responseText);
746 0971fa71 Markos Gogoulos
                }
747 0971fa71 Markos Gogoulos
            }
748 0971fa71 Markos Gogoulos
    });
749 0971fa71 Markos Gogoulos
}
750 0971fa71 Markos Gogoulos
751 42f67a2a Dimitris Moraitis
// reboot action
752 42f67a2a Dimitris Moraitis
function reboot(serverIDs){
753 f533f224 Vangelis Koukis
    if (!serverIDs.length){
754 f533f224 Vangelis Koukis
        //ajax_success('DEFAULT');
755 f533f224 Vangelis Koukis
        return false;
756 f533f224 Vangelis Koukis
    }
757 42f67a2a Dimitris Moraitis
    // ajax post reboot call
758 42f67a2a Dimitris Moraitis
    var payload = {
759 42f67a2a Dimitris Moraitis
        "reboot": {"type" : "HARD"}
760 42f67a2a Dimitris Moraitis
    };
761 f533f224 Vangelis Koukis
762 a1a31201 Dimitris Moraitis
    var serverID = serverIDs.pop();
763 f533f224 Vangelis Koukis
764 f533f224 Vangelis Koukis
    $.ajax({
765 f533f224 Vangelis Koukis
        url: API_URL + '/servers/' + serverID + '/action',
766 f533f224 Vangelis Koukis
        type: "POST",
767 f533f224 Vangelis Koukis
        contentType: "application/json",
768 f533f224 Vangelis Koukis
        dataType: "json",
769 f533f224 Vangelis Koukis
        data: JSON.stringify(payload),
770 f533f224 Vangelis Koukis
        timeout: TIMEOUT,
771 f533f224 Vangelis Koukis
        error: function(jqXHR, textStatus, errorThrown) {
772 038383b1 Dimitris Moraitis
                    display_failure(jqXHR.status, serverID, 'Reboot', jqXHR.responseText)
773 f533f224 Vangelis Koukis
                },
774 f533f224 Vangelis Koukis
        success: function(data, textStatus, jqXHR) {
775 f533f224 Vangelis Koukis
                    if ( jqXHR.status == '202') {
776 583932c4 Christodoulos Psaltis
                        try {
777 583932c4 Christodoulos Psaltis
                            console.info('rebooted ' + serverID);
778 a1a31201 Dimitris Moraitis
                        } catch(err) {}
779 f533f224 Vangelis Koukis
                        // indicate that the action succeeded
780 f533f224 Vangelis Koukis
                        display_success(serverID);
781 f533f224 Vangelis Koukis
                        // continue with the rest of the servers
782 f533f224 Vangelis Koukis
                        reboot(serverIDs);
783 f533f224 Vangelis Koukis
                    } else {
784 f533f224 Vangelis Koukis
                        ajax_error(jqXHR.status, serverID, 'Reboot', jqXHR.responseText);
785 f533f224 Vangelis Koukis
                    }
786 f533f224 Vangelis Koukis
                }
787 42f67a2a Dimitris Moraitis
    });
788 42f67a2a Dimitris Moraitis
    return false;
789 42f67a2a Dimitris Moraitis
}
790 42f67a2a Dimitris Moraitis
791 42f67a2a Dimitris Moraitis
// shutdown action
792 42f67a2a Dimitris Moraitis
function shutdown(serverIDs) {
793 f533f224 Vangelis Koukis
    if (!serverIDs.length){
794 f533f224 Vangelis Koukis
        //ajax_success('DEFAULT');
795 f533f224 Vangelis Koukis
        return false;
796 f533f224 Vangelis Koukis
    }
797 42f67a2a Dimitris Moraitis
    // ajax post shutdown call
798 42f67a2a Dimitris Moraitis
    var payload = {
799 9bc2dbfa Vangelis Koukis
        "shutdown": {}
800 b02144c8 Vangelis Koukis
    };
801 42f67a2a Dimitris Moraitis
802 f533f224 Vangelis Koukis
    var serverID = serverIDs.pop();
803 f533f224 Vangelis Koukis
804 42f67a2a Dimitris Moraitis
    $.ajax({
805 f533f224 Vangelis Koukis
        url: API_URL + '/servers/' + serverID + '/action',
806 f533f224 Vangelis Koukis
        type: "POST",
807 f533f224 Vangelis Koukis
        contentType: "application/json",
808 f533f224 Vangelis Koukis
        dataType: "json",
809 42f67a2a Dimitris Moraitis
        data: JSON.stringify(payload),
810 42f67a2a Dimitris Moraitis
        timeout: TIMEOUT,
811 b02144c8 Vangelis Koukis
        error: function(jqXHR, textStatus, errorThrown) {
812 038383b1 Dimitris Moraitis
                    display_failure(jqXHR.status, serverID, 'Shutdown', jqXHR.responseText)
813 42f67a2a Dimitris Moraitis
                    },
814 42f67a2a Dimitris Moraitis
        success: function(data, textStatus, jqXHR) {
815 42f67a2a Dimitris Moraitis
                    if ( jqXHR.status == '202') {
816 f533f224 Vangelis Koukis
                        try {
817 583932c4 Christodoulos Psaltis
                            console.info('suspended ' + serverID);
818 a1a31201 Dimitris Moraitis
                        } catch(err) {}
819 f533f224 Vangelis Koukis
                        // indicate that the action succeeded
820 f533f224 Vangelis Koukis
                        display_success(serverID);
821 f533f224 Vangelis Koukis
                        // continue with the rest of the servers
822 42f67a2a Dimitris Moraitis
                        shutdown(serverIDs);
823 42f67a2a Dimitris Moraitis
                    } else {
824 038383b1 Dimitris Moraitis
                        ajax_error(jqXHR.status, serverID, 'Shutdown', jqXHR.responseText);
825 748139ba Christodoulos Psaltis
                    }
826 b02144c8 Vangelis Koukis
                }
827 42f67a2a Dimitris Moraitis
    });
828 b02144c8 Vangelis Koukis
    return false;
829 42f67a2a Dimitris Moraitis
}
830 42f67a2a Dimitris Moraitis
831 42f67a2a Dimitris Moraitis
// destroy action
832 42f67a2a Dimitris Moraitis
function destroy(serverIDs) {
833 f533f224 Vangelis Koukis
    if (!serverIDs.length){
834 f533f224 Vangelis Koukis
        //ajax_success('DEFAULT');
835 f533f224 Vangelis Koukis
        return false;
836 f533f224 Vangelis Koukis
    }
837 f15025bc Christodoulos Psaltis
    // ajax post destroy call can have an empty request body
838 b02144c8 Vangelis Koukis
    var payload = {};
839 42f67a2a Dimitris Moraitis
840 f533f224 Vangelis Koukis
    var serverID = serverIDs.pop();
841 f533f224 Vangelis Koukis
842 42f67a2a Dimitris Moraitis
    $.ajax({
843 f533f224 Vangelis Koukis
        url: API_URL + '/servers/' + serverID,
844 f533f224 Vangelis Koukis
        type: "DELETE",
845 f533f224 Vangelis Koukis
        contentType: "application/json",
846 f533f224 Vangelis Koukis
        dataType: "json",
847 42f67a2a Dimitris Moraitis
        data: JSON.stringify(payload),
848 42f67a2a Dimitris Moraitis
        timeout: TIMEOUT,
849 b02144c8 Vangelis Koukis
        error: function(jqXHR, textStatus, errorThrown) {
850 038383b1 Dimitris Moraitis
                    display_failure(jqXHR.status, serverID, 'Destroy', jqXHR.responseText)
851 42f67a2a Dimitris Moraitis
                    },
852 42f67a2a Dimitris Moraitis
        success: function(data, textStatus, jqXHR) {
853 2d5cea9b Markos Gogoulos
                    if ( jqXHR.status == '204') {
854 f533f224 Vangelis Koukis
                        try {
855 f15025bc Christodoulos Psaltis
                            console.info('destroyed ' + serverID);
856 a1a31201 Dimitris Moraitis
                        } catch (err) {}
857 f533f224 Vangelis Koukis
                        // indicate that the action succeeded
858 f533f224 Vangelis Koukis
                        display_success(serverID);
859 f533f224 Vangelis Koukis
                        // continue with the rest of the servers
860 38b1f387 Christodoulos Psaltis
                        destroy(serverIDs);
861 42f67a2a Dimitris Moraitis
                    } else {
862 038383b1 Dimitris Moraitis
                        ajax_error(jqXHR.status, serverID, 'Destroy', jqXHR.responseText);
863 748139ba Christodoulos Psaltis
                    }
864 b02144c8 Vangelis Koukis
                }
865 42f67a2a Dimitris Moraitis
    });
866 b02144c8 Vangelis Koukis
    return false;
867 42f67a2a Dimitris Moraitis
}
868 42f67a2a Dimitris Moraitis
869 42f67a2a Dimitris Moraitis
// start action
870 42f67a2a Dimitris Moraitis
function start(serverIDs){
871 f533f224 Vangelis Koukis
    if (!serverIDs.length){
872 f533f224 Vangelis Koukis
        //ajax_success('DEFAULT');
873 f533f224 Vangelis Koukis
        return false;
874 f533f224 Vangelis Koukis
    }
875 42f67a2a Dimitris Moraitis
    // ajax post start call
876 42f67a2a Dimitris Moraitis
    var payload = {
877 623d7244 Vangelis Koukis
        "start": {}
878 b02144c8 Vangelis Koukis
    };
879 42f67a2a Dimitris Moraitis
880 f533f224 Vangelis Koukis
    var serverID = serverIDs.pop();
881 f533f224 Vangelis Koukis
882 42f67a2a Dimitris Moraitis
    $.ajax({
883 0971fa71 Markos Gogoulos
        url: API_URL + '/servers/' + serverID + '/action',
884 42f67a2a Dimitris Moraitis
        type: "POST",
885 f533f224 Vangelis Koukis
        contentType: "application/json",
886 42f67a2a Dimitris Moraitis
        dataType: "json",
887 42f67a2a Dimitris Moraitis
        data: JSON.stringify(payload),
888 42f67a2a Dimitris Moraitis
        timeout: TIMEOUT,
889 b02144c8 Vangelis Koukis
        error: function(jqXHR, textStatus, errorThrown) {
890 038383b1 Dimitris Moraitis
                    display_failure(jqXHR.status, serverID, 'Start', jqXHR.responseText)
891 42f67a2a Dimitris Moraitis
                    },
892 42f67a2a Dimitris Moraitis
        success: function(data, textStatus, jqXHR) {
893 42f67a2a Dimitris Moraitis
                    if ( jqXHR.status == '202') {
894 f533f224 Vangelis Koukis
                        try {
895 583932c4 Christodoulos Psaltis
                            console.info('started ' + serverID);
896 a1a31201 Dimitris Moraitis
                        } catch(err) {}
897 f533f224 Vangelis Koukis
                        // indicate that the action succeeded
898 f533f224 Vangelis Koukis
                        display_success(serverID);
899 f533f224 Vangelis Koukis
                        // continue with the rest of the servers
900 42f67a2a Dimitris Moraitis
                        start(serverIDs);
901 42f67a2a Dimitris Moraitis
                    } else {
902 038383b1 Dimitris Moraitis
                        ajax_error(jqXHR.status, serverID, 'Start', jqXHR.responseText);
903 748139ba Christodoulos Psaltis
                    }
904 748139ba Christodoulos Psaltis
                }
905 42f67a2a Dimitris Moraitis
    });
906 42f67a2a Dimitris Moraitis
    return false;
907 42f67a2a Dimitris Moraitis
}
908 6902f72e clopy
909 b02144c8 Vangelis Koukis
// Show VNC console
910 b02144c8 Vangelis Koukis
function vnc_attachment(host, port, password) {
911 b02144c8 Vangelis Koukis
    // FIXME: Must be made into parameters, in settings.py
912 b02144c8 Vangelis Koukis
    //vnc = open("", "displayWindow",
913 b02144c8 Vangelis Koukis
    //    "status=yes,toolbar=yes,menubar=yes");
914 b02144c8 Vangelis Koukis
    vd = document.open("application/x-vnc");
915 b02144c8 Vangelis Koukis
916 b02144c8 Vangelis Koukis
    vd.writeln("[connection]");
917 b02144c8 Vangelis Koukis
    vd.writeln("host=" + host);
918 b02144c8 Vangelis Koukis
    vd.writeln("port=" + port);
919 b02144c8 Vangelis Koukis
    vd.writeln("password=" + password);
920 b02144c8 Vangelis Koukis
921 b02144c8 Vangelis Koukis
    vd.close();
922 b02144c8 Vangelis Koukis
}
923 b02144c8 Vangelis Koukis
924 b02144c8 Vangelis Koukis
// Show VNC console
925 f533f224 Vangelis Koukis
function show_vnc_console(serverID, serverName, serverIP, host, port, password) {
926 f533f224 Vangelis Koukis
    var params_url = '?machine=' + serverName + '&host_ip=' + serverIP + '&host=' + host + '&port=' + port + '&password=' + password;
927 f533f224 Vangelis Koukis
    var params_window = 'scrollbars=no,' +
928 f533f224 Vangelis Koukis
                        'menubar=no,' +
929 f533f224 Vangelis Koukis
                        'toolbar=no,' +
930 f533f224 Vangelis Koukis
                        'status=no,' +
931 f533f224 Vangelis Koukis
                        'top=0,' +
932 f533f224 Vangelis Koukis
                        'left=0,' +
933 f533f224 Vangelis Koukis
                        'height=' + screen.height + ',' +
934 f533f224 Vangelis Koukis
                        'width=' + screen.width + ',' +
935 f533f224 Vangelis Koukis
                        'fullscreen=yes';
936 f533f224 Vangelis Koukis
937 7e51c3db Markos Gogoulos
    window.open('machines/console' + params_url, 'formresult' + serverID, params_window);
938 f533f224 Vangelis Koukis
939 f533f224 Vangelis Koukis
    // Restore os icon in list view
940 f533f224 Vangelis Koukis
    osIcon = $('#'+serverID).parent().parent().find('.list-logo');
941 f533f224 Vangelis Koukis
    osIcon.attr('src',osIcon.attr('os'));
942 9c901aec Markos Gogoulos
    return false;
943 b02144c8 Vangelis Koukis
}
944 b02144c8 Vangelis Koukis
945 b02144c8 Vangelis Koukis
// console action
946 fb3eec11 Christodoulos Psaltis
function open_console(serverIDs){
947 f533f224 Vangelis Koukis
    if (!serverIDs.length){
948 f533f224 Vangelis Koukis
        //ajax_success('DEFAULT');
949 f533f224 Vangelis Koukis
        return false;
950 f533f224 Vangelis Koukis
    }
951 b02144c8 Vangelis Koukis
    // ajax post start call
952 b02144c8 Vangelis Koukis
    var payload = {
953 b02144c8 Vangelis Koukis
        "console": {"type": "vnc"}
954 b02144c8 Vangelis Koukis
    };
955 b02144c8 Vangelis Koukis
956 f533f224 Vangelis Koukis
    var serverID = serverIDs.pop();
957 f533f224 Vangelis Koukis
958 f533f224 Vangelis Koukis
    var machine = get_machine(serverID);
959 f533f224 Vangelis Koukis
    var serverName = machine.name;
960 f533f224 Vangelis Koukis
    var serverIP = machine.addresses.values[0].values[0].addr;
961 f533f224 Vangelis Koukis
962 b02144c8 Vangelis Koukis
    $.ajax({
963 b02144c8 Vangelis Koukis
        url: API_URL + '/servers/' + serverID + '/action',
964 b02144c8 Vangelis Koukis
        type: "POST",
965 f533f224 Vangelis Koukis
        contentType: "application/json",
966 b02144c8 Vangelis Koukis
        dataType: "json",
967 b02144c8 Vangelis Koukis
        data: JSON.stringify(payload),
968 b02144c8 Vangelis Koukis
        timeout: TIMEOUT,
969 b02144c8 Vangelis Koukis
        error: function(jqXHR, textStatus, errorThrown) {
970 b02144c8 Vangelis Koukis
                    display_failure(jqXHR.status, serverID, 'Console', jqXHR.responseText)
971 b02144c8 Vangelis Koukis
                    },
972 b02144c8 Vangelis Koukis
        success: function(data, textStatus, jqXHR) {
973 b02144c8 Vangelis Koukis
                    if ( jqXHR.status == '200') {
974 f533f224 Vangelis Koukis
                        try {
975 b02144c8 Vangelis Koukis
                            console.info('got_console ' + serverID);
976 b02144c8 Vangelis Koukis
                        } catch(err) {}
977 f533f224 Vangelis Koukis
                        // indicate that the action succeeded
978 ddf929a7 Christodoulos Psaltis
                        // show_vnc_console(serverID, serverName, serverIP,
979 ddf929a7 Christodoulos Psaltis
                        // data.console.host,data.console.port,data.console.password);
980 ddf929a7 Christodoulos Psaltis
                        show_vnc_console(serverID, serverName, serverIP,
981 ddf929a7 Christodoulos Psaltis
                                         data.console.host,data.console.port,data.console.password);
982 f533f224 Vangelis Koukis
                        display_success(serverID);
983 74175c17 Christodoulos Psaltis
                        // hide spinner
984 74175c17 Christodoulos Psaltis
                        $('#' + serverID + ' .spinner').hide();
985 f533f224 Vangelis Koukis
                        // continue with the rest of the servers
986 74175c17 Christodoulos Psaltis
                        open_console(serverIDs);
987 b02144c8 Vangelis Koukis
                    } else {
988 b02144c8 Vangelis Koukis
                        ajax_error(jqXHR.status, serverID, 'Console', jqXHR.responseText);
989 b02144c8 Vangelis Koukis
                    }
990 b02144c8 Vangelis Koukis
                }
991 b02144c8 Vangelis Koukis
    });
992 b02144c8 Vangelis Koukis
    return false;
993 b02144c8 Vangelis Koukis
}
994 b02144c8 Vangelis Koukis
995 f533f224 Vangelis Koukis
// rename server
996 a70a9116 Mike Muzurakis
function rename(serverID, serverName){
997 f533f224 Vangelis Koukis
    if (!serverID.length){
998 f533f224 Vangelis Koukis
        //ajax_success('DEFAULT');
999 f533f224 Vangelis Koukis
        return false;
1000 f533f224 Vangelis Koukis
    }
1001 0d4faeb8 Mike Muzurakis
    // ajax post rename call
1002 0d4faeb8 Mike Muzurakis
    var payload = {
1003 73715544 Christodoulos Psaltis
        "server": {"name": serverName}
1004 b02144c8 Vangelis Koukis
    };
1005 0d4faeb8 Mike Muzurakis
1006 0d4faeb8 Mike Muzurakis
    $.ajax({
1007 5b35631e Markos Gogoulos
        url: API_URL + '/servers/' + serverID,
1008 a70a9116 Mike Muzurakis
        type: "PUT",
1009 f533f224 Vangelis Koukis
        contentType: "application/json",
1010 0d4faeb8 Mike Muzurakis
        dataType: "json",
1011 0d4faeb8 Mike Muzurakis
        data: JSON.stringify(payload),
1012 0d4faeb8 Mike Muzurakis
        timeout: TIMEOUT,
1013 b02144c8 Vangelis Koukis
        error: function(jqXHR, textStatus, errorThrown) {
1014 0d4faeb8 Mike Muzurakis
                    display_failure(jqXHR.status, serverID, 'Rename', jqXHR.responseText)
1015 0d4faeb8 Mike Muzurakis
                    },
1016 0d4faeb8 Mike Muzurakis
        success: function(data, textStatus, jqXHR) {
1017 853c53ea Markos Gogoulos
                    if ( jqXHR.status == '204') {
1018 f533f224 Vangelis Koukis
                        try {
1019 0d4faeb8 Mike Muzurakis
                            console.info('renamed ' + serverID);
1020 0d4faeb8 Mike Muzurakis
                        } catch(err) {}
1021 f533f224 Vangelis Koukis
                        // indicate that the action succeeded
1022 f533f224 Vangelis Koukis
                        display_success(serverID);
1023 0d4faeb8 Mike Muzurakis
                    } else {
1024 0d4faeb8 Mike Muzurakis
                        ajax_error(jqXHR.status, serverID, 'Rename', jqXHR.responseText);
1025 0d4faeb8 Mike Muzurakis
                    }
1026 0d4faeb8 Mike Muzurakis
                }
1027 0d4faeb8 Mike Muzurakis
    });
1028 0d4faeb8 Mike Muzurakis
    return false;
1029 0d4faeb8 Mike Muzurakis
}
1030 0d4faeb8 Mike Muzurakis
1031 5186eb04 Christodoulos Psaltis
// get server metadata
1032 f533f224 Vangelis Koukis
function get_metadata(serverID, keys_only) {
1033 5186eb04 Christodoulos Psaltis
    $.ajax({
1034 5186eb04 Christodoulos Psaltis
        url: API_URL + '/servers/' + serverID + '/meta',
1035 5186eb04 Christodoulos Psaltis
        type: "GET",
1036 5186eb04 Christodoulos Psaltis
        //async: false,
1037 5186eb04 Christodoulos Psaltis
        dataType: "json",
1038 5186eb04 Christodoulos Psaltis
        timeout: TIMEOUT,
1039 b02144c8 Vangelis Koukis
        error: function(jqXHR, textStatus, errorThrown) {
1040 5186eb04 Christodoulos Psaltis
            try {
1041 ddf929a7 Christodoulos Psaltis
                // close wizard and show error box
1042 ddf929a7 Christodoulos Psaltis
                $("a#metadata-scrollable").data('overlay').close();
1043 f533f224 Vangelis Koukis
                ajax_error(jqXHR.status, undefined, 'Get metadata', jqXHR.responseText);
1044 f533f224 Vangelis Koukis
            } catch (err) {
1045 f533f224 Vangelis Koukis
                ajax_error(err);
1046 f533f224 Vangelis Koukis
            }
1047 5186eb04 Christodoulos Psaltis
        },
1048 5186eb04 Christodoulos Psaltis
        success: function(data, textStatus, jqXHR) {
1049 1b3857ab Christodoulos Psaltis
            // to list the new results in the edit dialog
1050 f533f224 Vangelis Koukis
            if (keys_only) {
1051 f533f224 Vangelis Koukis
                list_metadata_keys(serverID, data.metadata.values);
1052 f533f224 Vangelis Koukis
            } else {
1053 f533f224 Vangelis Koukis
                list_metadata(data);
1054 f533f224 Vangelis Koukis
                list_metadata_keys(serverID, data.metadata.values);
1055 f533f224 Vangelis Koukis
            }
1056 f533f224 Vangelis Koukis
            //hide spinner
1057 f533f224 Vangelis Koukis
            $('#metadata-wizard .large-spinner').hide();
1058 5186eb04 Christodoulos Psaltis
        }
1059 5186eb04 Christodoulos Psaltis
    });
1060 5186eb04 Christodoulos Psaltis
    return false;
1061 5186eb04 Christodoulos Psaltis
}
1062 5186eb04 Christodoulos Psaltis
1063 1b3857ab Christodoulos Psaltis
// delete metadata key-value pair
1064 1b3857ab Christodoulos Psaltis
function delete_metadata(serverID, meta_key) {
1065 0943cc77 Markos Gogoulos
    $.ajax({
1066 0943cc77 Markos Gogoulos
        url: API_URL + '/servers/' + serverID + '/meta/' + meta_key,
1067 0943cc77 Markos Gogoulos
        type: "DELETE",
1068 0943cc77 Markos Gogoulos
        //async: false,
1069 0943cc77 Markos Gogoulos
        dataType: "json",
1070 0943cc77 Markos Gogoulos
        timeout: TIMEOUT,
1071 b02144c8 Vangelis Koukis
        error: function(jqXHR, textStatus, errorThrown) {
1072 0943cc77 Markos Gogoulos
            try {
1073 ddf929a7 Christodoulos Psaltis
                // close wizard and show error box
1074 ddf929a7 Christodoulos Psaltis
                $("a#metadata-scrollable").data('overlay').close();
1075 f533f224 Vangelis Koukis
                ajax_error(jqXHR.status, undefined, 'Delete metadata', jqXHR.responseText);
1076 f533f224 Vangelis Koukis
            } catch (err) {
1077 f533f224 Vangelis Koukis
                ajax_error(err);
1078 f533f224 Vangelis Koukis
            }
1079 0943cc77 Markos Gogoulos
        },
1080 0943cc77 Markos Gogoulos
        success: function(data, textStatus, jqXHR) {
1081 ddf929a7 Christodoulos Psaltis
                    // success: Do nothing, the UI is already updated
1082 0943cc77 Markos Gogoulos
        }
1083 0943cc77 Markos Gogoulos
    });
1084 0943cc77 Markos Gogoulos
    return false;
1085 0943cc77 Markos Gogoulos
}
1086 0943cc77 Markos Gogoulos
1087 1b3857ab Christodoulos Psaltis
// add metadata key-value pair
1088 f533f224 Vangelis Koukis
function update_metadata(serverID, meta_key, meta_value) {
1089 0c578a28 Markos Gogoulos
    var payload = {
1090 0c578a28 Markos Gogoulos
        "meta": {
1091 0c578a28 Markos Gogoulos
        }
1092 0c578a28 Markos Gogoulos
    };
1093 0c578a28 Markos Gogoulos
    payload["meta"][meta_key] = meta_value;
1094 0c578a28 Markos Gogoulos
1095 0c578a28 Markos Gogoulos
    $.ajax({
1096 0c578a28 Markos Gogoulos
        url: API_URL + '/servers/' + serverID + '/meta/' + meta_key,
1097 0c578a28 Markos Gogoulos
        type: "PUT",
1098 f533f224 Vangelis Koukis
        contentType: "application/json",
1099 f533f224 Vangelis Koukis
        dataType: "json",
1100 f533f224 Vangelis Koukis
        data: JSON.stringify(payload),
1101 f533f224 Vangelis Koukis
        timeout: TIMEOUT,
1102 f533f224 Vangelis Koukis
        error: function(jqXHR, textStatus, errorThrown) {
1103 f533f224 Vangelis Koukis
            try {
1104 ddf929a7 Christodoulos Psaltis
                // close wizard and show error box
1105 ddf929a7 Christodoulos Psaltis
                $("a#metadata-scrollable").data('overlay').close();
1106 f533f224 Vangelis Koukis
                ajax_error(jqXHR.status, undefined, 'add metadata', jqXHR.responseText);
1107 f533f224 Vangelis Koukis
            } catch (err) {
1108 f533f224 Vangelis Koukis
                ajax_error(err);
1109 f533f224 Vangelis Koukis
            }
1110 f533f224 Vangelis Koukis
        },
1111 f533f224 Vangelis Koukis
        success: function(data, textStatus, jqXHR) {
1112 f533f224 Vangelis Koukis
            // success: Update icons if meta key is OS
1113 f533f224 Vangelis Koukis
            if (meta_key == "OS") {
1114 f533f224 Vangelis Koukis
                $("#metadata-wizard .machine-icon").attr("src","static/icons/machines/small/" + os_icon_from_value(meta_value) + '-' + $("#metadata-wizard div#on-off").text() + '.png');
1115 f533f224 Vangelis Koukis
                $("#machinesview-icon").find("div#" + serverID).find("img.logo").attr("src", "static/icons/machines/medium/" + os_icon_from_value(meta_value) + '-' + $("#metadata-wizard div#on-off").text() + '.png');
1116 f533f224 Vangelis Koukis
            }
1117 f533f224 Vangelis Koukis
        }
1118 f533f224 Vangelis Koukis
    });
1119 f533f224 Vangelis Koukis
    return false;
1120 f533f224 Vangelis Koukis
}
1121 f533f224 Vangelis Koukis
1122 f533f224 Vangelis Koukis
// create network
1123 f533f224 Vangelis Koukis
function create_network(networkName){
1124 f533f224 Vangelis Koukis
    // ajax post start call
1125 f533f224 Vangelis Koukis
    var payload = {
1126 f533f224 Vangelis Koukis
        "network": { "name": networkName }
1127 f533f224 Vangelis Koukis
    };
1128 f533f224 Vangelis Koukis
1129 f533f224 Vangelis Koukis
    $.ajax({
1130 f533f224 Vangelis Koukis
        url: API_URL + '/networks',
1131 f533f224 Vangelis Koukis
        type: "POST",
1132 f533f224 Vangelis Koukis
        contentType: "application/json",
1133 f533f224 Vangelis Koukis
        dataType: "json",
1134 f533f224 Vangelis Koukis
        data: JSON.stringify(payload),
1135 f533f224 Vangelis Koukis
        timeout: TIMEOUT,
1136 f533f224 Vangelis Koukis
        error: function(jqXHR, textStatus, errorThrown) {
1137 f533f224 Vangelis Koukis
            try {
1138 ddf929a7 Christodoulos Psaltis
                // close wizard and show error box
1139 ddf929a7 Christodoulos Psaltis
                $("a#networkscreate").overlay().close();
1140 f533f224 Vangelis Koukis
                ajax_error(jqXHR.status, undefined, 'Create network', jqXHR.responseText);
1141 f533f224 Vangelis Koukis
            } catch (err) {
1142 f533f224 Vangelis Koukis
                ajax_error(err);
1143 f533f224 Vangelis Koukis
            }
1144 f533f224 Vangelis Koukis
        },
1145 f533f224 Vangelis Koukis
        success: function(data, textStatus, jqXHR) {
1146 f533f224 Vangelis Koukis
            if ( jqXHR.status == '202') {
1147 f533f224 Vangelis Koukis
                try {
1148 f533f224 Vangelis Koukis
                    console.info('created network ' + networkName);
1149 f533f224 Vangelis Koukis
                } catch(err) {}
1150 a67bb993 Christodoulos Psaltis
                /*
1151 a67bb993 Christodoulos Psaltis
                On success of this call nothing happens.
1152 a67bb993 Christodoulos Psaltis
                When the UI gets the first update containing the created server,
1153 a67bb993 Christodoulos Psaltis
                the creation wizard is closed and the new network is inserted
1154 a67bb993 Christodoulos Psaltis
                to the DOM. This is done in update_networks_view()
1155 a67bb993 Christodoulos Psaltis
                */
1156 f533f224 Vangelis Koukis
            } else {
1157 ddf929a7 Christodoulos Psaltis
                // close wizard and show error box
1158 a67bb993 Christodoulos Psaltis
                $("a#networkscreate").overlay().close();
1159 f533f224 Vangelis Koukis
                ajax_error(jqXHR.status, undefined, 'Create network', jqXHR.responseText);
1160 f533f224 Vangelis Koukis
            }
1161 f533f224 Vangelis Koukis
        }
1162 f533f224 Vangelis Koukis
    });
1163 f533f224 Vangelis Koukis
    return false;
1164 f533f224 Vangelis Koukis
}
1165 f533f224 Vangelis Koukis
1166 f533f224 Vangelis Koukis
// rename network
1167 f533f224 Vangelis Koukis
function rename_network(networkID, networkName){
1168 f533f224 Vangelis Koukis
    if (!networkID.length){
1169 f533f224 Vangelis Koukis
        //ajax_success('DEFAULT');
1170 f533f224 Vangelis Koukis
        return false;
1171 f533f224 Vangelis Koukis
    }
1172 f533f224 Vangelis Koukis
    // prepare payload
1173 f533f224 Vangelis Koukis
    var payload = {
1174 f533f224 Vangelis Koukis
        "network": {"name": networkName}
1175 f533f224 Vangelis Koukis
    };
1176 f533f224 Vangelis Koukis
    // ajax call
1177 f533f224 Vangelis Koukis
    $.ajax({
1178 f533f224 Vangelis Koukis
        url: API_URL + '/networks/' + networkID,
1179 f533f224 Vangelis Koukis
        type: "PUT",
1180 f533f224 Vangelis Koukis
        contentType: "application/json",
1181 f533f224 Vangelis Koukis
        dataType: "json",
1182 f533f224 Vangelis Koukis
        data: JSON.stringify(payload),
1183 f533f224 Vangelis Koukis
        timeout: TIMEOUT,
1184 f533f224 Vangelis Koukis
        error: function(jqXHR, textStatus, errorThrown) {
1185 f533f224 Vangelis Koukis
            try {
1186 f533f224 Vangelis Koukis
                ajax_error(jqXHR.status, undefined, 'Rename network', jqXHR.responseText);
1187 f533f224 Vangelis Koukis
            } catch (err) {
1188 f533f224 Vangelis Koukis
                ajax_error(err);
1189 f533f224 Vangelis Koukis
            }
1190 f533f224 Vangelis Koukis
        },
1191 f533f224 Vangelis Koukis
        success: function(data, textStatus, jqXHR) {
1192 f533f224 Vangelis Koukis
            if ( jqXHR.status == '204') {
1193 f533f224 Vangelis Koukis
                try {
1194 f533f224 Vangelis Koukis
                    console.info('renamed network' + networkID);
1195 f533f224 Vangelis Koukis
                } catch(err) {}
1196 f533f224 Vangelis Koukis
            } else {
1197 f533f224 Vangelis Koukis
                ajax_error(jqXHR.status, undefined, 'Rename network', jqXHR.responseText);
1198 f533f224 Vangelis Koukis
            }
1199 f533f224 Vangelis Koukis
        }
1200 f533f224 Vangelis Koukis
    });
1201 f533f224 Vangelis Koukis
    return false;
1202 f533f224 Vangelis Koukis
}
1203 f533f224 Vangelis Koukis
1204 f533f224 Vangelis Koukis
function delete_network(networkIDs){
1205 f533f224 Vangelis Koukis
    if (!networkIDs.length){
1206 f533f224 Vangelis Koukis
        //ajax_success('DEFAULT');
1207 f533f224 Vangelis Koukis
        return false;
1208 f533f224 Vangelis Koukis
    }
1209 f533f224 Vangelis Koukis
    // get a network
1210 f533f224 Vangelis Koukis
    var networkID = networkIDs.pop();
1211 f533f224 Vangelis Koukis
    // ajax post destroy call can have an empty request body
1212 f533f224 Vangelis Koukis
    var payload = {};
1213 f533f224 Vangelis Koukis
    // ajax call
1214 f533f224 Vangelis Koukis
    $.ajax({
1215 f533f224 Vangelis Koukis
        url: API_URL + '/networks/' + networkID,
1216 f533f224 Vangelis Koukis
        type: "DELETE",
1217 f533f224 Vangelis Koukis
        contentType: "application/json",
1218 f533f224 Vangelis Koukis
        dataType: "json",
1219 f533f224 Vangelis Koukis
        data: JSON.stringify(payload),
1220 f533f224 Vangelis Koukis
        timeout: TIMEOUT,
1221 f533f224 Vangelis Koukis
        error: function(jqXHR, textStatus, errorThrown) {
1222 f533f224 Vangelis Koukis
            try {
1223 d7414be6 Markos Gogoulos
                display_failure(jqXHR.status, networkID, 'Delete', jqXHR.responseText)
1224 f533f224 Vangelis Koukis
            } catch (err) {
1225 f533f224 Vangelis Koukis
                ajax_error(err);
1226 f533f224 Vangelis Koukis
            }
1227 f533f224 Vangelis Koukis
        },
1228 f533f224 Vangelis Koukis
        success: function(data, textStatus, jqXHR) {
1229 f533f224 Vangelis Koukis
            if ( jqXHR.status == '204') {
1230 f533f224 Vangelis Koukis
                try {
1231 f533f224 Vangelis Koukis
                    console.info('deleted network ' + networkID);
1232 f533f224 Vangelis Koukis
                } catch(err) {}
1233 f533f224 Vangelis Koukis
                // continue with the rest of the servers
1234 f533f224 Vangelis Koukis
                delete_network(networkIDs);
1235 f533f224 Vangelis Koukis
            } else {
1236 f533f224 Vangelis Koukis
                ajax_error(jqXHR.status, undefined, 'Delete network', jqXHR.responseText);
1237 f533f224 Vangelis Koukis
            }
1238 f533f224 Vangelis Koukis
        }
1239 f533f224 Vangelis Koukis
    });
1240 f533f224 Vangelis Koukis
    return false;
1241 f533f224 Vangelis Koukis
}
1242 f533f224 Vangelis Koukis
1243 f533f224 Vangelis Koukis
function add_server_to_network(networkID, serverIDs) {
1244 f533f224 Vangelis Koukis
    if (!serverIDs.length){
1245 be191315 Christodoulos Psaltis
        // close the overlay when all the calls are made
1246 be191315 Christodoulos Psaltis
        $("a#add-machines-overlay").overlay().close();
1247 f533f224 Vangelis Koukis
        return false;
1248 f533f224 Vangelis Koukis
    }
1249 f533f224 Vangelis Koukis
    // get a server
1250 f533f224 Vangelis Koukis
    var serverID = serverIDs.pop();
1251 f533f224 Vangelis Koukis
    // prepare payload
1252 f533f224 Vangelis Koukis
    var payload = {
1253 f533f224 Vangelis Koukis
            "add": { "serverRef": serverID }
1254 f533f224 Vangelis Koukis
        };
1255 f533f224 Vangelis Koukis
    // prepare ajax call
1256 f533f224 Vangelis Koukis
    $.ajax({
1257 f533f224 Vangelis Koukis
        url: API_URL + '/networks/' + networkID + '/action',
1258 f533f224 Vangelis Koukis
        type: "POST",
1259 f533f224 Vangelis Koukis
        contentType: "application/json",
1260 b02144c8 Vangelis Koukis
        dataType: "json",
1261 0c578a28 Markos Gogoulos
        data: JSON.stringify(payload),
1262 0c578a28 Markos Gogoulos
        timeout: TIMEOUT,
1263 b02144c8 Vangelis Koukis
        error: function(jqXHR, textStatus, errorThrown) {
1264 0c578a28 Markos Gogoulos
            try {
1265 ddf929a7 Christodoulos Psaltis
                // close wizard and show error box
1266 ddf929a7 Christodoulos Psaltis
                $("a#add-machines-overlay").data('overlay').close();
1267 f533f224 Vangelis Koukis
                ajax_error(jqXHR.status, undefined, 'Add server to network', jqXHR.responseText);
1268 f533f224 Vangelis Koukis
            } catch (err) {
1269 f533f224 Vangelis Koukis
                ajax_error(err);
1270 f533f224 Vangelis Koukis
            }
1271 0c578a28 Markos Gogoulos
        },
1272 0c578a28 Markos Gogoulos
        success: function(data, textStatus, jqXHR) {
1273 f533f224 Vangelis Koukis
            if ( jqXHR.status == '202') {
1274 f533f224 Vangelis Koukis
                try {
1275 f533f224 Vangelis Koukis
                    console.info('added server ' + serverID + ' to network ' + networkID);
1276 f533f224 Vangelis Koukis
                } catch(err) {}
1277 f533f224 Vangelis Koukis
                // continue with the rest of the servers
1278 f533f224 Vangelis Koukis
                add_server_to_network(networkID, serverIDs);
1279 f533f224 Vangelis Koukis
            } else {
1280 ddf929a7 Christodoulos Psaltis
                // close wizard and show error box
1281 ddf929a7 Christodoulos Psaltis
                $("a#add-machines-overlay").data('overlay').close();
1282 f533f224 Vangelis Koukis
                ajax_error(jqXHR.status, undefined, 'Add server to network', jqXHR.responseText);
1283 f533f224 Vangelis Koukis
            }
1284 0c578a28 Markos Gogoulos
        }
1285 0c578a28 Markos Gogoulos
    });
1286 0c578a28 Markos Gogoulos
    return false;
1287 0c578a28 Markos Gogoulos
}
1288 0c578a28 Markos Gogoulos
1289 f533f224 Vangelis Koukis
function remove_server_from_network(networkIDs, serverIDs) {
1290 f533f224 Vangelis Koukis
    if (!networkIDs.length){
1291 f533f224 Vangelis Koukis
        //ajax_success('DEFAULT');
1292 f533f224 Vangelis Koukis
        return false;
1293 f533f224 Vangelis Koukis
    }
1294 f533f224 Vangelis Koukis
    // get a network and a server
1295 f533f224 Vangelis Koukis
    var networkID = networkIDs.pop();
1296 f533f224 Vangelis Koukis
    var serverID = serverIDs.pop();
1297 f533f224 Vangelis Koukis
    // prepare payload
1298 f533f224 Vangelis Koukis
    var payload = {
1299 f533f224 Vangelis Koukis
            "remove": { "serverRef": serverID }
1300 f533f224 Vangelis Koukis
        };
1301 f533f224 Vangelis Koukis
    // prepare ajax call
1302 f533f224 Vangelis Koukis
    $.ajax({
1303 f533f224 Vangelis Koukis
        url: API_URL + '/networks/' + networkID + '/action',
1304 f533f224 Vangelis Koukis
        type: "POST",
1305 f533f224 Vangelis Koukis
        contentType: "application/json",
1306 f533f224 Vangelis Koukis
        dataType: "json",
1307 f533f224 Vangelis Koukis
        data: JSON.stringify(payload),
1308 f533f224 Vangelis Koukis
        timeout: TIMEOUT,
1309 f533f224 Vangelis Koukis
        error: function(jqXHR, textStatus, errorThrown) {
1310 f533f224 Vangelis Koukis
            try {
1311 f533f224 Vangelis Koukis
                ajax_error(jqXHR.status, undefined, 'Remove server form network', jqXHR.responseText);
1312 f533f224 Vangelis Koukis
            } catch (err) {
1313 f533f224 Vangelis Koukis
                ajax_error(err);
1314 f533f224 Vangelis Koukis
            }
1315 f533f224 Vangelis Koukis
        },
1316 f533f224 Vangelis Koukis
        success: function(data, textStatus, jqXHR) {
1317 f533f224 Vangelis Koukis
            if ( jqXHR.status == '202') {
1318 f533f224 Vangelis Koukis
                try {
1319 f533f224 Vangelis Koukis
                    console.info('deleted server ' + serverID + ' from network ' + networkID);
1320 f533f224 Vangelis Koukis
                } catch(err) {}
1321 f533f224 Vangelis Koukis
                // remove it from DOM
1322 1ed89bd2 Christodoulos Psaltis
                // $('#net-' + networkID + '-server-' + serverID).fadeOut('slow').remove();
1323 f533f224 Vangelis Koukis
                // continue with the rest of the servers
1324 f533f224 Vangelis Koukis
                remove_server_form_network(networkIDs, serverIDs);
1325 f533f224 Vangelis Koukis
            } else {
1326 f533f224 Vangelis Koukis
                ajax_error(jqXHR.status, undefined, 'Remove server form network', jqXHR.responseText);
1327 f533f224 Vangelis Koukis
            }
1328 f533f224 Vangelis Koukis
        }
1329 f533f224 Vangelis Koukis
    });
1330 f533f224 Vangelis Koukis
    return false;
1331 f533f224 Vangelis Koukis
}
1332 0c578a28 Markos Gogoulos
1333 6902f72e clopy
// show the welcome screen
1334 6902f72e clopy
function showWelcome() {
1335 f5ebca32 Mike Muzurakis
    $("#view-select").fadeOut("fast");
1336 f5ebca32 Mike Muzurakis
    $("#emptymachineslist").fadeIn("fast");
1337 f0215d6b Mike Muzurakis
    $("#machinesview").hide();
1338 6902f72e clopy
}
1339 6902f72e clopy
1340 6902f72e clopy
// hide the welcome screen
1341 6902f72e clopy
function hideWelcome() {
1342 6902f72e clopy
    $("#emptymachineslist").fadeOut("fast");
1343 6902f72e clopy
    $("#view-select").fadeIn("fast");
1344 ce4f9227 Mike Muzurakis
    $("div#view-select").show();
1345 f0215d6b Mike Muzurakis
    $("#machinesview").show();
1346 f533f224 Vangelis Koukis
}
1347 f533f224 Vangelis Koukis
1348 f533f224 Vangelis Koukis
function log_server_status_change(server_entry, new_status) {
1349 f533f224 Vangelis Koukis
    // firebug console logging
1350 f533f224 Vangelis Koukis
    try {
1351 09828cb5 Mike Muzurakis
        if ($("#machinesview-single").length > 0) {
1352 09828cb5 Mike Muzurakis
            console.info(server_entry.find("div.machine-details div.name").text() +
1353 09828cb5 Mike Muzurakis
                        ' from ' + server_entry.find(".state-label").text() +
1354 09828cb5 Mike Muzurakis
                        ' to ' + STATUSES[new_status]);
1355 09828cb5 Mike Muzurakis
        } else {
1356 09828cb5 Mike Muzurakis
            console.info(server_entry.find("div.name span.name").text() +
1357 09828cb5 Mike Muzurakis
                        ' from ' + server_entry.find(".status").text() +
1358 09828cb5 Mike Muzurakis
                        ' to ' + STATUSES[new_status]);
1359 09828cb5 Mike Muzurakis
        }
1360 f533f224 Vangelis Koukis
    } catch(err) {}
1361 f533f224 Vangelis Koukis
}
1362 f533f224 Vangelis Koukis
1363 f533f224 Vangelis Koukis
function get_flavor_params(flavorRef) {
1364 f533f224 Vangelis Koukis
    var cpus, ram, disk;
1365 f533f224 Vangelis Koukis
    if ( flavors.length > 0 ) {
1366 f533f224 Vangelis Koukis
        var current_flavor = '';
1367 f533f224 Vangelis Koukis
        for (i=0; i<flavors.length; i++) {
1368 f533f224 Vangelis Koukis
            if (flavors[i]['id'] == flavorRef) {
1369 f533f224 Vangelis Koukis
                current_flavor = flavors[i];
1370 f533f224 Vangelis Koukis
            }
1371 f533f224 Vangelis Koukis
        }
1372 f533f224 Vangelis Koukis
        cpus = current_flavor['cpu'];
1373 f533f224 Vangelis Koukis
        ram = current_flavor['ram'];
1374 f533f224 Vangelis Koukis
        disk = current_flavor['disk'];
1375 f533f224 Vangelis Koukis
    } else {
1376 f533f224 Vangelis Koukis
        cpus = 'undefined';
1377 f533f224 Vangelis Koukis
        ram = 'undefined';
1378 f533f224 Vangelis Koukis
        disk = 'undefined';
1379 f533f224 Vangelis Koukis
    }
1380 f533f224 Vangelis Koukis
    return {'cpus': cpus, 'ram': ram, 'disk': disk};
1381 f533f224 Vangelis Koukis
}
1382 f533f224 Vangelis Koukis
1383 f533f224 Vangelis Koukis
function get_image_params(imageRef) {
1384 f533f224 Vangelis Koukis
    var image_name, image_size;
1385 f533f224 Vangelis Koukis
    if ( images.length > 0 ) {
1386 f533f224 Vangelis Koukis
        var current_image = '';
1387 f533f224 Vangelis Koukis
        for (i=0; i<images.length; i++) {
1388 f533f224 Vangelis Koukis
            if (images[i]['id'] == imageRef) {
1389 f533f224 Vangelis Koukis
                current_image = images[i];
1390 f533f224 Vangelis Koukis
            }
1391 f533f224 Vangelis Koukis
        }
1392 7ffea202 Dimitris Moraitis
        try {
1393 7ffea202 Dimitris Moraitis
            image_name = current_image['name'];
1394 7ffea202 Dimitris Moraitis
        } catch(err) { image_name = 'undefined'; }
1395 7ffea202 Dimitris Moraitis
        try{
1396 7ffea202 Dimitris Moraitis
            image_size = current_image['metadata']['values']['size'];
1397 7ffea202 Dimitris Moraitis
        } catch(err) { image_size = 'undefined'; }
1398 f533f224 Vangelis Koukis
    } else {
1399 f533f224 Vangelis Koukis
        image_name = 'undefined';
1400 f533f224 Vangelis Koukis
        image_size = 'undefined';
1401 f533f224 Vangelis Koukis
    }
1402 f533f224 Vangelis Koukis
    return {'name': image_name,'size': image_size};
1403 f533f224 Vangelis Koukis
}
1404 f533f224 Vangelis Koukis
1405 f533f224 Vangelis Koukis
function get_public_ips(server) {
1406 f533f224 Vangelis Koukis
    var ip4, ip6;
1407 f533f224 Vangelis Koukis
    try {
1408 f533f224 Vangelis Koukis
        if (server.addresses.values) {
1409 f533f224 Vangelis Koukis
            $.each (server.addresses.values, function(i, value) {
1410 f533f224 Vangelis Koukis
                if (value.id == 'public') {
1411 f533f224 Vangelis Koukis
                    try {
1412 f533f224 Vangelis Koukis
                        $.each (value.values, function(i, ip) {
1413 f533f224 Vangelis Koukis
                            if (ip.version == '4') {
1414 f533f224 Vangelis Koukis
                                ip4 = ip.addr;
1415 f533f224 Vangelis Koukis
                            } else if (ip.version == '6') {
1416 f533f224 Vangelis Koukis
                                ip6 = ip.addr;
1417 f533f224 Vangelis Koukis
                            } else {
1418 f533f224 Vangelis Koukis
                                ip4 = 'undefined';
1419 f533f224 Vangelis Koukis
                                ip6 = 'undefined';
1420 f533f224 Vangelis Koukis
                            }
1421 f533f224 Vangelis Koukis
                        });
1422 f533f224 Vangelis Koukis
                    } catch (err){
1423 f533f224 Vangelis Koukis
                        try{console.info('Server ' + server.id + ' has invalid ips')}catch(err){};
1424 f533f224 Vangelis Koukis
                        ip4 = 'undefined';
1425 f533f224 Vangelis Koukis
                        ip6 = 'undefined';
1426 f533f224 Vangelis Koukis
                    }
1427 f533f224 Vangelis Koukis
                }
1428 f533f224 Vangelis Koukis
            });
1429 f533f224 Vangelis Koukis
        }
1430 f533f224 Vangelis Koukis
    } catch (err) {
1431 f533f224 Vangelis Koukis
        try{console.info('Server ' + server.id + ' has no network addresses')}catch(err){};
1432 f533f224 Vangelis Koukis
        ip4 = 'undefined';
1433 f533f224 Vangelis Koukis
        ip6 = 'undefined';
1434 f533f224 Vangelis Koukis
    }
1435 f533f224 Vangelis Koukis
    return {'ip4': ip4, 'ip6': ip6};
1436 6902f72e clopy
}
1437 6902f72e clopy
1438 f533f224 Vangelis Koukis
function get_private_ips(server) {
1439 f533f224 Vangelis Koukis
1440 f533f224 Vangelis Koukis
}