root / ui / static / synnefo.js @ cbadb3d8
History | View | Annotate | Download (90 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 | 9eefb3a2 | Kostas Papadimitriou | var error_timeout = 20000; |
40 | 7991d0c5 | Kostas Papadimitriou | var last_request = {};
|
41 | 7991d0c5 | Kostas Papadimitriou | |
42 | 9eefb3a2 | Kostas Papadimitriou | $.ajaxSetup({
|
43 | 9eefb3a2 | Kostas Papadimitriou | 'beforeSend': function(xhr) { |
44 | 7991d0c5 | Kostas Papadimitriou | // save ajax settings, we might need them for error reporting
|
45 | 7991d0c5 | Kostas Papadimitriou | last_request = this;
|
46 | 9eefb3a2 | Kostas Papadimitriou | xhr.setRequestHeader("X-Auth-Token", $.cookie("X-Auth-Token")); |
47 | 9eefb3a2 | Kostas Papadimitriou | }, |
48 | 9eefb3a2 | Kostas Papadimitriou | |
49 | 9eefb3a2 | Kostas Papadimitriou | // catch uncaught error requests
|
50 | 9eefb3a2 | Kostas Papadimitriou | // stop interaction and show only for the 5xx errors
|
51 | 9eefb3a2 | Kostas Papadimitriou | // refresh the page after 20secs
|
52 | 9eefb3a2 | Kostas Papadimitriou | error: function(jqXHR, textStatus, errorThrown) { |
53 | 7991d0c5 | Kostas Papadimitriou | |
54 | 7991d0c5 | Kostas Papadimitriou | // check if xhr is in valid state (no status property)
|
55 | 7991d0c5 | Kostas Papadimitriou | try {
|
56 | 7991d0c5 | Kostas Papadimitriou | var status = jqXHR.status;
|
57 | 7991d0c5 | Kostas Papadimitriou | } catch (err) {
|
58 | 7991d0c5 | Kostas Papadimitriou | return false; |
59 | 7991d0c5 | Kostas Papadimitriou | } |
60 | 7991d0c5 | Kostas Papadimitriou | |
61 | 9eefb3a2 | Kostas Papadimitriou | // stop interaction for important (aka 500) error codes only
|
62 | 9eefb3a2 | Kostas Papadimitriou | if (jqXHR.status >= 500 && jqXHR.status < 600) |
63 | 9eefb3a2 | Kostas Papadimitriou | { |
64 | 9eefb3a2 | Kostas Papadimitriou | try {
|
65 | 9eefb3a2 | Kostas Papadimitriou | ajax_error(jqXHR.status, undefined, 'Unknown', jqXHR.responseText); |
66 | 9eefb3a2 | Kostas Papadimitriou | } catch(err) {
|
67 | 7991d0c5 | Kostas Papadimitriou | if (!isXhrException(err)) {
|
68 | 7991d0c5 | Kostas Papadimitriou | ajax_error(-501, "UI Error", 'Generic error', err); |
69 | 7991d0c5 | Kostas Papadimitriou | } else {
|
70 | 7991d0c5 | Kostas Papadimitriou | return false; |
71 | 7991d0c5 | Kostas Papadimitriou | } |
72 | 9eefb3a2 | Kostas Papadimitriou | } |
73 | 8b17cf6e | Markos Gogoulos | } |
74 | 9eefb3a2 | Kostas Papadimitriou | |
75 | 9eefb3a2 | Kostas Papadimitriou | // refresh after 10 seconds
|
76 | 9eefb3a2 | Kostas Papadimitriou | window.setTimeout("window.location.reload()", window.error_timeout);
|
77 | 9eefb3a2 | Kostas Papadimitriou | } |
78 | 9eefb3a2 | Kostas Papadimitriou | }); |
79 | d994d118 | Markos Gogoulos | |
80 | 7991d0c5 | Kostas Papadimitriou | function isXhrException(err) { |
81 | 7991d0c5 | Kostas Papadimitriou | |
82 | 7991d0c5 | Kostas Papadimitriou | DOM_EXCEPTION_NAMES = [ |
83 | 7991d0c5 | Kostas Papadimitriou | "NS_ERROR_NOT_AVAILABLE", // Firefox |
84 | 7991d0c5 | Kostas Papadimitriou | "INVALID_STATE_ERR" // Chrome |
85 | 7991d0c5 | Kostas Papadimitriou | ]; |
86 | 7991d0c5 | Kostas Papadimitriou | |
87 | 7991d0c5 | Kostas Papadimitriou | try {
|
88 | 7991d0c5 | Kostas Papadimitriou | if (DOM_EXCEPTION_NAMES.indexOf(err.name) != -1) { |
89 | 7991d0c5 | Kostas Papadimitriou | return true; |
90 | 7991d0c5 | Kostas Papadimitriou | } |
91 | 7991d0c5 | Kostas Papadimitriou | |
92 | 7991d0c5 | Kostas Papadimitriou | // ie !!!!
|
93 | 7991d0c5 | Kostas Papadimitriou | if (err.number == -2147467259) { |
94 | 7991d0c5 | Kostas Papadimitriou | return true; |
95 | 7991d0c5 | Kostas Papadimitriou | } |
96 | 7991d0c5 | Kostas Papadimitriou | |
97 | 7991d0c5 | Kostas Papadimitriou | } catch(err) {
|
98 | 7991d0c5 | Kostas Papadimitriou | return false; |
99 | 7991d0c5 | Kostas Papadimitriou | } |
100 | 7991d0c5 | Kostas Papadimitriou | |
101 | 7991d0c5 | Kostas Papadimitriou | return false; |
102 | 7991d0c5 | Kostas Papadimitriou | } |
103 | 7991d0c5 | Kostas Papadimitriou | |
104 | 54417a11 | Kostas Papadimitriou | Object.prototype.toString = function(o){ |
105 | 54417a11 | Kostas Papadimitriou | |
106 | 54417a11 | Kostas Papadimitriou | var parse = function(_o){ |
107 | 54417a11 | Kostas Papadimitriou | var a = [], t;
|
108 | 54417a11 | Kostas Papadimitriou | for(var p in _o){ |
109 | 54417a11 | Kostas Papadimitriou | if(_o.hasOwnProperty(p)){
|
110 | 54417a11 | Kostas Papadimitriou | t = _o[p]; |
111 | 54417a11 | Kostas Papadimitriou | if(t && typeof t == "object"){ |
112 | 54417a11 | Kostas Papadimitriou | a[a.length]= p + ":{ " + arguments.callee(t).join(", ") + "}"; |
113 | 54417a11 | Kostas Papadimitriou | } |
114 | 54417a11 | Kostas Papadimitriou | else {
|
115 | 54417a11 | Kostas Papadimitriou | if(typeof t == "string"){ |
116 | 54417a11 | Kostas Papadimitriou | a[a.length] = [ p+ ": \"" + t.toString() + "\"" ]; |
117 | 54417a11 | Kostas Papadimitriou | } |
118 | 54417a11 | Kostas Papadimitriou | else{
|
119 | 54417a11 | Kostas Papadimitriou | a[a.length] = [ p+ ": " + t.toString()];
|
120 | 54417a11 | Kostas Papadimitriou | } |
121 | 54417a11 | Kostas Papadimitriou | } |
122 | 54417a11 | Kostas Papadimitriou | } |
123 | 54417a11 | Kostas Papadimitriou | } |
124 | 54417a11 | Kostas Papadimitriou | return a;
|
125 | 54417a11 | Kostas Papadimitriou | |
126 | 54417a11 | Kostas Papadimitriou | } |
127 | 54417a11 | Kostas Papadimitriou | return "{" + parse(o).join(", ") + "}"; |
128 | 54417a11 | Kostas Papadimitriou | |
129 | 54417a11 | Kostas Papadimitriou | } |
130 | a583aa29 | Kostas Papadimitriou | |
131 | d790d9b7 | Kostas Papadimitriou | // http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area
|
132 | d790d9b7 | Kostas Papadimitriou | $.fn.setCursorPosition = function(pos) { |
133 | d790d9b7 | Kostas Papadimitriou | if ($(this).get(0).setSelectionRange) { |
134 | d790d9b7 | Kostas Papadimitriou | $(this).get(0).setSelectionRange(pos, pos); |
135 | d790d9b7 | Kostas Papadimitriou | } else if ($(this).get(0).createTextRange) { |
136 | d790d9b7 | Kostas Papadimitriou | var range = $(this).get(0).createTextRange(); |
137 | d790d9b7 | Kostas Papadimitriou | range.collapse(true);
|
138 | d790d9b7 | Kostas Papadimitriou | range.moveEnd('character', pos);
|
139 | d790d9b7 | Kostas Papadimitriou | range.moveStart('character', pos);
|
140 | d790d9b7 | Kostas Papadimitriou | range.select(); |
141 | d790d9b7 | Kostas Papadimitriou | } |
142 | d790d9b7 | Kostas Papadimitriou | } |
143 | d790d9b7 | Kostas Papadimitriou | |
144 | 70eab221 | Kostas Papadimitriou | // jquery show/hide events
|
145 | a583aa29 | Kostas Papadimitriou | var _oldshow = $.fn.show; |
146 | a583aa29 | Kostas Papadimitriou | $.fn.show = function(speed, callback) { |
147 | a583aa29 | Kostas Papadimitriou | $(this).trigger('show'); |
148 | a583aa29 | Kostas Papadimitriou | return _oldshow.apply(this,arguments); |
149 | a583aa29 | Kostas Papadimitriou | } |
150 | 70eab221 | Kostas Papadimitriou | var _oldhide = $.fn.hide; |
151 | 70eab221 | Kostas Papadimitriou | $.fn.hide = function(speed, callback) { |
152 | 70eab221 | Kostas Papadimitriou | $(this).trigger('hide'); |
153 | 70eab221 | Kostas Papadimitriou | return _oldhide.apply(this,arguments); |
154 | 70eab221 | Kostas Papadimitriou | } |
155 | a583aa29 | Kostas Papadimitriou | |
156 | c5a032c4 | Markos Gogoulos | function ISODateString(d){ |
157 | b02144c8 | Vangelis Koukis | //return a date in an ISO 8601 format using UTC.
|
158 | c5a032c4 | Markos Gogoulos | //do not include time zone info (Z) at the end
|
159 | b02144c8 | Vangelis Koukis | //taken from the Mozilla Developer Center
|
160 | 267403ca | Dimitris Moraitis | function pad(n){ return n<10 ? '0'+n : n } |
161 | 267403ca | Dimitris Moraitis | return d.getUTCFullYear()+ '-' + |
162 | f533f224 | Vangelis Koukis | pad(d.getUTCMonth()+1) + '-' + |
163 | f533f224 | Vangelis Koukis | pad(d.getUTCDate()) + 'T' +
|
164 | f533f224 | Vangelis Koukis | pad(d.getUTCHours()) + ':' +
|
165 | f533f224 | Vangelis Koukis | pad(d.getUTCMinutes()) + ':' +
|
166 | f533f224 | Vangelis Koukis | pad(d.getUTCSeconds()) +'Z'
|
167 | 038383b1 | Dimitris Moraitis | } |
168 | 038383b1 | Dimitris Moraitis | |
169 | f533f224 | Vangelis Koukis | function parse_error(responseText, errorCode){ |
170 | f533f224 | Vangelis Koukis | var errors = [];
|
171 | f533f224 | Vangelis Koukis | try {
|
172 | f533f224 | Vangelis Koukis | responseObj = JSON.parse(responseText); |
173 | f533f224 | Vangelis Koukis | } |
174 | f533f224 | Vangelis Koukis | catch(err) {
|
175 | f533f224 | Vangelis Koukis | errors[0] = {'code': errorCode}; |
176 | f533f224 | Vangelis Koukis | return errors;
|
177 | f533f224 | Vangelis Koukis | } |
178 | f533f224 | Vangelis Koukis | for (var err in responseObj){ |
179 | f533f224 | Vangelis Koukis | errors[errors.length] = responseObj[err]; |
180 | f533f224 | Vangelis Koukis | } |
181 | f533f224 | Vangelis Koukis | return errors;
|
182 | 267403ca | Dimitris Moraitis | } |
183 | c5a032c4 | Markos Gogoulos | |
184 | 41cad45d | Dimitris Moraitis | // indexOf prototype for IE
|
185 | 41cad45d | Dimitris Moraitis | if (!Array.prototype.indexOf) {
|
186 | 41cad45d | Dimitris Moraitis | Array.prototype.indexOf = function(elt /*, from*/) { |
187 | 41cad45d | Dimitris Moraitis | var len = this.length; |
188 | 41cad45d | Dimitris Moraitis | var from = Number(arguments[1]) || 0; |
189 | 41cad45d | Dimitris Moraitis | from = (from < 0)
|
190 | 41cad45d | Dimitris Moraitis | ? Math.ceil(from) |
191 | 41cad45d | Dimitris Moraitis | : Math.floor(from); |
192 | 41cad45d | Dimitris Moraitis | if (from < 0) |
193 | 41cad45d | Dimitris Moraitis | from += len; |
194 | 41cad45d | Dimitris Moraitis | |
195 | 41cad45d | Dimitris Moraitis | for (; from < len; from++) {
|
196 | 41cad45d | Dimitris Moraitis | if (from in this && |
197 | 41cad45d | Dimitris Moraitis | this[from] === elt)
|
198 | 41cad45d | Dimitris Moraitis | return from;
|
199 | 41cad45d | Dimitris Moraitis | } |
200 | 41cad45d | Dimitris Moraitis | return -1; |
201 | 41cad45d | Dimitris Moraitis | }; |
202 | 41cad45d | Dimitris Moraitis | } |
203 | 41cad45d | Dimitris Moraitis | |
204 | 380c0520 | Dimitris Moraitis | // trim prototype for IE
|
205 | 380c0520 | Dimitris Moraitis | if(typeof String.prototype.trim !== 'function') { |
206 | 380c0520 | Dimitris Moraitis | String.prototype.trim = function() { |
207 | 82835e06 | Christodoulos Psaltis | return this.replace(/^\s+|\s+$/g, ''); |
208 | 380c0520 | Dimitris Moraitis | } |
209 | 380c0520 | Dimitris Moraitis | } |
210 | 380c0520 | Dimitris Moraitis | |
211 | a70fb308 | Christodoulos Psaltis | function update_confirmations() { |
212 | dcf153ce | Christodoulos Psaltis | // hide all confirm boxes to begin with
|
213 | f533f224 | Vangelis Koukis | $('#machines-pane div.confirm_single').hide(); |
214 | f533f224 | Vangelis Koukis | $('#machines-pane div.confirm_multiple').hide(); |
215 | a70fb308 | Christodoulos Psaltis | var action_type = [];
|
216 | 9b2ab29a | Christodoulos Psaltis | // standard view or single view
|
217 | 9b2ab29a | Christodoulos Psaltis | if ($.cookie("view") == '0' || $.cookie("view") == '2') { |
218 | 9044c6eb | Christodoulos Psaltis | for (var i=0; i<pending_actions.length; i++) { |
219 | dcf153ce | Christodoulos Psaltis | // show single confirms
|
220 | a70fb308 | Christodoulos Psaltis | if (pending_actions[i][0] == reboot) { |
221 | 9044c6eb | Christodoulos Psaltis | action_type = "reboot";
|
222 | a70fb308 | Christodoulos Psaltis | } else if (pending_actions[i][0] == shutdown) { |
223 | 9044c6eb | Christodoulos Psaltis | action_type = "shutdown";
|
224 | a70fb308 | Christodoulos Psaltis | } else if (pending_actions[i][0] == start) { |
225 | 9044c6eb | Christodoulos Psaltis | action_type = "start";
|
226 | 9044c6eb | Christodoulos Psaltis | } else if (pending_actions[i][0] == open_console) { |
227 | 9044c6eb | Christodoulos Psaltis | action_type = "console";
|
228 | a70fb308 | Christodoulos Psaltis | } else {
|
229 | 9044c6eb | Christodoulos Psaltis | action_type = "destroy";
|
230 | a70fb308 | Christodoulos Psaltis | } |
231 | 9b2ab29a | Christodoulos Psaltis | $("#machines-pane #" + pending_actions[i][1] + |
232 | 9b2ab29a | Christodoulos Psaltis | " div.action-container." + action_type + " div.confirm_single").show(); |
233 | dc3e66b9 | Mike Muzurakis | } |
234 | f533f224 | Vangelis Koukis | } |
235 | f533f224 | Vangelis Koukis | // if more than one pending action show multiple confirm box
|
236 | f533f224 | Vangelis Koukis | if (pending_actions.length>1 || $.cookie("view") == '1' && pending_actions.length == 1){ |
237 | f533f224 | Vangelis Koukis | $('#machines-pane div.confirm_multiple span.actionLen').text(pending_actions.length); |
238 | f533f224 | Vangelis Koukis | $('#machines-pane div.confirm_multiple').show(); |
239 | f533f224 | Vangelis Koukis | } |
240 | f533f224 | Vangelis Koukis | } |
241 | dcf153ce | Christodoulos Psaltis | |
242 | f533f224 | Vangelis Koukis | function update_network_confirmations(){ |
243 | f533f224 | Vangelis Koukis | // hide all confirm boxes to begin with
|
244 | f533f224 | Vangelis Koukis | $('#networks-pane div.confirm_multiple').hide(); |
245 | f533f224 | Vangelis Koukis | |
246 | f533f224 | Vangelis Koukis | for (var i=0;i<pending_actions.length;i++){ |
247 | f533f224 | Vangelis Koukis | // show single confirms depending on the action
|
248 | f533f224 | Vangelis Koukis | if (pending_actions[i][0] == delete_network) { |
249 | f533f224 | Vangelis Koukis | $("#networks-pane div.network#net-"+pending_actions[i][1]).children('.confirm_single').show(); |
250 | f533f224 | Vangelis Koukis | } else if (pending_actions[i][0] == remove_server_from_network) { |
251 | f533f224 | Vangelis Koukis | $("#networks-pane div.network #net-"+pending_actions[i][1]+"-server-"+pending_actions[i][2]).children('.confirm_single').show(); |
252 | f533f224 | Vangelis Koukis | } // else {}
|
253 | f533f224 | Vangelis Koukis | } |
254 | f533f224 | Vangelis Koukis | |
255 | f533f224 | Vangelis Koukis | // if more than one pending action show multiple confirm box
|
256 | f533f224 | Vangelis Koukis | if (pending_actions.length > 1){ |
257 | f533f224 | Vangelis Koukis | $('#networks-pane div.confirm_multiple span.actionLen').text(pending_actions.length); |
258 | f533f224 | Vangelis Koukis | $('#networks-pane div.confirm_multiple').show(); |
259 | f533f224 | Vangelis Koukis | } |
260 | 3d286f84 | Dimitris Moraitis | } |
261 | 3d286f84 | Dimitris Moraitis | |
262 | 42f67a2a | Dimitris Moraitis | function list_view() { |
263 | f533f224 | Vangelis Koukis | changes_since = 0; // to reload full list |
264 | f533f224 | Vangelis Koukis | pending_actions = []; // clear pending actions
|
265 | f533f224 | Vangelis Koukis | update_confirmations(); |
266 | f533f224 | Vangelis Koukis | clearTimeout(deferred); // clear old deferred calls
|
267 | f533f224 | Vangelis Koukis | try {
|
268 | f533f224 | Vangelis Koukis | update_request.abort(); // cancel pending ajax updates
|
269 | f533f224 | Vangelis Koukis | load_request.abort(); |
270 | f533f224 | Vangelis Koukis | }catch(err){}
|
271 | f533f224 | Vangelis Koukis | $.cookie("view", '1'); // set list cookie |
272 | f533f224 | Vangelis Koukis | uri = $("a#list").attr("href"); |
273 | 267403ca | Dimitris Moraitis | load_request = $.ajax({
|
274 | 267403ca | Dimitris Moraitis | url: uri,
|
275 | 267403ca | Dimitris Moraitis | type: "GET", |
276 | 267403ca | Dimitris Moraitis | timeout: TIMEOUT,
|
277 | 267403ca | Dimitris Moraitis | dataType: "html", |
278 | f533f224 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
279 | f533f224 | Vangelis Koukis | return false; |
280 | f533f224 | Vangelis Koukis | }, |
281 | 267403ca | Dimitris Moraitis | success: function(data, textStatus, jqXHR) { |
282 | f533f224 | Vangelis Koukis | $("a#list")[0].className += ' activelink'; |
283 | f533f224 | Vangelis Koukis | $("a#standard")[0].className = ''; |
284 | f533f224 | Vangelis Koukis | $("a#single")[0].className = ''; |
285 | f533f224 | Vangelis Koukis | $("div#machinesview").html(data); |
286 | f533f224 | Vangelis Koukis | } |
287 | f533f224 | Vangelis Koukis | }); |
288 | f533f224 | Vangelis Koukis | return false; |
289 | f533f224 | Vangelis Koukis | } |
290 | b02144c8 | Vangelis Koukis | |
291 | f533f224 | Vangelis Koukis | function single_view() { |
292 | f533f224 | Vangelis Koukis | changes_since = 0; // to reload full list |
293 | f533f224 | Vangelis Koukis | pending_actions = []; // clear pending actions
|
294 | f533f224 | Vangelis Koukis | update_confirmations(); |
295 | f533f224 | Vangelis Koukis | clearTimeout(deferred); // clear old deferred calls
|
296 | f533f224 | Vangelis Koukis | try {
|
297 | f533f224 | Vangelis Koukis | update_request.abort(); // cancel pending ajax updates
|
298 | f533f224 | Vangelis Koukis | load_request.abort(); |
299 | f533f224 | Vangelis Koukis | }catch(err){}
|
300 | f533f224 | Vangelis Koukis | $.cookie("view", '2'); // set list cookie |
301 | f533f224 | Vangelis Koukis | uri = $("a#single").attr("href"); |
302 | f533f224 | Vangelis Koukis | load_request = $.ajax({
|
303 | f533f224 | Vangelis Koukis | url: uri,
|
304 | f533f224 | Vangelis Koukis | type: "GET", |
305 | f533f224 | Vangelis Koukis | timeout: TIMEOUT,
|
306 | f533f224 | Vangelis Koukis | dataType: "html", |
307 | f533f224 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
308 | f533f224 | Vangelis Koukis | return false; |
309 | f533f224 | Vangelis Koukis | }, |
310 | f533f224 | Vangelis Koukis | success: function(data, textStatus, jqXHR) { |
311 | f533f224 | Vangelis Koukis | $("a#single")[0].className += ' activelink'; |
312 | f533f224 | Vangelis Koukis | $("a#standard")[0].className = ''; |
313 | f533f224 | Vangelis Koukis | $("a#list")[0].className = ''; |
314 | f533f224 | Vangelis Koukis | $("div#machinesview").html(data); |
315 | f533f224 | Vangelis Koukis | } |
316 | f533f224 | Vangelis Koukis | }); |
317 | 42f67a2a | Dimitris Moraitis | return false; |
318 | 42f67a2a | Dimitris Moraitis | } |
319 | 42f67a2a | Dimitris Moraitis | |
320 | 42f67a2a | Dimitris Moraitis | function standard_view() { |
321 | f533f224 | Vangelis Koukis | changes_since = 0; // to reload full list |
322 | f533f224 | Vangelis Koukis | pending_actions = []; // clear pending actions
|
323 | f533f224 | Vangelis Koukis | update_confirmations(); |
324 | f533f224 | Vangelis Koukis | clearTimeout(deferred); // clear old deferred calls
|
325 | f533f224 | Vangelis Koukis | try {
|
326 | f533f224 | Vangelis Koukis | update_request.abort() // cancel pending ajax updates
|
327 | f533f224 | Vangelis Koukis | load_request.abort(); |
328 | f533f224 | Vangelis Koukis | }catch(err){}
|
329 | f533f224 | Vangelis Koukis | $.cookie("view", '0'); |
330 | 267403ca | Dimitris Moraitis | uri = $("a#standard").attr("href"); |
331 | 267403ca | Dimitris Moraitis | load_request = $.ajax({
|
332 | 267403ca | Dimitris Moraitis | url: uri,
|
333 | 267403ca | Dimitris Moraitis | type: "GET", |
334 | 267403ca | Dimitris Moraitis | timeout: TIMEOUT,
|
335 | 267403ca | Dimitris Moraitis | dataType: "html", |
336 | f533f224 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
337 | f533f224 | Vangelis Koukis | return false; |
338 | f533f224 | Vangelis Koukis | }, |
339 | 267403ca | Dimitris Moraitis | success: function(data, textStatus, jqXHR) { |
340 | f533f224 | Vangelis Koukis | $("a#standard")[0].className += ' activelink'; |
341 | f533f224 | Vangelis Koukis | $("a#list")[0].className = ''; |
342 | f533f224 | Vangelis Koukis | $("a#single")[0].className = ''; |
343 | f533f224 | Vangelis Koukis | $("div#machinesview").html(data); |
344 | f533f224 | Vangelis Koukis | } |
345 | f533f224 | Vangelis Koukis | }); |
346 | 42f67a2a | Dimitris Moraitis | return false; |
347 | 42f67a2a | Dimitris Moraitis | } |
348 | 42f67a2a | Dimitris Moraitis | |
349 | 42f67a2a | Dimitris Moraitis | function choose_view() { |
350 | f533f224 | Vangelis Koukis | if ($.cookie("view")=='1') { |
351 | 42f67a2a | Dimitris Moraitis | list_view(); |
352 | f533f224 | Vangelis Koukis | } else if ($.cookie("view")=='2'){ |
353 | f533f224 | Vangelis Koukis | single_view(); |
354 | 42f67a2a | Dimitris Moraitis | } else {
|
355 | 42f67a2a | Dimitris Moraitis | standard_view(); |
356 | 42f67a2a | Dimitris Moraitis | } |
357 | 42f67a2a | Dimitris Moraitis | } |
358 | 42f67a2a | Dimitris Moraitis | |
359 | e4f32f27 | Mike Muzurakis | // return value from metadata key "OS", if it exists
|
360 | e4f32f27 | Mike Muzurakis | function os_icon(metadata) { |
361 | e4f32f27 | Mike Muzurakis | if (!metadata) {
|
362 | 552c32d8 | Kostas Papadimitriou | return 'okeanos'; |
363 | e4f32f27 | Mike Muzurakis | } |
364 | e4f32f27 | Mike Muzurakis | if (metadata.values.OS == undefined || metadata.values.OS == '') { |
365 | 552c32d8 | Kostas Papadimitriou | return 'okeanos'; |
366 | e4f32f27 | Mike Muzurakis | } else {
|
367 | e4f32f27 | Mike Muzurakis | if (os_icons.indexOf(metadata.values.OS) == -1) { |
368 | 552c32d8 | Kostas Papadimitriou | return 'okeanos'; |
369 | e4f32f27 | Mike Muzurakis | } else {
|
370 | e4f32f27 | Mike Muzurakis | return metadata.values.OS;
|
371 | e4f32f27 | Mike Muzurakis | } |
372 | e4f32f27 | Mike Muzurakis | } |
373 | e4f32f27 | Mike Muzurakis | } |
374 | e4f32f27 | Mike Muzurakis | |
375 | e4f32f27 | Mike Muzurakis | function os_icon_from_value(metadata) { |
376 | e4f32f27 | Mike Muzurakis | if (!metadata) {
|
377 | 552c32d8 | Kostas Papadimitriou | return 'okeanos'; |
378 | e4f32f27 | Mike Muzurakis | } |
379 | e4f32f27 | Mike Muzurakis | if (metadata == undefined || metadata == '') { |
380 | 552c32d8 | Kostas Papadimitriou | return 'okeanos'; |
381 | e4f32f27 | Mike Muzurakis | } else {
|
382 | e4f32f27 | Mike Muzurakis | if (os_icons.indexOf(metadata) == -1) { |
383 | 552c32d8 | Kostas Papadimitriou | return 'okeanos'; |
384 | e4f32f27 | Mike Muzurakis | } else {
|
385 | e4f32f27 | Mike Muzurakis | return metadata;
|
386 | e4f32f27 | Mike Muzurakis | } |
387 | e4f32f27 | Mike Muzurakis | } |
388 | e4f32f27 | Mike Muzurakis | } |
389 | e4f32f27 | Mike Muzurakis | |
390 | f533f224 | Vangelis Koukis | // get and show a list of running and terminated machines
|
391 | f533f224 | Vangelis Koukis | function update_vms(interval) { |
392 | f533f224 | Vangelis Koukis | try{ console.info('updating machines'); } catch(err){} |
393 | f533f224 | Vangelis Koukis | var uri= API_URL + '/servers/detail'; |
394 | b02144c8 | Vangelis Koukis | |
395 | f533f224 | Vangelis Koukis | if (changes_since != 0) |
396 | f533f224 | Vangelis Koukis | uri+='?changes-since='+changes_since
|
397 | b02144c8 | Vangelis Koukis | |
398 | f533f224 | Vangelis Koukis | update_request = $.ajax({
|
399 | f533f224 | Vangelis Koukis | cache: false, |
400 | f533f224 | Vangelis Koukis | url: uri,
|
401 | f533f224 | Vangelis Koukis | type: "GET", |
402 | f533f224 | Vangelis Koukis | timeout: TIMEOUT,
|
403 | f533f224 | Vangelis Koukis | dataType: "json", |
404 | f533f224 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
405 | f533f224 | Vangelis Koukis | // don't forget to try again later
|
406 | f533f224 | Vangelis Koukis | if (interval) {
|
407 | f533f224 | Vangelis Koukis | clearTimeout(deferred); // clear old deferred calls
|
408 | f533f224 | Vangelis Koukis | deferred = setTimeout(function() {update_vms(interval);},interval,interval);
|
409 | f533f224 | Vangelis Koukis | } |
410 | f533f224 | Vangelis Koukis | // as for now, just show an error message
|
411 | f533f224 | Vangelis Koukis | try { console.info('update_vms errback:' + jqXHR.status ) } catch(err) {} |
412 | 7991d0c5 | Kostas Papadimitriou | try {
|
413 | 7991d0c5 | Kostas Papadimitriou | ajax_error(jqXHR.status, undefined, 'Update VMs', jqXHR.responseText); |
414 | 7991d0c5 | Kostas Papadimitriou | } catch(err) {
|
415 | 7991d0c5 | Kostas Papadimitriou | if (!isXhrException(err)) {
|
416 | 7991d0c5 | Kostas Papadimitriou | ajax_error(-502, "UI Error", 'Update VMs', err); |
417 | 7991d0c5 | Kostas Papadimitriou | } else {
|
418 | 7991d0c5 | Kostas Papadimitriou | return false; |
419 | 7991d0c5 | Kostas Papadimitriou | } |
420 | 7991d0c5 | Kostas Papadimitriou | } |
421 | 7991d0c5 | Kostas Papadimitriou | return false; |
422 | f533f224 | Vangelis Koukis | }, |
423 | f533f224 | Vangelis Koukis | success: function(data, textStatus, jqXHR) { |
424 | f533f224 | Vangelis Koukis | // create changes_since string if necessary
|
425 | f533f224 | Vangelis Koukis | if (jqXHR.getResponseHeader('Date') != null){ |
426 | f533f224 | Vangelis Koukis | changes_since_date = new Date(jqXHR.getResponseHeader('Date')); |
427 | f533f224 | Vangelis Koukis | changes_since = ISODateString(changes_since_date); |
428 | f533f224 | Vangelis Koukis | } |
429 | b02144c8 | Vangelis Koukis | |
430 | f533f224 | Vangelis Koukis | if (interval) {
|
431 | f533f224 | Vangelis Koukis | clearTimeout(deferred); // clear old deferred calls
|
432 | f533f224 | Vangelis Koukis | deferred = setTimeout(function() {update_vms(interval);},interval,interval);
|
433 | f533f224 | Vangelis Koukis | } |
434 | 42f67a2a | Dimitris Moraitis | |
435 | f533f224 | Vangelis Koukis | if (jqXHR.status == 200 || jqXHR.status == 203) { |
436 | f533f224 | Vangelis Koukis | try {
|
437 | 7acbe201 | Kostas Papadimitriou | //servers = data.servers.values;
|
438 | 7acbe201 | Kostas Papadimitriou | update_servers_data(data.servers.values, data); |
439 | 882ceb8f | Dimitris Moraitis | update_machines_view(data); |
440 | 7991d0c5 | Kostas Papadimitriou | } catch (err) { ajax_error(-503, "UI Error", 'Update VMs', err);} |
441 | f533f224 | Vangelis Koukis | } else if (jqXHR.status != 304){ |
442 | f533f224 | Vangelis Koukis | try { console.info('update_vms callback:' + jqXHR.status ) } catch(err) {} |
443 | f533f224 | Vangelis Koukis | /*
|
444 | f533f224 | Vangelis Koukis | FIXME: Here it should return the error, however Opera does not support 304.
|
445 | f533f224 | Vangelis Koukis | Instead 304 it returns 0. To dealt with this we treat 0 as an
|
446 | f533f224 | Vangelis Koukis | 304, which should be corrected (Bug #317).
|
447 | f533f224 | Vangelis Koukis | */
|
448 | 54417a11 | Kostas Papadimitriou | // ajax_error(jqXHR.status, "Ajax error", 'Update VMs', jqXHR.responseText);
|
449 | f533f224 | Vangelis Koukis | } |
450 | f533f224 | Vangelis Koukis | return false; |
451 | f533f224 | Vangelis Koukis | } |
452 | 42f67a2a | Dimitris Moraitis | }); |
453 | f533f224 | Vangelis Koukis | return false; |
454 | f533f224 | Vangelis Koukis | } |
455 | f533f224 | Vangelis Koukis | |
456 | 7acbe201 | Kostas Papadimitriou | function update_servers_data(servers_update, data) { |
457 | 7acbe201 | Kostas Papadimitriou | $(window).trigger("vm:update", servers_update, data); |
458 | 7acbe201 | Kostas Papadimitriou | |
459 | 7acbe201 | Kostas Papadimitriou | // first call
|
460 | 7acbe201 | Kostas Papadimitriou | if (!window.servers || window.servers.length == 0) { |
461 | 7acbe201 | Kostas Papadimitriou | window.servers = servers_update; |
462 | 7acbe201 | Kostas Papadimitriou | return;
|
463 | 7acbe201 | Kostas Papadimitriou | } |
464 | 7acbe201 | Kostas Papadimitriou | |
465 | 7acbe201 | Kostas Papadimitriou | // server exists helper
|
466 | 7acbe201 | Kostas Papadimitriou | server_exists = function(server) { |
467 | 7acbe201 | Kostas Papadimitriou | var id = server.id;
|
468 | 7acbe201 | Kostas Papadimitriou | var found = false; |
469 | 7acbe201 | Kostas Papadimitriou | var index = 0; |
470 | 7acbe201 | Kostas Papadimitriou | $.each(servers, function(i, s) { |
471 | 7acbe201 | Kostas Papadimitriou | if (s.id == id) { found = true, index = i }; |
472 | 7acbe201 | Kostas Papadimitriou | }); |
473 | 7acbe201 | Kostas Papadimitriou | if (found)
|
474 | 7acbe201 | Kostas Papadimitriou | return [found, index];
|
475 | 7acbe201 | Kostas Papadimitriou | |
476 | 7acbe201 | Kostas Papadimitriou | return false; |
477 | 7acbe201 | Kostas Papadimitriou | } |
478 | 7acbe201 | Kostas Papadimitriou | |
479 | 7acbe201 | Kostas Papadimitriou | // merge object properties
|
480 | 7acbe201 | Kostas Papadimitriou | merge = function() { |
481 | 7acbe201 | Kostas Papadimitriou | var initial = arguments[0]; |
482 | d6eb963b | Kostas Papadimitriou | var status_changed = undefined; |
483 | 7acbe201 | Kostas Papadimitriou | $.each(arguments, function(index, el) { |
484 | 7acbe201 | Kostas Papadimitriou | $.each(el, function(key,v) { |
485 | 7acbe201 | Kostas Papadimitriou | // new attribute added
|
486 | d6eb963b | Kostas Papadimitriou | var previous_value = initial[key];
|
487 | 4b2ed497 | Kostas Papadimitriou | var v = v;
|
488 | 7acbe201 | Kostas Papadimitriou | if (initial[key] == undefined) { |
489 | 7acbe201 | Kostas Papadimitriou | $(window).trigger("vm:attr:add", initial, key, v); |
490 | 7acbe201 | Kostas Papadimitriou | } else {
|
491 | 7acbe201 | Kostas Papadimitriou | // value changed
|
492 | 7acbe201 | Kostas Papadimitriou | if (initial[key] != v) {
|
493 | d6eb963b | Kostas Papadimitriou | if (key == "status") { |
494 | 4b2ed497 | Kostas Papadimitriou | // dont change if in destroy state
|
495 | 4b2ed497 | Kostas Papadimitriou | if (initial.status == "DESTROY") { |
496 | 4b2ed497 | Kostas Papadimitriou | v = "DESTROY";
|
497 | 4b2ed497 | Kostas Papadimitriou | } |
498 | d6eb963b | Kostas Papadimitriou | status_changed = {'old': previous_value, 'new': v}; |
499 | d6eb963b | Kostas Papadimitriou | } |
500 | e9e7fe51 | Kostas Papadimitriou | |
501 | 7acbe201 | Kostas Papadimitriou | $(window).trigger("vm:attr:change", {'initial': initial, 'attr': key, 'newvalue': v}); |
502 | 7acbe201 | Kostas Papadimitriou | } |
503 | 7acbe201 | Kostas Papadimitriou | } |
504 | 7acbe201 | Kostas Papadimitriou | initial[key] = v; |
505 | 7acbe201 | Kostas Papadimitriou | }); |
506 | 7acbe201 | Kostas Papadimitriou | }); |
507 | d6eb963b | Kostas Papadimitriou | if (status_changed !== undefined) { |
508 | d6eb963b | Kostas Papadimitriou | $(window).trigger('vm:status:change', {'vm': initial, 'old': status_changed['old'], 'new': status_changed['new']}); |
509 | d6eb963b | Kostas Papadimitriou | } |
510 | 7acbe201 | Kostas Papadimitriou | return initial;
|
511 | 7acbe201 | Kostas Papadimitriou | } |
512 | 7acbe201 | Kostas Papadimitriou | |
513 | 7acbe201 | Kostas Papadimitriou | // server removed
|
514 | 7acbe201 | Kostas Papadimitriou | var remove = [];
|
515 | 7acbe201 | Kostas Papadimitriou | $.each(servers_update, function(index, server) { |
516 | 7acbe201 | Kostas Papadimitriou | if (server.status == "DELETED") { |
517 | 7acbe201 | Kostas Papadimitriou | remove.push(server.id); |
518 | 7acbe201 | Kostas Papadimitriou | } |
519 | 7acbe201 | Kostas Papadimitriou | }); |
520 | 7acbe201 | Kostas Papadimitriou | |
521 | 7acbe201 | Kostas Papadimitriou | // check server, if exists merge it with new values else add it
|
522 | 7acbe201 | Kostas Papadimitriou | $.each(servers_update, function(index, server) { |
523 | 7acbe201 | Kostas Papadimitriou | var exists = server_exists(server);
|
524 | e9e7fe51 | Kostas Papadimitriou | var old_server = servers[exists[1]]; |
525 | e9e7fe51 | Kostas Papadimitriou | |
526 | e9e7fe51 | Kostas Papadimitriou | // reset network transition
|
527 | e9e7fe51 | Kostas Papadimitriou | try {
|
528 | e9e7fe51 | Kostas Papadimitriou | if (old_server.network_transition) {
|
529 | e9e7fe51 | Kostas Papadimitriou | if (old_server.network_transition == "NETWORK_CHANGE") { |
530 | e9e7fe51 | Kostas Papadimitriou | // network profile changed, servers data updated, so act if the change was made
|
531 | e9e7fe51 | Kostas Papadimitriou | // this flag will trigger ui to remove any transiiton indicators
|
532 | e9e7fe51 | Kostas Papadimitriou | // and hopefully apply the new value to the profile options
|
533 | e9e7fe51 | Kostas Papadimitriou | old_server.network_transition = "CHANGED"
|
534 | e9e7fe51 | Kostas Papadimitriou | } else {
|
535 | e9e7fe51 | Kostas Papadimitriou | // nothing happened
|
536 | e9e7fe51 | Kostas Papadimitriou | old_server.network_transition = undefined;
|
537 | e9e7fe51 | Kostas Papadimitriou | }; |
538 | e9e7fe51 | Kostas Papadimitriou | } |
539 | e9e7fe51 | Kostas Papadimitriou | } catch (err) { console.info(err) }
|
540 | e9e7fe51 | Kostas Papadimitriou | |
541 | 7acbe201 | Kostas Papadimitriou | if (exists !== false) { |
542 | d6eb963b | Kostas Papadimitriou | try {
|
543 | d6eb963b | Kostas Papadimitriou | servers[exists[1]] = merge(servers[exists[1]], server); |
544 | d6eb963b | Kostas Papadimitriou | } catch (err) {
|
545 | d6eb963b | Kostas Papadimitriou | } |
546 | 7acbe201 | Kostas Papadimitriou | } else {
|
547 | 7acbe201 | Kostas Papadimitriou | servers.push(server); |
548 | 7acbe201 | Kostas Papadimitriou | $(window).trigger("vm:add", server); |
549 | 7acbe201 | Kostas Papadimitriou | } |
550 | 7acbe201 | Kostas Papadimitriou | if (remove.indexOf(server.id) > -1) { |
551 | 7acbe201 | Kostas Papadimitriou | var remove_exists = server_exists(server);
|
552 | 7acbe201 | Kostas Papadimitriou | servers.splice(remove_exists[1], 1); |
553 | 7acbe201 | Kostas Papadimitriou | $(window).trigger("vm:remove", server); |
554 | 7acbe201 | Kostas Papadimitriou | } |
555 | 7acbe201 | Kostas Papadimitriou | }); |
556 | 7acbe201 | Kostas Papadimitriou | } |
557 | 7acbe201 | Kostas Papadimitriou | |
558 | f533f224 | Vangelis Koukis | // get a list of running and terminated machines, used in network view
|
559 | f533f224 | Vangelis Koukis | function update_networks(interval) { |
560 | f533f224 | Vangelis Koukis | try{ console.info('updating networks'); } catch(err){} |
561 | f533f224 | Vangelis Koukis | var uri= API_URL + '/servers/detail'; |
562 | f533f224 | Vangelis Koukis | |
563 | f533f224 | Vangelis Koukis | if (changes_since != 0) |
564 | f533f224 | Vangelis Koukis | uri+='?changes-since='+changes_since
|
565 | f533f224 | Vangelis Koukis | |
566 | f533f224 | Vangelis Koukis | update_request = $.ajax({
|
567 | f533f224 | Vangelis Koukis | cache: false, |
568 | f533f224 | Vangelis Koukis | url: uri,
|
569 | f533f224 | Vangelis Koukis | type: "GET", |
570 | f533f224 | Vangelis Koukis | timeout: TIMEOUT,
|
571 | f533f224 | Vangelis Koukis | dataType: "json", |
572 | f533f224 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
573 | f533f224 | Vangelis Koukis | // don't forget to try again later
|
574 | f533f224 | Vangelis Koukis | if (interval) {
|
575 | f533f224 | Vangelis Koukis | clearTimeout(deferred); // clear old deferred calls
|
576 | f533f224 | Vangelis Koukis | deferred = setTimeout(function() {update_networks(interval);},interval,interval);
|
577 | f533f224 | Vangelis Koukis | } |
578 | f533f224 | Vangelis Koukis | // as for now, just show an error message
|
579 | f533f224 | Vangelis Koukis | try { console.info('update_networks errback:' + jqXHR.status ) } catch(err) {} |
580 | 7991d0c5 | Kostas Papadimitriou | |
581 | aeed1f09 | Mike Muzurakis | try {
|
582 | aeed1f09 | Mike Muzurakis | ajax_error(jqXHR.status, undefined, 'Update networks', jqXHR.responseText); |
583 | aeed1f09 | Mike Muzurakis | } catch(err) {
|
584 | 7991d0c5 | Kostas Papadimitriou | if (!isXhrException(err)) {
|
585 | 7991d0c5 | Kostas Papadimitriou | ajax_error(-504, "UI Error", 'Update networks', err); |
586 | 7991d0c5 | Kostas Papadimitriou | } else {
|
587 | 7991d0c5 | Kostas Papadimitriou | return false; |
588 | 7991d0c5 | Kostas Papadimitriou | } |
589 | aeed1f09 | Mike Muzurakis | } |
590 | f533f224 | Vangelis Koukis | return false; |
591 | f533f224 | Vangelis Koukis | }, |
592 | f533f224 | Vangelis Koukis | success: function(data, textStatus, jqXHR) { |
593 | f533f224 | Vangelis Koukis | // create changes_since string if necessary
|
594 | f533f224 | Vangelis Koukis | if (jqXHR.getResponseHeader('Date') != null){ |
595 | f533f224 | Vangelis Koukis | changes_since_date = new Date(jqXHR.getResponseHeader('Date')); |
596 | f533f224 | Vangelis Koukis | changes_since = ISODateString(changes_since_date); |
597 | f533f224 | Vangelis Koukis | } |
598 | f533f224 | Vangelis Koukis | |
599 | f533f224 | Vangelis Koukis | if (interval) {
|
600 | f533f224 | Vangelis Koukis | clearTimeout(deferred); // clear old deferred calls
|
601 | f533f224 | Vangelis Koukis | deferred = setTimeout(function() {update_networks(interval);},interval,interval);
|
602 | f533f224 | Vangelis Koukis | } |
603 | f533f224 | Vangelis Koukis | |
604 | f533f224 | Vangelis Koukis | if (jqXHR.status == 200 || jqXHR.status == 203) { |
605 | f533f224 | Vangelis Koukis | try {
|
606 | 7acbe201 | Kostas Papadimitriou | //servers = data.servers.values;
|
607 | 7acbe201 | Kostas Papadimitriou | update_servers_data(data.servers.values, data); |
608 | 882ceb8f | Dimitris Moraitis | update_network_names(data); |
609 | 7991d0c5 | Kostas Papadimitriou | } catch(err) { ajax_error(-505, "UI Error", 'Update networks', err);} |
610 | f533f224 | Vangelis Koukis | } else if (jqXHR.status == 304) { |
611 | f533f224 | Vangelis Koukis | update_network_names(); |
612 | f533f224 | Vangelis Koukis | } |
613 | f533f224 | Vangelis Koukis | else {
|
614 | f533f224 | Vangelis Koukis | try { console.info('update_networks callback:' + jqXHR.status ) } catch(err) {} |
615 | f533f224 | Vangelis Koukis | /*
|
616 | f533f224 | Vangelis Koukis | FIXME: Here it should return the error, however Opera does not support 304.
|
617 | f533f224 | Vangelis Koukis | Instead 304 it returns 0. To dealt with this we treat 0 as an
|
618 | f533f224 | Vangelis Koukis | 304, which should be corrected (Bug #317).
|
619 | f533f224 | Vangelis Koukis | */
|
620 | f533f224 | Vangelis Koukis | //ajax_error(jqXHR.status, undefined, 'Update networks', jqXHR.responseText);
|
621 | f533f224 | Vangelis Koukis | update_network_names(); |
622 | f533f224 | Vangelis Koukis | } |
623 | f533f224 | Vangelis Koukis | return false; |
624 | 42f67a2a | Dimitris Moraitis | } |
625 | 42f67a2a | Dimitris Moraitis | }); |
626 | 42f67a2a | Dimitris Moraitis | return false; |
627 | 42f67a2a | Dimitris Moraitis | } |
628 | 42f67a2a | Dimitris Moraitis | |
629 | f533f224 | Vangelis Koukis | // get and show a list of public and private networks
|
630 | f533f224 | Vangelis Koukis | function update_network_names(servers_data) { |
631 | f533f224 | Vangelis Koukis | try{ console.info('updating network names'); } catch(err){} |
632 | f533f224 | Vangelis Koukis | var uri= API_URL + '/networks/detail'; |
633 | f533f224 | Vangelis Koukis | |
634 | f533f224 | Vangelis Koukis | if (networks_changes_since != 0) |
635 | f533f224 | Vangelis Koukis | //FIXME: Comment out the following, until metadata do not 304 when changed
|
636 | f533f224 | Vangelis Koukis | uri+='?changes-since=' + networks_changes_since
|
637 | ce4f9227 | Mike Muzurakis | |
638 | 1c7978ce | Dimitris Moraitis | update_request = $.ajax({
|
639 | c8bde382 | Mike Muzurakis | cache: false, |
640 | 1a49199e | Dimitris Moraitis | url: uri,
|
641 | 42f67a2a | Dimitris Moraitis | type: "GET", |
642 | 42f67a2a | Dimitris Moraitis | timeout: TIMEOUT,
|
643 | 42f67a2a | Dimitris Moraitis | dataType: "json", |
644 | 146b6003 | Dimitris Moraitis | error: function(jqXHR, textStatus, errorThrown) { |
645 | f533f224 | Vangelis Koukis | // as for now, just show an error message
|
646 | f533f224 | Vangelis Koukis | try {
|
647 | f533f224 | Vangelis Koukis | console.info('update_network names errback:' + jqXHR.status )
|
648 | f533f224 | Vangelis Koukis | } catch(err) {}
|
649 | aeed1f09 | Mike Muzurakis | try {
|
650 | aeed1f09 | Mike Muzurakis | ajax_error(jqXHR.status, undefined, 'Update network names', jqXHR.responseText); |
651 | aeed1f09 | Mike Muzurakis | } catch(err) {
|
652 | 7991d0c5 | Kostas Papadimitriou | ajax_error(-506, "UI Error", 'Update network names', err); |
653 | aeed1f09 | Mike Muzurakis | } |
654 | f533f224 | Vangelis Koukis | return false; |
655 | f533f224 | Vangelis Koukis | }, |
656 | 1a49199e | Dimitris Moraitis | success: function(data, textStatus, jqXHR) { |
657 | e6561111 | Mike Muzurakis | // create changes_since string if necessary
|
658 | e6561111 | Mike Muzurakis | if (jqXHR.getResponseHeader('Date') != null){ |
659 | f533f224 | Vangelis Koukis | changes_since_date = new Date(jqXHR.getResponseHeader('Date')); |
660 | f533f224 | Vangelis Koukis | networks_changes_since = ISODateString(changes_since_date); |
661 | f533f224 | Vangelis Koukis | } |
662 | f533f224 | Vangelis Koukis | |
663 | f533f224 | Vangelis Koukis | if (jqXHR.status == 200 || jqXHR.status == 203) { |
664 | f533f224 | Vangelis Koukis | try {
|
665 | f533f224 | Vangelis Koukis | networks = data.networks.values; |
666 | 882ceb8f | Dimitris Moraitis | update_networks_view(servers_data, data); |
667 | f533f224 | Vangelis Koukis | } catch(err) {
|
668 | 7991d0c5 | Kostas Papadimitriou | ajax_error(-507, "UI Error", 'Update network names', err); |
669 | f533f224 | Vangelis Koukis | } |
670 | f533f224 | Vangelis Koukis | } else if (jqXHR.status == 304) { |
671 | 7991d0c5 | Kostas Papadimitriou | update_networks_view(servers_data); |
672 | f533f224 | Vangelis Koukis | } else if (jqXHR.status != 304){ |
673 | f533f224 | Vangelis Koukis | try { console.info('update_network_names callback:' + jqXHR.status ) } catch(err) {} |
674 | f533f224 | Vangelis Koukis | /*
|
675 | f533f224 | Vangelis Koukis | FIXME: Here it should return the error, however Opera does not support 304.
|
676 | f533f224 | Vangelis Koukis | Instead 304 it returns 0. To dealt with this we treat 0 as an
|
677 | f533f224 | Vangelis Koukis | 304, which should be corrected (Bug #317).
|
678 | f533f224 | Vangelis Koukis | */
|
679 | f533f224 | Vangelis Koukis | //ajax_error(jqXHR.status, undefined, 'Update network names', jqXHR.responseText);
|
680 | f533f224 | Vangelis Koukis | update_networks_view(servers_data); |
681 | f533f224 | Vangelis Koukis | } |
682 | f533f224 | Vangelis Koukis | return false; |
683 | 42f67a2a | Dimitris Moraitis | } |
684 | 42f67a2a | Dimitris Moraitis | }); |
685 | 42f67a2a | Dimitris Moraitis | return false; |
686 | 42f67a2a | Dimitris Moraitis | } |
687 | 42f67a2a | Dimitris Moraitis | |
688 | 146b6003 | Dimitris Moraitis | // get and show a list of available standard and custom images
|
689 | b02144c8 | Vangelis Koukis | function update_images() { |
690 | 42f67a2a | Dimitris Moraitis | $.ajax({
|
691 | 73c2c75b | Markos Gogoulos | url: API_URL + '/images/detail', |
692 | 42f67a2a | Dimitris Moraitis | type: "GET", |
693 | 42f67a2a | Dimitris Moraitis | //async: false,
|
694 | 42f67a2a | Dimitris Moraitis | dataType: "json", |
695 | 42f67a2a | Dimitris Moraitis | timeout: TIMEOUT,
|
696 | b02144c8 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
697 | aeed1f09 | Mike Muzurakis | try {
|
698 | aeed1f09 | Mike Muzurakis | ajax_error(jqXHR.status, undefined, 'Update Images', jqXHR.responseText); |
699 | aeed1f09 | Mike Muzurakis | } catch(err) {
|
700 | 7991d0c5 | Kostas Papadimitriou | ajax_error(-508, "UI error", 'Update Images', err); |
701 | aeed1f09 | Mike Muzurakis | } |
702 | aeed1f09 | Mike Muzurakis | }, |
703 | 42f67a2a | Dimitris Moraitis | success: function(data, textStatus, jqXHR) { |
704 | 146b6003 | Dimitris Moraitis | try {
|
705 | f533f224 | Vangelis Koukis | images = data.images.values; |
706 | ddf929a7 | Christodoulos Psaltis | jQuery.parseJSON(data); |
707 | f533f224 | Vangelis Koukis | update_wizard_images(); |
708 | f533f224 | Vangelis Koukis | } catch(err){
|
709 | f533f224 | Vangelis Koukis | ajax_error("NO_IMAGES");
|
710 | f533f224 | Vangelis Koukis | } |
711 | 42f67a2a | Dimitris Moraitis | } |
712 | 42f67a2a | Dimitris Moraitis | }); |
713 | 42f67a2a | Dimitris Moraitis | return false; |
714 | 42f67a2a | Dimitris Moraitis | } |
715 | 42f67a2a | Dimitris Moraitis | |
716 | d134b632 | Dimitris Moraitis | function update_wizard_images() { |
717 | f533f224 | Vangelis Koukis | if ($("ul#standard-images li").toArray().length + $("ul#custom-images li").toArray().length == 0) { |
718 | f533f224 | Vangelis Koukis | $.each(images, function(i,image){ |
719 | f533f224 | Vangelis Koukis | var img = $('#image-template').clone().attr("id","img-"+image.id).fadeIn("slow"); |
720 | f533f224 | Vangelis Koukis | img.find("label").attr('for',"img-radio-" + image.id); |
721 | f533f224 | Vangelis Koukis | img.find(".image-title").text(image.name);
|
722 | 73c2c75b | Markos Gogoulos | if (image.metadata) {
|
723 | 73c2c75b | Markos Gogoulos | if (image.metadata.values.description != undefined) { |
724 | 73c2c75b | Markos Gogoulos | img.find(".description").text(image.metadata.values.description);
|
725 | 73c2c75b | Markos Gogoulos | } |
726 | 73c2c75b | Markos Gogoulos | if (image.metadata.values.size != undefined) { |
727 | f533f224 | Vangelis Koukis | img.find("#size").text(image.metadata.values.size);
|
728 | 73c2c75b | Markos Gogoulos | } |
729 | 73c2c75b | Markos Gogoulos | } |
730 | f533f224 | Vangelis Koukis | img.find("input.radio").attr('id',"img-radio-" + image.id); |
731 | f533f224 | Vangelis Koukis | if (i==0) img.find("input.radio").attr("checked","checked"); |
732 | a64e74f0 | Markos Gogoulos | var image_logo = os_icon(image.metadata);
|
733 | f533f224 | Vangelis Koukis | img.find("img.image-logo").attr('src','static/icons/os/'+image_logo+'.png'); |
734 | 73c2c75b | Markos Gogoulos | if (image.metadata) {
|
735 | 73c2c75b | Markos Gogoulos | if (image.metadata.values.serverId != undefined) { |
736 | 73c2c75b | Markos Gogoulos | img.appendTo("ul#custom-images");
|
737 | 73c2c75b | Markos Gogoulos | } else {
|
738 | 73c2c75b | Markos Gogoulos | img.appendTo("ul#standard-images");
|
739 | 73c2c75b | Markos Gogoulos | } |
740 | 73c2c75b | Markos Gogoulos | } else {
|
741 | 73c2c75b | Markos Gogoulos | img.appendTo("ul#standard-images");
|
742 | 73c2c75b | Markos Gogoulos | } |
743 | f533f224 | Vangelis Koukis | }); |
744 | f533f224 | Vangelis Koukis | } |
745 | d134b632 | Dimitris Moraitis | } |
746 | d134b632 | Dimitris Moraitis | |
747 | d134b632 | Dimitris Moraitis | function update_wizard_flavors(){ |
748 | f533f224 | Vangelis Koukis | // sliders for selecting VM flavor
|
749 | f533f224 | Vangelis Koukis | $("#cpu:range").rangeinput({min:0, |
750 | f533f224 | Vangelis Koukis | value:0, |
751 | f533f224 | Vangelis Koukis | step:1, |
752 | f533f224 | Vangelis Koukis | progress: true, |
753 | f533f224 | Vangelis Koukis | max:cpus.length-1}); |
754 | f533f224 | Vangelis Koukis | |
755 | f533f224 | Vangelis Koukis | $("#storage:range").rangeinput({min:0, |
756 | f533f224 | Vangelis Koukis | value:0, |
757 | f533f224 | Vangelis Koukis | step:1, |
758 | f533f224 | Vangelis Koukis | progress: true, |
759 | f533f224 | Vangelis Koukis | max:disks.length-1}); |
760 | f533f224 | Vangelis Koukis | |
761 | f533f224 | Vangelis Koukis | $("#ram:range").rangeinput({min:0, |
762 | f533f224 | Vangelis Koukis | value:0, |
763 | f533f224 | Vangelis Koukis | step:1, |
764 | f533f224 | Vangelis Koukis | progress: true, |
765 | f533f224 | Vangelis Koukis | max:ram.length-1}); |
766 | f533f224 | Vangelis Koukis | $("#small").click(); |
767 | f533f224 | Vangelis Koukis | |
768 | f533f224 | Vangelis Koukis | // update the indicators when sliding
|
769 | f533f224 | Vangelis Koukis | $("#cpu:range").data().rangeinput.onSlide(function(event,value){ |
770 | f533f224 | Vangelis Koukis | $("#cpu-indicator")[0].value = cpus[Number(value)]; |
771 | afa2ebd2 | Mike Muzurakis | $("#cpu-indicator").addClass('selectedrange'); |
772 | f533f224 | Vangelis Koukis | }); |
773 | f533f224 | Vangelis Koukis | $("#cpu:range").data().rangeinput.change(function(event,value){ |
774 | f533f224 | Vangelis Koukis | $("#cpu-indicator")[0].value = cpus[Number(value)]; |
775 | f533f224 | Vangelis Koukis | $("#custom").click(); |
776 | f533f224 | Vangelis Koukis | $("#cpu-indicator").removeClass('selectedrange'); |
777 | f533f224 | Vangelis Koukis | }); |
778 | f533f224 | Vangelis Koukis | $("#ram:range").data().rangeinput.onSlide(function(event,value){ |
779 | f533f224 | Vangelis Koukis | $("#ram-indicator")[0].value = ram[Number(value)]; |
780 | afa2ebd2 | Mike Muzurakis | $("#ram-indicator").addClass('selectedrange'); |
781 | f533f224 | Vangelis Koukis | }); |
782 | f533f224 | Vangelis Koukis | $("#ram:range").data().rangeinput.change(function(event,value){ |
783 | f533f224 | Vangelis Koukis | $("#ram-indicator")[0].value = ram[Number(value)]; |
784 | f533f224 | Vangelis Koukis | $("#custom").click(); |
785 | f533f224 | Vangelis Koukis | $("#ram-indicator").removeClass('selectedrange'); |
786 | f533f224 | Vangelis Koukis | }); |
787 | f533f224 | Vangelis Koukis | $("#storage:range").data().rangeinput.onSlide(function(event,value){ |
788 | f533f224 | Vangelis Koukis | $("#storage-indicator")[0].value = disks[Number(value)]; |
789 | afa2ebd2 | Mike Muzurakis | $("#storage-indicator").addClass('selectedrange'); |
790 | f533f224 | Vangelis Koukis | }); |
791 | f533f224 | Vangelis Koukis | $("#storage:range").data().rangeinput.change(function(event,value){ |
792 | f533f224 | Vangelis Koukis | $("#storage-indicator")[0].value = disks[Number(value)]; |
793 | f533f224 | Vangelis Koukis | $("#custom").click(); |
794 | f533f224 | Vangelis Koukis | $("#storage-indicator").removeClass('selectedrange'); |
795 | f533f224 | Vangelis Koukis | }); |
796 | d134b632 | Dimitris Moraitis | } |
797 | d134b632 | Dimitris Moraitis | |
798 | 42f67a2a | Dimitris Moraitis | Array.prototype.unique = function () { |
799 | f533f224 | Vangelis Koukis | var r = new Array(); |
800 | f533f224 | Vangelis Koukis | o:for(var i = 0, n = this.length; i < n; i++) |
801 | f533f224 | Vangelis Koukis | { |
802 | f533f224 | Vangelis Koukis | for(var x = 0, y = r.length; x < y; x++) |
803 | f533f224 | Vangelis Koukis | { |
804 | f533f224 | Vangelis Koukis | if(r[x]==this[i]) |
805 | f533f224 | Vangelis Koukis | { |
806 | f533f224 | Vangelis Koukis | continue o;
|
807 | f533f224 | Vangelis Koukis | } |
808 | f533f224 | Vangelis Koukis | } |
809 | f533f224 | Vangelis Koukis | r[r.length] = this[i];
|
810 | f533f224 | Vangelis Koukis | } |
811 | f533f224 | Vangelis Koukis | return r;
|
812 | 42f67a2a | Dimitris Moraitis | } |
813 | 42f67a2a | Dimitris Moraitis | |
814 | 42f67a2a | Dimitris Moraitis | // get and configure flavor selection
|
815 | b02144c8 | Vangelis Koukis | function update_flavors() { |
816 | 42f67a2a | Dimitris Moraitis | $.ajax({
|
817 | f1641e4d | Markos Gogoulos | url: API_URL + '/flavors/detail', |
818 | 42f67a2a | Dimitris Moraitis | type: "GET", |
819 | 42f67a2a | Dimitris Moraitis | //async: false,
|
820 | 42f67a2a | Dimitris Moraitis | dataType: "json", |
821 | 42f67a2a | Dimitris Moraitis | timeout: TIMEOUT,
|
822 | b02144c8 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
823 | 146b6003 | Dimitris Moraitis | try {
|
824 | f533f224 | Vangelis Koukis | ajax_error(jqXHR.status, undefined, 'Update Flavors', jqXHR.responseText); |
825 | f533f224 | Vangelis Koukis | } catch (err) {
|
826 | 7991d0c5 | Kostas Papadimitriou | ajax_error(-509, "UI Error", "Update Flavors", err); |
827 | f533f224 | Vangelis Koukis | } |
828 | 66307c9e | Christodoulos Psaltis | // start updating vm list
|
829 | 66307c9e | Christodoulos Psaltis | update_vms(UPDATE_INTERVAL); |
830 | 42f67a2a | Dimitris Moraitis | }, |
831 | 42f67a2a | Dimitris Moraitis | success: function(data, textStatus, jqXHR) { |
832 | 9b2ab29a | Christodoulos Psaltis | |
833 | 882ceb8f | Dimitris Moraitis | try {
|
834 | 882ceb8f | Dimitris Moraitis | flavors = data.flavors.values; |
835 | 882ceb8f | Dimitris Moraitis | jQuery.parseJSON(data); |
836 | 882ceb8f | Dimitris Moraitis | $.each(flavors, function(i, flavor) { |
837 | 882ceb8f | Dimitris Moraitis | cpus[i] = flavor['cpu'];
|
838 | 882ceb8f | Dimitris Moraitis | disks[i] = flavor['disk'];
|
839 | 882ceb8f | Dimitris Moraitis | ram[i] = flavor['ram'];
|
840 | 882ceb8f | Dimitris Moraitis | }); |
841 | 882ceb8f | Dimitris Moraitis | cpus = cpus.unique(); |
842 | 882ceb8f | Dimitris Moraitis | disks = disks.unique(); |
843 | 882ceb8f | Dimitris Moraitis | ram = ram.unique(); |
844 | 882ceb8f | Dimitris Moraitis | update_wizard_flavors(); |
845 | 882ceb8f | Dimitris Moraitis | } catch(err){
|
846 | 882ceb8f | Dimitris Moraitis | ajax_error("NO_FLAVORS");
|
847 | 882ceb8f | Dimitris Moraitis | } |
848 | 66307c9e | Christodoulos Psaltis | // start updating vm list
|
849 | 66307c9e | Christodoulos Psaltis | update_vms(UPDATE_INTERVAL); |
850 | 42f67a2a | Dimitris Moraitis | } |
851 | 42f67a2a | Dimitris Moraitis | }); |
852 | 42f67a2a | Dimitris Moraitis | return false; |
853 | 42f67a2a | Dimitris Moraitis | } |
854 | 1a49199e | Dimitris Moraitis | |
855 | b335768e | Markos Gogoulos | // return flavorRef from cpu, disk, ram values
|
856 | 42f67a2a | Dimitris Moraitis | function identify_flavor(cpu, disk, ram){ |
857 | 42f67a2a | Dimitris Moraitis | for (i=0;i<flavors.length;i++){ |
858 | 42f67a2a | Dimitris Moraitis | if (flavors[i]['cpu'] == cpu && flavors[i]['disk']==disk && flavors[i]['ram']==ram) { |
859 | 42f67a2a | Dimitris Moraitis | return flavors[i]['id'] |
860 | 42f67a2a | Dimitris Moraitis | } |
861 | 42f67a2a | Dimitris Moraitis | } |
862 | 42f67a2a | Dimitris Moraitis | return 0; |
863 | 42f67a2a | Dimitris Moraitis | } |
864 | 42f67a2a | Dimitris Moraitis | |
865 | 45ab204d | Markos Gogoulos | // return image entry from imageRef
|
866 | 45ab204d | Markos Gogoulos | function get_image(imageRef) { |
867 | 45ab204d | Markos Gogoulos | for (i=0;i<images.length;i++){ |
868 | 45ab204d | Markos Gogoulos | if (images[i]['id'] == imageRef) { |
869 | 45ab204d | Markos Gogoulos | return images[i];
|
870 | 45ab204d | Markos Gogoulos | } |
871 | 45ab204d | Markos Gogoulos | } |
872 | 45ab204d | Markos Gogoulos | return 0; |
873 | 45ab204d | Markos Gogoulos | } |
874 | 45ab204d | Markos Gogoulos | |
875 | f533f224 | Vangelis Koukis | // return machine entry from serverID
|
876 | f533f224 | Vangelis Koukis | function get_machine(serverID) { |
877 | f533f224 | Vangelis Koukis | for (i=0;i<servers.length;i++){ |
878 | f533f224 | Vangelis Koukis | if (servers[i]['id'] == serverID) { |
879 | f533f224 | Vangelis Koukis | return servers[i];
|
880 | f533f224 | Vangelis Koukis | } |
881 | f533f224 | Vangelis Koukis | } |
882 | f533f224 | Vangelis Koukis | return 0; |
883 | f533f224 | Vangelis Koukis | } |
884 | f533f224 | Vangelis Koukis | |
885 | f533f224 | Vangelis Koukis | // update the actions in icon view, per server
|
886 | f533f224 | Vangelis Koukis | function update_iconview_actions(serverID, server_status) { |
887 | dc3e66b9 | Mike Muzurakis | if ($.cookie("view")=='2') { |
888 | dc3e66b9 | Mike Muzurakis | // remove .disable from all actions to begin with
|
889 | 6a738cca | Christodoulos Psaltis | $('#machinesview-single #' + serverID + ' div.single-action').show(); |
890 | dc3e66b9 | Mike Muzurakis | // decide which actions should be disabled
|
891 | dc3e66b9 | Mike Muzurakis | for (current_action in actions) { |
892 | dc3e66b9 | Mike Muzurakis | if (actions[current_action].indexOf(server_status) == -1 ) { |
893 | 6a738cca | Christodoulos Psaltis | $('#machinesview-single #' + serverID + ' div.action-' + current_action).hide(); |
894 | dc3e66b9 | Mike Muzurakis | } |
895 | dc3e66b9 | Mike Muzurakis | } |
896 | dc3e66b9 | Mike Muzurakis | } else {
|
897 | dc3e66b9 | Mike Muzurakis | // remove .disable from all actions to begin with
|
898 | 19697f4f | Mike Muzurakis | $('#machinesview-icon.standard #' + serverID + ' div.actions').find('a').removeClass('disabled'); |
899 | dc3e66b9 | Mike Muzurakis | // decide which actions should be disabled
|
900 | dc3e66b9 | Mike Muzurakis | for (current_action in actions) { |
901 | dc3e66b9 | Mike Muzurakis | if (actions[current_action].indexOf(server_status) == -1 ) { |
902 | dc3e66b9 | Mike Muzurakis | $('#machinesview-icon.standard #' + serverID + ' a.action-' + current_action).addClass('disabled'); |
903 | dc3e66b9 | Mike Muzurakis | } |
904 | f533f224 | Vangelis Koukis | } |
905 | f533f224 | Vangelis Koukis | } |
906 | f533f224 | Vangelis Koukis | } |
907 | f533f224 | Vangelis Koukis | |
908 | dcf153ce | Christodoulos Psaltis | // update the actions in list view
|
909 | f533f224 | Vangelis Koukis | function update_listview_actions() { |
910 | f533f224 | Vangelis Koukis | var states = [];
|
911 | f533f224 | Vangelis Koukis | var on = [];
|
912 | f533f224 | Vangelis Koukis | var checked = $("table.list-machines tbody input[type='checkbox']:checked"); |
913 | f533f224 | Vangelis Koukis | // disable all actions to begin with
|
914 | f533f224 | Vangelis Koukis | $('#machinesview .list div.actions').children().removeClass('enabled'); |
915 | f533f224 | Vangelis Koukis | |
916 | f533f224 | Vangelis Koukis | // are there multiple machines selected?
|
917 | f533f224 | Vangelis Koukis | if (checked.length>1) |
918 | f533f224 | Vangelis Koukis | states[0] = 'multiple'; |
919 | f533f224 | Vangelis Koukis | |
920 | f533f224 | Vangelis Koukis | // check the states of selected machines
|
921 | f533f224 | Vangelis Koukis | checked.each(function(i,checkbox) {
|
922 | f533f224 | Vangelis Koukis | states[states.length] = checkbox.className; |
923 | f533f224 | Vangelis Koukis | var ip = $("#" + checkbox.id.replace('input-','') + ".ip span.public").text(); |
924 | f533f224 | Vangelis Koukis | if (ip.replace('undefined','').length) |
925 | f533f224 | Vangelis Koukis | states[states.length] = 'network';
|
926 | f533f224 | Vangelis Koukis | }); |
927 | f533f224 | Vangelis Koukis | |
928 | f533f224 | Vangelis Koukis | // decide which actions should be enabled
|
929 | f533f224 | Vangelis Koukis | for (a in actions) { |
930 | f533f224 | Vangelis Koukis | var enabled = false; |
931 | f533f224 | Vangelis Koukis | for (var s =0; s<states.length; s++) { |
932 | f533f224 | Vangelis Koukis | if (actions[a].indexOf(states[s]) != -1 ) { |
933 | f533f224 | Vangelis Koukis | enabled = true;
|
934 | f533f224 | Vangelis Koukis | } else {
|
935 | f533f224 | Vangelis Koukis | enabled = false;
|
936 | f533f224 | Vangelis Koukis | break;
|
937 | f533f224 | Vangelis Koukis | } |
938 | f533f224 | Vangelis Koukis | } |
939 | f533f224 | Vangelis Koukis | if (enabled)
|
940 | f533f224 | Vangelis Koukis | on[on.length]=a; |
941 | f533f224 | Vangelis Koukis | } |
942 | f533f224 | Vangelis Koukis | // enable those actions
|
943 | f533f224 | Vangelis Koukis | for (action in on) { |
944 | f533f224 | Vangelis Koukis | $("#action-" + on[action]).addClass('enabled'); |
945 | f533f224 | Vangelis Koukis | } |
946 | e32c2a5d | Dimitris Moraitis | } |
947 | 146b6003 | Dimitris Moraitis | |
948 | 0971fa71 | Markos Gogoulos | //create server action
|
949 | 0971fa71 | Markos Gogoulos | function create_vm(machineName, imageRef, flavorRef){ |
950 | 45ab204d | Markos Gogoulos | var image_logo = os_icon(get_image(imageRef).metadata);
|
951 | f533f224 | Vangelis Koukis | var uri = API_URL + '/servers'; |
952 | 0971fa71 | Markos Gogoulos | var payload = {
|
953 | 0971fa71 | Markos Gogoulos | "server": {
|
954 | 0971fa71 | Markos Gogoulos | "name": machineName,
|
955 | 0971fa71 | Markos Gogoulos | "imageRef": imageRef,
|
956 | 0971fa71 | Markos Gogoulos | "flavorRef" : flavorRef,
|
957 | 0971fa71 | Markos Gogoulos | "metadata" : {
|
958 | 45ab204d | Markos Gogoulos | "OS" : image_logo
|
959 | 038383b1 | Dimitris Moraitis | } |
960 | 0971fa71 | Markos Gogoulos | } |
961 | 0971fa71 | Markos Gogoulos | }; |
962 | 0971fa71 | Markos Gogoulos | |
963 | 0971fa71 | Markos Gogoulos | $.ajax({
|
964 | 7e45ddef | Dimitris Moraitis | url: uri,
|
965 | 0971fa71 | Markos Gogoulos | type: "POST", |
966 | f533f224 | Vangelis Koukis | contentType: "application/json", |
967 | b02144c8 | Vangelis Koukis | dataType: "json", |
968 | 0971fa71 | Markos Gogoulos | data: JSON.stringify(payload),
|
969 | 0971fa71 | Markos Gogoulos | timeout: TIMEOUT,
|
970 | b02144c8 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
971 | ddf929a7 | Christodoulos Psaltis | // close wizard and show error box
|
972 | ddf929a7 | Christodoulos Psaltis | $('#machines-pane a#create').data('overlay').close(); |
973 | aeed1f09 | Mike Muzurakis | try {
|
974 | cbb7a325 | Christodoulos Psaltis | ajax_error(jqXHR.status, undefined, 'Create VM', jqXHR.responseText); |
975 | aeed1f09 | Mike Muzurakis | } catch(err) {
|
976 | 7991d0c5 | Kostas Papadimitriou | if (!isXhrException(err)) {
|
977 | 7991d0c5 | Kostas Papadimitriou | ajax_error(-510, "UI Error", 'Create VM', err); |
978 | 7991d0c5 | Kostas Papadimitriou | } |
979 | aeed1f09 | Mike Muzurakis | } |
980 | 0971fa71 | Markos Gogoulos | }, |
981 | 0971fa71 | Markos Gogoulos | success: function(data, textStatus, jqXHR) { |
982 | 0971fa71 | Markos Gogoulos | if ( jqXHR.status == '202') { |
983 | b02144c8 | Vangelis Koukis | ajax_success("CREATE_VM_SUCCESS", data.server.adminPass);
|
984 | 0971fa71 | Markos Gogoulos | } else {
|
985 | ddf929a7 | Christodoulos Psaltis | // close wizard and show error box
|
986 | ddf929a7 | Christodoulos Psaltis | $('#machines-pane a#create').data('overlay').close(); |
987 | 038383b1 | Dimitris Moraitis | ajax_error(jqXHR.status, undefined, 'Create VM', jqXHR.responseText); |
988 | 0971fa71 | Markos Gogoulos | } |
989 | 0971fa71 | Markos Gogoulos | } |
990 | 0971fa71 | Markos Gogoulos | }); |
991 | 0971fa71 | Markos Gogoulos | } |
992 | 0971fa71 | Markos Gogoulos | |
993 | 42f67a2a | Dimitris Moraitis | // reboot action
|
994 | 42f67a2a | Dimitris Moraitis | function reboot(serverIDs){ |
995 | f533f224 | Vangelis Koukis | if (!serverIDs.length){
|
996 | f533f224 | Vangelis Koukis | //ajax_success('DEFAULT');
|
997 | f533f224 | Vangelis Koukis | return false; |
998 | f533f224 | Vangelis Koukis | } |
999 | 42f67a2a | Dimitris Moraitis | // ajax post reboot call
|
1000 | 42f67a2a | Dimitris Moraitis | var payload = {
|
1001 | 42f67a2a | Dimitris Moraitis | "reboot": {"type" : "HARD"} |
1002 | 42f67a2a | Dimitris Moraitis | }; |
1003 | f533f224 | Vangelis Koukis | |
1004 | a1a31201 | Dimitris Moraitis | var serverID = serverIDs.pop();
|
1005 | f533f224 | Vangelis Koukis | |
1006 | f533f224 | Vangelis Koukis | $.ajax({
|
1007 | f533f224 | Vangelis Koukis | url: API_URL + '/servers/' + serverID + '/action', |
1008 | f533f224 | Vangelis Koukis | type: "POST", |
1009 | f533f224 | Vangelis Koukis | contentType: "application/json", |
1010 | f533f224 | Vangelis Koukis | dataType: "json", |
1011 | f533f224 | Vangelis Koukis | data: JSON.stringify(payload),
|
1012 | f533f224 | Vangelis Koukis | timeout: TIMEOUT,
|
1013 | f533f224 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
1014 | 3a254f7c | Christodoulos Psaltis | // in machine views
|
1015 | 3a254f7c | Christodoulos Psaltis | if ( $.cookie("pane") == 0) { |
1016 | 3a254f7c | Christodoulos Psaltis | try {
|
1017 | 3a254f7c | Christodoulos Psaltis | display_failure(jqXHR.status, serverID, 'Reboot', jqXHR.responseText);
|
1018 | 3a254f7c | Christodoulos Psaltis | } catch (err) {
|
1019 | 3a254f7c | Christodoulos Psaltis | display_failure(0, serverID, 'Reboot', jqXHR.responseText); |
1020 | 3a254f7c | Christodoulos Psaltis | } |
1021 | 3a254f7c | Christodoulos Psaltis | } |
1022 | 3a254f7c | Christodoulos Psaltis | // in network view
|
1023 | 3a254f7c | Christodoulos Psaltis | else {
|
1024 | 3a254f7c | Christodoulos Psaltis | try {
|
1025 | 3a254f7c | Christodoulos Psaltis | display_reboot_failure(jqXHR.status, serverID, jqXHR.responseText); |
1026 | 3a254f7c | Christodoulos Psaltis | } catch (err) {
|
1027 | 3a254f7c | Christodoulos Psaltis | display_reboot_failure(0, serverID, jqXHR.responseText);
|
1028 | 3a254f7c | Christodoulos Psaltis | } |
1029 | aeed1f09 | Mike Muzurakis | } |
1030 | f533f224 | Vangelis Koukis | }, |
1031 | f533f224 | Vangelis Koukis | success: function(data, textStatus, jqXHR) { |
1032 | f533f224 | Vangelis Koukis | if ( jqXHR.status == '202') { |
1033 | 583932c4 | Christodoulos Psaltis | try {
|
1034 | 583932c4 | Christodoulos Psaltis | console.info('rebooted ' + serverID);
|
1035 | a1a31201 | Dimitris Moraitis | } catch(err) {}
|
1036 | f533f224 | Vangelis Koukis | // indicate that the action succeeded
|
1037 | 3a254f7c | Christodoulos Psaltis | // in machine views
|
1038 | 3a254f7c | Christodoulos Psaltis | if ( $.cookie("pane") == 0) { |
1039 | 3a254f7c | Christodoulos Psaltis | display_success(serverID); |
1040 | 3a254f7c | Christodoulos Psaltis | } |
1041 | 3a254f7c | Christodoulos Psaltis | // in network view
|
1042 | 3a254f7c | Christodoulos Psaltis | else {
|
1043 | 3a254f7c | Christodoulos Psaltis | display_reboot_success(serverID); |
1044 | 3a254f7c | Christodoulos Psaltis | } |
1045 | f533f224 | Vangelis Koukis | // continue with the rest of the servers
|
1046 | f533f224 | Vangelis Koukis | reboot(serverIDs); |
1047 | f533f224 | Vangelis Koukis | } else {
|
1048 | f533f224 | Vangelis Koukis | ajax_error(jqXHR.status, serverID, 'Reboot', jqXHR.responseText);
|
1049 | f533f224 | Vangelis Koukis | } |
1050 | f533f224 | Vangelis Koukis | } |
1051 | 42f67a2a | Dimitris Moraitis | }); |
1052 | 42f67a2a | Dimitris Moraitis | return false; |
1053 | 42f67a2a | Dimitris Moraitis | } |
1054 | 42f67a2a | Dimitris Moraitis | |
1055 | 42f67a2a | Dimitris Moraitis | // shutdown action
|
1056 | 42f67a2a | Dimitris Moraitis | function shutdown(serverIDs) { |
1057 | f533f224 | Vangelis Koukis | if (!serverIDs.length){
|
1058 | f533f224 | Vangelis Koukis | //ajax_success('DEFAULT');
|
1059 | f533f224 | Vangelis Koukis | return false; |
1060 | f533f224 | Vangelis Koukis | } |
1061 | 42f67a2a | Dimitris Moraitis | // ajax post shutdown call
|
1062 | 42f67a2a | Dimitris Moraitis | var payload = {
|
1063 | 9bc2dbfa | Vangelis Koukis | "shutdown": {}
|
1064 | b02144c8 | Vangelis Koukis | }; |
1065 | 42f67a2a | Dimitris Moraitis | |
1066 | f533f224 | Vangelis Koukis | var serverID = serverIDs.pop();
|
1067 | f533f224 | Vangelis Koukis | |
1068 | 42f67a2a | Dimitris Moraitis | $.ajax({
|
1069 | f533f224 | Vangelis Koukis | url: API_URL + '/servers/' + serverID + '/action', |
1070 | f533f224 | Vangelis Koukis | type: "POST", |
1071 | f533f224 | Vangelis Koukis | contentType: "application/json", |
1072 | f533f224 | Vangelis Koukis | dataType: "json", |
1073 | 42f67a2a | Dimitris Moraitis | data: JSON.stringify(payload),
|
1074 | 42f67a2a | Dimitris Moraitis | timeout: TIMEOUT,
|
1075 | b02144c8 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
1076 | aeed1f09 | Mike Muzurakis | try {
|
1077 | aeed1f09 | Mike Muzurakis | display_failure(jqXHR.status, serverID, 'Shutdown', jqXHR.responseText);
|
1078 | aeed1f09 | Mike Muzurakis | } catch(err) {
|
1079 | b8110bae | Mike Muzurakis | display_failure(0, serverID, 'Shutdown', jqXHR.responseText); |
1080 | aeed1f09 | Mike Muzurakis | } |
1081 | aeed1f09 | Mike Muzurakis | }, |
1082 | 42f67a2a | Dimitris Moraitis | success: function(data, textStatus, jqXHR) { |
1083 | 42f67a2a | Dimitris Moraitis | if ( jqXHR.status == '202') { |
1084 | f533f224 | Vangelis Koukis | try {
|
1085 | 583932c4 | Christodoulos Psaltis | console.info('suspended ' + serverID);
|
1086 | a1a31201 | Dimitris Moraitis | } catch(err) {}
|
1087 | f533f224 | Vangelis Koukis | // indicate that the action succeeded
|
1088 | f533f224 | Vangelis Koukis | display_success(serverID); |
1089 | f533f224 | Vangelis Koukis | // continue with the rest of the servers
|
1090 | 42f67a2a | Dimitris Moraitis | shutdown(serverIDs); |
1091 | 42f67a2a | Dimitris Moraitis | } else {
|
1092 | 038383b1 | Dimitris Moraitis | ajax_error(jqXHR.status, serverID, 'Shutdown', jqXHR.responseText);
|
1093 | 748139ba | Christodoulos Psaltis | } |
1094 | b02144c8 | Vangelis Koukis | } |
1095 | 42f67a2a | Dimitris Moraitis | }); |
1096 | b02144c8 | Vangelis Koukis | return false; |
1097 | 42f67a2a | Dimitris Moraitis | } |
1098 | 42f67a2a | Dimitris Moraitis | |
1099 | 42f67a2a | Dimitris Moraitis | // destroy action
|
1100 | 42f67a2a | Dimitris Moraitis | function destroy(serverIDs) { |
1101 | f533f224 | Vangelis Koukis | if (!serverIDs.length){
|
1102 | f533f224 | Vangelis Koukis | //ajax_success('DEFAULT');
|
1103 | f533f224 | Vangelis Koukis | return false; |
1104 | f533f224 | Vangelis Koukis | } |
1105 | f15025bc | Christodoulos Psaltis | // ajax post destroy call can have an empty request body
|
1106 | b02144c8 | Vangelis Koukis | var payload = {};
|
1107 | 42f67a2a | Dimitris Moraitis | |
1108 | f533f224 | Vangelis Koukis | var serverID = serverIDs.pop();
|
1109 | f533f224 | Vangelis Koukis | |
1110 | 42f67a2a | Dimitris Moraitis | $.ajax({
|
1111 | f533f224 | Vangelis Koukis | url: API_URL + '/servers/' + serverID, |
1112 | f533f224 | Vangelis Koukis | type: "DELETE", |
1113 | f533f224 | Vangelis Koukis | contentType: "application/json", |
1114 | f533f224 | Vangelis Koukis | dataType: "json", |
1115 | 42f67a2a | Dimitris Moraitis | data: JSON.stringify(payload),
|
1116 | 42f67a2a | Dimitris Moraitis | timeout: TIMEOUT,
|
1117 | b02144c8 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
1118 | aeed1f09 | Mike Muzurakis | try {
|
1119 | aeed1f09 | Mike Muzurakis | display_failure(jqXHR.status, serverID, 'Destroy', jqXHR.responseText);
|
1120 | aeed1f09 | Mike Muzurakis | } catch(err) {
|
1121 | b8110bae | Mike Muzurakis | display_failure(0, serverID, 'Destroy', jqXHR.responseText); |
1122 | aeed1f09 | Mike Muzurakis | } |
1123 | aeed1f09 | Mike Muzurakis | }, |
1124 | 42f67a2a | Dimitris Moraitis | success: function(data, textStatus, jqXHR) { |
1125 | 2d5cea9b | Markos Gogoulos | if ( jqXHR.status == '204') { |
1126 | f533f224 | Vangelis Koukis | try {
|
1127 | f15025bc | Christodoulos Psaltis | console.info('destroyed ' + serverID);
|
1128 | a1a31201 | Dimitris Moraitis | } catch (err) {}
|
1129 | 4b2ed497 | Kostas Papadimitriou | |
1130 | 4b2ed497 | Kostas Papadimitriou | // update status on local storage object
|
1131 | 4b2ed497 | Kostas Papadimitriou | vm = get_machine(serverID); |
1132 | 4b2ed497 | Kostas Papadimitriou | vm.status = "DESTROY";
|
1133 | 4b2ed497 | Kostas Papadimitriou | |
1134 | f533f224 | Vangelis Koukis | // indicate that the action succeeded
|
1135 | f533f224 | Vangelis Koukis | display_success(serverID); |
1136 | f533f224 | Vangelis Koukis | // continue with the rest of the servers
|
1137 | 38b1f387 | Christodoulos Psaltis | destroy(serverIDs); |
1138 | 42f67a2a | Dimitris Moraitis | } else {
|
1139 | 038383b1 | Dimitris Moraitis | ajax_error(jqXHR.status, serverID, 'Destroy', jqXHR.responseText);
|
1140 | 748139ba | Christodoulos Psaltis | } |
1141 | b02144c8 | Vangelis Koukis | } |
1142 | 42f67a2a | Dimitris Moraitis | }); |
1143 | b02144c8 | Vangelis Koukis | return false; |
1144 | 42f67a2a | Dimitris Moraitis | } |
1145 | 42f67a2a | Dimitris Moraitis | |
1146 | 42f67a2a | Dimitris Moraitis | // start action
|
1147 | 42f67a2a | Dimitris Moraitis | function start(serverIDs){ |
1148 | f533f224 | Vangelis Koukis | if (!serverIDs.length){
|
1149 | f533f224 | Vangelis Koukis | //ajax_success('DEFAULT');
|
1150 | f533f224 | Vangelis Koukis | return false; |
1151 | f533f224 | Vangelis Koukis | } |
1152 | 42f67a2a | Dimitris Moraitis | // ajax post start call
|
1153 | 42f67a2a | Dimitris Moraitis | var payload = {
|
1154 | 623d7244 | Vangelis Koukis | "start": {}
|
1155 | b02144c8 | Vangelis Koukis | }; |
1156 | 42f67a2a | Dimitris Moraitis | |
1157 | f533f224 | Vangelis Koukis | var serverID = serverIDs.pop();
|
1158 | f533f224 | Vangelis Koukis | |
1159 | 42f67a2a | Dimitris Moraitis | $.ajax({
|
1160 | 0971fa71 | Markos Gogoulos | url: API_URL + '/servers/' + serverID + '/action', |
1161 | 42f67a2a | Dimitris Moraitis | type: "POST", |
1162 | f533f224 | Vangelis Koukis | contentType: "application/json", |
1163 | 42f67a2a | Dimitris Moraitis | dataType: "json", |
1164 | 42f67a2a | Dimitris Moraitis | data: JSON.stringify(payload),
|
1165 | 42f67a2a | Dimitris Moraitis | timeout: TIMEOUT,
|
1166 | b02144c8 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
1167 | aeed1f09 | Mike Muzurakis | try {
|
1168 | aeed1f09 | Mike Muzurakis | display_failure(jqXHR.status, serverID, 'Start', jqXHR.responseText);
|
1169 | aeed1f09 | Mike Muzurakis | } catch(err) {
|
1170 | b8110bae | Mike Muzurakis | display_failure(0, serverID, 'Start', jqXHR.responseText); |
1171 | aeed1f09 | Mike Muzurakis | } |
1172 | aeed1f09 | Mike Muzurakis | }, |
1173 | 42f67a2a | Dimitris Moraitis | success: function(data, textStatus, jqXHR) { |
1174 | 42f67a2a | Dimitris Moraitis | if ( jqXHR.status == '202') { |
1175 | f533f224 | Vangelis Koukis | try {
|
1176 | 583932c4 | Christodoulos Psaltis | console.info('started ' + serverID);
|
1177 | a1a31201 | Dimitris Moraitis | } catch(err) {}
|
1178 | f533f224 | Vangelis Koukis | // indicate that the action succeeded
|
1179 | f533f224 | Vangelis Koukis | display_success(serverID); |
1180 | f533f224 | Vangelis Koukis | // continue with the rest of the servers
|
1181 | 42f67a2a | Dimitris Moraitis | start(serverIDs); |
1182 | 42f67a2a | Dimitris Moraitis | } else {
|
1183 | 038383b1 | Dimitris Moraitis | ajax_error(jqXHR.status, serverID, 'Start', jqXHR.responseText);
|
1184 | 748139ba | Christodoulos Psaltis | } |
1185 | 748139ba | Christodoulos Psaltis | } |
1186 | 42f67a2a | Dimitris Moraitis | }); |
1187 | 42f67a2a | Dimitris Moraitis | return false; |
1188 | 42f67a2a | Dimitris Moraitis | } |
1189 | 6902f72e | clopy | |
1190 | b02144c8 | Vangelis Koukis | // Show VNC console
|
1191 | b02144c8 | Vangelis Koukis | function vnc_attachment(host, port, password) { |
1192 | b02144c8 | Vangelis Koukis | // FIXME: Must be made into parameters, in settings.py
|
1193 | b02144c8 | Vangelis Koukis | //vnc = open("", "displayWindow",
|
1194 | b02144c8 | Vangelis Koukis | // "status=yes,toolbar=yes,menubar=yes");
|
1195 | b02144c8 | Vangelis Koukis | vd = document.open("application/x-vnc");
|
1196 | b02144c8 | Vangelis Koukis | |
1197 | b02144c8 | Vangelis Koukis | vd.writeln("[connection]");
|
1198 | b02144c8 | Vangelis Koukis | vd.writeln("host=" + host);
|
1199 | b02144c8 | Vangelis Koukis | vd.writeln("port=" + port);
|
1200 | b02144c8 | Vangelis Koukis | vd.writeln("password=" + password);
|
1201 | b02144c8 | Vangelis Koukis | |
1202 | b02144c8 | Vangelis Koukis | vd.close(); |
1203 | b02144c8 | Vangelis Koukis | } |
1204 | b02144c8 | Vangelis Koukis | |
1205 | b02144c8 | Vangelis Koukis | // Show VNC console
|
1206 | f533f224 | Vangelis Koukis | function show_vnc_console(serverID, serverName, serverIP, host, port, password) { |
1207 | f277a1cd | Kostas Papadimitriou | var params_url = '?machine=' + serverName + '&host_ip=' + serverIP.v4 + '&host_ip_v6=' + serverIP.v6 + '&host=' + host + '&port=' + port + '&password=' + password; |
1208 | f533f224 | Vangelis Koukis | var params_window = 'scrollbars=no,' + |
1209 | f533f224 | Vangelis Koukis | 'menubar=no,' +
|
1210 | f533f224 | Vangelis Koukis | 'toolbar=no,' +
|
1211 | f533f224 | Vangelis Koukis | 'status=no,' +
|
1212 | f533f224 | Vangelis Koukis | 'top=0,' +
|
1213 | f533f224 | Vangelis Koukis | 'left=0,' +
|
1214 | f533f224 | Vangelis Koukis | 'height=' + screen.height + ',' + |
1215 | f533f224 | Vangelis Koukis | 'width=' + screen.width + ',' + |
1216 | f533f224 | Vangelis Koukis | 'fullscreen=yes';
|
1217 | f277a1cd | Kostas Papadimitriou | |
1218 | f277a1cd | Kostas Papadimitriou | var url = 'machines/console' + params_url; |
1219 | f277a1cd | Kostas Papadimitriou | window.open(url, 'formresult' + serverID, params_window);
|
1220 | f533f224 | Vangelis Koukis | |
1221 | f533f224 | Vangelis Koukis | // Restore os icon in list view
|
1222 | f533f224 | Vangelis Koukis | osIcon = $('#'+serverID).parent().parent().find('.list-logo'); |
1223 | f533f224 | Vangelis Koukis | osIcon.attr('src',osIcon.attr('os')); |
1224 | 9c901aec | Markos Gogoulos | return false; |
1225 | b02144c8 | Vangelis Koukis | } |
1226 | b02144c8 | Vangelis Koukis | |
1227 | b02144c8 | Vangelis Koukis | // console action
|
1228 | fb3eec11 | Christodoulos Psaltis | function open_console(serverIDs){ |
1229 | f533f224 | Vangelis Koukis | if (!serverIDs.length){
|
1230 | f533f224 | Vangelis Koukis | //ajax_success('DEFAULT');
|
1231 | f533f224 | Vangelis Koukis | return false; |
1232 | f533f224 | Vangelis Koukis | } |
1233 | b02144c8 | Vangelis Koukis | // ajax post start call
|
1234 | b02144c8 | Vangelis Koukis | var payload = {
|
1235 | b02144c8 | Vangelis Koukis | "console": {"type": "vnc"} |
1236 | b02144c8 | Vangelis Koukis | }; |
1237 | b02144c8 | Vangelis Koukis | |
1238 | f533f224 | Vangelis Koukis | var serverID = serverIDs.pop();
|
1239 | f533f224 | Vangelis Koukis | |
1240 | f533f224 | Vangelis Koukis | var machine = get_machine(serverID);
|
1241 | f533f224 | Vangelis Koukis | var serverName = machine.name;
|
1242 | 2ee4f989 | Markos Gogoulos | try {
|
1243 | f277a1cd | Kostas Papadimitriou | var serverIP = {};
|
1244 | f277a1cd | Kostas Papadimitriou | serverIP.v4 = machine.addresses.values[0].values[0].addr; |
1245 | f277a1cd | Kostas Papadimitriou | serverIP.v6 = machine.addresses.values[0].values[1].addr; |
1246 | 2ee4f989 | Markos Gogoulos | } catch(err) { var serverIP = 'undefined'; } |
1247 | f533f224 | Vangelis Koukis | |
1248 | b02144c8 | Vangelis Koukis | $.ajax({
|
1249 | b02144c8 | Vangelis Koukis | url: API_URL + '/servers/' + serverID + '/action', |
1250 | b02144c8 | Vangelis Koukis | type: "POST", |
1251 | f533f224 | Vangelis Koukis | contentType: "application/json", |
1252 | b02144c8 | Vangelis Koukis | dataType: "json", |
1253 | b02144c8 | Vangelis Koukis | data: JSON.stringify(payload),
|
1254 | b02144c8 | Vangelis Koukis | timeout: TIMEOUT,
|
1255 | b02144c8 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
1256 | aeed1f09 | Mike Muzurakis | try {
|
1257 | aeed1f09 | Mike Muzurakis | display_failure(jqXHR.status, serverID, 'Console', jqXHR.responseText);
|
1258 | aeed1f09 | Mike Muzurakis | } catch(err) {
|
1259 | b8110bae | Mike Muzurakis | display_failure(0, serverID, 'Console', jqXHR.responseText); |
1260 | aeed1f09 | Mike Muzurakis | } |
1261 | aeed1f09 | Mike Muzurakis | }, |
1262 | b02144c8 | Vangelis Koukis | success: function(data, textStatus, jqXHR) { |
1263 | b02144c8 | Vangelis Koukis | if ( jqXHR.status == '200') { |
1264 | f533f224 | Vangelis Koukis | try {
|
1265 | b02144c8 | Vangelis Koukis | console.info('got_console ' + serverID);
|
1266 | b02144c8 | Vangelis Koukis | } catch(err) {}
|
1267 | f533f224 | Vangelis Koukis | // indicate that the action succeeded
|
1268 | ddf929a7 | Christodoulos Psaltis | // show_vnc_console(serverID, serverName, serverIP,
|
1269 | ddf929a7 | Christodoulos Psaltis | // data.console.host,data.console.port,data.console.password);
|
1270 | ddf929a7 | Christodoulos Psaltis | show_vnc_console(serverID, serverName, serverIP, |
1271 | ddf929a7 | Christodoulos Psaltis | data.console.host,data.console.port,data.console.password); |
1272 | f533f224 | Vangelis Koukis | display_success(serverID); |
1273 | 74175c17 | Christodoulos Psaltis | // hide spinner
|
1274 | 74175c17 | Christodoulos Psaltis | $('#' + serverID + ' .spinner').hide(); |
1275 | f533f224 | Vangelis Koukis | // continue with the rest of the servers
|
1276 | 74175c17 | Christodoulos Psaltis | open_console(serverIDs); |
1277 | b02144c8 | Vangelis Koukis | } else {
|
1278 | b02144c8 | Vangelis Koukis | ajax_error(jqXHR.status, serverID, 'Console', jqXHR.responseText);
|
1279 | b02144c8 | Vangelis Koukis | } |
1280 | b02144c8 | Vangelis Koukis | } |
1281 | b02144c8 | Vangelis Koukis | }); |
1282 | b02144c8 | Vangelis Koukis | return false; |
1283 | b02144c8 | Vangelis Koukis | } |
1284 | b02144c8 | Vangelis Koukis | |
1285 | 29772683 | Kostas Papadimitriou | function vm_has_address(vmId) { |
1286 | 29772683 | Kostas Papadimitriou | var vm = get_machine(vmId);
|
1287 | 29772683 | Kostas Papadimitriou | |
1288 | 29772683 | Kostas Papadimitriou | if (!vm) return false; |
1289 | 29772683 | Kostas Papadimitriou | |
1290 | 29772683 | Kostas Papadimitriou | try {
|
1291 | 29772683 | Kostas Papadimitriou | var ip = vm.addresses.values[0].values[0].addr; |
1292 | 29772683 | Kostas Papadimitriou | } catch (err) {
|
1293 | 29772683 | Kostas Papadimitriou | return false; |
1294 | 29772683 | Kostas Papadimitriou | } |
1295 | 29772683 | Kostas Papadimitriou | return ip;
|
1296 | 29772683 | Kostas Papadimitriou | } |
1297 | 29772683 | Kostas Papadimitriou | |
1298 | fd70c1db | Markos Gogoulos | // connect to machine action
|
1299 | fd70c1db | Markos Gogoulos | function machine_connect(serverIDs){ |
1300 | fd70c1db | Markos Gogoulos | if (!serverIDs.length){
|
1301 | fd70c1db | Markos Gogoulos | //ajax_success('DEFAULT');
|
1302 | fd70c1db | Markos Gogoulos | return false; |
1303 | fd70c1db | Markos Gogoulos | } |
1304 | 406bf0d9 | Kostas Papadimitriou | |
1305 | 406bf0d9 | Kostas Papadimitriou | // prefer metadata values for specific options (username, domain)
|
1306 | 65ecc5e4 | Kostas Papadimitriou | var username_meta_key = 'user'; |
1307 | 65ecc5e4 | Kostas Papadimitriou | var domain_meta_key = "domain"; |
1308 | 5bc1794f | Kostas Papadimitriou | |
1309 | fd70c1db | Markos Gogoulos | var serverID = serverIDs.pop();
|
1310 | fd70c1db | Markos Gogoulos | var machine = get_machine(serverID);
|
1311 | fd70c1db | Markos Gogoulos | var serverName = machine.name;
|
1312 | 6f4c1371 | Kostas Papadimitriou | |
1313 | 2ee4f989 | Markos Gogoulos | try {
|
1314 | 2ee4f989 | Markos Gogoulos | var serverIP = machine.addresses.values[0].values[0].addr; |
1315 | 406bf0d9 | Kostas Papadimitriou | } catch (err) { var serverIP = 'undefined'; } |
1316 | fd70c1db | Markos Gogoulos | |
1317 | afedad4d | Markos Gogoulos | try {
|
1318 | 6a48cd96 | Kostas Papadimitriou | var os = os_icon(machine.metadata);
|
1319 | 406bf0d9 | Kostas Papadimitriou | } catch (err) { var os = 'undefined'; } |
1320 | afedad4d | Markos Gogoulos | |
1321 | 5bc1794f | Kostas Papadimitriou | var username = ""; |
1322 | 5bc1794f | Kostas Papadimitriou | try {
|
1323 | 5bc1794f | Kostas Papadimitriou | username = machine.metadata.values[username_meta_key]; |
1324 | 406bf0d9 | Kostas Papadimitriou | } catch (err) { username = undefined } |
1325 | 406bf0d9 | Kostas Papadimitriou | |
1326 | 406bf0d9 | Kostas Papadimitriou | var domain = ""; |
1327 | 406bf0d9 | Kostas Papadimitriou | try {
|
1328 | 406bf0d9 | Kostas Papadimitriou | domain = machine.metadata.values[domain_meta_key]; |
1329 | 406bf0d9 | Kostas Papadimitriou | } catch (erro) { domain = undefined } |
1330 | 5bc1794f | Kostas Papadimitriou | |
1331 | 9ed51b7e | Kostas Papadimitriou | var params_url = '?ip_address=' + serverIP + '&os=' + os + "&host_os=" + $.client.os + "&srv=" + serverID; |
1332 | 5bc1794f | Kostas Papadimitriou | |
1333 | 5bc1794f | Kostas Papadimitriou | if (username) {
|
1334 | 5bc1794f | Kostas Papadimitriou | params_url += "&username=" + username;
|
1335 | 5bc1794f | Kostas Papadimitriou | } |
1336 | 406bf0d9 | Kostas Papadimitriou | |
1337 | 406bf0d9 | Kostas Papadimitriou | if (domain) {
|
1338 | 406bf0d9 | Kostas Papadimitriou | params_url += "&domain=" + domain;
|
1339 | 406bf0d9 | Kostas Papadimitriou | } |
1340 | 29772683 | Kostas Papadimitriou | |
1341 | 65ecc5e4 | Kostas Papadimitriou | //if ($.client.os == "Windows" && os == "windows") {
|
1342 | 65ecc5e4 | Kostas Papadimitriou | //// request rdp file
|
1343 | 65ecc5e4 | Kostas Papadimitriou | //window.open('machines/connect' + params_url + "&rdp=1");
|
1344 | 65ecc5e4 | Kostas Papadimitriou | //return;
|
1345 | 65ecc5e4 | Kostas Papadimitriou | //}
|
1346 | 9ed51b7e | Kostas Papadimitriou | |
1347 | 406bf0d9 | Kostas Papadimitriou | // FIXME: I18n ???
|
1348 | 1ea1fc33 | Kostas Papadimitriou | var title = 'Connect to: ' + '<span class="machine-title"><img src="static/icons/machines/small/'+os+'-on.png" /> ' + fix_server_name(serverName) + '</span>'; |
1349 | 406bf0d9 | Kostas Papadimitriou | |
1350 | 406bf0d9 | Kostas Papadimitriou | // open msg box and fill it with json data retrieved from connect machine view
|
1351 | b687587e | Kostas Papadimitriou | try {
|
1352 | 406bf0d9 | Kostas Papadimitriou | // open msg box
|
1353 | 406bf0d9 | Kostas Papadimitriou | msg_box({ |
1354 | 406bf0d9 | Kostas Papadimitriou | title:title,
|
1355 | de44fc6c | Kostas Papadimitriou | fixed: true, |
1356 | 406bf0d9 | Kostas Papadimitriou | content:'loading...', |
1357 | 406bf0d9 | Kostas Papadimitriou | extra:'', 'ajax':'machines/connect' + params_url, |
1358 | 406bf0d9 | Kostas Papadimitriou | parse_data:function(data){ |
1359 | 406bf0d9 | Kostas Papadimitriou | var box_content = "<a href='"+data.link.url+"'>"+data.link.title+"</a>"; |
1360 | 406bf0d9 | Kostas Papadimitriou | if (!data.link.url) {
|
1361 | 406bf0d9 | Kostas Papadimitriou | box_content = "<span class='cmd'>"+data.link.title+"</span>"; |
1362 | 406bf0d9 | Kostas Papadimitriou | } |
1363 | 406bf0d9 | Kostas Papadimitriou | data.title = false;
|
1364 | 406bf0d9 | Kostas Papadimitriou | data.content = data.info; |
1365 | 406bf0d9 | Kostas Papadimitriou | data.extra = box_content; |
1366 | 406bf0d9 | Kostas Papadimitriou | return data;
|
1367 | 9ed51b7e | Kostas Papadimitriou | } |
1368 | b687587e | Kostas Papadimitriou | }); |
1369 | b687587e | Kostas Papadimitriou | } catch (error) {
|
1370 | 406bf0d9 | Kostas Papadimitriou | // if msg box fails fallback redirecting the user to the connect url
|
1371 | 6f4c1371 | Kostas Papadimitriou | window.open('machines/connect' + params_url);
|
1372 | b687587e | Kostas Papadimitriou | } |
1373 | 29772683 | Kostas Papadimitriou | |
1374 | fd70c1db | Markos Gogoulos | |
1375 | fd70c1db | Markos Gogoulos | // Restore os icon in list view
|
1376 | fd70c1db | Markos Gogoulos | osIcon = $('#'+serverID).parent().parent().find('.list-logo'); |
1377 | fd70c1db | Markos Gogoulos | osIcon.attr('src',osIcon.attr('os')); |
1378 | fd70c1db | Markos Gogoulos | |
1379 | fd70c1db | Markos Gogoulos | return false; |
1380 | fd70c1db | Markos Gogoulos | } |
1381 | fd70c1db | Markos Gogoulos | |
1382 | fd70c1db | Markos Gogoulos | |
1383 | f533f224 | Vangelis Koukis | // rename server
|
1384 | a70a9116 | Mike Muzurakis | function rename(serverID, serverName){ |
1385 | f533f224 | Vangelis Koukis | if (!serverID.length){
|
1386 | f533f224 | Vangelis Koukis | //ajax_success('DEFAULT');
|
1387 | f533f224 | Vangelis Koukis | return false; |
1388 | f533f224 | Vangelis Koukis | } |
1389 | 0d4faeb8 | Mike Muzurakis | // ajax post rename call
|
1390 | 0d4faeb8 | Mike Muzurakis | var payload = {
|
1391 | 73715544 | Christodoulos Psaltis | "server": {"name": serverName} |
1392 | b02144c8 | Vangelis Koukis | }; |
1393 | 0d4faeb8 | Mike Muzurakis | |
1394 | 0d4faeb8 | Mike Muzurakis | $.ajax({
|
1395 | 5b35631e | Markos Gogoulos | url: API_URL + '/servers/' + serverID, |
1396 | a70a9116 | Mike Muzurakis | type: "PUT", |
1397 | f533f224 | Vangelis Koukis | contentType: "application/json", |
1398 | 0d4faeb8 | Mike Muzurakis | dataType: "json", |
1399 | 0d4faeb8 | Mike Muzurakis | data: JSON.stringify(payload),
|
1400 | 0d4faeb8 | Mike Muzurakis | timeout: TIMEOUT,
|
1401 | b02144c8 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
1402 | aeed1f09 | Mike Muzurakis | try {
|
1403 | aeed1f09 | Mike Muzurakis | display_failure(jqXHR.status, serverID, 'Rename', jqXHR.responseText);
|
1404 | aeed1f09 | Mike Muzurakis | } catch(err) {
|
1405 | b8110bae | Mike Muzurakis | display_failure(0, serverID, 'Rename', jqXHR.responseText); |
1406 | aeed1f09 | Mike Muzurakis | } |
1407 | aeed1f09 | Mike Muzurakis | }, |
1408 | 0d4faeb8 | Mike Muzurakis | success: function(data, textStatus, jqXHR) { |
1409 | 380c0520 | Dimitris Moraitis | if ( jqXHR.status == '204' || jqXHR.status == '1223') { |
1410 | f533f224 | Vangelis Koukis | try {
|
1411 | 0d4faeb8 | Mike Muzurakis | console.info('renamed ' + serverID);
|
1412 | 0d4faeb8 | Mike Muzurakis | } catch(err) {}
|
1413 | f533f224 | Vangelis Koukis | // indicate that the action succeeded
|
1414 | f533f224 | Vangelis Koukis | display_success(serverID); |
1415 | 0d4faeb8 | Mike Muzurakis | } else {
|
1416 | 0d4faeb8 | Mike Muzurakis | ajax_error(jqXHR.status, serverID, 'Rename', jqXHR.responseText);
|
1417 | 0d4faeb8 | Mike Muzurakis | } |
1418 | 0d4faeb8 | Mike Muzurakis | } |
1419 | 0d4faeb8 | Mike Muzurakis | }); |
1420 | 0d4faeb8 | Mike Muzurakis | return false; |
1421 | 0d4faeb8 | Mike Muzurakis | } |
1422 | 0d4faeb8 | Mike Muzurakis | |
1423 | 5186eb04 | Christodoulos Psaltis | // get server metadata
|
1424 | f533f224 | Vangelis Koukis | function get_metadata(serverID, keys_only) { |
1425 | 5186eb04 | Christodoulos Psaltis | $.ajax({
|
1426 | 5186eb04 | Christodoulos Psaltis | url: API_URL + '/servers/' + serverID + '/meta', |
1427 | d1e14e2c | Mike Muzurakis | cache: false, |
1428 | 5186eb04 | Christodoulos Psaltis | type: "GET", |
1429 | 5186eb04 | Christodoulos Psaltis | //async: false,
|
1430 | 5186eb04 | Christodoulos Psaltis | dataType: "json", |
1431 | 5186eb04 | Christodoulos Psaltis | timeout: TIMEOUT,
|
1432 | b02144c8 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
1433 | 5186eb04 | Christodoulos Psaltis | try {
|
1434 | ddf929a7 | Christodoulos Psaltis | // close wizard and show error box
|
1435 | ddf929a7 | Christodoulos Psaltis | $("a#metadata-scrollable").data('overlay').close(); |
1436 | f533f224 | Vangelis Koukis | ajax_error(jqXHR.status, undefined, 'Get metadata', jqXHR.responseText); |
1437 | f533f224 | Vangelis Koukis | } catch (err) {
|
1438 | 7991d0c5 | Kostas Papadimitriou | if (!isXhrException(err)) {
|
1439 | 7991d0c5 | Kostas Papadimitriou | ajax_error(-511, "UI Error", "Get metadata", err); |
1440 | 7991d0c5 | Kostas Papadimitriou | } else {
|
1441 | 7991d0c5 | Kostas Papadimitriou | return false; |
1442 | 7991d0c5 | Kostas Papadimitriou | } |
1443 | f533f224 | Vangelis Koukis | } |
1444 | 5186eb04 | Christodoulos Psaltis | }, |
1445 | 5186eb04 | Christodoulos Psaltis | success: function(data, textStatus, jqXHR) { |
1446 | 1b3857ab | Christodoulos Psaltis | // to list the new results in the edit dialog
|
1447 | f533f224 | Vangelis Koukis | if (keys_only) {
|
1448 | f533f224 | Vangelis Koukis | list_metadata_keys(serverID, data.metadata.values); |
1449 | f533f224 | Vangelis Koukis | } else {
|
1450 | f533f224 | Vangelis Koukis | list_metadata(data); |
1451 | f533f224 | Vangelis Koukis | list_metadata_keys(serverID, data.metadata.values); |
1452 | f533f224 | Vangelis Koukis | } |
1453 | f533f224 | Vangelis Koukis | //hide spinner
|
1454 | f533f224 | Vangelis Koukis | $('#metadata-wizard .large-spinner').hide(); |
1455 | 5186eb04 | Christodoulos Psaltis | } |
1456 | 5186eb04 | Christodoulos Psaltis | }); |
1457 | 5186eb04 | Christodoulos Psaltis | return false; |
1458 | 5186eb04 | Christodoulos Psaltis | } |
1459 | 5186eb04 | Christodoulos Psaltis | |
1460 | 1b3857ab | Christodoulos Psaltis | // delete metadata key-value pair
|
1461 | 1b3857ab | Christodoulos Psaltis | function delete_metadata(serverID, meta_key) { |
1462 | 0943cc77 | Markos Gogoulos | $.ajax({
|
1463 | 0943cc77 | Markos Gogoulos | url: API_URL + '/servers/' + serverID + '/meta/' + meta_key, |
1464 | 0943cc77 | Markos Gogoulos | type: "DELETE", |
1465 | 0943cc77 | Markos Gogoulos | //async: false,
|
1466 | 0943cc77 | Markos Gogoulos | dataType: "json", |
1467 | 0943cc77 | Markos Gogoulos | timeout: TIMEOUT,
|
1468 | b02144c8 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
1469 | 0943cc77 | Markos Gogoulos | try {
|
1470 | ddf929a7 | Christodoulos Psaltis | // close wizard and show error box
|
1471 | ddf929a7 | Christodoulos Psaltis | $("a#metadata-scrollable").data('overlay').close(); |
1472 | f533f224 | Vangelis Koukis | ajax_error(jqXHR.status, undefined, 'Delete metadata', jqXHR.responseText); |
1473 | f533f224 | Vangelis Koukis | } catch (err) {
|
1474 | 7991d0c5 | Kostas Papadimitriou | if (!isXhrException(err)) {
|
1475 | 7991d0c5 | Kostas Papadimitriou | ajax_error(-512, "UI Error", "Delete metadata", err); |
1476 | 7991d0c5 | Kostas Papadimitriou | } else {
|
1477 | 7991d0c5 | Kostas Papadimitriou | return false; |
1478 | 7991d0c5 | Kostas Papadimitriou | } |
1479 | f533f224 | Vangelis Koukis | } |
1480 | 0943cc77 | Markos Gogoulos | }, |
1481 | 0943cc77 | Markos Gogoulos | success: function(data, textStatus, jqXHR) { |
1482 | ddf929a7 | Christodoulos Psaltis | // success: Do nothing, the UI is already updated
|
1483 | 0943cc77 | Markos Gogoulos | } |
1484 | 0943cc77 | Markos Gogoulos | }); |
1485 | 0943cc77 | Markos Gogoulos | return false; |
1486 | 0943cc77 | Markos Gogoulos | } |
1487 | 0943cc77 | Markos Gogoulos | |
1488 | 1b3857ab | Christodoulos Psaltis | // add metadata key-value pair
|
1489 | f533f224 | Vangelis Koukis | function update_metadata(serverID, meta_key, meta_value) { |
1490 | 0c578a28 | Markos Gogoulos | var payload = {
|
1491 | 0c578a28 | Markos Gogoulos | "meta": {
|
1492 | 0c578a28 | Markos Gogoulos | } |
1493 | 0c578a28 | Markos Gogoulos | }; |
1494 | 0c578a28 | Markos Gogoulos | payload["meta"][meta_key] = meta_value;
|
1495 | 0c578a28 | Markos Gogoulos | |
1496 | 0c578a28 | Markos Gogoulos | $.ajax({
|
1497 | 0c578a28 | Markos Gogoulos | url: API_URL + '/servers/' + serverID + '/meta/' + meta_key, |
1498 | 0c578a28 | Markos Gogoulos | type: "PUT", |
1499 | f533f224 | Vangelis Koukis | contentType: "application/json", |
1500 | f533f224 | Vangelis Koukis | dataType: "json", |
1501 | f533f224 | Vangelis Koukis | data: JSON.stringify(payload),
|
1502 | f533f224 | Vangelis Koukis | timeout: TIMEOUT,
|
1503 | f533f224 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
1504 | f533f224 | Vangelis Koukis | try {
|
1505 | ddf929a7 | Christodoulos Psaltis | // close wizard and show error box
|
1506 | ddf929a7 | Christodoulos Psaltis | $("a#metadata-scrollable").data('overlay').close(); |
1507 | 7991d0c5 | Kostas Papadimitriou | ajax_error(jqXHR.status, undefined, 'Add metadata', jqXHR.responseText); |
1508 | f533f224 | Vangelis Koukis | } catch (err) {
|
1509 | 7991d0c5 | Kostas Papadimitriou | if (!isXhrException(err)) {
|
1510 | 7991d0c5 | Kostas Papadimitriou | ajax_error(-513, "UI Error", "Add metadata", err); |
1511 | 7991d0c5 | Kostas Papadimitriou | } else {
|
1512 | 7991d0c5 | Kostas Papadimitriou | return false; |
1513 | 7991d0c5 | Kostas Papadimitriou | } |
1514 | f533f224 | Vangelis Koukis | } |
1515 | f533f224 | Vangelis Koukis | }, |
1516 | f533f224 | Vangelis Koukis | success: function(data, textStatus, jqXHR) { |
1517 | f533f224 | Vangelis Koukis | // success: Update icons if meta key is OS
|
1518 | f533f224 | Vangelis Koukis | if (meta_key == "OS") { |
1519 | 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'); |
1520 | 260d6bb3 | Kostas Papadimitriou | var machine_icon = $("#machinesview-icon").find("div#" + serverID); |
1521 | 260d6bb3 | Kostas Papadimitriou | var machine_single = $("#machinesview-single").find("div#" + serverID); |
1522 | 260d6bb3 | Kostas Papadimitriou | |
1523 | 7af53e78 | Kostas Papadimitriou | var os = os_icon_from_value(meta_value);
|
1524 | 7af53e78 | Kostas Papadimitriou | var state = $("#metadata-wizard div#on-off").text() |
1525 | 260d6bb3 | Kostas Papadimitriou | var state_single = $(".state", machine_single).hasClass("terminated-state") ? "off" : "on"; |
1526 | 4529511c | Kostas Papadimitriou | |
1527 | 260d6bb3 | Kostas Papadimitriou | set_machine_os_image(machine_icon, "icon", state, os);
|
1528 | 260d6bb3 | Kostas Papadimitriou | set_machine_os_image(machine_single, "single", state_single, os);
|
1529 | f533f224 | Vangelis Koukis | } |
1530 | f533f224 | Vangelis Koukis | } |
1531 | f533f224 | Vangelis Koukis | }); |
1532 | f533f224 | Vangelis Koukis | return false; |
1533 | f533f224 | Vangelis Koukis | } |
1534 | 0506db29 | Christodoulos Psaltis | |
1535 | 23ca3bc9 | Christodoulos Psaltis | // get stats
|
1536 | 23ca3bc9 | Christodoulos Psaltis | function get_server_stats(serverID) { |
1537 | a09987c3 | Kostas Papadimitriou | |
1538 | a09987c3 | Kostas Papadimitriou | // do not update stats if machine in build state
|
1539 | a09987c3 | Kostas Papadimitriou | var vm = get_machine(serverID);
|
1540 | a09987c3 | Kostas Papadimitriou | if (vm.status == "BUILD" && vm.stats_timeout) { |
1541 | a09987c3 | Kostas Papadimitriou | els = get_current_view_stats_elements(vm.id); |
1542 | a09987c3 | Kostas Papadimitriou | els.cpu.img.hide(); |
1543 | a09987c3 | Kostas Papadimitriou | els.net.img.hide(); |
1544 | a09987c3 | Kostas Papadimitriou | |
1545 | a09987c3 | Kostas Papadimitriou | els.cpu.busy.show(); |
1546 | a09987c3 | Kostas Papadimitriou | els.net.busy.show(); |
1547 | a09987c3 | Kostas Papadimitriou | return;
|
1548 | a09987c3 | Kostas Papadimitriou | } |
1549 | a09987c3 | Kostas Papadimitriou | |
1550 | 23ca3bc9 | Christodoulos Psaltis | $.ajax({
|
1551 | 23ca3bc9 | Christodoulos Psaltis | url: API_URL + '/servers/' + serverID + '/stats', |
1552 | 23ca3bc9 | Christodoulos Psaltis | cache: false, |
1553 | 23ca3bc9 | Christodoulos Psaltis | type: "GET", |
1554 | 23ca3bc9 | Christodoulos Psaltis | //async: false,
|
1555 | 23ca3bc9 | Christodoulos Psaltis | dataType: "json", |
1556 | 23ca3bc9 | Christodoulos Psaltis | timeout: TIMEOUT,
|
1557 | 23ca3bc9 | Christodoulos Psaltis | error: function(jqXHR, textStatus, errorThrown) { |
1558 | 4529511c | Kostas Papadimitriou | try {
|
1559 | 4529511c | Kostas Papadimitriou | ajax_error(jqXHR.status, undefined, 'Get server stats', jqXHR.responseText); |
1560 | 4529511c | Kostas Papadimitriou | } catch(err) {
|
1561 | 4529511c | Kostas Papadimitriou | if (!isXhrException(err)) {
|
1562 | 4529511c | Kostas Papadimitriou | ajax_error(-520, "UI Error", "Get server stats", err); |
1563 | 4529511c | Kostas Papadimitriou | } |
1564 | 4529511c | Kostas Papadimitriou | } |
1565 | 23ca3bc9 | Christodoulos Psaltis | }, |
1566 | 23ca3bc9 | Christodoulos Psaltis | success: function(data, textStatus, jqXHR) { |
1567 | 4529511c | Kostas Papadimitriou | update_machine_stats(serverID, data); |
1568 | 4529511c | Kostas Papadimitriou | }, |
1569 | 4529511c | Kostas Papadimitriou | |
1570 | 4529511c | Kostas Papadimitriou | // pass server id to ajax settings
|
1571 | 4529511c | Kostas Papadimitriou | serverID: serverID
|
1572 | 4529511c | Kostas Papadimitriou | }); |
1573 | 4529511c | Kostas Papadimitriou | return false; |
1574 | 4529511c | Kostas Papadimitriou | } |
1575 | 4529511c | Kostas Papadimitriou | |
1576 | 4529511c | Kostas Papadimitriou | // set timeout function to update machine stats
|
1577 | cbadb3d8 | Kostas Papadimitriou | function set_stats_update_handler(vm_id, interval, clear) { |
1578 | a09987c3 | Kostas Papadimitriou | var vm = get_machine(vm_id);
|
1579 | a09987c3 | Kostas Papadimitriou | |
1580 | cbadb3d8 | Kostas Papadimitriou | if (clear) {
|
1581 | cbadb3d8 | Kostas Papadimitriou | window.clearInterval(vm.stats_timeout); |
1582 | cbadb3d8 | Kostas Papadimitriou | vm.stats_timeout = false;
|
1583 | cbadb3d8 | Kostas Papadimitriou | return;
|
1584 | a09987c3 | Kostas Papadimitriou | } |
1585 | a09987c3 | Kostas Papadimitriou | |
1586 | cbadb3d8 | Kostas Papadimitriou | if (!vm.stats_timeout) {
|
1587 | cbadb3d8 | Kostas Papadimitriou | vm.stats_timeout = window.setInterval(function(){
|
1588 | cbadb3d8 | Kostas Papadimitriou | get_server_stats(vm_id); |
1589 | cbadb3d8 | Kostas Papadimitriou | }, interval * 1000);
|
1590 | cbadb3d8 | Kostas Papadimitriou | } |
1591 | 4529511c | Kostas Papadimitriou | } |
1592 | 4529511c | Kostas Papadimitriou | |
1593 | 4529511c | Kostas Papadimitriou | // update machine stats
|
1594 | 4529511c | Kostas Papadimitriou | // call set_stats_update_handler if machine stats are visible
|
1595 | 4529511c | Kostas Papadimitriou | // to reupdate the stats (based on api interval)
|
1596 | 4529511c | Kostas Papadimitriou | function update_machine_stats(vm_id, data) { |
1597 | 4529511c | Kostas Papadimitriou | var els = get_current_view_stats_elements(vm_id);
|
1598 | 4529511c | Kostas Papadimitriou | var from_error = false; |
1599 | 4529511c | Kostas Papadimitriou | var vm = get_machine(vm_id);
|
1600 | cbadb3d8 | Kostas Papadimitriou | var clear = false; |
1601 | 4529511c | Kostas Papadimitriou | |
1602 | 4529511c | Kostas Papadimitriou | // api error
|
1603 | 4529511c | Kostas Papadimitriou | if (!data) {
|
1604 | 4529511c | Kostas Papadimitriou | from_error = true;
|
1605 | 4529511c | Kostas Papadimitriou | } |
1606 | 4529511c | Kostas Papadimitriou | |
1607 | 4529511c | Kostas Papadimitriou | // hide helpers
|
1608 | 4529511c | Kostas Papadimitriou | function hide_imgs(els) { |
1609 | 4529511c | Kostas Papadimitriou | els.cpu.img.hide(); |
1610 | 4529511c | Kostas Papadimitriou | els.net.img.hide(); |
1611 | 4529511c | Kostas Papadimitriou | } |
1612 | 4529511c | Kostas Papadimitriou | |
1613 | 4529511c | Kostas Papadimitriou | function hide_busy(els) { |
1614 | 4529511c | Kostas Papadimitriou | els.cpu.busy.hide(); |
1615 | 4529511c | Kostas Papadimitriou | els.net.busy.hide(); |
1616 | 4529511c | Kostas Papadimitriou | } |
1617 | 4529511c | Kostas Papadimitriou | |
1618 | 4529511c | Kostas Papadimitriou | function hide_errors(els) { |
1619 | 4529511c | Kostas Papadimitriou | els.cpu.error.hide(); |
1620 | 4529511c | Kostas Papadimitriou | els.net.error.hide(); |
1621 | 4529511c | Kostas Papadimitriou | } |
1622 | 4529511c | Kostas Papadimitriou | |
1623 | 4529511c | Kostas Papadimitriou | // apply logic
|
1624 | 4529511c | Kostas Papadimitriou | if (from_error) {
|
1625 | 4529511c | Kostas Papadimitriou | // api call returned error show error messages
|
1626 | cbadb3d8 | Kostas Papadimitriou | clear = true;
|
1627 | 4529511c | Kostas Papadimitriou | } else {
|
1628 | 4529511c | Kostas Papadimitriou | // no need to show stats while machine in building state
|
1629 | 4529511c | Kostas Papadimitriou | if (vm.status == "BUILD") { |
1630 | 4529511c | Kostas Papadimitriou | hide_imgs(els); |
1631 | 4529511c | Kostas Papadimitriou | hide_errors(els); |
1632 | 4529511c | Kostas Papadimitriou | els.cpu.busy.show(); |
1633 | 4529511c | Kostas Papadimitriou | els.net.busy.show(); |
1634 | 4529511c | Kostas Papadimitriou | } else {
|
1635 | 4529511c | Kostas Papadimitriou | hide_busy(els); |
1636 | 4529511c | Kostas Papadimitriou | |
1637 | 4529511c | Kostas Papadimitriou | // update stats, decide for series or bar image
|
1638 | 4529511c | Kostas Papadimitriou | // based on img class
|
1639 | 4529511c | Kostas Papadimitriou | if (els.cpu.img.hasClass("series")) { |
1640 | 4529511c | Kostas Papadimitriou | els.cpu.img.attr("src", data.stats.cpuTimeSeries);
|
1641 | 4529511c | Kostas Papadimitriou | } else {
|
1642 | 4529511c | Kostas Papadimitriou | els.cpu.img.attr("src", data.stats.cpuBar);
|
1643 | 23ca3bc9 | Christodoulos Psaltis | } |
1644 | 4529511c | Kostas Papadimitriou | |
1645 | 4529511c | Kostas Papadimitriou | if (els.net.img.hasClass("series")) { |
1646 | 4529511c | Kostas Papadimitriou | els.net.img.attr("src", data.stats.netTimeSeries);
|
1647 | 4529511c | Kostas Papadimitriou | } else {
|
1648 | 4529511c | Kostas Papadimitriou | els.net.img.attr("src", data.stats.netBar);
|
1649 | 4529511c | Kostas Papadimitriou | } |
1650 | 4529511c | Kostas Papadimitriou | } |
1651 | 4529511c | Kostas Papadimitriou | } |
1652 | 4529511c | Kostas Papadimitriou | |
1653 | 4529511c | Kostas Papadimitriou | // stats container is hidden
|
1654 | 4529511c | Kostas Papadimitriou | // do not update the stats
|
1655 | 4529511c | Kostas Papadimitriou | if (!els.cont.is(":visible")) { |
1656 | cbadb3d8 | Kostas Papadimitriou | clear = true;
|
1657 | 4529511c | Kostas Papadimitriou | } |
1658 | 4529511c | Kostas Papadimitriou | |
1659 | 4529511c | Kostas Papadimitriou | // set timeout to call the stats update
|
1660 | cbadb3d8 | Kostas Papadimitriou | set_stats_update_handler(vm_id, data.stats.refresh, clear); |
1661 | 4529511c | Kostas Papadimitriou | } |
1662 | 4529511c | Kostas Papadimitriou | |
1663 | 4529511c | Kostas Papadimitriou | |
1664 | 4529511c | Kostas Papadimitriou | // get stats elements based on current view
|
1665 | 4529511c | Kostas Papadimitriou | function get_current_view_stats_elements(vm_id) { |
1666 | 4529511c | Kostas Papadimitriou | // in icon view
|
1667 | 4529511c | Kostas Papadimitriou | if ( $.cookie('view') == 0 ) { |
1668 | 4529511c | Kostas Papadimitriou | vm_el = $("#" + vm_id); |
1669 | 4529511c | Kostas Papadimitriou | return {
|
1670 | 4529511c | Kostas Papadimitriou | 'cont': vm_el.find('.vm-stats'), |
1671 | 4529511c | Kostas Papadimitriou | 'cpu': {
|
1672 | 4529511c | Kostas Papadimitriou | 'img': vm_el.find(' img.cpu'), |
1673 | 4529511c | Kostas Papadimitriou | 'busy': vm_el.find('.cpu-cont .stat-busy'), |
1674 | 4529511c | Kostas Papadimitriou | 'error': vm_el.find('.cpu-cont .stat-error') |
1675 | 4529511c | Kostas Papadimitriou | }, |
1676 | 4529511c | Kostas Papadimitriou | 'net': {
|
1677 | 4529511c | Kostas Papadimitriou | 'img': vm_el.find('img.net'), |
1678 | 4529511c | Kostas Papadimitriou | 'busy': vm_el.find('.net-cont .stat-busy'), |
1679 | 4529511c | Kostas Papadimitriou | 'error': vm_el.find('.net-cont .stat-error') |
1680 | 4529511c | Kostas Papadimitriou | } |
1681 | 4529511c | Kostas Papadimitriou | } |
1682 | 4529511c | Kostas Papadimitriou | } |
1683 | 4529511c | Kostas Papadimitriou | // in single view
|
1684 | 4529511c | Kostas Papadimitriou | else if ( $.cookie('view') == 2 ) { |
1685 | 4529511c | Kostas Papadimitriou | vm_el = $("#" + vm_id); |
1686 | 4529511c | Kostas Papadimitriou | return {
|
1687 | 4529511c | Kostas Papadimitriou | 'cont': vm_el.find('.lower'), |
1688 | 4529511c | Kostas Papadimitriou | 'cpu': {
|
1689 | 4529511c | Kostas Papadimitriou | 'img': vm_el.find('div.cpu-graph img.stats'), |
1690 | 4529511c | Kostas Papadimitriou | 'busy': vm_el.find('div.cpu-graph img.stat-busy'), |
1691 | 4529511c | Kostas Papadimitriou | 'error': vm_el.find('div.cpu-graph .stat-error') |
1692 | 4529511c | Kostas Papadimitriou | }, |
1693 | 4529511c | Kostas Papadimitriou | 'net': {
|
1694 | 4529511c | Kostas Papadimitriou | 'img': vm_el.find('div.network-graph img.stats'), |
1695 | 4529511c | Kostas Papadimitriou | 'busy': vm_el.find('div.network-graph img.stat-busy'), |
1696 | 4529511c | Kostas Papadimitriou | 'error': vm_el.find('div.network-graph .stat-error') |
1697 | 4529511c | Kostas Papadimitriou | } |
1698 | 23ca3bc9 | Christodoulos Psaltis | } |
1699 | 23ca3bc9 | Christodoulos Psaltis | } |
1700 | 23ca3bc9 | Christodoulos Psaltis | } |
1701 | f533f224 | Vangelis Koukis | |
1702 | f533f224 | Vangelis Koukis | // create network
|
1703 | f533f224 | Vangelis Koukis | function create_network(networkName){ |
1704 | f533f224 | Vangelis Koukis | // ajax post start call
|
1705 | f533f224 | Vangelis Koukis | var payload = {
|
1706 | f533f224 | Vangelis Koukis | "network": { "name": networkName } |
1707 | f533f224 | Vangelis Koukis | }; |
1708 | f533f224 | Vangelis Koukis | |
1709 | f533f224 | Vangelis Koukis | $.ajax({
|
1710 | f533f224 | Vangelis Koukis | url: API_URL + '/networks', |
1711 | f533f224 | Vangelis Koukis | type: "POST", |
1712 | f533f224 | Vangelis Koukis | contentType: "application/json", |
1713 | f533f224 | Vangelis Koukis | dataType: "json", |
1714 | f533f224 | Vangelis Koukis | data: JSON.stringify(payload),
|
1715 | f533f224 | Vangelis Koukis | timeout: TIMEOUT,
|
1716 | f533f224 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
1717 | f533f224 | Vangelis Koukis | try {
|
1718 | ddf929a7 | Christodoulos Psaltis | // close wizard and show error box
|
1719 | ddf929a7 | Christodoulos Psaltis | $("a#networkscreate").overlay().close(); |
1720 | f533f224 | Vangelis Koukis | ajax_error(jqXHR.status, undefined, 'Create network', jqXHR.responseText); |
1721 | f533f224 | Vangelis Koukis | } catch (err) {
|
1722 | 7991d0c5 | Kostas Papadimitriou | if (!isXhrException(err)) {
|
1723 | 7991d0c5 | Kostas Papadimitriou | ajax_error(-514, "UI Error", "Create network", err); |
1724 | 7991d0c5 | Kostas Papadimitriou | } else {
|
1725 | 7991d0c5 | Kostas Papadimitriou | return false; |
1726 | 7991d0c5 | Kostas Papadimitriou | } |
1727 | f533f224 | Vangelis Koukis | } |
1728 | f533f224 | Vangelis Koukis | }, |
1729 | f533f224 | Vangelis Koukis | success: function(data, textStatus, jqXHR) { |
1730 | f533f224 | Vangelis Koukis | if ( jqXHR.status == '202') { |
1731 | f533f224 | Vangelis Koukis | try {
|
1732 | f533f224 | Vangelis Koukis | console.info('created network ' + networkName);
|
1733 | f533f224 | Vangelis Koukis | } catch(err) {}
|
1734 | a67bb993 | Christodoulos Psaltis | /*
|
1735 | a67bb993 | Christodoulos Psaltis | On success of this call nothing happens.
|
1736 | a67bb993 | Christodoulos Psaltis | When the UI gets the first update containing the created server,
|
1737 | a67bb993 | Christodoulos Psaltis | the creation wizard is closed and the new network is inserted
|
1738 | a67bb993 | Christodoulos Psaltis | to the DOM. This is done in update_networks_view()
|
1739 | a67bb993 | Christodoulos Psaltis | */
|
1740 | f533f224 | Vangelis Koukis | } else {
|
1741 | ddf929a7 | Christodoulos Psaltis | // close wizard and show error box
|
1742 | a67bb993 | Christodoulos Psaltis | $("a#networkscreate").overlay().close(); |
1743 | f533f224 | Vangelis Koukis | ajax_error(jqXHR.status, undefined, 'Create network', jqXHR.responseText); |
1744 | f533f224 | Vangelis Koukis | } |
1745 | f533f224 | Vangelis Koukis | } |
1746 | f533f224 | Vangelis Koukis | }); |
1747 | f533f224 | Vangelis Koukis | return false; |
1748 | f533f224 | Vangelis Koukis | } |
1749 | f533f224 | Vangelis Koukis | |
1750 | f533f224 | Vangelis Koukis | // rename network
|
1751 | f533f224 | Vangelis Koukis | function rename_network(networkID, networkName){ |
1752 | f533f224 | Vangelis Koukis | if (!networkID.length){
|
1753 | f533f224 | Vangelis Koukis | //ajax_success('DEFAULT');
|
1754 | f533f224 | Vangelis Koukis | return false; |
1755 | f533f224 | Vangelis Koukis | } |
1756 | f533f224 | Vangelis Koukis | // prepare payload
|
1757 | f533f224 | Vangelis Koukis | var payload = {
|
1758 | f533f224 | Vangelis Koukis | "network": {"name": networkName} |
1759 | f533f224 | Vangelis Koukis | }; |
1760 | f533f224 | Vangelis Koukis | // ajax call
|
1761 | f533f224 | Vangelis Koukis | $.ajax({
|
1762 | f533f224 | Vangelis Koukis | url: API_URL + '/networks/' + networkID, |
1763 | f533f224 | Vangelis Koukis | type: "PUT", |
1764 | f533f224 | Vangelis Koukis | contentType: "application/json", |
1765 | f533f224 | Vangelis Koukis | dataType: "json", |
1766 | f533f224 | Vangelis Koukis | data: JSON.stringify(payload),
|
1767 | f533f224 | Vangelis Koukis | timeout: TIMEOUT,
|
1768 | f533f224 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
1769 | f533f224 | Vangelis Koukis | try {
|
1770 | f533f224 | Vangelis Koukis | ajax_error(jqXHR.status, undefined, 'Rename network', jqXHR.responseText); |
1771 | f533f224 | Vangelis Koukis | } catch (err) {
|
1772 | 7991d0c5 | Kostas Papadimitriou | if (!isXhrException(err)) {
|
1773 | 7991d0c5 | Kostas Papadimitriou | ajax_error(-515, "UI Error", 'Rename network', err); |
1774 | 7991d0c5 | Kostas Papadimitriou | } else {
|
1775 | 7991d0c5 | Kostas Papadimitriou | return false; |
1776 | 7991d0c5 | Kostas Papadimitriou | } |
1777 | f533f224 | Vangelis Koukis | } |
1778 | f533f224 | Vangelis Koukis | }, |
1779 | f533f224 | Vangelis Koukis | success: function(data, textStatus, jqXHR) { |
1780 | f533f224 | Vangelis Koukis | if ( jqXHR.status == '204') { |
1781 | f533f224 | Vangelis Koukis | try {
|
1782 | f533f224 | Vangelis Koukis | console.info('renamed network' + networkID);
|
1783 | f533f224 | Vangelis Koukis | } catch(err) {}
|
1784 | f533f224 | Vangelis Koukis | } else {
|
1785 | f533f224 | Vangelis Koukis | ajax_error(jqXHR.status, undefined, 'Rename network', jqXHR.responseText); |
1786 | f533f224 | Vangelis Koukis | } |
1787 | f533f224 | Vangelis Koukis | } |
1788 | f533f224 | Vangelis Koukis | }); |
1789 | f533f224 | Vangelis Koukis | return false; |
1790 | f533f224 | Vangelis Koukis | } |
1791 | f533f224 | Vangelis Koukis | |
1792 | f533f224 | Vangelis Koukis | function delete_network(networkIDs){ |
1793 | f533f224 | Vangelis Koukis | if (!networkIDs.length){
|
1794 | f533f224 | Vangelis Koukis | //ajax_success('DEFAULT');
|
1795 | f533f224 | Vangelis Koukis | return false; |
1796 | f533f224 | Vangelis Koukis | } |
1797 | f533f224 | Vangelis Koukis | // get a network
|
1798 | f533f224 | Vangelis Koukis | var networkID = networkIDs.pop();
|
1799 | f533f224 | Vangelis Koukis | // ajax post destroy call can have an empty request body
|
1800 | f533f224 | Vangelis Koukis | var payload = {};
|
1801 | f533f224 | Vangelis Koukis | // ajax call
|
1802 | f533f224 | Vangelis Koukis | $.ajax({
|
1803 | f533f224 | Vangelis Koukis | url: API_URL + '/networks/' + networkID, |
1804 | f533f224 | Vangelis Koukis | type: "DELETE", |
1805 | f533f224 | Vangelis Koukis | contentType: "application/json", |
1806 | f533f224 | Vangelis Koukis | dataType: "json", |
1807 | f533f224 | Vangelis Koukis | data: JSON.stringify(payload),
|
1808 | f533f224 | Vangelis Koukis | timeout: TIMEOUT,
|
1809 | f533f224 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
1810 | f533f224 | Vangelis Koukis | try {
|
1811 | 2aab1d5e | Christodoulos Psaltis | display_net_failure(jqXHR.status, networkID, 'Delete', jqXHR.responseText);
|
1812 | f533f224 | Vangelis Koukis | } catch (err) {
|
1813 | 2aab1d5e | Christodoulos Psaltis | display_net_failure(0, networkID, 'Delete', jqXHR.responseText); |
1814 | f533f224 | Vangelis Koukis | } |
1815 | f533f224 | Vangelis Koukis | }, |
1816 | f533f224 | Vangelis Koukis | success: function(data, textStatus, jqXHR) { |
1817 | f533f224 | Vangelis Koukis | if ( jqXHR.status == '204') { |
1818 | f533f224 | Vangelis Koukis | try {
|
1819 | f533f224 | Vangelis Koukis | console.info('deleted network ' + networkID);
|
1820 | f533f224 | Vangelis Koukis | } catch(err) {}
|
1821 | f533f224 | Vangelis Koukis | // continue with the rest of the servers
|
1822 | f533f224 | Vangelis Koukis | delete_network(networkIDs); |
1823 | f533f224 | Vangelis Koukis | } else {
|
1824 | 3a254f7c | Christodoulos Psaltis | try {
|
1825 | 2aab1d5e | Christodoulos Psaltis | display_net_failure(jqXHR.status, networkID, 'Delete', jqXHR.responseText);
|
1826 | 3a254f7c | Christodoulos Psaltis | } catch (err) {
|
1827 | 2aab1d5e | Christodoulos Psaltis | display_net_failure(0, networkID, 'Delete', jqXHR.responseText); |
1828 | 3a254f7c | Christodoulos Psaltis | } |
1829 | f533f224 | Vangelis Koukis | } |
1830 | f533f224 | Vangelis Koukis | } |
1831 | f533f224 | Vangelis Koukis | }); |
1832 | f533f224 | Vangelis Koukis | return false; |
1833 | f533f224 | Vangelis Koukis | } |
1834 | f533f224 | Vangelis Koukis | |
1835 | f39b36a6 | Christodoulos Psaltis | function add_server_to_network(networkID, serverIDs, serverNames, serverStates) { |
1836 | f533f224 | Vangelis Koukis | if (!serverIDs.length){
|
1837 | be191315 | Christodoulos Psaltis | // close the overlay when all the calls are made
|
1838 | be191315 | Christodoulos Psaltis | $("a#add-machines-overlay").overlay().close(); |
1839 | f533f224 | Vangelis Koukis | return false; |
1840 | f533f224 | Vangelis Koukis | } |
1841 | f533f224 | Vangelis Koukis | // get a server
|
1842 | f533f224 | Vangelis Koukis | var serverID = serverIDs.pop();
|
1843 | 82835e06 | Christodoulos Psaltis | var serverName = serverNames.pop();
|
1844 | f39b36a6 | Christodoulos Psaltis | var serverState = serverStates.pop();
|
1845 | f533f224 | Vangelis Koukis | // prepare payload
|
1846 | f533f224 | Vangelis Koukis | var payload = {
|
1847 | f533f224 | Vangelis Koukis | "add": { "serverRef": serverID } |
1848 | f533f224 | Vangelis Koukis | }; |
1849 | f533f224 | Vangelis Koukis | // prepare ajax call
|
1850 | f533f224 | Vangelis Koukis | $.ajax({
|
1851 | f533f224 | Vangelis Koukis | url: API_URL + '/networks/' + networkID + '/action', |
1852 | f533f224 | Vangelis Koukis | type: "POST", |
1853 | f533f224 | Vangelis Koukis | contentType: "application/json", |
1854 | b02144c8 | Vangelis Koukis | dataType: "json", |
1855 | 0c578a28 | Markos Gogoulos | data: JSON.stringify(payload),
|
1856 | 0c578a28 | Markos Gogoulos | timeout: TIMEOUT,
|
1857 | b02144c8 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
1858 | 0c578a28 | Markos Gogoulos | try {
|
1859 | ddf929a7 | Christodoulos Psaltis | // close wizard and show error box
|
1860 | ddf929a7 | Christodoulos Psaltis | $("a#add-machines-overlay").data('overlay').close(); |
1861 | f533f224 | Vangelis Koukis | ajax_error(jqXHR.status, undefined, 'Add server to network', jqXHR.responseText); |
1862 | f533f224 | Vangelis Koukis | } catch (err) {
|
1863 | 7991d0c5 | Kostas Papadimitriou | if (!isXhrException(err)) {
|
1864 | 7991d0c5 | Kostas Papadimitriou | ajax_error(-516, "UI Error", 'Add server to network', err); |
1865 | 7991d0c5 | Kostas Papadimitriou | } else {
|
1866 | 7991d0c5 | Kostas Papadimitriou | return false; |
1867 | 7991d0c5 | Kostas Papadimitriou | } |
1868 | f533f224 | Vangelis Koukis | } |
1869 | 0c578a28 | Markos Gogoulos | }, |
1870 | 0c578a28 | Markos Gogoulos | success: function(data, textStatus, jqXHR) { |
1871 | f533f224 | Vangelis Koukis | if ( jqXHR.status == '202') { |
1872 | f533f224 | Vangelis Koukis | try {
|
1873 | f533f224 | Vangelis Koukis | console.info('added server ' + serverID + ' to network ' + networkID); |
1874 | f533f224 | Vangelis Koukis | } catch(err) {}
|
1875 | 82835e06 | Christodoulos Psaltis | // toggle the reboot dialog
|
1876 | f39b36a6 | Christodoulos Psaltis | display_reboot_dialog(networkID, serverID, serverName, serverState); |
1877 | f533f224 | Vangelis Koukis | // continue with the rest of the servers
|
1878 | f39b36a6 | Christodoulos Psaltis | add_server_to_network(networkID, serverIDs, serverNames, serverStates); |
1879 | f533f224 | Vangelis Koukis | } else {
|
1880 | ddf929a7 | Christodoulos Psaltis | // close wizard and show error box
|
1881 | ddf929a7 | Christodoulos Psaltis | $("a#add-machines-overlay").data('overlay').close(); |
1882 | f533f224 | Vangelis Koukis | ajax_error(jqXHR.status, undefined, 'Add server to network', jqXHR.responseText); |
1883 | f533f224 | Vangelis Koukis | } |
1884 | 0c578a28 | Markos Gogoulos | } |
1885 | 0c578a28 | Markos Gogoulos | }); |
1886 | 0c578a28 | Markos Gogoulos | return false; |
1887 | 0c578a28 | Markos Gogoulos | } |
1888 | 0c578a28 | Markos Gogoulos | |
1889 | f39b36a6 | Christodoulos Psaltis | function remove_server_from_network(networkIDs, serverIDs, serverNames, serverStates) { |
1890 | f533f224 | Vangelis Koukis | if (!networkIDs.length){
|
1891 | f533f224 | Vangelis Koukis | //ajax_success('DEFAULT');
|
1892 | f533f224 | Vangelis Koukis | return false; |
1893 | f533f224 | Vangelis Koukis | } |
1894 | f533f224 | Vangelis Koukis | // get a network and a server
|
1895 | f533f224 | Vangelis Koukis | var networkID = networkIDs.pop();
|
1896 | f533f224 | Vangelis Koukis | var serverID = serverIDs.pop();
|
1897 | 82835e06 | Christodoulos Psaltis | var serverName = serverNames.pop();
|
1898 | f39b36a6 | Christodoulos Psaltis | var serverState = serverStates.pop();
|
1899 | f533f224 | Vangelis Koukis | // prepare payload
|
1900 | f533f224 | Vangelis Koukis | var payload = {
|
1901 | f533f224 | Vangelis Koukis | "remove": { "serverRef": serverID } |
1902 | f533f224 | Vangelis Koukis | }; |
1903 | f533f224 | Vangelis Koukis | // prepare ajax call
|
1904 | f533f224 | Vangelis Koukis | $.ajax({
|
1905 | f533f224 | Vangelis Koukis | url: API_URL + '/networks/' + networkID + '/action', |
1906 | f533f224 | Vangelis Koukis | type: "POST", |
1907 | f533f224 | Vangelis Koukis | contentType: "application/json", |
1908 | f533f224 | Vangelis Koukis | dataType: "json", |
1909 | f533f224 | Vangelis Koukis | data: JSON.stringify(payload),
|
1910 | f533f224 | Vangelis Koukis | timeout: TIMEOUT,
|
1911 | f533f224 | Vangelis Koukis | error: function(jqXHR, textStatus, errorThrown) { |
1912 | f533f224 | Vangelis Koukis | try {
|
1913 | f533f224 | Vangelis Koukis | ajax_error(jqXHR.status, undefined, 'Remove server form network', jqXHR.responseText); |
1914 | f533f224 | Vangelis Koukis | } catch (err) {
|
1915 | 7991d0c5 | Kostas Papadimitriou | if (!isXhrException(err)) {
|
1916 | 7991d0c5 | Kostas Papadimitriou | ajax_error(-517, "UI Error", 'Remove server form network', err); |
1917 | 7991d0c5 | Kostas Papadimitriou | } else {
|
1918 | 7991d0c5 | Kostas Papadimitriou | return false; |
1919 | 7991d0c5 | Kostas Papadimitriou | } |
1920 | f533f224 | Vangelis Koukis | } |
1921 | f533f224 | Vangelis Koukis | }, |
1922 | f533f224 | Vangelis Koukis | success: function(data, textStatus, jqXHR) { |
1923 | f533f224 | Vangelis Koukis | if ( jqXHR.status == '202') { |
1924 | f533f224 | Vangelis Koukis | try {
|
1925 | f533f224 | Vangelis Koukis | console.info('deleted server ' + serverID + ' from network ' + networkID); |
1926 | f533f224 | Vangelis Koukis | } catch(err) {}
|
1927 | 82835e06 | Christodoulos Psaltis | // toggle the reboot dialog
|
1928 | f39b36a6 | Christodoulos Psaltis | display_reboot_dialog(networkID, serverID, serverName, serverState); |
1929 | f533f224 | Vangelis Koukis | // continue with the rest of the servers
|
1930 | f39b36a6 | Christodoulos Psaltis | remove_server_form_network(networkIDs, serverIDs, serverNames, serverStates); |
1931 | f533f224 | Vangelis Koukis | } else {
|
1932 | f533f224 | Vangelis Koukis | ajax_error(jqXHR.status, undefined, 'Remove server form network', jqXHR.responseText); |
1933 | f533f224 | Vangelis Koukis | } |
1934 | f533f224 | Vangelis Koukis | } |
1935 | f533f224 | Vangelis Koukis | }); |
1936 | f533f224 | Vangelis Koukis | return false; |
1937 | f533f224 | Vangelis Koukis | } |
1938 | 0c578a28 | Markos Gogoulos | |
1939 | 6423ba92 | Christodoulos Psaltis | function set_firewall(networkID, serverID, profile) { |
1940 | 6423ba92 | Christodoulos Psaltis | if (!networkID.length || !serverID.length || !profile.length){
|
1941 | 6423ba92 | Christodoulos Psaltis | return false; |
1942 | 6423ba92 | Christodoulos Psaltis | } |
1943 | 6423ba92 | Christodoulos Psaltis | // prepare payload
|
1944 | 6423ba92 | Christodoulos Psaltis | var payload = {
|
1945 | 6423ba92 | Christodoulos Psaltis | "firewallProfile": { "profile": profile } |
1946 | e9e7fe51 | Kostas Papadimitriou | }; |
1947 | e9e7fe51 | Kostas Papadimitriou | |
1948 | 6423ba92 | Christodoulos Psaltis | // prepare ajax call
|
1949 | 6423ba92 | Christodoulos Psaltis | $.ajax({
|
1950 | 6423ba92 | Christodoulos Psaltis | url: API_URL + '/servers/' + serverID + '/action', |
1951 | 6423ba92 | Christodoulos Psaltis | type: "POST", |
1952 | 6423ba92 | Christodoulos Psaltis | contentType: "application/json", |
1953 | 6423ba92 | Christodoulos Psaltis | dataType: "json", |
1954 | 6423ba92 | Christodoulos Psaltis | data: JSON.stringify(payload),
|
1955 | 6423ba92 | Christodoulos Psaltis | timeout: TIMEOUT,
|
1956 | 6423ba92 | Christodoulos Psaltis | error: function(jqXHR, textStatus, errorThrown) { |
1957 | 6423ba92 | Christodoulos Psaltis | try {
|
1958 | 6423ba92 | Christodoulos Psaltis | ajax_error(jqXHR.status, undefined, 'Set firewall profile', jqXHR.responseText); |
1959 | 6423ba92 | Christodoulos Psaltis | } catch (err) {
|
1960 | 7991d0c5 | Kostas Papadimitriou | if (!isXhrException(err)) {
|
1961 | 7991d0c5 | Kostas Papadimitriou | ajax_error(-518, "UI Error", 'Set firewall profile', err); |
1962 | 7991d0c5 | Kostas Papadimitriou | } else {
|
1963 | 7991d0c5 | Kostas Papadimitriou | return false; |
1964 | 7991d0c5 | Kostas Papadimitriou | } |
1965 | 6423ba92 | Christodoulos Psaltis | } |
1966 | 6423ba92 | Christodoulos Psaltis | }, |
1967 | 6423ba92 | Christodoulos Psaltis | success: function(data, textStatus, jqXHR) { |
1968 | 6423ba92 | Christodoulos Psaltis | if ( jqXHR.status == '202') { |
1969 | 6423ba92 | Christodoulos Psaltis | try {
|
1970 | 6423ba92 | Christodoulos Psaltis | console.info('for server ' + serverID + ' set firewall profile to ' + profile); |
1971 | 6423ba92 | Christodoulos Psaltis | } catch(err) {}
|
1972 | 6423ba92 | Christodoulos Psaltis | // toggle the reboot dialog
|
1973 | e9e7fe51 | Kostas Papadimitriou | try {
|
1974 | e9e7fe51 | Kostas Papadimitriou | |
1975 | e9e7fe51 | Kostas Papadimitriou | var serverName = $('div#net-' + networkID + '-server-' + serverID + ' div.machine-name-div span.name').text(); |
1976 | e9e7fe51 | Kostas Papadimitriou | var serverState = $('div#net-' + networkID + '-server-' + serverID + ' img.logo').attr('src').split('-')[1]; |
1977 | e9e7fe51 | Kostas Papadimitriou | serverState = serverState.split('.')[0]; |
1978 | e9e7fe51 | Kostas Papadimitriou | display_reboot_dialog(networkID, serverID, serverName, serverState); |
1979 | e9e7fe51 | Kostas Papadimitriou | |
1980 | e9e7fe51 | Kostas Papadimitriou | //remove progress gif and toggle the content
|
1981 | e9e7fe51 | Kostas Papadimitriou | $('div#net-' + networkID + '-server-' + serverID + ' button.firewall-apply').html(VARIOUS["APPLY"]); |
1982 | e9e7fe51 | Kostas Papadimitriou | $('div#net-' + networkID + '-server-' + serverID + ' button.firewall-apply').attr("disabled", false); |
1983 | e9e7fe51 | Kostas Papadimitriou | $('div#net-' + networkID + '-server-' + serverID + ' div.firewall-header').click(); |
1984 | e9e7fe51 | Kostas Papadimitriou | |
1985 | e9e7fe51 | Kostas Papadimitriou | } catch (err) {
|
1986 | e9e7fe51 | Kostas Papadimitriou | } |
1987 | e9e7fe51 | Kostas Papadimitriou | |
1988 | e9e7fe51 | Kostas Papadimitriou | // api call was made, set transition state to get reset
|
1989 | e9e7fe51 | Kostas Papadimitriou | // on the next machines update api call
|
1990 | e9e7fe51 | Kostas Papadimitriou | var vm = get_machine(serverID)
|
1991 | e9e7fe51 | Kostas Papadimitriou | vm.network_transition = "NETWORK_CHANGE";
|
1992 | e9e7fe51 | Kostas Papadimitriou | show_machine_network_indicator(vm.id, 'pub');
|
1993 | 6423ba92 | Christodoulos Psaltis | } else {
|
1994 | 6423ba92 | Christodoulos Psaltis | ajax_error(jqXHR.status, undefined, 'Set firewall profile', jqXHR.responseText); |
1995 | 6423ba92 | Christodoulos Psaltis | } |
1996 | 6423ba92 | Christodoulos Psaltis | } |
1997 | 6423ba92 | Christodoulos Psaltis | }); |
1998 | 6423ba92 | Christodoulos Psaltis | return false; |
1999 | 6423ba92 | Christodoulos Psaltis | } |
2000 | 6423ba92 | Christodoulos Psaltis | |
2001 | 6902f72e | clopy | // show the welcome screen
|
2002 | 6902f72e | clopy | function showWelcome() { |
2003 | f5ebca32 | Mike Muzurakis | $("#view-select").fadeOut("fast"); |
2004 | f5ebca32 | Mike Muzurakis | $("#emptymachineslist").fadeIn("fast"); |
2005 | f0215d6b | Mike Muzurakis | $("#machinesview").hide(); |
2006 | 6902f72e | clopy | } |
2007 | 6902f72e | clopy | |
2008 | 6902f72e | clopy | // hide the welcome screen
|
2009 | 6902f72e | clopy | function hideWelcome() { |
2010 | 6902f72e | clopy | $("#emptymachineslist").fadeOut("fast"); |
2011 | 6902f72e | clopy | $("#view-select").fadeIn("fast"); |
2012 | ce4f9227 | Mike Muzurakis | $("div#view-select").show(); |
2013 | f0215d6b | Mike Muzurakis | $("#machinesview").show(); |
2014 | f533f224 | Vangelis Koukis | } |
2015 | f533f224 | Vangelis Koukis | |
2016 | f533f224 | Vangelis Koukis | function log_server_status_change(server_entry, new_status) { |
2017 | f533f224 | Vangelis Koukis | // firebug console logging
|
2018 | f533f224 | Vangelis Koukis | try {
|
2019 | 09828cb5 | Mike Muzurakis | if ($("#machinesview-single").length > 0) { |
2020 | 09828cb5 | Mike Muzurakis | console.info(server_entry.find("div.machine-details div.name").text() +
|
2021 | 09828cb5 | Mike Muzurakis | ' from ' + server_entry.find(".state-label").text() + |
2022 | 09828cb5 | Mike Muzurakis | ' to ' + STATUSES[new_status]);
|
2023 | 09828cb5 | Mike Muzurakis | } else {
|
2024 | 09828cb5 | Mike Muzurakis | console.info(server_entry.find("div.name span.name").text() +
|
2025 | 6dd01959 | Kostas Papadimitriou | ' from ' + server_entry.find(".status").text().replace(TRANSITION_STATE_APPEND, "") + |
2026 | 09828cb5 | Mike Muzurakis | ' to ' + STATUSES[new_status]);
|
2027 | 09828cb5 | Mike Muzurakis | } |
2028 | f533f224 | Vangelis Koukis | } catch(err) {}
|
2029 | f533f224 | Vangelis Koukis | } |
2030 | f533f224 | Vangelis Koukis | |
2031 | f533f224 | Vangelis Koukis | function get_flavor_params(flavorRef) { |
2032 | f533f224 | Vangelis Koukis | var cpus, ram, disk;
|
2033 | f533f224 | Vangelis Koukis | if ( flavors.length > 0 ) { |
2034 | f533f224 | Vangelis Koukis | var current_flavor = ''; |
2035 | f533f224 | Vangelis Koukis | for (i=0; i<flavors.length; i++) { |
2036 | f533f224 | Vangelis Koukis | if (flavors[i]['id'] == flavorRef) { |
2037 | f533f224 | Vangelis Koukis | current_flavor = flavors[i]; |
2038 | f533f224 | Vangelis Koukis | } |
2039 | f533f224 | Vangelis Koukis | } |
2040 | f533f224 | Vangelis Koukis | cpus = current_flavor['cpu'];
|
2041 | f533f224 | Vangelis Koukis | ram = current_flavor['ram'];
|
2042 | f533f224 | Vangelis Koukis | disk = current_flavor['disk'];
|
2043 | f533f224 | Vangelis Koukis | } else {
|
2044 | f533f224 | Vangelis Koukis | cpus = 'undefined';
|
2045 | f533f224 | Vangelis Koukis | ram = 'undefined';
|
2046 | f533f224 | Vangelis Koukis | disk = 'undefined';
|
2047 | f533f224 | Vangelis Koukis | } |
2048 | f533f224 | Vangelis Koukis | return {'cpus': cpus, 'ram': ram, 'disk': disk}; |
2049 | f533f224 | Vangelis Koukis | } |
2050 | f533f224 | Vangelis Koukis | |
2051 | f533f224 | Vangelis Koukis | function get_image_params(imageRef) { |
2052 | f533f224 | Vangelis Koukis | var image_name, image_size;
|
2053 | f533f224 | Vangelis Koukis | if ( images.length > 0 ) { |
2054 | f533f224 | Vangelis Koukis | var current_image = ''; |
2055 | f533f224 | Vangelis Koukis | for (i=0; i<images.length; i++) { |
2056 | f533f224 | Vangelis Koukis | if (images[i]['id'] == imageRef) { |
2057 | f533f224 | Vangelis Koukis | current_image = images[i]; |
2058 | f533f224 | Vangelis Koukis | } |
2059 | f533f224 | Vangelis Koukis | } |
2060 | 7ffea202 | Dimitris Moraitis | try {
|
2061 | 7ffea202 | Dimitris Moraitis | image_name = current_image['name'];
|
2062 | 7ffea202 | Dimitris Moraitis | } catch(err) { image_name = 'undefined'; } |
2063 | 7ffea202 | Dimitris Moraitis | try{
|
2064 | 7ffea202 | Dimitris Moraitis | image_size = current_image['metadata']['values']['size']; |
2065 | 7ffea202 | Dimitris Moraitis | } catch(err) { image_size = 'undefined'; } |
2066 | f533f224 | Vangelis Koukis | } else {
|
2067 | f533f224 | Vangelis Koukis | image_name = 'undefined';
|
2068 | f533f224 | Vangelis Koukis | image_size = 'undefined';
|
2069 | f533f224 | Vangelis Koukis | } |
2070 | f533f224 | Vangelis Koukis | return {'name': image_name,'size': image_size}; |
2071 | f533f224 | Vangelis Koukis | } |
2072 | f533f224 | Vangelis Koukis | |
2073 | f533f224 | Vangelis Koukis | function get_public_ips(server) { |
2074 | f533f224 | Vangelis Koukis | var ip4, ip6;
|
2075 | f533f224 | Vangelis Koukis | try {
|
2076 | f533f224 | Vangelis Koukis | if (server.addresses.values) {
|
2077 | f533f224 | Vangelis Koukis | $.each (server.addresses.values, function(i, value) { |
2078 | f533f224 | Vangelis Koukis | if (value.id == 'public') { |
2079 | f533f224 | Vangelis Koukis | try {
|
2080 | f533f224 | Vangelis Koukis | $.each (value.values, function(i, ip) { |
2081 | f533f224 | Vangelis Koukis | if (ip.version == '4') { |
2082 | f533f224 | Vangelis Koukis | ip4 = ip.addr; |
2083 | f533f224 | Vangelis Koukis | } else if (ip.version == '6') { |
2084 | f533f224 | Vangelis Koukis | ip6 = ip.addr; |
2085 | f533f224 | Vangelis Koukis | } else {
|
2086 | ffbf30f9 | Kostas Papadimitriou | ip4 = 'pending';
|
2087 | ffbf30f9 | Kostas Papadimitriou | ip6 = 'pending';
|
2088 | f533f224 | Vangelis Koukis | } |
2089 | f533f224 | Vangelis Koukis | }); |
2090 | f533f224 | Vangelis Koukis | } catch (err){
|
2091 | f533f224 | Vangelis Koukis | try{console.info('Server ' + server.id + ' has invalid ips')}catch(err){}; |
2092 | ffbf30f9 | Kostas Papadimitriou | ip4 = 'pending';
|
2093 | ffbf30f9 | Kostas Papadimitriou | ip6 = 'pending';
|
2094 | f533f224 | Vangelis Koukis | } |
2095 | f533f224 | Vangelis Koukis | } |
2096 | f533f224 | Vangelis Koukis | }); |
2097 | f533f224 | Vangelis Koukis | } |
2098 | f533f224 | Vangelis Koukis | } catch (err) {
|
2099 | f533f224 | Vangelis Koukis | try{console.info('Server ' + server.id + ' has no network addresses')}catch(err){}; |
2100 | ffbf30f9 | Kostas Papadimitriou | ip4 = 'pending';
|
2101 | ffbf30f9 | Kostas Papadimitriou | ip6 = 'pending';
|
2102 | f533f224 | Vangelis Koukis | } |
2103 | f533f224 | Vangelis Koukis | return {'ip4': ip4, 'ip6': ip6}; |
2104 | 6902f72e | clopy | } |
2105 | 6902f72e | clopy | |
2106 | f533f224 | Vangelis Koukis | function get_private_ips(server) { |
2107 | f533f224 | Vangelis Koukis | |
2108 | f533f224 | Vangelis Koukis | } |
2109 | 716c3ead | Dimitris Moraitis | |
2110 | 716c3ead | Dimitris Moraitis | function close_all_overlays() { |
2111 | 716c3ead | Dimitris Moraitis | try {
|
2112 | 716c3ead | Dimitris Moraitis | $("a#networkscreate").overlay().close(); |
2113 | 716c3ead | Dimitris Moraitis | } catch(err) {}
|
2114 | 716c3ead | Dimitris Moraitis | try {
|
2115 | 716c3ead | Dimitris Moraitis | $('a#create').overlay().close(); |
2116 | 716c3ead | Dimitris Moraitis | } catch(err) {}
|
2117 | 716c3ead | Dimitris Moraitis | try {
|
2118 | 716c3ead | Dimitris Moraitis | $("a#add-machines-overlay").overlay().close(); |
2119 | 716c3ead | Dimitris Moraitis | } catch(err) {}
|
2120 | 716c3ead | Dimitris Moraitis | try {
|
2121 | 716c3ead | Dimitris Moraitis | $("a#metadata-scrollable").overlay().close(); |
2122 | 82835e06 | Christodoulos Psaltis | } catch(err) {}
|
2123 | 114082a7 | Kostas Papadimitriou | try {
|
2124 | 114082a7 | Kostas Papadimitriou | $("a#msgbox").overlay().close(); |
2125 | 114082a7 | Kostas Papadimitriou | } catch(err) {}
|
2126 | 54417a11 | Kostas Papadimitriou | try {
|
2127 | 54417a11 | Kostas Papadimitriou | $("a#feedbackbox").overlay().close(); |
2128 | 54417a11 | Kostas Papadimitriou | } catch(err) {}
|
2129 | d1e14e2c | Mike Muzurakis | } |
2130 | a583aa29 | Kostas Papadimitriou | |
2131 | af6fc929 | Kostas Papadimitriou | // logout
|
2132 | af6fc929 | Kostas Papadimitriou | function user_session_logout() { |
2133 | af6fc929 | Kostas Papadimitriou | $.cookie("X-Auth-Token", null); |
2134 | 8e5122dd | Kostas Papadimitriou | if (window.LOGOUT_REDIRECT !== undefined) |
2135 | 8e5122dd | Kostas Papadimitriou | { |
2136 | 8e5122dd | Kostas Papadimitriou | window.location = window.LOGOUT_REDIRECT; |
2137 | 8e5122dd | Kostas Papadimitriou | } else {
|
2138 | 8e5122dd | Kostas Papadimitriou | window.location.reload(); |
2139 | 8e5122dd | Kostas Papadimitriou | } |
2140 | af6fc929 | Kostas Papadimitriou | } |
2141 | af6fc929 | Kostas Papadimitriou | |
2142 | a583aa29 | Kostas Papadimitriou | // action indicators
|
2143 | a583aa29 | Kostas Papadimitriou | function init_action_indicator_handlers(machines_view) |
2144 | a583aa29 | Kostas Papadimitriou | { |
2145 | 70eab221 | Kostas Papadimitriou | // init once for each view
|
2146 | 70eab221 | Kostas Papadimitriou | if (window.ACTION_ICON_HANDLERS == undefined) |
2147 | 70eab221 | Kostas Papadimitriou | { |
2148 | 70eab221 | Kostas Papadimitriou | window.ACTION_ICON_HANDLERS = {}; |
2149 | 70eab221 | Kostas Papadimitriou | } |
2150 | 70eab221 | Kostas Papadimitriou | |
2151 | 70eab221 | Kostas Papadimitriou | if (machines_view in window.ACTION_ICON_HANDLERS) |
2152 | 70eab221 | Kostas Papadimitriou | { |
2153 | 70eab221 | Kostas Papadimitriou | return;
|
2154 | 70eab221 | Kostas Papadimitriou | } |
2155 | 70eab221 | Kostas Papadimitriou | window.ACTION_ICON_HANDLERS[machines_view] = 1;
|
2156 | 23ca3bc9 | Christodoulos Psaltis | |
2157 | a583aa29 | Kostas Papadimitriou | if (machines_view == "list") |
2158 | 23ca3bc9 | Christodoulos Psaltis | { |
2159 | a583aa29 | Kostas Papadimitriou | // totally different logic for list view
|
2160 | a583aa29 | Kostas Papadimitriou | init_action_indicator_list_handlers(); |
2161 | a583aa29 | Kostas Papadimitriou | return;
|
2162 | a583aa29 | Kostas Papadimitriou | } |
2163 | 23ca3bc9 | Christodoulos Psaltis | |
2164 | cce434fc | Kostas Papadimitriou | function update_action_icon_indicators(force) |
2165 | 23ca3bc9 | Christodoulos Psaltis | { |
2166 | cce434fc | Kostas Papadimitriou | function show(el, action) { |
2167 | cce434fc | Kostas Papadimitriou | $(".action-indicator", $(el)).attr("class", "action-indicator " + action); |
2168 | cce434fc | Kostas Papadimitriou | $(".action-indicator", $(el)).show(); |
2169 | cce434fc | Kostas Papadimitriou | } |
2170 | cce434fc | Kostas Papadimitriou | |
2171 | 23ca3bc9 | Christodoulos Psaltis | function hide(el) { |
2172 | cce434fc | Kostas Papadimitriou | $(".action-indicator", $(el)).hide(); |
2173 | cce434fc | Kostas Papadimitriou | } |
2174 | 23ca3bc9 | Christodoulos Psaltis | |
2175 | cce434fc | Kostas Papadimitriou | function get_pending_actions(el) { |
2176 | cce434fc | Kostas Papadimitriou | return $(".confirm_single:visible", $(el)); |
2177 | cce434fc | Kostas Papadimitriou | } |
2178 | 23ca3bc9 | Christodoulos Psaltis | |
2179 | cce434fc | Kostas Papadimitriou | function other_indicators(el) { |
2180 | cce434fc | Kostas Papadimitriou | return $("img.wave:visible, img.spinner:visible", $(el)) |
2181 | cce434fc | Kostas Papadimitriou | } |
2182 | 23ca3bc9 | Christodoulos Psaltis | |
2183 | cce434fc | Kostas Papadimitriou | $("div.machine:visible, div.single-container").each(function(index, el){ |
2184 | cce434fc | Kostas Papadimitriou | var el = $(el); |
2185 | cce434fc | Kostas Papadimitriou | var pending = get_pending_actions(el);
|
2186 | cce434fc | Kostas Papadimitriou | var other = other_indicators(el);
|
2187 | cce434fc | Kostas Papadimitriou | var action = undefined; |
2188 | cce434fc | Kostas Papadimitriou | var force_action = force;
|
2189 | cce434fc | Kostas Papadimitriou | var visible = $(el).css("display") == "block"; |
2190 | cce434fc | Kostas Papadimitriou | |
2191 | cce434fc | Kostas Papadimitriou | if (force_action !==undefined && force_action.el !== el[0]) { |
2192 | cce434fc | Kostas Papadimitriou | // force action for other vm
|
2193 | cce434fc | Kostas Papadimitriou | // skipping force action
|
2194 | cce434fc | Kostas Papadimitriou | force_action = undefined;
|
2195 | cce434fc | Kostas Papadimitriou | } |
2196 | 23ca3bc9 | Christodoulos Psaltis | |
2197 | cce434fc | Kostas Papadimitriou | if (force_action !==undefined && force_action.el === el[0]) { |
2198 | cce434fc | Kostas Papadimitriou | action = force_action.action; |
2199 | cce434fc | Kostas Papadimitriou | } |
2200 | cce434fc | Kostas Papadimitriou | |
2201 | cce434fc | Kostas Papadimitriou | if (other.length >= 1) { |
2202 | cce434fc | Kostas Papadimitriou | return;
|
2203 | cce434fc | Kostas Papadimitriou | } |
2204 | cce434fc | Kostas Papadimitriou | |
2205 | 23ca3bc9 | Christodoulos Psaltis | if (pending.length >= 1 && force_action === undefined) { |
2206 | cce434fc | Kostas Papadimitriou | action = $(pending.parent()).attr("class").replace("action-container",""); |
2207 | cce434fc | Kostas Papadimitriou | } |
2208 | 23ca3bc9 | Christodoulos Psaltis | |
2209 | cce434fc | Kostas Papadimitriou | if (action in {'console':''}) { |
2210 | cce434fc | Kostas Papadimitriou | return;
|
2211 | cce434fc | Kostas Papadimitriou | } |
2212 | 23ca3bc9 | Christodoulos Psaltis | |
2213 | cce434fc | Kostas Papadimitriou | if (action !== undefined) { |
2214 | cce434fc | Kostas Papadimitriou | show(el, action); |
2215 | cce434fc | Kostas Papadimitriou | } else {
|
2216 | 23ca3bc9 | Christodoulos Psaltis | try {
|
2217 | cce434fc | Kostas Papadimitriou | if (el.attr('id') == pending_actions[0][1]) |
2218 | cce434fc | Kostas Papadimitriou | { |
2219 | 23ca3bc9 | Christodoulos Psaltis | return;
|
2220 | cce434fc | Kostas Papadimitriou | } |
2221 | cce434fc | Kostas Papadimitriou | } catch (err) {
|
2222 | cce434fc | Kostas Papadimitriou | } |
2223 | cce434fc | Kostas Papadimitriou | hide(el); |
2224 | cce434fc | Kostas Papadimitriou | } |
2225 | cce434fc | Kostas Papadimitriou | |
2226 | cce434fc | Kostas Papadimitriou | }); |
2227 | a583aa29 | Kostas Papadimitriou | } |
2228 | a583aa29 | Kostas Papadimitriou | |
2229 | a583aa29 | Kostas Papadimitriou | // action indicators
|
2230 | cce434fc | Kostas Papadimitriou | $(".action-container").live('mouseover', function(evn) { |
2231 | cce434fc | Kostas Papadimitriou | force_action = {'el': $(evn.currentTarget).parent().parent()[0], 'action':$(evn.currentTarget).attr("class").replace("action-container","")}; |
2232 | 70eab221 | Kostas Papadimitriou | // single view case
|
2233 | cce434fc | Kostas Papadimitriou | if ($(force_action.el).attr("class") == "upper") |
2234 | a583aa29 | Kostas Papadimitriou | { |
2235 | cce434fc | Kostas Papadimitriou | force_action.el = $(evn.currentTarget).parent().parent().parent()[0] |
2236 | cce434fc | Kostas Papadimitriou | }; |
2237 | cce434fc | Kostas Papadimitriou | update_action_icon_indicators(force_action); |
2238 | a583aa29 | Kostas Papadimitriou | }); |
2239 | a583aa29 | Kostas Papadimitriou | |
2240 | 70eab221 | Kostas Papadimitriou | $("img.spinner, img.wave").live('hide', function(){ |
2241 | 70eab221 | Kostas Papadimitriou | update_action_icon_indicators(); |
2242 | 70eab221 | Kostas Papadimitriou | }); |
2243 | cce434fc | Kostas Papadimitriou | // register events where icons should get updated
|
2244 | cce434fc | Kostas Papadimitriou | |
2245 | a583aa29 | Kostas Papadimitriou | // hide action indicator image on mouse out, spinner appear, wave appear
|
2246 | a583aa29 | Kostas Papadimitriou | $(".action-container").live("mouseout", function(evn){ |
2247 | cce434fc | Kostas Papadimitriou | update_action_icon_indicators(); |
2248 | cce434fc | Kostas Papadimitriou | }); |
2249 | a583aa29 | Kostas Papadimitriou | |
2250 | cce434fc | Kostas Papadimitriou | $(".confirm_single").live("click", function(evn){ |
2251 | cce434fc | Kostas Papadimitriou | update_action_icon_indicators(); |
2252 | a583aa29 | Kostas Papadimitriou | }); |
2253 | a583aa29 | Kostas Papadimitriou | |
2254 | a583aa29 | Kostas Papadimitriou | $("img.spinner, img.wave").live('show', function(){ |
2255 | a583aa29 | Kostas Papadimitriou | $("div.action-indicator").hide(); |
2256 | a583aa29 | Kostas Papadimitriou | }); |
2257 | cce434fc | Kostas Papadimitriou | |
2258 | cce434fc | Kostas Papadimitriou | $(".confirm_single button.no").live('click', function(evn){ |
2259 | cce434fc | Kostas Papadimitriou | $("div.action-indicator", $(evn.currentTarget).parent().parent()).hide(); |
2260 | cce434fc | Kostas Papadimitriou | }); |
2261 | cce434fc | Kostas Papadimitriou | |
2262 | cce434fc | Kostas Papadimitriou | $(".confirm_multiple button.no").click(function(){ |
2263 | cce434fc | Kostas Papadimitriou | $("div.action-indicator").hide(); |
2264 | cce434fc | Kostas Papadimitriou | }); |
2265 | cce434fc | Kostas Papadimitriou | |
2266 | cce434fc | Kostas Papadimitriou | $(".confirm_multiple button.yes").click(function(){ |
2267 | cce434fc | Kostas Papadimitriou | $("div.action-indicator").hide(); |
2268 | cce434fc | Kostas Papadimitriou | }); |
2269 | a583aa29 | Kostas Papadimitriou | } |
2270 | a583aa29 | Kostas Papadimitriou | |
2271 | a583aa29 | Kostas Papadimitriou | function init_action_indicator_list_handlers() |
2272 | 23ca3bc9 | Christodoulos Psaltis | { |
2273 | 2339ea91 | Kostas Papadimitriou | var skip_actions = { 'connect':'','details':'' }; |
2274 | a583aa29 | Kostas Papadimitriou | |
2275 | a583aa29 | Kostas Papadimitriou | var has_pending_confirmation = function() |
2276 | a583aa29 | Kostas Papadimitriou | { |
2277 | a583aa29 | Kostas Papadimitriou | return $(".confirm_multiple:visible").length >= 1 |
2278 | a583aa29 | Kostas Papadimitriou | } |
2279 | 23ca3bc9 | Christodoulos Psaltis | |
2280 | a583aa29 | Kostas Papadimitriou | function update_action_indicator_icons(force_action, skip_pending) |
2281 | 23ca3bc9 | Christodoulos Psaltis | { |
2282 | a583aa29 | Kostas Papadimitriou | // pending action based on the element class
|
2283 | a583aa29 | Kostas Papadimitriou | var pending_action = $(".selected", $(".actions"))[0]; |
2284 | a583aa29 | Kostas Papadimitriou | var selected = get_list_view_selected_machine_rows();
|
2285 | a583aa29 | Kostas Papadimitriou | |
2286 | a583aa29 | Kostas Papadimitriou | // reset previous state
|
2287 | a583aa29 | Kostas Papadimitriou | list_view_hide_action_indicators(); |
2288 | 23ca3bc9 | Christodoulos Psaltis | |
2289 | a583aa29 | Kostas Papadimitriou | if (pending_action == undefined && !force_action) |
2290 | a583aa29 | Kostas Papadimitriou | { |
2291 | a583aa29 | Kostas Papadimitriou | // no action selected
|
2292 | a583aa29 | Kostas Papadimitriou | return;
|
2293 | a583aa29 | Kostas Papadimitriou | } |
2294 | 23ca3bc9 | Christodoulos Psaltis | |
2295 | a583aa29 | Kostas Papadimitriou | if (force_action != undefined) |
2296 | a583aa29 | Kostas Papadimitriou | { |
2297 | a583aa29 | Kostas Papadimitriou | // user forced action choice
|
2298 | a583aa29 | Kostas Papadimitriou | var action_class = force_action;
|
2299 | a583aa29 | Kostas Papadimitriou | } else {
|
2300 | a583aa29 | Kostas Papadimitriou | // retrieve action name (reboot, stop, etc..)
|
2301 | a583aa29 | Kostas Papadimitriou | var action_class = $(pending_action).attr("id").replace("action-",""); |
2302 | a583aa29 | Kostas Papadimitriou | } |
2303 | a583aa29 | Kostas Papadimitriou | |
2304 | a583aa29 | Kostas Papadimitriou | selected.each(function(index, el) {
|
2305 | a583aa29 | Kostas Papadimitriou | if (has_pending_confirmation() && skip_pending)
|
2306 | a583aa29 | Kostas Papadimitriou | { |
2307 | a583aa29 | Kostas Papadimitriou | return;
|
2308 | a583aa29 | Kostas Papadimitriou | } |
2309 | a583aa29 | Kostas Papadimitriou | var el = $(el); |
2310 | a583aa29 | Kostas Papadimitriou | var logo = $("img.list-logo", el); |
2311 | a583aa29 | Kostas Papadimitriou | $(".action-indicator", el).remove(); |
2312 | a583aa29 | Kostas Papadimitriou | var cls = "action-indicator " + action_class; |
2313 | a583aa29 | Kostas Papadimitriou | // add icon div
|
2314 | a583aa29 | Kostas Papadimitriou | logo.after('<div class="' + cls + '"></div>'); |
2315 | a583aa29 | Kostas Papadimitriou | // hide os logo
|
2316 | a583aa29 | Kostas Papadimitriou | $("img.list-logo", el).hide(); |
2317 | a583aa29 | Kostas Papadimitriou | }); |
2318 | 23ca3bc9 | Christodoulos Psaltis | } |
2319 | 23ca3bc9 | Christodoulos Psaltis | |
2320 | a583aa29 | Kostas Papadimitriou | // on mouseover we force the images to the hovered action
|
2321 | a583aa29 | Kostas Papadimitriou | $(".actions a").live("mouseover", function(evn) { |
2322 | a583aa29 | Kostas Papadimitriou | var el = $(evn.currentTarget); |
2323 | a583aa29 | Kostas Papadimitriou | if (!el.hasClass("enabled")) |
2324 | 23ca3bc9 | Christodoulos Psaltis | { |
2325 | a583aa29 | Kostas Papadimitriou | return;
|
2326 | a583aa29 | Kostas Papadimitriou | } |
2327 | a583aa29 | Kostas Papadimitriou | var action_class = el.attr("id").replace("action-",""); |
2328 | a583aa29 | Kostas Papadimitriou | if (action_class in skip_actions) |
2329 | a583aa29 | Kostas Papadimitriou | { |
2330 | a583aa29 | Kostas Papadimitriou | return;
|
2331 | a583aa29 | Kostas Papadimitriou | } |
2332 | a583aa29 | Kostas Papadimitriou | update_action_indicator_icons(action_class, false);
|
2333 | a583aa29 | Kostas Papadimitriou | }); |
2334 | 23ca3bc9 | Christodoulos Psaltis | |
2335 | cce434fc | Kostas Papadimitriou | |
2336 | cce434fc | Kostas Papadimitriou | // register events where icons should get updated
|
2337 | b35cda16 | Kostas Papadimitriou | $(".actions a.enabled").live("click", function(evn) { |
2338 | b35cda16 | Kostas Papadimitriou | // clear previous selections
|
2339 | b35cda16 | Kostas Papadimitriou | $("a.selected").removeClass("selected"); |
2340 | b35cda16 | Kostas Papadimitriou | |
2341 | a583aa29 | Kostas Papadimitriou | var el = $(evn.currentTarget); |
2342 | a583aa29 | Kostas Papadimitriou | el.addClass("selected");
|
2343 | a583aa29 | Kostas Papadimitriou | update_action_indicator_icons(undefined, false); |
2344 | a583aa29 | Kostas Papadimitriou | }); |
2345 | a583aa29 | Kostas Papadimitriou | |
2346 | a583aa29 | Kostas Papadimitriou | $(".actions a").live("mouseout", function(evn) { |
2347 | a583aa29 | Kostas Papadimitriou | update_action_indicator_icons(undefined, false); |
2348 | a583aa29 | Kostas Papadimitriou | }); |
2349 | 23ca3bc9 | Christodoulos Psaltis | |
2350 | a583aa29 | Kostas Papadimitriou | $(".confirm_multiple button.no").click(function(){ |
2351 | a583aa29 | Kostas Papadimitriou | list_view_hide_action_indicators(); |
2352 | a583aa29 | Kostas Papadimitriou | }); |
2353 | a583aa29 | Kostas Papadimitriou | |
2354 | a583aa29 | Kostas Papadimitriou | $(".confirm_multiple button.yes").click(function(){ |
2355 | a583aa29 | Kostas Papadimitriou | list_view_hide_action_indicators(); |
2356 | a583aa29 | Kostas Papadimitriou | }); |
2357 | 23ca3bc9 | Christodoulos Psaltis | |
2358 | a583aa29 | Kostas Papadimitriou | $("input[type=checkbox]").live('change', function(){ |
2359 | a583aa29 | Kostas Papadimitriou | // pending_actions will become empty on every checkbox click/change
|
2360 | a583aa29 | Kostas Papadimitriou | // line 154 machines_list.html
|
2361 | a583aa29 | Kostas Papadimitriou | pending_actions = []; |
2362 | a583aa29 | Kostas Papadimitriou | if (pending_actions.length == 0) |
2363 | a583aa29 | Kostas Papadimitriou | { |
2364 | a583aa29 | Kostas Papadimitriou | $(".confirm_multiple").hide(); |
2365 | 23ca3bc9 | Christodoulos Psaltis | $("a.selected").each(function(index, el){$(el).removeClass("selected")}); |
2366 | a583aa29 | Kostas Papadimitriou | } |
2367 | a583aa29 | Kostas Papadimitriou | update_action_indicator_icons(undefined, false); |
2368 | a583aa29 | Kostas Papadimitriou | }); |
2369 | 23ca3bc9 | Christodoulos Psaltis | |
2370 | a583aa29 | Kostas Papadimitriou | } |
2371 | a583aa29 | Kostas Papadimitriou | |
2372 | a583aa29 | Kostas Papadimitriou | function list_view_hide_action_indicators() |
2373 | a583aa29 | Kostas Papadimitriou | { |
2374 | a583aa29 | Kostas Papadimitriou | $("tr td .action-indicator").remove(); |
2375 | a583aa29 | Kostas Papadimitriou | $("tr td img.list-logo").show(); |
2376 | a583aa29 | Kostas Papadimitriou | } |
2377 | a583aa29 | Kostas Papadimitriou | |
2378 | a583aa29 | Kostas Papadimitriou | function get_list_view_selected_machine_rows() |
2379 | 23ca3bc9 | Christodoulos Psaltis | { |
2380 | a583aa29 | Kostas Papadimitriou | var table = $("table.list-machines"); |
2381 | a583aa29 | Kostas Papadimitriou | var rows = $("tr:has(input[type=checkbox]:checked)",table); |
2382 | a583aa29 | Kostas Papadimitriou | return rows;
|
2383 | a583aa29 | Kostas Papadimitriou | } |
2384 | 7af53e78 | Kostas Papadimitriou | |
2385 | 7af53e78 | Kostas Papadimitriou | // machines images utils
|
2386 | 7af53e78 | Kostas Papadimitriou | function set_machine_os_image(machine, machines_view, state, os, skip_reset_states, remove_state) { |
2387 | 7af53e78 | Kostas Papadimitriou | var views_map = {'single': '.single-image', 'icon': '.logo'}; |
2388 | 7af53e78 | Kostas Papadimitriou | var states_map = {'on': 'state1', 'off': 'state3', 'hover': 'state4', 'click': 'state2'} |
2389 | 7af53e78 | Kostas Papadimitriou | var sizes_map = {'single': 'large', 'icon': 'medium'} |
2390 | 7af53e78 | Kostas Papadimitriou | |
2391 | 7af53e78 | Kostas Papadimitriou | var size = sizes_map[machines_view];
|
2392 | 7af53e78 | Kostas Papadimitriou | var img_selector = views_map[machines_view];
|
2393 | 7af53e78 | Kostas Papadimitriou | var cls = states_map[state];
|
2394 | 40e77a49 | Kostas Papadimitriou | |
2395 | 40e77a49 | Kostas Papadimitriou | if (os === "unknown") { os = "okeanos" } ; |
2396 | 7af53e78 | Kostas Papadimitriou | var new_img = 'url("./static/icons/machines/' + size + '/' + os + '-sprite.png")'; |
2397 | 7af53e78 | Kostas Papadimitriou | |
2398 | 7af53e78 | Kostas Papadimitriou | var el = $(img_selector, machine); |
2399 | 7af53e78 | Kostas Papadimitriou | var current_img = el.css("backgroundImage"); |
2400 | 7af53e78 | Kostas Papadimitriou | if (os == undefined){ |
2401 | 7af53e78 | Kostas Papadimitriou | new_img = current_img; |
2402 | 7af53e78 | Kostas Papadimitriou | } |
2403 | 7af53e78 | Kostas Papadimitriou | |
2404 | 7af53e78 | Kostas Papadimitriou | // os changed
|
2405 | 7af53e78 | Kostas Papadimitriou | el.css("backgroundImage", new_img);
|
2406 | 7af53e78 | Kostas Papadimitriou | |
2407 | 7af53e78 | Kostas Papadimitriou | // reset current state
|
2408 | 7af53e78 | Kostas Papadimitriou | if (skip_reset_states === undefined) |
2409 | 7af53e78 | Kostas Papadimitriou | { |
2410 | 7af53e78 | Kostas Papadimitriou | el.removeClass("single-image-state1");
|
2411 | 7af53e78 | Kostas Papadimitriou | el.removeClass("single-image-state2");
|
2412 | 7af53e78 | Kostas Papadimitriou | el.removeClass("single-image-state3");
|
2413 | 23a4a31b | Kostas Papadimitriou | el.removeClass("single-image-state4");
|
2414 | 7af53e78 | Kostas Papadimitriou | } |
2415 | 7af53e78 | Kostas Papadimitriou | |
2416 | 7af53e78 | Kostas Papadimitriou | if (remove_state !== undefined) |
2417 | 7af53e78 | Kostas Papadimitriou | { |
2418 | 7af53e78 | Kostas Papadimitriou | remove_state = "single-image-" + states_map[remove_state];
|
2419 | 7af53e78 | Kostas Papadimitriou | el.removeClass(remove_state); |
2420 | 7af53e78 | Kostas Papadimitriou | return;
|
2421 | 7af53e78 | Kostas Papadimitriou | } |
2422 | 7af53e78 | Kostas Papadimitriou | |
2423 | 7af53e78 | Kostas Papadimitriou | // set proper state
|
2424 | 7af53e78 | Kostas Papadimitriou | el.addClass("single-image-" + cls);
|
2425 | 7af53e78 | Kostas Papadimitriou | } |
2426 | 7af53e78 | Kostas Papadimitriou | |
2427 | 29772683 | Kostas Papadimitriou | |
2428 | 29772683 | Kostas Papadimitriou | // generic info box
|
2429 | d790d9b7 | Kostas Papadimitriou | function show_feedback_form(msg, from_error) { |
2430 | 54417a11 | Kostas Papadimitriou | var box = $("#feedback-form"); |
2431 | 54417a11 | Kostas Papadimitriou | box.addClass("notification-box");
|
2432 | 54417a11 | Kostas Papadimitriou | |
2433 | 54417a11 | Kostas Papadimitriou | // initialize
|
2434 | 54417a11 | Kostas Papadimitriou | box.find(".form-container").show();
|
2435 | 54417a11 | Kostas Papadimitriou | box.find("textarea").val(""); |
2436 | 54417a11 | Kostas Papadimitriou | box.find(".message").hide();
|
2437 | d790d9b7 | Kostas Papadimitriou | |
2438 | d790d9b7 | Kostas Papadimitriou | var initial_msg = msg || undefined; |
2439 | d790d9b7 | Kostas Papadimitriou | |
2440 | 54417a11 | Kostas Papadimitriou | var triggers = $("a#feedbackbox").overlay({ |
2441 | 54417a11 | Kostas Papadimitriou | // some mask tweaks suitable for modal dialogs
|
2442 | 54417a11 | Kostas Papadimitriou | mask: '#666', |
2443 | 54417a11 | Kostas Papadimitriou | top: '10px', |
2444 | 54417a11 | Kostas Papadimitriou | fixed: false, |
2445 | 54417a11 | Kostas Papadimitriou | closeOnClick: false, |
2446 | 54417a11 | Kostas Papadimitriou | oneInstance: false, |
2447 | d790d9b7 | Kostas Papadimitriou | load: false |
2448 | 54417a11 | Kostas Papadimitriou | }); |
2449 | d790d9b7 | Kostas Papadimitriou | |
2450 | 54417a11 | Kostas Papadimitriou | |
2451 | d790d9b7 | Kostas Papadimitriou | if (initial_msg && from_error) {
|
2452 | d790d9b7 | Kostas Papadimitriou | // feedback form from ajax_error window
|
2453 | d790d9b7 | Kostas Papadimitriou | box.find("textarea").val(initial_msg);
|
2454 | d790d9b7 | Kostas Papadimitriou | $("a#feedbackbox").overlay().onClose(function(){window.location.reload()}); |
2455 | d790d9b7 | Kostas Papadimitriou | box.find("textarea").height(200); |
2456 | d790d9b7 | Kostas Papadimitriou | $("a#feedbackbox").overlay().onLoad(function(){box.find("textarea").focus().setCursorPosition(500);}); |
2457 | d790d9b7 | Kostas Papadimitriou | |
2458 | d790d9b7 | Kostas Papadimitriou | } |
2459 | d790d9b7 | Kostas Papadimitriou | |
2460 | 54417a11 | Kostas Papadimitriou | $("#feedback-form form").unbind("submit"); |
2461 | 54417a11 | Kostas Papadimitriou | $("#feedback-form form").submit(function(event) { |
2462 | 54417a11 | Kostas Papadimitriou | event.preventDefault(); |
2463 | 54417a11 | Kostas Papadimitriou | |
2464 | 54417a11 | Kostas Papadimitriou | // empty msg
|
2465 | 54417a11 | Kostas Papadimitriou | if ($("textarea.feedback-text").val().replace(/^\s*|\s*$/,"") == "") { |
2466 | 54417a11 | Kostas Papadimitriou | alert($(".empty-error-msg", this).text()); |
2467 | 54417a11 | Kostas Papadimitriou | return;
|
2468 | 54417a11 | Kostas Papadimitriou | } |
2469 | 54417a11 | Kostas Papadimitriou | |
2470 | 7991d0c5 | Kostas Papadimitriou | $("textarea.data-text", this).val("").val(get_user_data_json()); |
2471 | 54417a11 | Kostas Papadimitriou | |
2472 | 54417a11 | Kostas Papadimitriou | $.ajax({
|
2473 | 54417a11 | Kostas Papadimitriou | url: FEEDBACK_URL,
|
2474 | 54417a11 | Kostas Papadimitriou | data: $(this).serialize(), |
2475 | 54417a11 | Kostas Papadimitriou | type: "POST", |
2476 | 54417a11 | Kostas Papadimitriou | // show loading
|
2477 | 54417a11 | Kostas Papadimitriou | beforeSend: function() {box.find(".form-container").hide(); box.find(".sending").fadeIn() }, |
2478 | 54417a11 | Kostas Papadimitriou | // hide form
|
2479 | 54417a11 | Kostas Papadimitriou | complete: function() { box.find(".form-container").hide(); box.find(".sending").hide() }, |
2480 | 54417a11 | Kostas Papadimitriou | // on success display success message
|
2481 | 54417a11 | Kostas Papadimitriou | success: function() { box.find(".success").fadeIn(); box.find(".sending").hide() }, |
2482 | 54417a11 | Kostas Papadimitriou | // display error message
|
2483 | 54417a11 | Kostas Papadimitriou | error: function() { box.find(".errormsg").fadeIn(); box.find(".sending").hide() } |
2484 | 54417a11 | Kostas Papadimitriou | }) |
2485 | 54417a11 | Kostas Papadimitriou | }); |
2486 | 54417a11 | Kostas Papadimitriou | |
2487 | 54417a11 | Kostas Papadimitriou | $("a#feedbackbox").data('overlay').load(); |
2488 | d790d9b7 | Kostas Papadimitriou | |
2489 | d790d9b7 | Kostas Papadimitriou | // reset feedback_pending for ajax_errors
|
2490 | d790d9b7 | Kostas Papadimitriou | window.FEEDBACK_PENDING = false;
|
2491 | 54417a11 | Kostas Papadimitriou | return false; |
2492 | 54417a11 | Kostas Papadimitriou | } |
2493 | 54417a11 | Kostas Papadimitriou | |
2494 | 54417a11 | Kostas Papadimitriou | function get_user_data(extra_data) { |
2495 | 7991d0c5 | Kostas Papadimitriou | try {
|
2496 | 7991d0c5 | Kostas Papadimitriou | var last_req = $.extend({}, last_request); |
2497 | 7991d0c5 | Kostas Papadimitriou | |
2498 | 7991d0c5 | Kostas Papadimitriou | // reset xhr, might raise exceptions while converting to JSON
|
2499 | 7991d0c5 | Kostas Papadimitriou | last_req.xhr = {}; |
2500 | 7991d0c5 | Kostas Papadimitriou | } catch (err) {
|
2501 | 7991d0c5 | Kostas Papadimitriou | var last_req = {}
|
2502 | 7991d0c5 | Kostas Papadimitriou | } |
2503 | 7991d0c5 | Kostas Papadimitriou | |
2504 | 54417a11 | Kostas Papadimitriou | return $.extend({ |
2505 | 54417a11 | Kostas Papadimitriou | 'servers': $.extend({}, servers), |
2506 | 54417a11 | Kostas Papadimitriou | 'client': {'browser': $.browser, 'screen': $.extend({}, screen), 'client': $.client}, |
2507 | 7991d0c5 | Kostas Papadimitriou | 'dates': {'now': new Date, 'lastUpdate': changes_since_date}, |
2508 | 7991d0c5 | Kostas Papadimitriou | 'last_request': last_req
|
2509 | 54417a11 | Kostas Papadimitriou | }, extra_data); |
2510 | 54417a11 | Kostas Papadimitriou | } |
2511 | 29772683 | Kostas Papadimitriou | |
2512 | 7991d0c5 | Kostas Papadimitriou | function get_user_data_json() { |
2513 | 7991d0c5 | Kostas Papadimitriou | try {
|
2514 | 7991d0c5 | Kostas Papadimitriou | return JSON.stringify(get_user_data());
|
2515 | 7991d0c5 | Kostas Papadimitriou | } catch (err) {
|
2516 | 7991d0c5 | Kostas Papadimitriou | return JSON.stringify({'error': err}); |
2517 | 7991d0c5 | Kostas Papadimitriou | } |
2518 | 7991d0c5 | Kostas Papadimitriou | } |
2519 | 7991d0c5 | Kostas Papadimitriou | |
2520 | 29772683 | Kostas Papadimitriou | function msg_box(config) { |
2521 | 29772683 | Kostas Papadimitriou | var config = $.extend({'title':'Info message', 'content': 'this is an info message', 'ajax': false, 'extra':false}, config); |
2522 | 29772683 | Kostas Papadimitriou | // prepare the error message
|
2523 | 29772683 | Kostas Papadimitriou | // bring up success notification
|
2524 | 29772683 | Kostas Papadimitriou | |
2525 | 29772683 | Kostas Papadimitriou | var box = $("#notification-box"); |
2526 | 54417a11 | Kostas Papadimitriou | box.addClass("notification-box");
|
2527 | 29772683 | Kostas Papadimitriou | box.addClass('success');
|
2528 | 29772683 | Kostas Papadimitriou | box.removeClass('error');
|
2529 | 29772683 | Kostas Papadimitriou | |
2530 | 9eefb3a2 | Kostas Papadimitriou | var sel = function(s){return $(s, box)}; |
2531 | 81d11e38 | Kostas Papadimitriou | // reset texts
|
2532 | 81d11e38 | Kostas Papadimitriou | sel("h3 span.header-box").html(""); |
2533 | 81d11e38 | Kostas Papadimitriou | sel(".sub-text").html(""); |
2534 | 81d11e38 | Kostas Papadimitriou | sel(".password-container .password").html(""); |
2535 | 81d11e38 | Kostas Papadimitriou | sel("div.machine-now-building").html(""); |
2536 | 81d11e38 | Kostas Papadimitriou | |
2537 | 81d11e38 | Kostas Papadimitriou | |
2538 | 81d11e38 | Kostas Papadimitriou | // apply msg box contents
|
2539 | 9ed51b7e | Kostas Papadimitriou | sel("h3 span.header-box").html(config.title);
|
2540 | 29772683 | Kostas Papadimitriou | sel("div.machine-now-building").html(config.content);
|
2541 | 29772683 | Kostas Papadimitriou | sel(".popup-header").removeClass("popup-header-error"); |
2542 | 29772683 | Kostas Papadimitriou | box.removeClass("popup-border-error");
|
2543 | 29772683 | Kostas Papadimitriou | sel(".popup-details").removeClass("popup-details-error"); |
2544 | 29772683 | Kostas Papadimitriou | sel(".popup-separator").removeClass("popup-separator-error"); |
2545 | 29772683 | Kostas Papadimitriou | |
2546 | 29772683 | Kostas Papadimitriou | sel(".password-container").hide();
|
2547 | 29772683 | Kostas Papadimitriou | if (config.extra) {
|
2548 | 29772683 | Kostas Papadimitriou | sel(".password-container .password").html(config.extra);
|
2549 | 29772683 | Kostas Papadimitriou | sel(".password-container").show();
|
2550 | 29772683 | Kostas Papadimitriou | } |
2551 | de44fc6c | Kostas Papadimitriou | |
2552 | de44fc6c | Kostas Papadimitriou | var conf = {
|
2553 | 29772683 | Kostas Papadimitriou | // some mask tweaks suitable for modal dialogs
|
2554 | 29772683 | Kostas Papadimitriou | mask: '#666', |
2555 | 54417a11 | Kostas Papadimitriou | top: '10px', |
2556 | 29772683 | Kostas Papadimitriou | closeOnClick: false, |
2557 | 29772683 | Kostas Papadimitriou | oneInstance: false, |
2558 | 29772683 | Kostas Papadimitriou | load: false, |
2559 | de44fc6c | Kostas Papadimitriou | fixed: config.fixed || false, |
2560 | 29772683 | Kostas Papadimitriou | onClose: function () { |
2561 | 29772683 | Kostas Papadimitriou | // With partial refresh working properly,
|
2562 | 29772683 | Kostas Papadimitriou | // it is no longer necessary to refresh the whole page
|
2563 | 29772683 | Kostas Papadimitriou | // choose_view();
|
2564 | 29772683 | Kostas Papadimitriou | } |
2565 | de44fc6c | Kostas Papadimitriou | } |
2566 | de44fc6c | Kostas Papadimitriou | |
2567 | de44fc6c | Kostas Papadimitriou | var triggers = $("a#msgbox").overlay(conf); |
2568 | de44fc6c | Kostas Papadimitriou | |
2569 | de44fc6c | Kostas Papadimitriou | try {
|
2570 | de44fc6c | Kostas Papadimitriou | conf = $("a#msgbox").data('overlay').getConf(); |
2571 | de44fc6c | Kostas Papadimitriou | conf.fixed = config.fixed || false;
|
2572 | de44fc6c | Kostas Papadimitriou | } catch (err) {}
|
2573 | 29772683 | Kostas Papadimitriou | $("a#msgbox").data('overlay').load(); |
2574 | 29772683 | Kostas Papadimitriou | |
2575 | 29772683 | Kostas Papadimitriou | var parse_data = config.parse_data || false; |
2576 | 19e01943 | Kostas Papadimitriou | var load_html = config.html || false; |
2577 | 19e01943 | Kostas Papadimitriou | var user_success = config.success || false; |
2578 | 19e01943 | Kostas Papadimitriou | config.ajax = config.ajax || {}; |
2579 | 19e01943 | Kostas Papadimitriou | |
2580 | 19e01943 | Kostas Papadimitriou | // requested to show remote data in msg_box
|
2581 | 29772683 | Kostas Papadimitriou | if (config.ajax) {
|
2582 | 19e01943 | Kostas Papadimitriou | $.ajax($.extend({ |
2583 | 29772683 | Kostas Papadimitriou | url:config.ajax,
|
2584 | 29772683 | Kostas Papadimitriou | success: function(data){ |
2585 | 19e01943 | Kostas Papadimitriou | // we want to get our data parsed before
|
2586 | 19e01943 | Kostas Papadimitriou | // placing them in content
|
2587 | 29772683 | Kostas Papadimitriou | if (parse_data) {
|
2588 | 29772683 | Kostas Papadimitriou | data = parse_data(data); |
2589 | 29772683 | Kostas Papadimitriou | } |
2590 | 29772683 | Kostas Papadimitriou | |
2591 | 19e01943 | Kostas Papadimitriou | // no json response
|
2592 | 19e01943 | Kostas Papadimitriou | // load html body
|
2593 | 19e01943 | Kostas Papadimitriou | if (load_html) {
|
2594 | 19e01943 | Kostas Papadimitriou | sel("div.machine-now-building").html(data);
|
2595 | 19e01943 | Kostas Papadimitriou | } else {
|
2596 | 29772683 | Kostas Papadimitriou | |
2597 | 54417a11 | Kostas Papadimitriou | if (data.title) {
|
2598 | 19e01943 | Kostas Papadimitriou | sel("h3 span.header-box").text(data.title);
|
2599 | 54417a11 | Kostas Papadimitriou | } |
2600 | 29772683 | Kostas Papadimitriou | |
2601 | 19e01943 | Kostas Papadimitriou | if (data.content) {
|
2602 | 19e01943 | Kostas Papadimitriou | sel("div.machine-now-building").html(data.content);
|
2603 | 19e01943 | Kostas Papadimitriou | } |
2604 | 19e01943 | Kostas Papadimitriou | if (data.extra) {
|
2605 | 19e01943 | Kostas Papadimitriou | sel(".password-container .password").html(data.extra);
|
2606 | 19e01943 | Kostas Papadimitriou | sel(".password-container").show();
|
2607 | 19e01943 | Kostas Papadimitriou | } |
2608 | 9ed51b7e | Kostas Papadimitriou | if (data.subinfo) {
|
2609 | 9ed51b7e | Kostas Papadimitriou | sel(".sub-text").html(data.subinfo);
|
2610 | 9ed51b7e | Kostas Papadimitriou | } else {
|
2611 | 9ed51b7e | Kostas Papadimitriou | sel(".sub-text").html(""); |
2612 | 9ed51b7e | Kostas Papadimitriou | } |
2613 | 29772683 | Kostas Papadimitriou | } |
2614 | 19e01943 | Kostas Papadimitriou | |
2615 | 19e01943 | Kostas Papadimitriou | if (user_success) {
|
2616 | 19e01943 | Kostas Papadimitriou | user_success($("div.machine-now-building")); |
2617 | 19e01943 | Kostas Papadimitriou | } |
2618 | 54417a11 | Kostas Papadimitriou | }, |
2619 | 54417a11 | Kostas Papadimitriou | error: function(xhr, status, err) { |
2620 | 7991d0c5 | Kostas Papadimitriou | ajax_error(-519, "UI Error", "Machine connect", err); |
2621 | dc12a449 | Kostas Papadimitriou | } |
2622 | 19e01943 | Kostas Papadimitriou | }, config.ajax_config)); |
2623 | 29772683 | Kostas Papadimitriou | } |
2624 | 29772683 | Kostas Papadimitriou | return false; |
2625 | 29772683 | Kostas Papadimitriou | } |
2626 | 19e01943 | Kostas Papadimitriou | |
2627 | 19e01943 | Kostas Papadimitriou | |
2628 | 19e01943 | Kostas Papadimitriou | function show_invitations() { |
2629 | 19e01943 | Kostas Papadimitriou | |
2630 | 19e01943 | Kostas Papadimitriou | handle_invitations = function(el) { |
2631 | a697f671 | Kostas Papadimitriou | |
2632 | a697f671 | Kostas Papadimitriou | // proper class to identify the overlay block
|
2633 | 19e01943 | Kostas Papadimitriou | el.addClass("invitations");
|
2634 | a697f671 | Kostas Papadimitriou | |
2635 | 19e01943 | Kostas Papadimitriou | var cont = el;
|
2636 | 19e01943 | Kostas Papadimitriou | var form = $(el).find("form"); |
2637 | f2141829 | Kostas Papadimitriou | |
2638 | f2141829 | Kostas Papadimitriou | // remove garbage rows that stay in DOM between requests
|
2639 | f2141829 | Kostas Papadimitriou | $(".removable-field-row:hidden").remove(); |
2640 | 40a87146 | Kostas Papadimitriou | |
2641 | a697f671 | Kostas Papadimitriou | // avoid buggy behaviour, close all overlays if something went wrong
|
2642 | 40a87146 | Kostas Papadimitriou | try {
|
2643 | a697f671 | Kostas Papadimitriou | // form is in content (form is not displayed if user has no invitations)
|
2644 | a697f671 | Kostas Papadimitriou | if ($("#invform #removable-name-container-1").length) { |
2645 | a697f671 | Kostas Papadimitriou | $("#invform #removable-name-container-1").dynamicField(); |
2646 | a697f671 | Kostas Papadimitriou | } |
2647 | 40a87146 | Kostas Papadimitriou | } catch (err) {
|
2648 | 40a87146 | Kostas Papadimitriou | close_all_overlays(); |
2649 | 40a87146 | Kostas Papadimitriou | } |
2650 | d389b440 | Kostas Papadimitriou | |
2651 | a697f671 | Kostas Papadimitriou | // we copy/paste it on the title no need to show it twice
|
2652 | d389b440 | Kostas Papadimitriou | $(".invitations-left").hide(); |
2653 | a697f671 | Kostas Papadimitriou | |
2654 | a697f671 | Kostas Papadimitriou | // reset title
|
2655 | 54417a11 | Kostas Papadimitriou | $("#notification-box .header-box").html(""); |
2656 | 67921b5c | Kostas Papadimitriou | $("#notification-box .header-box").html(window.INVITATIONS_TITLE + " " + $($(".invitations-left")[0]).text()); |
2657 | d389b440 | Kostas Papadimitriou | |
2658 | a697f671 | Kostas Papadimitriou | // handle form submit
|
2659 | 19e01943 | Kostas Papadimitriou | form.submit(function(evn){
|
2660 | 19e01943 | Kostas Papadimitriou | evn.preventDefault(); |
2661 | a697f671 | Kostas Papadimitriou | |
2662 | a697f671 | Kostas Papadimitriou | // do the post
|
2663 | f2141829 | Kostas Papadimitriou | $.post(form.attr("action"), form.serialize(), function(data) { |
2664 | a697f671 | Kostas Papadimitriou | // replace data
|
2665 | eabbd5b7 | Kostas Papadimitriou | $(cont).html(data);
|
2666 | a697f671 | Kostas Papadimitriou | |
2667 | a697f671 | Kostas Papadimitriou | // append all handlers again (new html data need to redo all changes)
|
2668 | eabbd5b7 | Kostas Papadimitriou | handle_invitations(cont); |
2669 | f2141829 | Kostas Papadimitriou | }); |
2670 | a697f671 | Kostas Papadimitriou | |
2671 | 19e01943 | Kostas Papadimitriou | return false; |
2672 | 19e01943 | Kostas Papadimitriou | }); |
2673 | 19e01943 | Kostas Papadimitriou | } |
2674 | a697f671 | Kostas Papadimitriou | |
2675 | a697f671 | Kostas Papadimitriou | // first time clicked (show the msg box with /invitations content)
|
2676 | de44fc6c | Kostas Papadimitriou | msg_box({ |
2677 | de44fc6c | Kostas Papadimitriou | title:window.INVITATIONS_TITLE,
|
2678 | de44fc6c | Kostas Papadimitriou | content:'', |
2679 | de44fc6c | Kostas Papadimitriou | fixed: false, |
2680 | de44fc6c | Kostas Papadimitriou | ajax:INVITATIONS_URL,
|
2681 | de44fc6c | Kostas Papadimitriou | html:true, |
2682 | de44fc6c | Kostas Papadimitriou | success: function(el){ |
2683 | de44fc6c | Kostas Papadimitriou | handle_invitations(el) |
2684 | de44fc6c | Kostas Papadimitriou | } |
2685 | 19e01943 | Kostas Papadimitriou | }); |
2686 | 19e01943 | Kostas Papadimitriou | } |
2687 | dc12a449 | Kostas Papadimitriou | |
2688 | f277a1cd | Kostas Papadimitriou | |
2689 | f277a1cd | Kostas Papadimitriou | function get_short_v6(v6, parts_to_keep) { |
2690 | f277a1cd | Kostas Papadimitriou | var parts = v6.split(":"); |
2691 | f277a1cd | Kostas Papadimitriou | var new_parts = parts.slice(parts.length - parts_to_keep);
|
2692 | f277a1cd | Kostas Papadimitriou | return new_parts.join(":"); |
2693 | f277a1cd | Kostas Papadimitriou | } |
2694 | f277a1cd | Kostas Papadimitriou | |
2695 | f277a1cd | Kostas Papadimitriou | function fix_v6_addresses() { |
2696 | f277a1cd | Kostas Papadimitriou | |
2697 | f277a1cd | Kostas Papadimitriou | // what to prepend
|
2698 | 99d2c273 | Kostas Papadimitriou | var match = "..."; |
2699 | f277a1cd | Kostas Papadimitriou | // long ip min length
|
2700 | f277a1cd | Kostas Papadimitriou | var limit = 20; |
2701 | f277a1cd | Kostas Papadimitriou | // parts to show after the transformation
|
2702 | f277a1cd | Kostas Papadimitriou | // (from the end)
|
2703 | f277a1cd | Kostas Papadimitriou | var parts_to_keep_from_end = 4; |
2704 | f277a1cd | Kostas Papadimitriou | |
2705 | f277a1cd | Kostas Papadimitriou | $(".ipv6-text").each(function(index, el){ |
2706 | f277a1cd | Kostas Papadimitriou | var el = $(el); |
2707 | f277a1cd | Kostas Papadimitriou | var ip = $(el).text(); |
2708 | f277a1cd | Kostas Papadimitriou | |
2709 | f277a1cd | Kostas Papadimitriou | // transformation not applyied
|
2710 | f277a1cd | Kostas Papadimitriou | // FIXME: use $.data for the condition
|
2711 | f277a1cd | Kostas Papadimitriou | if (ip.indexOf(match) == -1 && ip != "pending") { |
2712 | f277a1cd | Kostas Papadimitriou | |
2713 | f277a1cd | Kostas Papadimitriou | // only too long ips
|
2714 | f277a1cd | Kostas Papadimitriou | if (ip.length > 20) { |
2715 | f277a1cd | Kostas Papadimitriou | $(el).data("ipstring", ip); |
2716 | f277a1cd | Kostas Papadimitriou | $(el).text(match + get_short_v6(ip, parts_to_keep_from_end));
|
2717 | f277a1cd | Kostas Papadimitriou | $(el).attr("title", ip); |
2718 | 6b1c18d5 | Kostas Papadimitriou | $(el).tooltip({'tipClass':'tooltip ipv6-tip', 'position': 'center center'}); |
2719 | f277a1cd | Kostas Papadimitriou | } |
2720 | f277a1cd | Kostas Papadimitriou | } else {
|
2721 | f277a1cd | Kostas Papadimitriou | if (ip.indexOf(match) == 0) { |
2722 | f277a1cd | Kostas Papadimitriou | } else {
|
2723 | f277a1cd | Kostas Papadimitriou | // not a long ip anymore
|
2724 | f277a1cd | Kostas Papadimitriou | $(el).data("ipstring", undefined); |
2725 | f277a1cd | Kostas Papadimitriou | $(el).css({'text-decoration':'none'}); |
2726 | f277a1cd | Kostas Papadimitriou | |
2727 | f277a1cd | Kostas Papadimitriou | if ($(el).data('tooltip')) { |
2728 | f277a1cd | Kostas Papadimitriou | $(el).data('tooltip').show = function () {}; |
2729 | f277a1cd | Kostas Papadimitriou | } |
2730 | f277a1cd | Kostas Papadimitriou | } |
2731 | f277a1cd | Kostas Papadimitriou | } |
2732 | f277a1cd | Kostas Papadimitriou | }); |
2733 | f277a1cd | Kostas Papadimitriou | } |
2734 | f277a1cd | Kostas Papadimitriou | |
2735 | 31279d33 | Kostas Papadimitriou | function fix_server_name(str, limit, append) { |
2736 | 31279d33 | Kostas Papadimitriou | limit = limit || 30;
|
2737 | 31279d33 | Kostas Papadimitriou | append = append || "...";
|
2738 | 31279d33 | Kostas Papadimitriou | |
2739 | 31279d33 | Kostas Papadimitriou | if (str.length > limit) {
|
2740 | 31279d33 | Kostas Papadimitriou | str = str.substring(0,limit-append.length) + append;
|
2741 | 31279d33 | Kostas Papadimitriou | } |
2742 | 31279d33 | Kostas Papadimitriou | return str;
|
2743 | 31279d33 | Kostas Papadimitriou | } |
2744 | e9e7fe51 | Kostas Papadimitriou | |
2745 | e9e7fe51 | Kostas Papadimitriou | function show_machine_network_indicator(vm_id, network_id) { |
2746 | e9e7fe51 | Kostas Papadimitriou | var el = $("div#net-" + network_id + '-server-' + vm_id); |
2747 | e9e7fe51 | Kostas Papadimitriou | el.find(".network-progress-indicator").show();
|
2748 | e9e7fe51 | Kostas Papadimitriou | } |
2749 | e9e7fe51 | Kostas Papadimitriou | |
2750 | e9e7fe51 | Kostas Papadimitriou | |
2751 | e9e7fe51 | Kostas Papadimitriou | function get_firewall_profile(vm_id) { |
2752 | e9e7fe51 | Kostas Papadimitriou | var vm = get_machine(vm_id);
|
2753 | e9e7fe51 | Kostas Papadimitriou | |
2754 | e9e7fe51 | Kostas Papadimitriou | try {
|
2755 | e9e7fe51 | Kostas Papadimitriou | return vm.addresses.values[0].firewallProfile; |
2756 | e9e7fe51 | Kostas Papadimitriou | } catch (err) {
|
2757 | e9e7fe51 | Kostas Papadimitriou | return undefined; |
2758 | e9e7fe51 | Kostas Papadimitriou | } |
2759 | e9e7fe51 | Kostas Papadimitriou | } |