Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (36 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 7af53e78 Kostas Papadimitriou
    });
201 7af53e78 Kostas Papadimitriou

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

405 78167f3e Mike Muzurakis
// connect to machine on machine logo click
406 78167f3e Mike Muzurakis
$("#machinesview-single.single div.single-image").live('click', function(){
407 78167f3e Mike Muzurakis
    var serverID = $(this).closest(".single-container").attr("id");
408 78167f3e Mike Muzurakis
    machine_connect([machine_connect, serverID]);
409 78167f3e Mike Muzurakis
    return false;
410 78167f3e Mike Muzurakis
});
411 78167f3e Mike Muzurakis

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

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

426 f533f224 Vangelis Koukis
// update the servers list
427 f533f224 Vangelis Koukis
function update_machines_view(data){
428 f533f224 Vangelis Koukis
    /*
429 f533f224 Vangelis Koukis
    Go through the servers in the input data. Update existing entries, add
430 f533f224 Vangelis Koukis
    new ones to the list
431 f533f224 Vangelis Koukis
    */
432 09828cb5 Mike Muzurakis

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

435 f533f224 Vangelis Koukis
        existing = $('#machinesview-single.single #' + server.id);
436 bde8af74 Mike Muzurakis
        existing_link = $('#machinesview-single div.column3 #link-' + server.id);
437 92ce65f8 Mike Muzurakis
        var current_Id = current_serverId();
438 f533f224 Vangelis Koukis

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

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

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

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

622 907bd406 Christodoulos Psaltis
    // show message in case user has no server!
623 907bd406 Christodoulos Psaltis
    if ($('#machinesview-single div.single-container').length == 1) {
624 907bd406 Christodoulos Psaltis
        showWelcome();
625 907bd406 Christodoulos Psaltis
    } else {
626 907bd406 Christodoulos Psaltis
        hideWelcome();
627 bf0bedc2 Mike Muzurakis
        $('.single .column3').show();
628 907bd406 Christodoulos Psaltis
    }
629 f533f224 Vangelis Koukis

630 f533f224 Vangelis Koukis
    //enable widget links
631 f533f224 Vangelis Koukis
    $(".server-name").live('click', function() {
632 f533f224 Vangelis Koukis
        $('.single').find('.single-container').hide()
633 f533f224 Vangelis Koukis
        $('.single').find('#' + $(this).attr('id').substring(5)).show();
634 d2f03cb3 Mike Muzurakis
        $('.single .column3').find('.column3-selected').removeClass('column3-selected');
635 d2f03cb3 Mike Muzurakis
        $(this).addClass('column3-selected');
636 91965c28 Mike Muzurakis
        update_prev_next()
637 f533f224 Vangelis Koukis
    });
638 f533f224 Vangelis Koukis

639 f533f224 Vangelis Koukis
    if ($.cookie('server')) {
640 f533f224 Vangelis Koukis
        $('div#link-' + $.cookie('server')).click();
641 f533f224 Vangelis Koukis
        $.cookie('server', null);
642 f533f224 Vangelis Koukis
    }
643 f533f224 Vangelis Koukis

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

649 91965c28 Mike Muzurakis
    //if it is the first vm, disable the prev button
650 d2f03cb3 Mike Muzurakis
    if ($("#machinesview-single.single .column3 .column3-selected").attr("id") == $("#machinesview-single.single .column3 .server-name:eq(1)").attr("id")) {
651 91965c28 Mike Muzurakis
        $("#machinesview-single.single .column3 .previous").addClass('disabled');
652 f533f224 Vangelis Koukis
    }
653 92ce65f8 Mike Muzurakis
}
654 f533f224 Vangelis Koukis

655 92ce65f8 Mike Muzurakis
//get currently displayed serverId
656 92ce65f8 Mike Muzurakis
function current_serverId() {
657 92ce65f8 Mike Muzurakis
    return $("#machinesview-single.single").find("div.single-container:visible").attr("id");
658 f533f224 Vangelis Koukis
}
659 f533f224 Vangelis Koukis

660 f533f224 Vangelis Koukis
//enable prev-next buttons
661 b13b401f Christodoulos Psaltis
$("#machinesview-single.single .column3 .previous").live('click', function() {
662 b13b401f Christodoulos Psaltis
    // set behavior
663 d2f03cb3 Mike Muzurakis
    if ($("#machinesview-single.single .column3 .column3-selected").attr("id") == $("#machinesview-single.single .column3 .server-name:eq(1)").attr("id")) {
664 f533f224 Vangelis Koukis
        return false;
665 f533f224 Vangelis Koukis
    } else {
666 d2f03cb3 Mike Muzurakis
        current_server = $('#machinesview-single.single .column3').find('.column3-selected').attr("id").substring(5);
667 f533f224 Vangelis Koukis
        $('#machinesview-single.single').find('#' + current_server).hide();
668 f533f224 Vangelis Koukis
        $('#machinesview-single.single').find('#' + current_server).prev().show();
669 d2f03cb3 Mike Muzurakis
        $('#machinesview-single.single .column3').find('#link-' + current_server).removeClass('column3-selected');
670 d2f03cb3 Mike Muzurakis
        $('#machinesview-single.single .column3').find('#link-' + current_server).prev().addClass('column3-selected');
671 91965c28 Mike Muzurakis
        update_prev_next()
672 09828cb5 Mike Muzurakis
        return false;
673 f533f224 Vangelis Koukis
    }
674 f533f224 Vangelis Koukis
});
675 f533f224 Vangelis Koukis

676 b13b401f Christodoulos Psaltis
$("#machinesview-single.single .column3 .next").live('click', function() {
677 b13b401f Christodoulos Psaltis
    // set behavior
678 d2f03cb3 Mike Muzurakis
    if ($("#machinesview-single.single .column3 .column3-selected").attr("id") == $("#machinesview-single.single .column3 .server-name:last").attr("id")) {
679 f533f224 Vangelis Koukis
        return false;
680 f533f224 Vangelis Koukis
        } else {
681 d2f03cb3 Mike Muzurakis
        current_server = $('#machinesview-single.single .column3').find('.column3-selected').attr("id").substring(5);
682 f533f224 Vangelis Koukis
        $('#machinesview-single.single').find('#' + current_server).hide();
683 f533f224 Vangelis Koukis
        $('#machinesview-single.single').find('#' + current_server).next().show();
684 d2f03cb3 Mike Muzurakis
        $('#machinesview-single.single .column3').find('#link-' + current_server).removeClass('column3-selected');
685 d2f03cb3 Mike Muzurakis
        $('#machinesview-single.single .column3').find('#link-' + current_server).next().addClass('column3-selected');
686 91965c28 Mike Muzurakis
        update_prev_next()
687 09828cb5 Mike Muzurakis
        return false;
688 f533f224 Vangelis Koukis
    }
689 f533f224 Vangelis Koukis
});
690 f533f224 Vangelis Koukis

691 91965c28 Mike Muzurakis

692 91965c28 Mike Muzurakis
//enables-disables previous/next buttons accordingly
693 91965c28 Mike Muzurakis
function update_prev_next() {
694 91965c28 Mike Muzurakis
    if ($("#machinesview-single.single .column3 .column3-selected").attr("id") != $("#machinesview-single.single .column3 .server-name:eq(1)").attr("id")) {
695 91965c28 Mike Muzurakis
        $(".single .column3 .previous").removeClass('disabled');
696 91965c28 Mike Muzurakis
    } else {
697 91965c28 Mike Muzurakis
        //disable class
698 91965c28 Mike Muzurakis
        $(".single .column3 .previous").addClass('disabled');
699 91965c28 Mike Muzurakis
    }
700 91965c28 Mike Muzurakis
    if ($("#machinesview-single.single .column3 .column3-selected").attr("id") != $("#machinesview-single.single .column3 .server-name:last").attr("id")) {
701 91965c28 Mike Muzurakis
        $(".single .column3 .next").removeClass('disabled');
702 91965c28 Mike Muzurakis
    } else {
703 91965c28 Mike Muzurakis
        //disable class
704 91965c28 Mike Muzurakis
        $(".single .column3 .next").addClass('disabled');
705 91965c28 Mike Muzurakis
    }
706 37564bb5 Mike Muzurakis
    get_server_stats(current_serverId());
707 91965c28 Mike Muzurakis
}
708 f533f224 Vangelis Koukis

709 f533f224 Vangelis Koukis
// basic functions executed on page load
710 f533f224 Vangelis Koukis
if ( flavors.length == 0 && images.length == 0 ) {
711 f533f224 Vangelis Koukis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
712 f533f224 Vangelis Koukis
    update_flavors();
713 f533f224 Vangelis Koukis
    // populate image list
714 f533f224 Vangelis Koukis
    update_images();
715 f533f224 Vangelis Koukis
} else if ( flavors.length == 0 && images.length != 0 ) {
716 f533f224 Vangelis Koukis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
717 f533f224 Vangelis Koukis
    update_flavors();
718 f533f224 Vangelis Koukis
} else if ( flavors.length != 0 && images.length == 0 ) {
719 f533f224 Vangelis Koukis
    // populate image list
720 f533f224 Vangelis Koukis
    update_images();
721 f533f224 Vangelis Koukis
    update_vms(UPDATE_INTERVAL);
722 f533f224 Vangelis Koukis
} else {
723 f533f224 Vangelis Koukis
    // start updating vm list
724 f533f224 Vangelis Koukis
    update_vms(UPDATE_INTERVAL);
725 f533f224 Vangelis Koukis
}
726 64fe1ae8 Mike Muzurakis

727 64fe1ae8 Mike Muzurakis
//IE specific fixes
728 64fe1ae8 Mike Muzurakis
if ($.browser.msie) {
729 64fe1ae8 Mike Muzurakis
    //IE fix for green arrow hover
730 64fe1ae8 Mike Muzurakis
    $("div.connect-arrow").live("mouseenter", function () {
731 64fe1ae8 Mike Muzurakis
        $(this).addClass("connect-arrow-ie");
732 64fe1ae8 Mike Muzurakis
    });
733 64fe1ae8 Mike Muzurakis
    $("div.connect-arrow").live("mouseleave", function () {
734 64fe1ae8 Mike Muzurakis
        $(this).removeClass("connect-arrow-ie");
735 64fe1ae8 Mike Muzurakis
    });
736 0aec49e0 Mike Muzurakis
    //IE fix for details button
737 0aec49e0 Mike Muzurakis
    $("button.details").live("mouseenter", function () {
738 0aec49e0 Mike Muzurakis
        $(this).css("background-color","#FF7F2A");
739 0aec49e0 Mike Muzurakis
    });
740 0aec49e0 Mike Muzurakis
    $("button.details").live("mouseleave", function () {
741 0aec49e0 Mike Muzurakis
        $(this).css("background-color","transparent");
742 0aec49e0 Mike Muzurakis
    });
743 64fe1ae8 Mike Muzurakis
}
744 64fe1ae8 Mike Muzurakis
745 f533f224 Vangelis Koukis
</script>