Statistics
| Branch: | Tag: | Revision:

root / ui / static / synnefo.js @ e996a0af

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