Statistics
| Branch: | Tag: | Revision:

root / ui / templates / machines_single.html @ c0f6fb49

History | View | Annotate | Download (37.3 kB)

1 a5bc3755 Vangelis Koukis
<!--
2 a5bc3755 Vangelis Koukis
Copyright 2011 GRNET S.A. All rights reserved.
3 a5bc3755 Vangelis Koukis

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 a5bc3755 Vangelis Koukis

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 a5bc3755 Vangelis Koukis

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 a5bc3755 Vangelis Koukis

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 a5bc3755 Vangelis Koukis

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 a5bc3755 Vangelis Koukis
36 f533f224 Vangelis Koukis
{% load i18n %}
37 f533f224 Vangelis Koukis
38 f533f224 Vangelis Koukis
<!-- the single view -->
39 f533f224 Vangelis Koukis
<div id="machinesview-single" class="single">
40 f533f224 Vangelis Koukis
    <div class="large-spinner"></div>
41 f533f224 Vangelis Koukis
    <div class="single-container" id="machine-container-template" style="display:none;" >
42 dc3e66b9 Mike Muzurakis
        <div class="upper">
43 dc3e66b9 Mike Muzurakis
            <div class="column1">
44 5c5b3e58 Christodoulos Psaltis
                <div class='connect-border' title='{% trans 'Connect  machine' %}'></div>
45 5c5b3e58 Christodoulos Psaltis
                <div class='connect-arrow' title='{% trans 'Connect  machine' %}'></div>
46 7af53e78 Kostas Papadimitriou
                <div class="single-image" />
47 dc3e66b9 Mike Muzurakis
                <div class="state">
48 dc3e66b9 Mike Muzurakis
                    <span class="state-label">{% trans "Running" %}</span>
49 dc3e66b9 Mike Muzurakis
                    <div class="indicators">
50 dc3e66b9 Mike Muzurakis
                        <div class="indicator1"></div>
51 dc3e66b9 Mike Muzurakis
                        <div class="indicator2"></div>
52 dc3e66b9 Mike Muzurakis
                        <div class="indicator3"></div>
53 dc3e66b9 Mike Muzurakis
                        <div class="indicator4"></div>
54 dc3e66b9 Mike Muzurakis
                    </div>
55 a583aa29 Kostas Papadimitriou
                    <div class="action-indicator" style="display:none"></div>
56 dc3e66b9 Mike Muzurakis
                    <img class="spinner" style="display:none" src="static/icons/indicators/medium/progress.gif" />
57 dc3e66b9 Mike Muzurakis
                    <img class="wave" style="display:none" src="static/icons/indicators/medium/wave.gif" />
58 dc3e66b9 Mike Muzurakis
                </div>
59 dc3e66b9 Mike Muzurakis
            </div>
60 dc3e66b9 Mike Muzurakis
            <div class="column2">
61 dc3e66b9 Mike Muzurakis
                <div class="machine-labels">
62 dc3e66b9 Mike Muzurakis
                    <div class="machine-label name">{% trans "Name" %}:</div>
63 dc3e66b9 Mike Muzurakis
                    <div class="machine-label cpus">{% trans "CPUs" %}:</div>
64 dc3e66b9 Mike Muzurakis
                    <div class="machine-label ram">{% trans "RAM (MB)" %}:</div>
65 dc3e66b9 Mike Muzurakis
                    <div class="machine-label disk">{% trans "System Disk (GB)" %}:</div>
66 dc3e66b9 Mike Muzurakis
                    <div class="machine-label image-name">{% trans "Image Name" %}:</div>
67 dc3e66b9 Mike Muzurakis
                    <div class="machine-label image-size">{% trans "Image Size (GB)" %}:</div>
68 dc3e66b9 Mike Muzurakis
                    <div class="machine-label ipv4">{% trans "Public IPv4" %}:</div>
69 dc3e66b9 Mike Muzurakis
                    <div class="machine-label ipv6">{% trans "Public IPv6" %}:</div>
70 dc3e66b9 Mike Muzurakis
                </div>
71 dc3e66b9 Mike Muzurakis
                <div class="machine-details">
72 dc3e66b9 Mike Muzurakis
                    <div class="machine-detail name">My Desktop</div>
73 dc3e66b9 Mike Muzurakis
                    <div class="machine-detail cpus">4</div>
74 dc3e66b9 Mike Muzurakis
                    <div class="machine-detail ram">2048</div>
75 dc3e66b9 Mike Muzurakis
                    <div class="machine-detail disk">100</div>
76 dc3e66b9 Mike Muzurakis
                    <div class="machine-detail image-name">windos_XP_blah_blah</div>
77 dc3e66b9 Mike Muzurakis
                    <div class="machine-detail image-size">2.3</div>
78 dc3e66b9 Mike Muzurakis
                    <div class="machine-detail ipv4">no ipv4</div>
79 dc3e66b9 Mike Muzurakis
                    <div class="machine-detail ipv6">2001:db8:1f70::999:de8:7648:6e8</div>
80 1e7c8953 Mike Muzurakis
                </div>
81 1e7c8953 Mike Muzurakis
                <div class="tags">
82 1e7c8953 Mike Muzurakis
                    <div class="tags-header">
83 b576496b Mike Muzurakis
                        <div class="tags-label">{% trans "Tags" %}</div>
84 b576496b Mike Muzurakis
                        <div class="toggler down"></div>
85 1e7c8953 Mike Muzurakis
                    </div>
86 1e7c8953 Mike Muzurakis
                    <div class="tags-content">
87 b576496b Mike Muzurakis
                        <div class="metadata-keys-container">
88 b576496b Mike Muzurakis
                            <div class="scrollable vertical">
89 b576496b Mike Muzurakis
                                <div class="items">
90 b576496b Mike Muzurakis
                                </div>
91 b576496b Mike Muzurakis
                            </div>
92 b576496b Mike Muzurakis
                            <div class="metadata-actions">
93 b576496b Mike Muzurakis
                                <div class="prev"></div>
94 b576496b Mike Muzurakis
                                <div class="next"></div>
95 b576496b Mike Muzurakis
                            </div>
96 b576496b Mike Muzurakis
                        </div>
97 b39f68e6 Mike Muzurakis
                        <a href="#" class="manage-metadata">{% trans "Manage Tags" %}</a>
98 dc3e66b9 Mike Muzurakis
                    </div>
99 dc3e66b9 Mike Muzurakis
                </div>
100 f533f224 Vangelis Koukis
            </div>
101 f533f224 Vangelis Koukis
            <div class="single-actions">
102 5e5df8fe Christodoulos Psaltis
                <div class="action-container start">
103 5e5df8fe Christodoulos Psaltis
                    <div class="single-action action-start">{% trans "Start" %}</div>
104 5e5df8fe Christodoulos Psaltis
                    <div class="confirm_single">
105 5e5df8fe Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
106 5e5df8fe Christodoulos Psaltis
                        <button class="no">X</button>
107 5e5df8fe Christodoulos Psaltis
                    </div>
108 5e5df8fe Christodoulos Psaltis
                </div>
109 5e5df8fe Christodoulos Psaltis
                <div class="action-container reboot">
110 5e5df8fe Christodoulos Psaltis
                    <div class="single-action action-reboot">{% trans "Reboot" %}</div>
111 5e5df8fe Christodoulos Psaltis
                    <div class="confirm_single">
112 5e5df8fe Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
113 5e5df8fe Christodoulos Psaltis
                        <button class="no">X</button>
114 5e5df8fe Christodoulos Psaltis
                    </div>
115 5e5df8fe Christodoulos Psaltis
                </div>
116 5e5df8fe Christodoulos Psaltis
                <div class="action-container shutdown">
117 5e5df8fe Christodoulos Psaltis
                    <div class="single-action action-shutdown">{% trans "Shutdown" %}</div>
118 5e5df8fe Christodoulos Psaltis
                    <div class="confirm_single">
119 5e5df8fe Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
120 5e5df8fe Christodoulos Psaltis
                        <button class="no">X</button>
121 5e5df8fe Christodoulos Psaltis
                    </div>
122 5e5df8fe Christodoulos Psaltis
                </div>
123 5e5df8fe Christodoulos Psaltis
                <div class="action-container console">
124 5e5df8fe Christodoulos Psaltis
                    <div class="single-action action-console">{% trans "Console" %}</div>
125 5e5df8fe Christodoulos Psaltis
                    <div class="confirm_single">
126 5e5df8fe Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
127 5e5df8fe Christodoulos Psaltis
                        <button class="no">X</button>
128 5e5df8fe Christodoulos Psaltis
                    </div>
129 5e5df8fe Christodoulos Psaltis
                </div>
130 5e5df8fe Christodoulos Psaltis
                <div class="action-container destroy">
131 5e5df8fe Christodoulos Psaltis
                    <div class="single-action action-destroy">{% trans "Destroy" %}</div>
132 5e5df8fe Christodoulos Psaltis
                    <div class="confirm_single">
133 5e5df8fe Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
134 5e5df8fe Christodoulos Psaltis
                        <button class="no">X</button>
135 5e5df8fe Christodoulos Psaltis
                    </div>
136 5e5df8fe Christodoulos Psaltis
                </div>
137 f533f224 Vangelis Koukis
            </div>
138 dc3e66b9 Mike Muzurakis
            <div class="action_error" align="center">
139 5e5df8fe Christodoulos Psaltis
                {% trans "<span>Error</span> on" %} <span class="action">{% trans "error action" %}</span>
140 dc3e66b9 Mike Muzurakis
                <span class="code"></span>
141 dc3e66b9 Mike Muzurakis
                <span class="message"></span>
142 dc3e66b9 Mike Muzurakis
                <button class="details">{% trans "Details" %}</button>
143 f533f224 Vangelis Koukis
            </div>
144 f533f224 Vangelis Koukis
        </div>
145 dc3e66b9 Mike Muzurakis
        <div class="lower">
146 a23fd087 Mike Muzurakis
            <div class="single-cpu">
147 a23fd087 Mike Muzurakis
                <div class="cpu-usage">
148 2b56fe60 Christodoulos Psaltis
                    {% trans "CPU Utilization" %}
149 a23fd087 Mike Muzurakis
                </div>
150 a23fd087 Mike Muzurakis
                <div class="cpu-graph">
151 e7cf83b1 Christodoulos Psaltis
                    <img src="http://stats.okeanos.grnet.gr/test/cpu-ts.png" class="stats" />
152 a23fd087 Mike Muzurakis
                </div>
153 dc3e66b9 Mike Muzurakis
            </div>
154 a23fd087 Mike Muzurakis
            <div class="single-network">
155 a23fd087 Mike Muzurakis
                <div class="network-usage">
156 2b56fe60 Christodoulos Psaltis
                    {% trans "Network Utilization" %}
157 a23fd087 Mike Muzurakis
                </div>
158 a23fd087 Mike Muzurakis
                <div class="network-graph">
159 e7cf83b1 Christodoulos Psaltis
                    <img src="http://stats.okeanos.grnet.gr/test/net-ts.png" class="stats" />
160 a23fd087 Mike Muzurakis
                </div>
161 dc3e66b9 Mike Muzurakis
            </div>
162 f533f224 Vangelis Koukis
        </div>
163 f533f224 Vangelis Koukis
    </div>
164 bf0bedc2 Mike Muzurakis
    <div class="column3" style="display:none;">
165 f533f224 Vangelis Koukis
        <div class="controls">
166 91965c28 Mike Muzurakis
            <div class="previous" style="display:block;">
167 5e5df8fe Christodoulos Psaltis
                <div class="prev-arrow"></div>
168 d2f03cb3 Mike Muzurakis
                <div class="prev-label">
169 d2f03cb3 Mike Muzurakis
                    {% trans "previous" %}
170 d2f03cb3 Mike Muzurakis
                </div>
171 f533f224 Vangelis Koukis
            </div>
172 91965c28 Mike Muzurakis
            <div class="next" style="display:block;">
173 5e5df8fe Christodoulos Psaltis
                <div class="next-arrow"></div>
174 d2f03cb3 Mike Muzurakis
                <div class="next-label">
175 d2f03cb3 Mike Muzurakis
                    {% trans "next" %}
176 d2f03cb3 Mike Muzurakis
                </div>
177 f533f224 Vangelis Koukis
            </div>
178 f533f224 Vangelis Koukis
        </div>
179 f533f224 Vangelis Koukis
        <div class="separator">
180 f533f224 Vangelis Koukis
        </div>
181 f533f224 Vangelis Koukis
        <div class="servers">
182 f533f224 Vangelis Koukis
            <div class="server-name" id="servers-widget-template" style="display:none;">server1</div>
183 f533f224 Vangelis Koukis
        </div>
184 f533f224 Vangelis Koukis
    </div>
185 f533f224 Vangelis Koukis
</div>
186 f533f224 Vangelis Koukis
187 f533f224 Vangelis Koukis
<script>
188 f533f224 Vangelis Koukis

189 a583aa29 Kostas Papadimitriou
init_action_indicator_handlers('single');
190 a583aa29 Kostas Papadimitriou

191 b576496b Mike Muzurakis
//hide the all of the tags contents
192 b576496b Mike Muzurakis
$("#machinesview-single.single .tags-content").hide();
193 b576496b Mike Muzurakis

194 7af53e78 Kostas Papadimitriou
// handle connect machine image states
195 7af53e78 Kostas Papadimitriou
$("div.connect-arrow, .single-image").live('mouseenter',
196 7af53e78 Kostas Papadimitriou
    function() {
197 7af53e78 Kostas Papadimitriou
        // ugly check to see if machine is running
198 23a4a31b Kostas Papadimitriou
        if ($(this).parent().find(".connect-arrow:visible").length == 0) { return };
199 7af53e78 Kostas Papadimitriou
        set_machine_os_image($(this).parent().parent(), "single", "hover", undefined, 1);
200 097b720a Kostas Papadimitriou
        var parent = $(this).parent().parent();
201 097b720a Kostas Papadimitriou
        parent.find(".connect-arrow").show().addClass('border-hover');
202 7af53e78 Kostas Papadimitriou
    });
203 7af53e78 Kostas Papadimitriou

204 7af53e78 Kostas Papadimitriou
$("div.connect-arrow, .single-image").live('mouseleave',
205 7af53e78 Kostas Papadimitriou
    function() {
206 23a4a31b Kostas Papadimitriou
        if ($(this).parent().find(".connect-arrow:visible").length == 0) { return };
207 7af53e78 Kostas Papadimitriou
        set_machine_os_image($(this).parent().parent(), "single", "hover", undefined, 1, "hover");
208 23a4a31b Kostas Papadimitriou
        set_machine_os_image($(this).parent().parent(), "single", "click", undefined, 1, "click");
209 097b720a Kostas Papadimitriou
        var parent = $(this).parent().parent();
210 097b720a Kostas Papadimitriou
        parent.find(".connect-arrow").removeClass('border-hover');
211 7af53e78 Kostas Papadimitriou
    });
212 7af53e78 Kostas Papadimitriou

213 7af53e78 Kostas Papadimitriou
$("div.connect-arrow, .single-image").live('mousedown',
214 7af53e78 Kostas Papadimitriou
    function() {
215 23a4a31b Kostas Papadimitriou
        if ($(this).parent().find(".connect-arrow:visible").length == 0) { return };
216 7af53e78 Kostas Papadimitriou
        set_machine_os_image($(this).parent().parent(), "single", "click", undefined, 1);
217 7af53e78 Kostas Papadimitriou
    });
218 7af53e78 Kostas Papadimitriou

219 7af53e78 Kostas Papadimitriou
$("div.connect-arrow, .single-image").live('mouseup',
220 7af53e78 Kostas Papadimitriou
    function() {
221 23a4a31b Kostas Papadimitriou
        if ($(this).parent().find(".connect-arrow:visible").length == 0) { return };
222 7af53e78 Kostas Papadimitriou
        set_machine_os_image($(this).parent().parent(), "single", "click", undefined, 1, "click");
223 7af53e78 Kostas Papadimitriou
    });
224 7af53e78 Kostas Papadimitriou

225 b576496b Mike Muzurakis
//toggle the component with class tags-content
226 b576496b Mike Muzurakis
$("#machinesview-single.single div.tags-header").live('click', function() {
227 b576496b Mike Muzurakis
    if ($(this).find('.toggler').hasClass('up')) {
228 b576496b Mike Muzurakis
        $(this).find('.toggler').removeClass('up');
229 b576496b Mike Muzurakis
        $(this).find('.toggler').addClass('down');
230 b576496b Mike Muzurakis
        $(this).find('.tags-label').removeClass('darker');
231 b576496b Mike Muzurakis
        $(this).parent().parent().removeClass('light-background');
232 b576496b Mike Muzurakis
    } else {
233 b576496b Mike Muzurakis
        $(this).find('.toggler').removeClass('down');
234 b576496b Mike Muzurakis
        $(this).find('.toggler').addClass('up');
235 b576496b Mike Muzurakis
        $(this).find('.tags-label').addClass('darker');
236 b576496b Mike Muzurakis
        $(this).parent().parent().addClass('light-background');
237 b576496b Mike Muzurakis
    }
238 b576496b Mike Muzurakis
    $(this).parent().parent().find(".tags-content").slideToggle(600);
239 b576496b Mike Muzurakis
    return false;
240 b576496b Mike Muzurakis
});
241 f533f224 Vangelis Koukis

242 dc3e66b9 Mike Muzurakis
// indicate that the requested action was not completed
243 dc3e66b9 Mike Muzurakis
function display_failure(status, serverID, action, responseText) {
244 dc3e66b9 Mike Muzurakis
    $('#machinesview-single.single #'+serverID+ ' .spinner').hide();
245 dc3e66b9 Mike Muzurakis
    $('#machinesview-single.single #'+serverID+ ' .action_error .action').text(action);
246 dc3e66b9 Mike Muzurakis
    $('#machinesview-single.single #'+serverID+ ' .action_error .code').text(status);
247 dc3e66b9 Mike Muzurakis
    $('#machinesview-single.single #'+serverID+ ' .action_error .message').text(responseText);
248 dc3e66b9 Mike Muzurakis
    $('#machinesview-single.single #'+serverID+ ' .action_error').show();
249 dc3e66b9 Mike Muzurakis
}
250 dc3e66b9 Mike Muzurakis

251 dc3e66b9 Mike Muzurakis
// cancel action
252 dc3e66b9 Mike Muzurakis
$("#machinesview-single.single div.confirm_single .no").live('click', function(){
253 dc3e66b9 Mike Muzurakis
    pending_actions = [];
254 9ae7aeaa Christodoulos Psaltis
    $('#machinesview-single').find('div.single-action').removeClass("selected");
255 dc3e66b9 Mike Muzurakis
    update_confirmations();
256 dc3e66b9 Mike Muzurakis
});
257 dc3e66b9 Mike Muzurakis

258 b576496b Mike Muzurakis
// update metadata list
259 b576496b Mike Muzurakis
function list_metadata_keys(serverID, keys) {
260 b576496b Mike Muzurakis
    // empty the list if it already exists
261 b576496b Mike Muzurakis
    $("#machinesview-single.single div.#" +serverID).find("div.items").empty();
262 b576496b Mike Muzurakis
    //start counter
263 b576496b Mike Muzurakis
    var i=0;
264 b576496b Mike Muzurakis
    // show values
265 b576496b Mike Muzurakis
    for (var key in keys) {
266 f7fb0066 Mike Muzurakis
        $("#machinesview-single.single div.#" +serverID).find(".items").append("<div class='item'>" + key + ": " + keys[key].substring(0,40) + "</div>");
267 b576496b Mike Muzurakis
        i++;
268 b576496b Mike Muzurakis
    }
269 b576496b Mike Muzurakis
    //hide the metadata controls if we have less than 3 metadata
270 b576496b Mike Muzurakis
    if (i <= 3) {
271 b576496b Mike Muzurakis
        $("#machinesview-single.single div.#" +serverID).find(".metadata-actions").hide();
272 b576496b Mike Muzurakis
    }
273 b576496b Mike Muzurakis
    //show the metadata controls if we have more than 3 metadata
274 b576496b Mike Muzurakis
    if (i > 3) {
275 b576496b Mike Muzurakis
        $("#machinesview-single.single div.#" +serverID).find(".metadata-actions").show();
276 b576496b Mike Muzurakis
    }
277 b576496b Mike Muzurakis
    $("#machinesview-single.single div.#" +serverID).find(".metadata-count").text(i);
278 b576496b Mike Muzurakis
}
279 b576496b Mike Muzurakis

280 92ce65f8 Mike Muzurakis
//show error popup box
281 dc3e66b9 Mike Muzurakis
$("#machinesview-single.single div.action_error .details").live('click', function(){
282 dc3e66b9 Mike Muzurakis
    // remove the action from the pending list
283 dc3e66b9 Mike Muzurakis
    ajax_error($(this).parent().children('.code').text(), undefined, $(this).parent().children('.action').text(), $(this).parent().children('.message').text());
284 dc3e66b9 Mike Muzurakis
    $(this).parent().hide();
285 dc3e66b9 Mike Muzurakis
});
286 dc3e66b9 Mike Muzurakis

287 dc3e66b9 Mike Muzurakis
//confirm action
288 dc3e66b9 Mike Muzurakis
$("#machinesview-single.single div.confirm_single .yes").live('click', function(){
289 5e5df8fe Christodoulos Psaltis
    var serverID = $(this).closest(".single-container").attr("id");
290 dc3e66b9 Mike Muzurakis
    for (i=0;i<pending_actions.length;i++){ // if there is a pending action for this server execute it
291 dc3e66b9 Mike Muzurakis
        if (pending_actions[i][1]==serverID){
292 dc3e66b9 Mike Muzurakis
            action = pending_actions.splice(i,1)[0]; // extract action
293 dc3e66b9 Mike Muzurakis
            // change the status text in cases where no api state exists
294 dc3e66b9 Mike Muzurakis
            if (action[0] == start) {
295 66a292bd Christodoulos Psaltis
                $(this).closest(".single-container").find(".column1 .state-label").text(TRANSITIONS['Starting']);
296 66a292bd Christodoulos Psaltis
                $(this).closest(".single-container").find(".column1 .state").removeClass().addClass('state starting-state');
297 66a292bd Christodoulos Psaltis
                $(this).closest(".single-container").find(".column1 .state .spinner").show();
298 dc3e66b9 Mike Muzurakis
            } else if (action[0] == shutdown) {
299 66a292bd Christodoulos Psaltis
                $(this).closest(".single-container").find(".column1 .state-label").text(TRANSITIONS['Shutting down']);
300 66a292bd Christodoulos Psaltis
                $(this).closest(".single-container").find(".column1 .state").removeClass().addClass('state shutting-state');
301 66a292bd Christodoulos Psaltis
                $(this).closest(".single-container").find(".column1 .state .spinner").show();
302 dc3e66b9 Mike Muzurakis
            } else if (action[0] == reboot) {
303 66a292bd Christodoulos Psaltis
                $(this).closest(".single-container").find(".column1 .state-label").text(TRANSITIONS['Rebooting']);
304 66a292bd Christodoulos Psaltis
                $(this).closest(".single-container").find(".column1 .state").removeClass().addClass('state rebooting-state');
305 66a292bd Christodoulos Psaltis
                $(this).closest(".single-container").find(".column1 .state .spinner").show();
306 dc3e66b9 Mike Muzurakis
            }  else if (action[0] == destroy) {
307 66a292bd Christodoulos Psaltis
                $(this).closest(".single-container").find(".column1 .state-label").text(TRANSITIONS['Destroying']);
308 66a292bd Christodoulos Psaltis
                $(this).closest(".single-container").find(".column1 .state").removeClass().addClass('state destroying-state');
309 66a292bd Christodoulos Psaltis
                $(this).closest(".single-container").find(".column1 .state .spinner").show();
310 dc3e66b9 Mike Muzurakis
            }
311 dc3e66b9 Mike Muzurakis
            action[0]([action[1]]); // execute action
312 dc3e66b9 Mike Muzurakis
        }
313 dc3e66b9 Mike Muzurakis
    }
314 dc3e66b9 Mike Muzurakis
    $(this).parent().hide();
315 fbf48eee Christodoulos Psaltis
    $(this).closest('div.action-container').children('div.single-action').removeClass('selected');
316 66a292bd Christodoulos Psaltis
    $(this).parent().parent().find('.state').children('.spinner').show();
317 dc3e66b9 Mike Muzurakis
    update_confirmations();
318 dc3e66b9 Mike Muzurakis
    return false;
319 dc3e66b9 Mike Muzurakis
});
320 dc3e66b9 Mike Muzurakis

321 b576496b Mike Muzurakis
// intercept manage metadata click
322 b576496b Mike Muzurakis
$("#machinesview-single.single a.manage-metadata").live('click', function() {
323 b576496b Mike Muzurakis
    // get server name and server ID
324 b576496b Mike Muzurakis
    var serverID = $(this).parent().parent().parent().parent().parent().attr("id");
325 b576496b Mike Muzurakis
    var serverName = $(this).closest('.machine-container').find("div.machine-details div.name").text();
326 b576496b Mike Muzurakis
    if (['BUILD', 'ACTIVE', 'REBOOT'].indexOf($(this).parent().parent().parent().parent().parent().find(".status").text()) < 0) {
327 b576496b Mike Muzurakis
        $("#metadata-wizard div#on-off").text('on');
328 b576496b Mike Muzurakis
    } else {
329 b576496b Mike Muzurakis
        $("#metadata-wizard div#on-off").text('off');
330 b576496b Mike Muzurakis
    }
331 b576496b Mike Muzurakis
    // set server name to all related metadata dialogs
332 b576496b Mike Muzurakis
    $("#metadata-wizard div.machine-name").text(serverName);
333 b576496b Mike Muzurakis
    // set server id to all related metadata dialogs
334 b576496b Mike Muzurakis
    $("#metadata-wizard p").text(serverID);
335 b576496b Mike Muzurakis
    show_metadata_wizard();
336 b576496b Mike Muzurakis
    return false;
337 b576496b Mike Muzurakis
});
338 dc3e66b9 Mike Muzurakis

339 f533f224 Vangelis Koukis
// intercept start click
340 f533f224 Vangelis Koukis
$("#machinesview-single.single div.action-start").live('click', function(){
341 5e5df8fe Christodoulos Psaltis
    var serverID = $(this).closest(".single-container").attr("id");
342 5e5df8fe Christodoulos Psaltis
    var serverName = $(this).closest("div.upper").find(".machine-details div.name").text();
343 b13b401f Christodoulos Psaltis
    $('#machinesview-single').find('div.single-action').removeClass('selected');
344 f533f224 Vangelis Koukis
    $(this).addClass('selected');
345 f533f224 Vangelis Koukis
    $(this).parent().parent().find('.action_error').hide();
346 b13b401f Christodoulos Psaltis
    // reset pending actions so not to allow multiple actions in this view
347 b13b401f Christodoulos Psaltis
    pending_actions = [];
348 b13b401f Christodoulos Psaltis
    pending_actions.push([start, serverID, serverName]);
349 b13b401f Christodoulos Psaltis
    update_confirmations();
350 f533f224 Vangelis Koukis
    return false;
351 f533f224 Vangelis Koukis
});
352 f533f224 Vangelis Koukis

353 dc3e66b9 Mike Muzurakis
// intercept shutdown click
354 dc3e66b9 Mike Muzurakis
$("#machinesview-single.single div.action-shutdown").live('click', function(){
355 5e5df8fe Christodoulos Psaltis
    var serverID = $(this).closest(".single-container").attr("id");
356 5e5df8fe Christodoulos Psaltis
    var serverName = $(this).closest("div.upper").find(".machine-details div.name").text();
357 b13b401f Christodoulos Psaltis
    $('#machinesview-single').find('div.single-action').removeClass('selected');
358 dc3e66b9 Mike Muzurakis
    $(this).addClass('selected');
359 dc3e66b9 Mike Muzurakis
    $(this).parent().parent().find('.action_error').hide();
360 b13b401f Christodoulos Psaltis
    // reset pending actions so not to allow multiple actions in this view
361 b13b401f Christodoulos Psaltis
    pending_actions = [];
362 b13b401f Christodoulos Psaltis
    pending_actions.push([shutdown, serverID, serverName]);
363 dc3e66b9 Mike Muzurakis
    update_confirmations();
364 dc3e66b9 Mike Muzurakis
    return false;
365 dc3e66b9 Mike Muzurakis
});
366 dc3e66b9 Mike Muzurakis

367 dc3e66b9 Mike Muzurakis
// intercept reboot click
368 dc3e66b9 Mike Muzurakis
$("#machinesview-single.single div.action-reboot").live('click', function(){
369 5e5df8fe Christodoulos Psaltis
    var serverID = $(this).closest(".single-container").attr("id");
370 5e5df8fe Christodoulos Psaltis
    var serverName = $(this).closest("div.upper").find(".machine-details div.name").text();
371 b13b401f Christodoulos Psaltis
    $('#machinesview-single').find('div.single-action').removeClass('selected');
372 dc3e66b9 Mike Muzurakis
    $(this).addClass('selected');
373 dc3e66b9 Mike Muzurakis
    $(this).parent().parent().find('.action_error').hide();
374 b13b401f Christodoulos Psaltis
    // reset pending actions so not to allow multiple actions in this view
375 b13b401f Christodoulos Psaltis
    pending_actions = [];
376 b13b401f Christodoulos Psaltis
    pending_actions.push([reboot, serverID, serverName]);
377 dc3e66b9 Mike Muzurakis
    update_confirmations();
378 dc3e66b9 Mike Muzurakis
    return false;
379 dc3e66b9 Mike Muzurakis
});
380 dc3e66b9 Mike Muzurakis

381 dc3e66b9 Mike Muzurakis
// intercept destroy click
382 dc3e66b9 Mike Muzurakis
$("#machinesview-single.single div.action-destroy").live('click', function(){
383 5e5df8fe Christodoulos Psaltis
    var serverID = $(this).closest(".single-container").attr("id");
384 5e5df8fe Christodoulos Psaltis
    var serverName = $(this).closest("div.upper").find(".machine-details div.name").text();
385 b13b401f Christodoulos Psaltis
    $('#machinesview-single').find('div.single-action').removeClass('selected');
386 dc3e66b9 Mike Muzurakis
    $(this).addClass('selected');
387 dc3e66b9 Mike Muzurakis
    $(this).parent().parent().find('.action_error').hide();
388 b13b401f Christodoulos Psaltis
    // reset pending actions so not to allow multiple actions in this view
389 b13b401f Christodoulos Psaltis
    pending_actions = [];
390 b13b401f Christodoulos Psaltis
    pending_actions.push([destroy, serverID, serverName]);
391 dc3e66b9 Mike Muzurakis
    update_confirmations();
392 dc3e66b9 Mike Muzurakis
    return false;
393 dc3e66b9 Mike Muzurakis
});
394 dc3e66b9 Mike Muzurakis

395 dc3e66b9 Mike Muzurakis
// intercept console click
396 dc3e66b9 Mike Muzurakis
$("#machinesview-single.single div.action-console").live('click', function(){
397 5e5df8fe Christodoulos Psaltis
    var serverID = $(this).closest(".single-container").attr("id");
398 5e5df8fe Christodoulos Psaltis
    var serverName = $(this).closest("div.upper").find(".machine-details div.name").text();
399 b13b401f Christodoulos Psaltis
    $('#machinesview-single').find('div.single-action').removeClass('selected');
400 dc3e66b9 Mike Muzurakis
    $(this).addClass('selected');
401 dc3e66b9 Mike Muzurakis
    $(this).parent().parent().find('.action_error').hide();
402 b13b401f Christodoulos Psaltis
    // reset pending actions so not to allow multiple actions in this view
403 b13b401f Christodoulos Psaltis
    pending_actions = [];
404 b13b401f Christodoulos Psaltis
    pending_actions.push([open_console, serverID, serverName]);
405 dc3e66b9 Mike Muzurakis
    update_confirmations();
406 dc3e66b9 Mike Muzurakis
    return false;
407 dc3e66b9 Mike Muzurakis
});
408 dc3e66b9 Mike Muzurakis

409 78167f3e Mike Muzurakis
// connect to machine on machine logo click
410 78167f3e Mike Muzurakis
$("#machinesview-single.single div.single-image").live('click', function(){
411 33470701 Kostas Papadimitriou
    if ($(this).parent().find(".connect-arrow:visible").length == 0) { return };
412 78167f3e Mike Muzurakis
    var serverID = $(this).closest(".single-container").attr("id");
413 78167f3e Mike Muzurakis
    machine_connect([machine_connect, serverID]);
414 78167f3e Mike Muzurakis
    return false;
415 78167f3e Mike Muzurakis
});
416 78167f3e Mike Muzurakis

417 78167f3e Mike Muzurakis
// connect to machine on connect arrow click
418 dc3e66b9 Mike Muzurakis
$("#machinesview-single.single div.connect-arrow").live('click', function(){
419 78167f3e Mike Muzurakis
    var serverID = $(this).closest(".single-container").attr("id");
420 78167f3e Mike Muzurakis
    machine_connect([machine_connect, serverID]);
421 dc3e66b9 Mike Muzurakis
    return false;
422 dc3e66b9 Mike Muzurakis
});
423 dc3e66b9 Mike Muzurakis

424 02ca470d Markos Gogoulos
// connect to machine on connect arrow border click
425 dc3e66b9 Mike Muzurakis
$("#machinesview-single.single div.connect-border").live('click', function(){
426 02ca470d Markos Gogoulos
    var serverID = $(this).closest(".single-container").attr("id");
427 02ca470d Markos Gogoulos
    machine_connect([machine_connect, serverID]);
428 dc3e66b9 Mike Muzurakis
    return false;
429 dc3e66b9 Mike Muzurakis
});
430 dc3e66b9 Mike Muzurakis

431 f533f224 Vangelis Koukis
// update the servers list
432 f533f224 Vangelis Koukis
function update_machines_view(data){
433 f533f224 Vangelis Koukis
    /*
434 f533f224 Vangelis Koukis
    Go through the servers in the input data. Update existing entries, add
435 f533f224 Vangelis Koukis
    new ones to the list
436 f533f224 Vangelis Koukis
    */
437 09828cb5 Mike Muzurakis

438 f533f224 Vangelis Koukis
    $.each(data.servers.values, function(i,server){
439 f533f224 Vangelis Koukis

440 f533f224 Vangelis Koukis
        existing = $('#machinesview-single.single #' + server.id);
441 bde8af74 Mike Muzurakis
        existing_link = $('#machinesview-single div.column3 #link-' + server.id);
442 92ce65f8 Mike Muzurakis
        var current_Id = current_serverId();
443 f533f224 Vangelis Koukis

444 f533f224 Vangelis Koukis
        // if multiple machines exist in the DOM, delete all but one
445 f533f224 Vangelis Koukis
        // defensive coding - that shouldn't happen normally
446 f533f224 Vangelis Koukis
        while (existing.length > 1){
447 f533f224 Vangelis Koukis
            existing.remove();
448 f533f224 Vangelis Koukis
        }
449 09828cb5 Mike Muzurakis
        // get server OS, if it exists
450 09828cb5 Mike Muzurakis
        if (!(server.metadata == undefined)) {
451 09828cb5 Mike Muzurakis
            var server_image = os_icon(server.metadata);
452 09828cb5 Mike Muzurakis
        } else {
453 09828cb5 Mike Muzurakis
            var server_image = "unknown"
454 09828cb5 Mike Muzurakis
        }
455 09828cb5 Mike Muzurakis
        // get server status message, if it exists
456 09828cb5 Mike Muzurakis
        var current_message = existing.find(".state-label").text();
457 f533f224 Vangelis Koukis

458 f533f224 Vangelis Koukis
        // server already exists in DOM
459 f533f224 Vangelis Koukis
        if (existing.length){
460 f533f224 Vangelis Koukis
            $("#machinesview-single.single div.single-container:last-child").find("div.separator").show();
461 f533f224 Vangelis Koukis
            //  if the status is deleted, delete it from the DOM
462 f533f224 Vangelis Koukis
            if (server.status == 'DELETED') {
463 f533f224 Vangelis Koukis
                existing.remove();
464 bde8af74 Mike Muzurakis
                existing_link.remove();
465 92ce65f8 Mike Muzurakis
                //if the deleted vm is the displayed one, display the 1st vm
466 92ce65f8 Mike Muzurakis
                if (server.id == current_Id) {
467 92ce65f8 Mike Muzurakis
                    $("#machinesview-single.single div.single-container:eq(1)").show()
468 d2f03cb3 Mike Muzurakis
                    $('#machinesview-single.single .column3').find('.server-name:eq(1)').addClass('column3-selected');
469 92ce65f8 Mike Muzurakis
                }
470 f533f224 Vangelis Koukis
                try {
471 92ce65f8 Mike Muzurakis
                    console.info(existing.find(".machine-details div.name").text() + ' removed');
472 f533f224 Vangelis Koukis
                } catch(err) {}
473 09828cb5 Mike Muzurakis
            }
474 09828cb5 Mike Muzurakis
            // if the status has changed
475 09828cb5 Mike Muzurakis
            else if ( current_message != STATUSES[server.status]) {
476 09828cb5 Mike Muzurakis
                /*
477 09828cb5 Mike Muzurakis
                Here there are 4 possibilities:
478 09828cb5 Mike Muzurakis
                    1. From an active state to an inactive one
479 09828cb5 Mike Muzurakis
                    2. From an inactive state to an active one
480 09828cb5 Mike Muzurakis
                    3. From an active state to a different active one
481 09828cb5 Mike Muzurakis
                    4. From an inactive state to a different inactive one
482 09828cb5 Mike Muzurakis
                The last two (3, 4) can be dealt with the same way
483 09828cb5 Mike Muzurakis
                */
484 09828cb5 Mike Muzurakis
                if (ACTIVE_STATES.indexOf(current_message) >= 0 &&
485 09828cb5 Mike Muzurakis
                    INACTIVE_STATES.indexOf(STATUSES[server.status]) >= 0) {
486 09828cb5 Mike Muzurakis
                    // from an active state to an inactive one
487 09828cb5 Mike Muzurakis
                    log_server_status_change(existing, server.status);
488 7af53e78 Kostas Papadimitriou
                    set_machine_os_image(existing, "single", "off", server_image);
489 66a292bd Christodoulos Psaltis
                    existing.find(".column1 .state-label").text(STATUSES[server.status]);
490 dc3e66b9 Mike Muzurakis
                    existing.find(".connect-border").hide();
491 dc3e66b9 Mike Muzurakis
                    existing.find(".connect-arrow").hide();
492 66a292bd Christodoulos Psaltis
                    existing.find(".column1 .state .spinner").hide();
493 dc3e66b9 Mike Muzurakis
                    existing.find(' .wave').attr('src','static/icons/indicators/medium/wave.gif').show();
494 66a292bd Christodoulos Psaltis
                    existing.find(".column1 .state").removeClass().addClass("state terminated-state");
495 dc3e66b9 Mike Muzurakis
                    setTimeout("$('#" + server.id +" .wave').attr('src','').hide()", 3000);
496 09828cb5 Mike Muzurakis
                }
497 09828cb5 Mike Muzurakis
                else if (INACTIVE_STATES.indexOf(current_message) >= 0 &&
498 09828cb5 Mike Muzurakis
                         ACTIVE_STATES.indexOf(STATUSES[server.status]) >= 0) {
499 09828cb5 Mike Muzurakis
                    // From an inactive state to an active one
500 09828cb5 Mike Muzurakis
                    log_server_status_change(existing, server.status);
501 7af53e78 Kostas Papadimitriou
                    set_machine_os_image(existing, "single", "on", server_image);
502 66a292bd Christodoulos Psaltis
                    existing.find(".column1 .state-label").text(STATUSES[server.status]);
503 dc3e66b9 Mike Muzurakis
                    existing.find(".connect-border").show();
504 dc3e66b9 Mike Muzurakis
                    existing.find(".connect-arrow").show();
505 66a292bd Christodoulos Psaltis
                    existing.find(".column1 .state .spinner").hide();
506 dc3e66b9 Mike Muzurakis
                    existing.find(' .wave').attr('src','static/icons/indicators/medium/wave.gif').show();
507 66a292bd Christodoulos Psaltis
                    existing.find(".column1 .state").removeClass().addClass("state running-state");
508 dc3e66b9 Mike Muzurakis
                    setTimeout("$('#" + server.id +" .wave').attr('src','').hide()", 3000);
509 f533f224 Vangelis Koukis
                }
510 09828cb5 Mike Muzurakis
                else {
511 09828cb5 Mike Muzurakis
                    // handling active to active or inactive to inactive changes
512 09828cb5 Mike Muzurakis
                    if (TRANSITIONS[current_message] && TRANSITIONS[current_message] != 'Rebooting') {
513 09828cb5 Mike Muzurakis
                        // don't do anything if it is still in transition
514 09828cb5 Mike Muzurakis
                    }
515 09828cb5 Mike Muzurakis
                    else if ((TRANSITIONS[current_message] == 'Rebooting' && server.status == 'ACTIVE') ||
516 09828cb5 Mike Muzurakis
                             (STATUSES['BUILD'] == current_message && server.status == 'ACTIVE')) {
517 09828cb5 Mike Muzurakis
                        // if it has been rebooted or just created
518 09828cb5 Mike Muzurakis
                        log_server_status_change(existing, server.status);
519 66a292bd Christodoulos Psaltis
                        existing.find(".column1 .state-label").text(STATUSES[server.status]);
520 dc3e66b9 Mike Muzurakis
                        existing.find(".connect-border").show();
521 dc3e66b9 Mike Muzurakis
                        existing.find(".connect-arrow").show();
522 66a292bd Christodoulos Psaltis
                        existing.find(".column1 .state .spinner").hide();
523 66a292bd Christodoulos Psaltis
                        existing.find(".column1 .state").attr('src','static/icons/indicators/medium/wave.gif').show();
524 66a292bd Christodoulos Psaltis
                        existing.find(".column1 .state").removeClass().addClass("state running-state");
525 dc3e66b9 Mike Muzurakis
                        setTimeout("$('#" + server.id +" .wave').attr('src','').hide()", 3000);
526 09828cb5 Mike Muzurakis
                    }
527 1df63521 Kostas Papadimitriou
                    else if (STATUSES[server.status] == "Rebooting") { 
528 1df63521 Kostas Papadimitriou
                        // from running to rebooting
529 1df63521 Kostas Papadimitriou
                        log_server_status_change(existing, server.status);
530 1df63521 Kostas Papadimitriou
                        existing.find(".column1 .state").removeClass().addClass('state rebooting-state');
531 1df63521 Kostas Papadimitriou
                        existing.find('.column1 .state .spinner').show();
532 1df63521 Kostas Papadimitriou
                        existing.find(".column1 .state-label").text(STATUSES[server.status]);
533 1df63521 Kostas Papadimitriou
                    } else {
534 09828cb5 Mike Muzurakis
                        // in any other case just change the status and ignore spinners/waves
535 66a292bd Christodoulos Psaltis
                        existing.find(".column1 .state-label").text(STATUSES[server.status]);
536 09828cb5 Mike Muzurakis
                    }
537 f533f224 Vangelis Koukis
                }
538 f533f224 Vangelis Koukis
            }
539 f533f224 Vangelis Koukis
            // find and display ips
540 f533f224 Vangelis Koukis
            var ips = get_public_ips(server);
541 f533f224 Vangelis Koukis
            existing.find(".machine-details div.ipv4").text(ips['ip4']);
542 f533f224 Vangelis Koukis
            existing.find(".machine-details div.ipv6").text(ips['ip6']);
543 09828cb5 Mike Muzurakis

544 f533f224 Vangelis Koukis
        } else if (server.status != 'DELETED') {
545 f533f224 Vangelis Koukis
            // If it does not exist and it's not deleted, we should create it
546 f533f224 Vangelis Koukis
            var serverwidget = $("#servers-widget-template").clone().attr("id", 'link-' + server.id);
547 f533f224 Vangelis Koukis
            if (server.name.length > 18) {
548 f533f224 Vangelis Koukis
                serverwidget.text(server.name.substring(0,15) + '...');
549 f533f224 Vangelis Koukis
            } else {
550 f533f224 Vangelis Koukis
                serverwidget.text(server.name)
551 f533f224 Vangelis Koukis
            }
552 f533f224 Vangelis Koukis
            serverwidget.appendTo('.servers');
553 f533f224 Vangelis Koukis
            serverwidget.show();
554 92ce65f8 Mike Muzurakis
            //find and hide the previously selected server
555 f533f224 Vangelis Koukis
            $('.single').find('.single-container').hide();
556 d2f03cb3 Mike Muzurakis
            $('.single .column3').find('.column3-selected').removeClass('column3-selected');
557 f533f224 Vangelis Koukis
            //create and select the new one
558 f533f224 Vangelis Koukis
            var machine = $("#machinesview-single.single #machine-container-template").clone().attr("id", server.id);
559 b576496b Mike Muzurakis
            machine.find(".scrollable").scrollable({vertical: true});
560 f7fb0066 Mike Muzurakis
            machine.find(".machine-details div.name").text(server.name.substring(0,30));
561 7af53e78 Kostas Papadimitriou
            set_machine_os_image(machine, "single", "on", server_image);
562 f533f224 Vangelis Koukis
            machine.find("span.imagetag").text(server_image);
563 66a292bd Christodoulos Psaltis
            machine.find(".column1 .state-label").text(STATUSES[server.status]);
564 46095259 Christodoulos Psaltis
            // find and display flavor parameters
565 46095259 Christodoulos Psaltis
            var flavor_params = get_flavor_params(server.flavorRef);
566 46095259 Christodoulos Psaltis
            machine.find(".machine-details div.cpus").text(flavor_params['cpus']);
567 46095259 Christodoulos Psaltis
            machine.find(".machine-details div.ram").text(flavor_params['ram']);
568 46095259 Christodoulos Psaltis
            machine.find(".machine-details div.disk").text(flavor_params['disk']);
569 46095259 Christodoulos Psaltis
            // find and display image parameters
570 46095259 Christodoulos Psaltis
            var image_params = get_image_params(server.imageRef);
571 46095259 Christodoulos Psaltis
            machine.find(".machine-details div.image-name").text(image_params['name'].substring(0,15));
572 46095259 Christodoulos Psaltis
            machine.find(".machine-details div.image-size").text(image_params['size']);
573 f533f224 Vangelis Koukis
            // find and display ips
574 f533f224 Vangelis Koukis
            var ips = get_public_ips(server);
575 f533f224 Vangelis Koukis
            machine.find(".machine-details div.ipv4").text(ips['ip4']);
576 f533f224 Vangelis Koukis
            machine.find(".machine-details div.ipv6").text(ips['ip6']);
577 f533f224 Vangelis Koukis
            //show off image if server is not active
578 f533f224 Vangelis Koukis
            if (['BUILD', 'ACTIVE', 'REBOOT'].indexOf(server.status) < 0){
579 7af53e78 Kostas Papadimitriou
                    set_machine_os_image(machine, "single", "off", server_image);
580 dc3e66b9 Mike Muzurakis
                    machine.find(".connect-border").hide();
581 dc3e66b9 Mike Muzurakis
                    machine.find(".connect-arrow").hide();
582 66a292bd Christodoulos Psaltis
                    machine.find(".column1 .state").removeClass().addClass("state terminated-state");
583 f533f224 Vangelis Koukis
            }
584 9f57e631 Mike Muzurakis
            //show spinner while machine is building or rebooting
585 f533f224 Vangelis Koukis
            if (server.status == 'BUILD' ||
586 f533f224 Vangelis Koukis
                [TRANSITIONS['Starting'], TRANSITIONS['Shutting down']].indexOf(existing.find(".status").text()) >= 0 ) {
587 66a292bd Christodoulos Psaltis
                machine.find(".column1 .state .spinner").show();
588 dc3e66b9 Mike Muzurakis
                machine.find(".connect-border").hide();
589 dc3e66b9 Mike Muzurakis
                machine.find(".connect-arrow").hide();
590 66a292bd Christodoulos Psaltis
                machine.find(".column1 .state").removeClass().addClass('state build-state');
591 9f57e631 Mike Muzurakis
            }
592 9f57e631 Mike Muzurakis
            if (server.status == 'REBOOT') {
593 66a292bd Christodoulos Psaltis
                machine.find(".column1 .state").find('.spinner').show();
594 9f57e631 Mike Muzurakis
                machine.find(".connect-border").hide();
595 9f57e631 Mike Muzurakis
                machine.find(".connect-arrow").hide();
596 66a292bd Christodoulos Psaltis
                machine.find(".column1 .state").removeClass().addClass('state rebooting-state');
597 f533f224 Vangelis Koukis
            }
598 f533f224 Vangelis Koukis
            machine.appendTo("#machinesview-single.single");
599 f533f224 Vangelis Koukis
            //disable reboot and shutdown actions while machine is building
600 f533f224 Vangelis Koukis
            if (server.status == 'BUILD') {
601 f533f224 Vangelis Koukis
                $('#machinesview-single.single div.#' + server.id + ' div.action-reboot').hide();
602 f533f224 Vangelis Koukis
                $('#machinesview-single.single div.#' + server.id + ' div.action-shutdown').hide();
603 f533f224 Vangelis Koukis
            }
604 f533f224 Vangelis Koukis
            // show console action only on active servers
605 f533f224 Vangelis Koukis
            if (server.status == 'ACTIVE') {
606 f533f224 Vangelis Koukis
                $('#machinesview-single.single div.#' + server.id + ' div.action-console').show();
607 f533f224 Vangelis Koukis
                $('#machinesview-single.single div.#' + server.id + ' div.action-start').hide();
608 dc3e66b9 Mike Muzurakis
                machine.find(".connect-border").show();
609 dc3e66b9 Mike Muzurakis
                machine.find(".connect-arrow").show();
610 f533f224 Vangelis Koukis
            } else if (server.status == 'REBOOT'){
611 f533f224 Vangelis Koukis
                $('#machinesview-single.single div.#' + server.id + ' div.action-console').hide();
612 f533f224 Vangelis Koukis
            } else {
613 f533f224 Vangelis Koukis
                $('#machinesview-single.single div.#' + server.id + ' div.action-console').hide();
614 f533f224 Vangelis Koukis
                $('#machinesview-single.single div.#' + server.id + ' div.action-reboot').hide();
615 f533f224 Vangelis Koukis
                $('#machinesview-single.single div.#' + server.id + ' div.action-shutdown').hide();
616 f533f224 Vangelis Koukis
            }
617 cb748f1f Kostas Papadimitriou

618 cb748f1f Kostas Papadimitriou

619 09828cb5 Mike Muzurakis
            //show the first machine and select it in the widget
620 09828cb5 Mike Muzurakis
            $('.single-container:eq(1)').show();
621 d2f03cb3 Mike Muzurakis
            $('.single .column3').find('.server-name:eq(1)').addClass('column3-selected');
622 f533f224 Vangelis Koukis
        }
623 b576496b Mike Muzurakis
        update_iconview_actions(server.id, server.status);
624 b576496b Mike Muzurakis
        if (!(server.metadata == undefined)) {
625 b576496b Mike Muzurakis
                list_metadata_keys(server.id, server.metadata.values);
626 b576496b Mike Muzurakis
        }
627 37564bb5 Mike Muzurakis
        if (server.id == current_serverId()) {
628 37564bb5 Mike Muzurakis
            get_server_stats(server.id);
629 37564bb5 Mike Muzurakis
        }
630 4b2ed497 Kostas Papadimitriou

631 4b2ed497 Kostas Papadimitriou
        // if machine in destroy state keep it that way
632 4b2ed497 Kostas Papadimitriou
        var server = get_machine(server.id);
633 4b2ed497 Kostas Papadimitriou
        if (server.status == "DESTROY") {
634 4b2ed497 Kostas Papadimitriou
            existing = $('#machinesview-single.single #' + server.id);
635 4b2ed497 Kostas Papadimitriou
            if (existing.length) {
636 4b2ed497 Kostas Papadimitriou
                existing.find(".column1 .state-label").text(TRANSITIONS['Destroying']);
637 4b2ed497 Kostas Papadimitriou
                existing.find(".column1 .state").removeClass().addClass('state destroying-state');
638 4b2ed497 Kostas Papadimitriou
                existing.find(".column1 .state .spinner").show();
639 cb748f1f Kostas Papadimitriou
                existing.find(".column1 .wave").hide();
640 4b2ed497 Kostas Papadimitriou
            }
641 4b2ed497 Kostas Papadimitriou
        }
642 f533f224 Vangelis Koukis
    });
643 907bd406 Christodoulos Psaltis

644 907bd406 Christodoulos Psaltis
    // hide pane spinner
645 f533f224 Vangelis Koukis
    $("#machinesview-single.single > div.large-spinner").hide();
646 f533f224 Vangelis Koukis

647 907bd406 Christodoulos Psaltis
    // show message in case user has no server!
648 907bd406 Christodoulos Psaltis
    if ($('#machinesview-single div.single-container').length == 1) {
649 907bd406 Christodoulos Psaltis
        showWelcome();
650 907bd406 Christodoulos Psaltis
    } else {
651 907bd406 Christodoulos Psaltis
        hideWelcome();
652 bf0bedc2 Mike Muzurakis
        $('.single .column3').show();
653 907bd406 Christodoulos Psaltis
    }
654 f533f224 Vangelis Koukis

655 f533f224 Vangelis Koukis
    //enable widget links
656 f533f224 Vangelis Koukis
    $(".server-name").live('click', function() {
657 f533f224 Vangelis Koukis
        $('.single').find('.single-container').hide()
658 f533f224 Vangelis Koukis
        $('.single').find('#' + $(this).attr('id').substring(5)).show();
659 d2f03cb3 Mike Muzurakis
        $('.single .column3').find('.column3-selected').removeClass('column3-selected');
660 d2f03cb3 Mike Muzurakis
        $(this).addClass('column3-selected');
661 91965c28 Mike Muzurakis
        update_prev_next()
662 f533f224 Vangelis Koukis
    });
663 f533f224 Vangelis Koukis

664 f533f224 Vangelis Koukis
    if ($.cookie('server')) {
665 f533f224 Vangelis Koukis
        $('div#link-' + $.cookie('server')).click();
666 f533f224 Vangelis Koukis
        $.cookie('server', null);
667 f533f224 Vangelis Koukis
    }
668 f533f224 Vangelis Koukis

669 91965c28 Mike Muzurakis
    //if it is the last vm, disable the next button
670 d2f03cb3 Mike Muzurakis
    if ($("#machinesview-single.single .column3 .column3-selected").attr("id") == $("#machinesview-single.single .column3 .server-name:last").attr("id")) {
671 91965c28 Mike Muzurakis
        $("#machinesview-single.single .column3 .next").addClass('disabled');
672 f533f224 Vangelis Koukis
    }
673 f533f224 Vangelis Koukis

674 91965c28 Mike Muzurakis
    //if it is the first vm, disable the prev button
675 d2f03cb3 Mike Muzurakis
    if ($("#machinesview-single.single .column3 .column3-selected").attr("id") == $("#machinesview-single.single .column3 .server-name:eq(1)").attr("id")) {
676 91965c28 Mike Muzurakis
        $("#machinesview-single.single .column3 .previous").addClass('disabled');
677 f533f224 Vangelis Koukis
    }
678 92ce65f8 Mike Muzurakis
}
679 f533f224 Vangelis Koukis

680 92ce65f8 Mike Muzurakis
//get currently displayed serverId
681 92ce65f8 Mike Muzurakis
function current_serverId() {
682 92ce65f8 Mike Muzurakis
    return $("#machinesview-single.single").find("div.single-container:visible").attr("id");
683 f533f224 Vangelis Koukis
}
684 f533f224 Vangelis Koukis

685 f533f224 Vangelis Koukis
//enable prev-next buttons
686 b13b401f Christodoulos Psaltis
$("#machinesview-single.single .column3 .previous").live('click', function() {
687 b13b401f Christodoulos Psaltis
    // set behavior
688 d2f03cb3 Mike Muzurakis
    if ($("#machinesview-single.single .column3 .column3-selected").attr("id") == $("#machinesview-single.single .column3 .server-name:eq(1)").attr("id")) {
689 f533f224 Vangelis Koukis
        return false;
690 f533f224 Vangelis Koukis
    } else {
691 d2f03cb3 Mike Muzurakis
        current_server = $('#machinesview-single.single .column3').find('.column3-selected').attr("id").substring(5);
692 f533f224 Vangelis Koukis
        $('#machinesview-single.single').find('#' + current_server).hide();
693 f533f224 Vangelis Koukis
        $('#machinesview-single.single').find('#' + current_server).prev().show();
694 d2f03cb3 Mike Muzurakis
        $('#machinesview-single.single .column3').find('#link-' + current_server).removeClass('column3-selected');
695 d2f03cb3 Mike Muzurakis
        $('#machinesview-single.single .column3').find('#link-' + current_server).prev().addClass('column3-selected');
696 91965c28 Mike Muzurakis
        update_prev_next()
697 09828cb5 Mike Muzurakis
        return false;
698 f533f224 Vangelis Koukis
    }
699 f533f224 Vangelis Koukis
});
700 f533f224 Vangelis Koukis

701 b13b401f Christodoulos Psaltis
$("#machinesview-single.single .column3 .next").live('click', function() {
702 b13b401f Christodoulos Psaltis
    // set behavior
703 d2f03cb3 Mike Muzurakis
    if ($("#machinesview-single.single .column3 .column3-selected").attr("id") == $("#machinesview-single.single .column3 .server-name:last").attr("id")) {
704 f533f224 Vangelis Koukis
        return false;
705 f533f224 Vangelis Koukis
        } else {
706 d2f03cb3 Mike Muzurakis
        current_server = $('#machinesview-single.single .column3').find('.column3-selected').attr("id").substring(5);
707 f533f224 Vangelis Koukis
        $('#machinesview-single.single').find('#' + current_server).hide();
708 f533f224 Vangelis Koukis
        $('#machinesview-single.single').find('#' + current_server).next().show();
709 d2f03cb3 Mike Muzurakis
        $('#machinesview-single.single .column3').find('#link-' + current_server).removeClass('column3-selected');
710 d2f03cb3 Mike Muzurakis
        $('#machinesview-single.single .column3').find('#link-' + current_server).next().addClass('column3-selected');
711 91965c28 Mike Muzurakis
        update_prev_next()
712 09828cb5 Mike Muzurakis
        return false;
713 f533f224 Vangelis Koukis
    }
714 f533f224 Vangelis Koukis
});
715 f533f224 Vangelis Koukis

716 91965c28 Mike Muzurakis

717 91965c28 Mike Muzurakis
//enables-disables previous/next buttons accordingly
718 91965c28 Mike Muzurakis
function update_prev_next() {
719 91965c28 Mike Muzurakis
    if ($("#machinesview-single.single .column3 .column3-selected").attr("id") != $("#machinesview-single.single .column3 .server-name:eq(1)").attr("id")) {
720 91965c28 Mike Muzurakis
        $(".single .column3 .previous").removeClass('disabled');
721 91965c28 Mike Muzurakis
    } else {
722 91965c28 Mike Muzurakis
        //disable class
723 91965c28 Mike Muzurakis
        $(".single .column3 .previous").addClass('disabled');
724 91965c28 Mike Muzurakis
    }
725 91965c28 Mike Muzurakis
    if ($("#machinesview-single.single .column3 .column3-selected").attr("id") != $("#machinesview-single.single .column3 .server-name:last").attr("id")) {
726 91965c28 Mike Muzurakis
        $(".single .column3 .next").removeClass('disabled');
727 91965c28 Mike Muzurakis
    } else {
728 91965c28 Mike Muzurakis
        //disable class
729 91965c28 Mike Muzurakis
        $(".single .column3 .next").addClass('disabled');
730 91965c28 Mike Muzurakis
    }
731 37564bb5 Mike Muzurakis
    get_server_stats(current_serverId());
732 91965c28 Mike Muzurakis
}
733 f533f224 Vangelis Koukis

734 f533f224 Vangelis Koukis
// basic functions executed on page load
735 f533f224 Vangelis Koukis
if ( flavors.length == 0 && images.length == 0 ) {
736 f533f224 Vangelis Koukis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
737 f533f224 Vangelis Koukis
    update_flavors();
738 f533f224 Vangelis Koukis
    // populate image list
739 f533f224 Vangelis Koukis
    update_images();
740 f533f224 Vangelis Koukis
} else if ( flavors.length == 0 && images.length != 0 ) {
741 f533f224 Vangelis Koukis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
742 f533f224 Vangelis Koukis
    update_flavors();
743 f533f224 Vangelis Koukis
} else if ( flavors.length != 0 && images.length == 0 ) {
744 f533f224 Vangelis Koukis
    // populate image list
745 f533f224 Vangelis Koukis
    update_images();
746 f533f224 Vangelis Koukis
    update_vms(UPDATE_INTERVAL);
747 f533f224 Vangelis Koukis
} else {
748 f533f224 Vangelis Koukis
    // start updating vm list
749 f533f224 Vangelis Koukis
    update_vms(UPDATE_INTERVAL);
750 f533f224 Vangelis Koukis
}
751 64fe1ae8 Mike Muzurakis

752 64fe1ae8 Mike Muzurakis
//IE specific fixes
753 64fe1ae8 Mike Muzurakis
if ($.browser.msie) {
754 64fe1ae8 Mike Muzurakis
    //IE fix for green arrow hover
755 64fe1ae8 Mike Muzurakis
    $("div.connect-arrow").live("mouseenter", function () {
756 64fe1ae8 Mike Muzurakis
        $(this).addClass("connect-arrow-ie");
757 64fe1ae8 Mike Muzurakis
    });
758 64fe1ae8 Mike Muzurakis
    $("div.connect-arrow").live("mouseleave", function () {
759 64fe1ae8 Mike Muzurakis
        $(this).removeClass("connect-arrow-ie");
760 64fe1ae8 Mike Muzurakis
    });
761 0aec49e0 Mike Muzurakis
    //IE fix for details button
762 0aec49e0 Mike Muzurakis
    $("button.details").live("mouseenter", function () {
763 0aec49e0 Mike Muzurakis
        $(this).css("background-color","#FF7F2A");
764 0aec49e0 Mike Muzurakis
    });
765 0aec49e0 Mike Muzurakis
    $("button.details").live("mouseleave", function () {
766 0aec49e0 Mike Muzurakis
        $(this).css("background-color","transparent");
767 0aec49e0 Mike Muzurakis
    });
768 64fe1ae8 Mike Muzurakis
}
769 64fe1ae8 Mike Muzurakis
770 f533f224 Vangelis Koukis
</script>