Statistics
| Branch: | Tag: | Revision:

root / ui / templates / machines_single.html @ 2e81680d

History | View | Annotate | Download (37.9 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 3fc164d2 Vangelis Koukis
                    <div class="machine-label image-size">{% trans "Image Size (MB)" %}:</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 f277a1cd Kostas Papadimitriou
                    <div class="machine-detail ipv4 ipv4-text">no ipv4</div>
79 f277a1cd Kostas Papadimitriou
                    <div class="machine-detail ipv6 ipv6-text">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 7bd59cce Kostas Papadimitriou
                    <img src="./static/icons/indicators/small/progress.gif" 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 7bd59cce Kostas Papadimitriou
                    <img src="./static/icons/indicators/small/progress.gif" 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 6dd01959 Kostas Papadimitriou
    update_transition_names();
318 dc3e66b9 Mike Muzurakis
    update_confirmations();
319 dc3e66b9 Mike Muzurakis
    return false;
320 dc3e66b9 Mike Muzurakis
});
321 dc3e66b9 Mike Muzurakis

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

619 af324176 Kostas Papadimitriou

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

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

645 6dd01959 Kostas Papadimitriou
    update_transition_names();
646 f277a1cd Kostas Papadimitriou
    fix_v6_addresses();
647 907bd406 Christodoulos Psaltis
    // hide pane spinner
648 f533f224 Vangelis Koukis
    $("#machinesview-single.single > div.large-spinner").hide();
649 f533f224 Vangelis Koukis

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

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

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

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

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

683 6dd01959 Kostas Papadimitriou
// define these to avoid exceptions
684 6dd01959 Kostas Papadimitriou
function display_reboot_success() {
685 6dd01959 Kostas Papadimitriou
}
686 6dd01959 Kostas Papadimitriou

687 6dd01959 Kostas Papadimitriou
function display_reboot_failure() {
688 6dd01959 Kostas Papadimitriou
}
689 6dd01959 Kostas Papadimitriou

690 6dd01959 Kostas Papadimitriou
// append string to transition states
691 6dd01959 Kostas Papadimitriou
function update_transition_names() {
692 6dd01959 Kostas Papadimitriou
    $(".state-label").each(function(index,el){
693 6dd01959 Kostas Papadimitriou
    var tr_text = $(this).text().replace(TRANSITION_STATE_APPEND,"");
694 6dd01959 Kostas Papadimitriou
    if (TRANSITION_STATES.indexOf(tr_text) >= 0) {
695 6dd01959 Kostas Papadimitriou
            $(this).text(tr_text + TRANSITION_STATE_APPEND);
696 6dd01959 Kostas Papadimitriou
        }
697 6dd01959 Kostas Papadimitriou
    })
698 6dd01959 Kostas Papadimitriou
}
699 6dd01959 Kostas Papadimitriou

700 92ce65f8 Mike Muzurakis
//get currently displayed serverId
701 92ce65f8 Mike Muzurakis
function current_serverId() {
702 92ce65f8 Mike Muzurakis
    return $("#machinesview-single.single").find("div.single-container:visible").attr("id");
703 f533f224 Vangelis Koukis
}
704 f533f224 Vangelis Koukis

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

721 b13b401f Christodoulos Psaltis
$("#machinesview-single.single .column3 .next").live('click', function() {
722 b13b401f Christodoulos Psaltis
    // set behavior
723 d2f03cb3 Mike Muzurakis
    if ($("#machinesview-single.single .column3 .column3-selected").attr("id") == $("#machinesview-single.single .column3 .server-name:last").attr("id")) {
724 f533f224 Vangelis Koukis
        return false;
725 f533f224 Vangelis Koukis
        } else {
726 d2f03cb3 Mike Muzurakis
        current_server = $('#machinesview-single.single .column3').find('.column3-selected').attr("id").substring(5);
727 f533f224 Vangelis Koukis
        $('#machinesview-single.single').find('#' + current_server).hide();
728 f533f224 Vangelis Koukis
        $('#machinesview-single.single').find('#' + current_server).next().show();
729 d2f03cb3 Mike Muzurakis
        $('#machinesview-single.single .column3').find('#link-' + current_server).removeClass('column3-selected');
730 d2f03cb3 Mike Muzurakis
        $('#machinesview-single.single .column3').find('#link-' + current_server).next().addClass('column3-selected');
731 91965c28 Mike Muzurakis
        update_prev_next()
732 09828cb5 Mike Muzurakis
        return false;
733 f533f224 Vangelis Koukis
    }
734 f533f224 Vangelis Koukis
});
735 f533f224 Vangelis Koukis

736 91965c28 Mike Muzurakis

737 91965c28 Mike Muzurakis
//enables-disables previous/next buttons accordingly
738 91965c28 Mike Muzurakis
function update_prev_next() {
739 91965c28 Mike Muzurakis
    if ($("#machinesview-single.single .column3 .column3-selected").attr("id") != $("#machinesview-single.single .column3 .server-name:eq(1)").attr("id")) {
740 91965c28 Mike Muzurakis
        $(".single .column3 .previous").removeClass('disabled');
741 91965c28 Mike Muzurakis
    } else {
742 91965c28 Mike Muzurakis
        //disable class
743 91965c28 Mike Muzurakis
        $(".single .column3 .previous").addClass('disabled');
744 91965c28 Mike Muzurakis
    }
745 91965c28 Mike Muzurakis
    if ($("#machinesview-single.single .column3 .column3-selected").attr("id") != $("#machinesview-single.single .column3 .server-name:last").attr("id")) {
746 91965c28 Mike Muzurakis
        $(".single .column3 .next").removeClass('disabled');
747 91965c28 Mike Muzurakis
    } else {
748 91965c28 Mike Muzurakis
        //disable class
749 91965c28 Mike Muzurakis
        $(".single .column3 .next").addClass('disabled');
750 91965c28 Mike Muzurakis
    }
751 37564bb5 Mike Muzurakis
    get_server_stats(current_serverId());
752 91965c28 Mike Muzurakis
}
753 f533f224 Vangelis Koukis

754 f533f224 Vangelis Koukis
// basic functions executed on page load
755 f533f224 Vangelis Koukis
if ( flavors.length == 0 && images.length == 0 ) {
756 f533f224 Vangelis Koukis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
757 f533f224 Vangelis Koukis
    update_flavors();
758 f533f224 Vangelis Koukis
    // populate image list
759 f533f224 Vangelis Koukis
    update_images();
760 f533f224 Vangelis Koukis
} else if ( flavors.length == 0 && images.length != 0 ) {
761 f533f224 Vangelis Koukis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
762 f533f224 Vangelis Koukis
    update_flavors();
763 f533f224 Vangelis Koukis
} else if ( flavors.length != 0 && images.length == 0 ) {
764 f533f224 Vangelis Koukis
    // populate image list
765 f533f224 Vangelis Koukis
    update_images();
766 f533f224 Vangelis Koukis
    update_vms(UPDATE_INTERVAL);
767 f533f224 Vangelis Koukis
} else {
768 f533f224 Vangelis Koukis
    // start updating vm list
769 f533f224 Vangelis Koukis
    update_vms(UPDATE_INTERVAL);
770 f533f224 Vangelis Koukis
}
771 64fe1ae8 Mike Muzurakis

772 64fe1ae8 Mike Muzurakis
//IE specific fixes
773 64fe1ae8 Mike Muzurakis
if ($.browser.msie) {
774 64fe1ae8 Mike Muzurakis
    //IE fix for green arrow hover
775 64fe1ae8 Mike Muzurakis
    $("div.connect-arrow").live("mouseenter", function () {
776 64fe1ae8 Mike Muzurakis
        $(this).addClass("connect-arrow-ie");
777 64fe1ae8 Mike Muzurakis
    });
778 64fe1ae8 Mike Muzurakis
    $("div.connect-arrow").live("mouseleave", function () {
779 64fe1ae8 Mike Muzurakis
        $(this).removeClass("connect-arrow-ie");
780 64fe1ae8 Mike Muzurakis
    });
781 0aec49e0 Mike Muzurakis
    //IE fix for details button
782 0aec49e0 Mike Muzurakis
    $("button.details").live("mouseenter", function () {
783 0aec49e0 Mike Muzurakis
        $(this).css("background-color","#FF7F2A");
784 0aec49e0 Mike Muzurakis
    });
785 0aec49e0 Mike Muzurakis
    $("button.details").live("mouseleave", function () {
786 0aec49e0 Mike Muzurakis
        $(this).css("background-color","transparent");
787 0aec49e0 Mike Muzurakis
    });
788 64fe1ae8 Mike Muzurakis
}
789 64fe1ae8 Mike Muzurakis
790 f533f224 Vangelis Koukis
</script>