Statistics
| Branch: | Tag: | Revision:

root / ui / templates / machines_single.html @ a70fb308

History | View | Annotate | Download (21 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 f533f224 Vangelis Koukis
        <div class="column1">
43 0a5c4b4d Markos Gogoulos
            <img src="static/icons/machines/large/ubuntu-on.png" class="single-image" />
44 f533f224 Vangelis Koukis
            <div class="state">
45 f533f224 Vangelis Koukis
                <span class="state-label">{% trans "Running" %}</span>
46 f533f224 Vangelis Koukis
            </div>
47 f533f224 Vangelis Koukis
            <div class="single-actions">
48 f533f224 Vangelis Koukis
                <div class="single-action action-start">{% trans "Start" %}</a></div>
49 f533f224 Vangelis Koukis
                <div class="single-action action-console">{% trans "Console" %}</a></div>
50 f533f224 Vangelis Koukis
                <div class="single-action action-reboot">{% trans "Reboot" %}</a></div>
51 f533f224 Vangelis Koukis
                <div class="single-action action-shutdown">{% trans "Shutdown" %}</a></div>
52 f533f224 Vangelis Koukis
                <div class="single-action action-destroy">{% trans "Destroy" %}</a></div>
53 f533f224 Vangelis Koukis
            </div>
54 f533f224 Vangelis Koukis
        </div>
55 f533f224 Vangelis Koukis
        <div class="column2">
56 f533f224 Vangelis Koukis
            <div class="machine-labels">
57 f533f224 Vangelis Koukis
                <div class="machine-label name">{% trans "Name" %}:</div>
58 f533f224 Vangelis Koukis
                <div class="machine-label cpus">{% trans "CPUs" %}:</div>
59 f533f224 Vangelis Koukis
                <div class="machine-label ram">{% trans "RAM (MB)" %}:</div>
60 f533f224 Vangelis Koukis
                <div class="machine-label disk">{% trans "System Disk (GB)" %}:</div>
61 f533f224 Vangelis Koukis
                <div class="machine-label image-name">{% trans "Image Name" %}:</div>
62 f533f224 Vangelis Koukis
                <div class="machine-label image-size">{% trans "Image Size (GB)" %}:</div>
63 f533f224 Vangelis Koukis
                <div class="machine-label ipv4">{% trans "Public IPv4" %}:</div>
64 f533f224 Vangelis Koukis
                <div class="machine-label ipv6">{% trans "Public IPv6" %}:</div>
65 f533f224 Vangelis Koukis
                <div class="machine-label groups">{% trans "Groups" %}:</div>
66 f533f224 Vangelis Koukis
            </div>
67 f533f224 Vangelis Koukis
            <div class="machine-details">
68 f533f224 Vangelis Koukis
                <div class="machine-detail name">My Desktop</div>
69 f533f224 Vangelis Koukis
                <div class="machine-detail cpus">4</div>
70 f533f224 Vangelis Koukis
                <div class="machine-detail ram">2048</div>
71 f533f224 Vangelis Koukis
                <div class="machine-detail disk">100</div>
72 f533f224 Vangelis Koukis
                <div class="machine-detail image-name">windos_XP_blah_blah</div>
73 f533f224 Vangelis Koukis
                <div class="machine-detail image-size">2.3</div>
74 f533f224 Vangelis Koukis
                <div class="machine-detail ipv4">no ipv4</div>
75 f533f224 Vangelis Koukis
                <div class="machine-detail ipv6">2001:db8:1f70::999:de8:7648:6e8</div>
76 f533f224 Vangelis Koukis
                <div class="machine-detail groups">
77 f533f224 Vangelis Koukis
                    <div class="machine-detail group">group</div>
78 f533f224 Vangelis Koukis
                </div>
79 f533f224 Vangelis Koukis
            </div>
80 f533f224 Vangelis Koukis
        </div>
81 f533f224 Vangelis Koukis
        <div class="disks">
82 f533f224 Vangelis Koukis
            {% trans "disks" %}<span class="toggler">&#710;</span>
83 f533f224 Vangelis Koukis
        </div>
84 f533f224 Vangelis Koukis
        <div class="disks-content">
85 f533f224 Vangelis Koukis
86 f533f224 Vangelis Koukis
        </div>
87 f533f224 Vangelis Koukis
        <div class="networks">
88 f533f224 Vangelis Koukis
            {% trans "networks" %}<span class="toggler">&#710;</span>
89 f533f224 Vangelis Koukis
        </div>
90 f533f224 Vangelis Koukis
        <div class="networks-content">
91 f533f224 Vangelis Koukis
92 f533f224 Vangelis Koukis
        </div>
93 f533f224 Vangelis Koukis
        <div class="stats">
94 f533f224 Vangelis Koukis
            {% trans "stats" %}<span class="toggler">&#710;</span>
95 f533f224 Vangelis Koukis
        </div>
96 f533f224 Vangelis Koukis
        <div class="stats-content">
97 f533f224 Vangelis Koukis
98 f533f224 Vangelis Koukis
        </div>
99 f533f224 Vangelis Koukis
    </div>
100 f533f224 Vangelis Koukis
    <div class="column3">
101 f533f224 Vangelis Koukis
        <div class="controls">
102 f533f224 Vangelis Koukis
            <div class="previous">
103 f533f224 Vangelis Koukis
                &lt;{% trans "previous" %}
104 f533f224 Vangelis Koukis
            </div>
105 f533f224 Vangelis Koukis
            <div class="next">
106 f533f224 Vangelis Koukis
                {% trans "next" %}&gt;
107 f533f224 Vangelis Koukis
            </div>
108 f533f224 Vangelis Koukis
        </div>
109 f533f224 Vangelis Koukis
        <div class="separator">
110 f533f224 Vangelis Koukis
        </div>
111 f533f224 Vangelis Koukis
        <div class="servers">
112 f533f224 Vangelis Koukis
            <div class="server-name" id="servers-widget-template" style="display:none;">server1</div>
113 f533f224 Vangelis Koukis
        </div>
114 f533f224 Vangelis Koukis
    </div>
115 f533f224 Vangelis Koukis
</div>
116 f533f224 Vangelis Koukis
117 f533f224 Vangelis Koukis
<script>
118 f533f224 Vangelis Koukis

119 f533f224 Vangelis Koukis
//hide the all of the info contents
120 f533f224 Vangelis Koukis
$("#machinesview-single.single .disks-content").hide();
121 f533f224 Vangelis Koukis
$("#machinesview-single.single .networks-content").hide();
122 f533f224 Vangelis Koukis
$("#machinesview-single.single .stats-content").hide();
123 f533f224 Vangelis Koukis

124 f533f224 Vangelis Koukis
// intercept start click
125 f533f224 Vangelis Koukis
$("#machinesview-single.single div.action-start").live('click', function(){
126 f533f224 Vangelis Koukis
    var serverID = $(this).parent().parent().parent().attr("id");
127 f533f224 Vangelis Koukis
    var serverName = $(this).parent().parent().parent().find(".machine-details div.name").text();
128 f533f224 Vangelis Koukis
    var found = false;
129 f533f224 Vangelis Koukis
    $(this).parent().children('a').removeClass('selected');
130 f533f224 Vangelis Koukis
    $(this).addClass('selected');
131 f533f224 Vangelis Koukis
    $(this).parent().addClass('display')
132 f533f224 Vangelis Koukis
    $(this).parent().parent().find('.action_error').hide();
133 f533f224 Vangelis Koukis

134 f533f224 Vangelis Koukis
    for (i=0;i<pending_actions.length;i++){ // if there is already a pending action for this server replace it
135 f533f224 Vangelis Koukis
        if (pending_actions[i][1]==serverID){
136 f533f224 Vangelis Koukis
            pending_actions[i][0] = start;
137 f533f224 Vangelis Koukis
            found = true
138 f533f224 Vangelis Koukis
        }
139 f533f224 Vangelis Koukis
    }
140 f533f224 Vangelis Koukis
    if (!found) // no pending action for this server was found, so let's just add it to the list
141 f533f224 Vangelis Koukis
        pending_actions.push([start, serverID, serverName])
142 f533f224 Vangelis Koukis
    update_confirmations()
143 f533f224 Vangelis Koukis
    return false;
144 f533f224 Vangelis Koukis
});
145 f533f224 Vangelis Koukis

146 f533f224 Vangelis Koukis
// update the servers list
147 f533f224 Vangelis Koukis
function update_machines_view(data){
148 f533f224 Vangelis Koukis
    /*
149 f533f224 Vangelis Koukis
    Go through the servers in the input data. Update existing entries, add
150 f533f224 Vangelis Koukis
    new ones to the list
151 f533f224 Vangelis Koukis
    */
152 09828cb5 Mike Muzurakis

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

155 f533f224 Vangelis Koukis
        existing = $('#machinesview-single.single #' + server.id);
156 bde8af74 Mike Muzurakis
        existing_link = $('#machinesview-single div.column3 #link-' + server.id);
157 f533f224 Vangelis Koukis

158 f533f224 Vangelis Koukis
        //hide next button if there is only one vm
159 f533f224 Vangelis Koukis
        if (data.servers.values.length == 1) {
160 f533f224 Vangelis Koukis
            $("#machinesview-single.single .column3 .next").hide();
161 f533f224 Vangelis Koukis
        }
162 f533f224 Vangelis Koukis

163 f533f224 Vangelis Koukis
        // if multiple machines exist in the DOM, delete all but one
164 f533f224 Vangelis Koukis
        // defensive coding - that shouldn't happen normally
165 f533f224 Vangelis Koukis
        while (existing.length > 1){
166 f533f224 Vangelis Koukis
            existing.remove();
167 f533f224 Vangelis Koukis
        }
168 09828cb5 Mike Muzurakis
        // get server OS, if it exists
169 09828cb5 Mike Muzurakis
        if (!(server.metadata == undefined)) {
170 09828cb5 Mike Muzurakis
            var server_image = os_icon(server.metadata);
171 09828cb5 Mike Muzurakis
        } else {
172 09828cb5 Mike Muzurakis
            var server_image = "unknown"
173 09828cb5 Mike Muzurakis
        }
174 09828cb5 Mike Muzurakis
        // get server status message, if it exists
175 09828cb5 Mike Muzurakis
        var current_message = existing.find(".state-label").text();
176 f533f224 Vangelis Koukis

177 f533f224 Vangelis Koukis
        // server already exists in DOM
178 f533f224 Vangelis Koukis
        if (existing.length){
179 f533f224 Vangelis Koukis
            $("#machinesview-single.single div.single-container:last-child").find("div.separator").show();
180 f533f224 Vangelis Koukis
            //  if the status is deleted, delete it from the DOM
181 f533f224 Vangelis Koukis
            if (server.status == 'DELETED') {
182 f533f224 Vangelis Koukis
                existing.remove();
183 bde8af74 Mike Muzurakis
                existing_link.remove();
184 f533f224 Vangelis Koukis
                try {
185 f533f224 Vangelis Koukis
                    console.info(existing.find("div.name span.name").text() + ' removed');
186 f533f224 Vangelis Koukis
                } catch(err) {}
187 09828cb5 Mike Muzurakis
            }
188 09828cb5 Mike Muzurakis
            // if the status has changed
189 09828cb5 Mike Muzurakis
            else if ( current_message != STATUSES[server.status]) {
190 09828cb5 Mike Muzurakis
                /*
191 09828cb5 Mike Muzurakis
                Here there are 4 possibilities:
192 09828cb5 Mike Muzurakis
                    1. From an active state to an inactive one
193 09828cb5 Mike Muzurakis
                    2. From an inactive state to an active one
194 09828cb5 Mike Muzurakis
                    3. From an active state to a different active one
195 09828cb5 Mike Muzurakis
                    4. From an inactive state to a different inactive one
196 09828cb5 Mike Muzurakis
                The last two (3, 4) can be dealt with the same way
197 09828cb5 Mike Muzurakis
                */
198 09828cb5 Mike Muzurakis
                if (ACTIVE_STATES.indexOf(current_message) >= 0 &&
199 09828cb5 Mike Muzurakis
                    INACTIVE_STATES.indexOf(STATUSES[server.status]) >= 0) {
200 09828cb5 Mike Muzurakis
                    // from an active state to an inactive one
201 09828cb5 Mike Muzurakis
                    log_server_status_change(existing, server.status);
202 f533f224 Vangelis Koukis
                    existing.find("img.single-image").attr("src","static/icons/machines/large/" + server_image + '-off.png');
203 f533f224 Vangelis Koukis
                    existing.find(".state-label").text(STATUSES[server.status]);
204 09828cb5 Mike Muzurakis
                }
205 09828cb5 Mike Muzurakis
                else if (INACTIVE_STATES.indexOf(current_message) >= 0 &&
206 09828cb5 Mike Muzurakis
                         ACTIVE_STATES.indexOf(STATUSES[server.status]) >= 0) {
207 09828cb5 Mike Muzurakis
                    // From an inactive state to an active one
208 09828cb5 Mike Muzurakis
                    log_server_status_change(existing, server.status);
209 09828cb5 Mike Muzurakis
                    existing.find("img.single-image").attr("src","static/icons/machines/large/" + server_image + '-on.png');
210 f533f224 Vangelis Koukis
                    existing.find(".state-label").text(STATUSES[server.status]);
211 f533f224 Vangelis Koukis
                }
212 09828cb5 Mike Muzurakis
                else {
213 09828cb5 Mike Muzurakis
                    // handling active to active or inactive to inactive changes
214 09828cb5 Mike Muzurakis
                    if (TRANSITIONS[current_message] && TRANSITIONS[current_message] != 'Rebooting') {
215 09828cb5 Mike Muzurakis
                        // don't do anything if it is still in transition
216 09828cb5 Mike Muzurakis
                    }
217 09828cb5 Mike Muzurakis
                    else if ((TRANSITIONS[current_message] == 'Rebooting' && server.status == 'ACTIVE') ||
218 09828cb5 Mike Muzurakis
                             (STATUSES['BUILD'] == current_message && server.status == 'ACTIVE')) {
219 09828cb5 Mike Muzurakis
                        // if it has been rebooted or just created
220 09828cb5 Mike Muzurakis
                        log_server_status_change(existing, server.status);
221 09828cb5 Mike Muzurakis
                        existing.find(".state-label").text(STATUSES[server.status]);
222 09828cb5 Mike Muzurakis
                    }
223 09828cb5 Mike Muzurakis
                    else {
224 09828cb5 Mike Muzurakis
                        // in any other case just change the status and ignore spinners/waves
225 09828cb5 Mike Muzurakis
                        existing.find(".state-label").text(STATUSES[server.status]);
226 09828cb5 Mike Muzurakis
                    }
227 f533f224 Vangelis Koukis
                }
228 f533f224 Vangelis Koukis
            }
229 f533f224 Vangelis Koukis
            // find and display ips
230 f533f224 Vangelis Koukis
            var ips = get_public_ips(server);
231 f533f224 Vangelis Koukis
            existing.find(".machine-details div.ipv4").text(ips['ip4']);
232 f533f224 Vangelis Koukis
            existing.find(".machine-details div.ipv6").text(ips['ip6']);
233 09828cb5 Mike Muzurakis

234 f533f224 Vangelis Koukis
        } else if (server.status != 'DELETED') {
235 f533f224 Vangelis Koukis
            // If it does not exist and it's not deleted, we should create it
236 f533f224 Vangelis Koukis
            var serverwidget = $("#servers-widget-template").clone().attr("id", 'link-' + server.id);
237 f533f224 Vangelis Koukis
            if (server.name.length > 18) {
238 f533f224 Vangelis Koukis
                serverwidget.text(server.name.substring(0,15) + '...');
239 f533f224 Vangelis Koukis
            } else {
240 f533f224 Vangelis Koukis
                serverwidget.text(server.name)
241 f533f224 Vangelis Koukis
            }
242 f533f224 Vangelis Koukis
            serverwidget.appendTo('.servers');
243 f533f224 Vangelis Koukis
            serverwidget.show();
244 f533f224 Vangelis Koukis
            //find and hide the previous selected server
245 f533f224 Vangelis Koukis
            $('.single').find('.single-container').hide();
246 f533f224 Vangelis Koukis
            $('.single .column3').find('.selected').removeClass('selected');
247 f533f224 Vangelis Koukis
            //create and select the new one
248 f533f224 Vangelis Koukis
            var machine = $("#machinesview-single.single #machine-container-template").clone().attr("id", server.id);
249 f533f224 Vangelis Koukis
            machine.find(".machine-details div.name").text(server.name.substring(0,100));
250 f533f224 Vangelis Koukis
            machine.find("img.single-image").attr("src","static/icons/machines/large/"+server_image+'-on.png');
251 f533f224 Vangelis Koukis
            machine.find("span.imagetag").text(server_image);
252 f533f224 Vangelis Koukis
            machine.find(".state-label").text(STATUSES[server.status]);
253 f533f224 Vangelis Koukis
            // find and display ips
254 f533f224 Vangelis Koukis
            var ips = get_public_ips(server);
255 f533f224 Vangelis Koukis
            machine.find(".machine-details div.ipv4").text(ips['ip4']);
256 f533f224 Vangelis Koukis
            machine.find(".machine-details div.ipv6").text(ips['ip6']);
257 f533f224 Vangelis Koukis
            // find and display flavor parameters
258 f533f224 Vangelis Koukis
            var CPUs, RAM, disk, image_name, image_size;
259 f533f224 Vangelis Koukis
            if ( flavors.length > 0 ) {
260 f533f224 Vangelis Koukis
                var current_flavor = '';
261 f533f224 Vangelis Koukis
                for (i=0; i<flavors.length; i++) {
262 f533f224 Vangelis Koukis
                    if (flavors[i]['id'] == server.flavorRef) {
263 f533f224 Vangelis Koukis
                        current_flavor = flavors[i];
264 f533f224 Vangelis Koukis
                    }
265 f533f224 Vangelis Koukis
                }
266 f533f224 Vangelis Koukis
                CPUs = current_flavor['cpu'];
267 f533f224 Vangelis Koukis
                RAM = current_flavor['ram'];
268 f533f224 Vangelis Koukis
                disk = current_flavor['disk'];
269 f533f224 Vangelis Koukis
            } else {
270 f533f224 Vangelis Koukis
                CPUs = 0;
271 f533f224 Vangelis Koukis
                RAM = 0;
272 f533f224 Vangelis Koukis
                disk = 0;
273 f533f224 Vangelis Koukis
            }
274 f533f224 Vangelis Koukis
            if ( images.length > 0 ) {
275 f533f224 Vangelis Koukis
                var current_image = '';
276 f533f224 Vangelis Koukis
                for (i=0; i<images.length; i++) {
277 f533f224 Vangelis Koukis
                    if (images[i]['id'] == server.imageRef) {
278 f533f224 Vangelis Koukis
                        current_image = images[i];
279 f533f224 Vangelis Koukis
                    }
280 f533f224 Vangelis Koukis
                }
281 f533f224 Vangelis Koukis
                image_name = current_image['name'];
282 f533f224 Vangelis Koukis
                image_size = current_image['metadata']['values']['size'];
283 f533f224 Vangelis Koukis
            } else {
284 f533f224 Vangelis Koukis
                image_name = ''
285 f533f224 Vangelis Koukis
                image_size = ''
286 f533f224 Vangelis Koukis
            }
287 f533f224 Vangelis Koukis
            machine.find(".machine-details div.cpus").text(CPUs);
288 f533f224 Vangelis Koukis
            machine.find(".machine-details div.ram").text(RAM);
289 f533f224 Vangelis Koukis
            machine.find(".machine-details div.disk").text(disk);
290 f533f224 Vangelis Koukis
            machine.find(".machine-details div.image-name").text(image_name.substring(0,15));
291 f533f224 Vangelis Koukis
            machine.find(".machine-details div.image-size").text(image_size);
292 f533f224 Vangelis Koukis
            //show off image if server is not active
293 f533f224 Vangelis Koukis
            if (['BUILD', 'ACTIVE', 'REBOOT'].indexOf(server.status) < 0){
294 f533f224 Vangelis Koukis
                    machine.find("img.single-image").attr("src","static/icons/machines/large/"+server_image+'-off.png');
295 f533f224 Vangelis Koukis
            }
296 f533f224 Vangelis Koukis
            //show spinner while machine is building
297 f533f224 Vangelis Koukis
            if (server.status == 'BUILD' ||
298 f533f224 Vangelis Koukis
                [TRANSITIONS['Starting'], TRANSITIONS['Shutting down']].indexOf(existing.find(".status").text()) >= 0 ) {
299 f533f224 Vangelis Koukis
                machine.find('.spinner').show();
300 f533f224 Vangelis Koukis
            }
301 f533f224 Vangelis Koukis
            machine.appendTo("#machinesview-single.single");
302 f533f224 Vangelis Koukis
            //disable reboot and shutdown actions while machine is building
303 f533f224 Vangelis Koukis
            if (server.status == 'BUILD') {
304 f533f224 Vangelis Koukis
                $('#machinesview-single.single div.#' + server.id + ' div.action-reboot').hide();
305 f533f224 Vangelis Koukis
                $('#machinesview-single.single div.#' + server.id + ' div.action-shutdown').hide();
306 f533f224 Vangelis Koukis
            }
307 f533f224 Vangelis Koukis
            // show console action only on active servers
308 f533f224 Vangelis Koukis
            if (server.status == 'ACTIVE') {
309 f533f224 Vangelis Koukis
                $('#machinesview-single.single div.#' + server.id + ' div.action-console').show();
310 f533f224 Vangelis Koukis
                $('#machinesview-single.single div.#' + server.id + ' div.action-start').hide();
311 f533f224 Vangelis Koukis
            } else if (server.status == 'REBOOT'){
312 f533f224 Vangelis Koukis
                $('#machinesview-single.single div.#' + server.id + ' div.action-console').hide();
313 f533f224 Vangelis Koukis
            } else {
314 f533f224 Vangelis Koukis
                $('#machinesview-single.single div.#' + server.id + ' div.action-console').hide();
315 f533f224 Vangelis Koukis
                $('#machinesview-single.single div.#' + server.id + ' div.action-reboot').hide();
316 f533f224 Vangelis Koukis
                $('#machinesview-single.single div.#' + server.id + ' div.action-shutdown').hide();
317 f533f224 Vangelis Koukis
            }
318 09828cb5 Mike Muzurakis
            //show the first machine and select it in the widget
319 09828cb5 Mike Muzurakis
            $('.single-container:eq(1)').show();
320 09828cb5 Mike Muzurakis
            $('.single .column3').find('.server-name:eq(1)').addClass('selected');
321 f533f224 Vangelis Koukis
        }
322 f533f224 Vangelis Koukis
    });
323 f533f224 Vangelis Koukis

324 f533f224 Vangelis Koukis
    $("#machinesview-single.single > div.large-spinner").hide();
325 f533f224 Vangelis Koukis

326 f533f224 Vangelis Koukis
    // show message in case user has no servers!
327 f533f224 Vangelis Koukis
    //if ($('.single-container').length < 2) {
328 f533f224 Vangelis Koukis
    //    showWelcome();
329 f533f224 Vangelis Koukis
    //} else {
330 f533f224 Vangelis Koukis
    //    hideWelcome();
331 f533f224 Vangelis Koukis
    //}
332 f533f224 Vangelis Koukis

333 f533f224 Vangelis Koukis
    // set confirm box position
334 f533f224 Vangelis Koukis
    if (window.innerHeight - 220 < $('#machinesview-single').height())
335 f533f224 Vangelis Koukis
        $('.confirm_multiple').addClass('fixed');
336 f533f224 Vangelis Koukis
    else
337 f533f224 Vangelis Koukis
        $('.confirm_multiple').removeClass('fixed');
338 f533f224 Vangelis Koukis

339 f533f224 Vangelis Koukis
    //enable widget links
340 f533f224 Vangelis Koukis
    $(".server-name").live('click', function() {
341 f533f224 Vangelis Koukis
        $('.single').find('.single-container').hide()
342 f533f224 Vangelis Koukis
        $('.single').find('#' + $(this).attr('id').substring(5)).show();
343 f533f224 Vangelis Koukis
        $('.single .column3').find('.selected').removeClass('selected');
344 f533f224 Vangelis Koukis
        $(this).addClass('selected');
345 f533f224 Vangelis Koukis
        $(".single .column3 .previous").show();
346 f533f224 Vangelis Koukis
        $(".single .column3 .next").show();
347 f533f224 Vangelis Koukis
        if ($(this).attr("id") == $(".single .column3 .server-name:eq(1)").attr("id")) {
348 f533f224 Vangelis Koukis
            $(".single .column3 .previous").hide();
349 f533f224 Vangelis Koukis
        } else if ($(this).attr("id") == $(".single .column3 .server-name:last").attr("id")) {
350 f533f224 Vangelis Koukis
            $(".single .column3 .next").hide();
351 f533f224 Vangelis Koukis
        }
352 f533f224 Vangelis Koukis
    });
353 f533f224 Vangelis Koukis

354 f533f224 Vangelis Koukis
    //toggle content
355 f533f224 Vangelis Koukis
    $("div.disks").toggle(function() {
356 f533f224 Vangelis Koukis
            $(this).find('.toggler').html("&#711;");
357 f533f224 Vangelis Koukis
            $(this).next(".disks-content").slideToggle(600);
358 f533f224 Vangelis Koukis
            return false;
359 f533f224 Vangelis Koukis
        }, function() {
360 f533f224 Vangelis Koukis
            $(this).find('.toggler').html('&#710;');
361 f533f224 Vangelis Koukis
            $(this).next(".disks-content").slideToggle(600);
362 f533f224 Vangelis Koukis
            return false;
363 f533f224 Vangelis Koukis
    });
364 f533f224 Vangelis Koukis
    $("div.networks").toggle(function() {
365 f533f224 Vangelis Koukis
            $(this).find('.toggler').html("&#711;");
366 f533f224 Vangelis Koukis
            $(this).next(".networks-content").slideToggle(600);
367 f533f224 Vangelis Koukis
            return false;
368 f533f224 Vangelis Koukis
        }, function() {
369 f533f224 Vangelis Koukis
            $(this).find('.toggler').html('&#710;');
370 f533f224 Vangelis Koukis
            $(this).next(".networks-content").slideToggle(600);
371 f533f224 Vangelis Koukis
            return false;
372 f533f224 Vangelis Koukis
    });
373 f533f224 Vangelis Koukis
    $("div.stats").toggle(function() {
374 f533f224 Vangelis Koukis
            $(this).find('.toggler').html("&#711;");
375 f533f224 Vangelis Koukis
            $(this).next(".stats-content").slideToggle(600);
376 f533f224 Vangelis Koukis
            return false;
377 f533f224 Vangelis Koukis
        }, function() {
378 f533f224 Vangelis Koukis
            $(this).find('.toggler').html('&#710;');
379 f533f224 Vangelis Koukis
            $(this).next(".stats-content").slideToggle(600);
380 f533f224 Vangelis Koukis
            return false;
381 f533f224 Vangelis Koukis
    });
382 f533f224 Vangelis Koukis

383 f533f224 Vangelis Koukis
    if ($.cookie('server')) {
384 f533f224 Vangelis Koukis
        $('div#link-' + $.cookie('server')).click();
385 f533f224 Vangelis Koukis
        $.cookie('server', null);
386 f533f224 Vangelis Koukis
    }
387 f533f224 Vangelis Koukis

388 f533f224 Vangelis Koukis
    //if it is the last vm, hide the next button
389 f533f224 Vangelis Koukis
    if ($("#machinesview-single.single .column3 .selected").attr("id") == $("#machinesview-single.single .column3 .server-name:last").attr("id")) {
390 f533f224 Vangelis Koukis
        $("#machinesview-single.single .column3 .next").hide()
391 f533f224 Vangelis Koukis
    } else {
392 f533f224 Vangelis Koukis
        $("#machinesview-single.single .column3 .next").show()
393 f533f224 Vangelis Koukis
    }
394 f533f224 Vangelis Koukis

395 f533f224 Vangelis Koukis
    //if it is the first vm, hide the prev button
396 f533f224 Vangelis Koukis
    if ($("#machinesview-single.single .column3 .selected").attr("id") == $("#machinesview-single.single .column3 .server-name:eq(1)").attr("id")) {
397 f533f224 Vangelis Koukis
        $("#machinesview-single.single .column3 .previous").hide()
398 f533f224 Vangelis Koukis
    } else {
399 f533f224 Vangelis Koukis
        $("#machinesview-single.single .column3 .previous").show()
400 f533f224 Vangelis Koukis
    }
401 f533f224 Vangelis Koukis

402 f533f224 Vangelis Koukis
}
403 f533f224 Vangelis Koukis

404 f533f224 Vangelis Koukis
//enable prev-next buttons
405 f533f224 Vangelis Koukis
$("#machinesview-single.single .column3 .previous").live('click', function(){
406 f533f224 Vangelis Koukis
    if ($("#machinesview-single.single .column3 .selected").attr("id") == $("#machinesview-single.single .column3 .server-name:eq(1)").attr("id")) {
407 f533f224 Vangelis Koukis
        return false;
408 f533f224 Vangelis Koukis
    } else {
409 f533f224 Vangelis Koukis
        current_server = $('#machinesview-single.single .column3').find('.selected').attr("id").substring(5);
410 f533f224 Vangelis Koukis
        $('#machinesview-single.single').find('#' + current_server).hide();
411 f533f224 Vangelis Koukis
        $('#machinesview-single.single').find('#' + current_server).prev().show();
412 f533f224 Vangelis Koukis
        $('#machinesview-single.single .column3').find('#link-' + current_server).removeClass('selected');
413 f533f224 Vangelis Koukis
        $('#machinesview-single.single .column3').find('#link-' + current_server).prev().addClass('selected');
414 f533f224 Vangelis Koukis
        if ($("#machinesview-single.single .column3 .selected").attr("id") == $("#machinesview-single.single .column3 .server-name:eq(1)").attr("id")) {
415 f533f224 Vangelis Koukis
            $(this).hide()
416 f533f224 Vangelis Koukis
        }
417 f533f224 Vangelis Koukis
        $("#machinesview-single.single .column3 .next").show()
418 09828cb5 Mike Muzurakis
        return false;
419 f533f224 Vangelis Koukis
    }
420 f533f224 Vangelis Koukis
});
421 f533f224 Vangelis Koukis

422 f533f224 Vangelis Koukis
$("#machinesview-single.single .column3 .next").live('click', function(){
423 f533f224 Vangelis Koukis
    if ($("#machinesview-single.single .column3 .selected").attr("id") == $("#machinesview-single.single .column3 .server-name:last").attr("id")) {
424 f533f224 Vangelis Koukis
        return false;
425 f533f224 Vangelis Koukis
        } else {
426 f533f224 Vangelis Koukis
        current_server = $('#machinesview-single.single .column3').find('.selected').attr("id").substring(5);
427 f533f224 Vangelis Koukis
        $('#machinesview-single.single').find('#' + current_server).hide();
428 f533f224 Vangelis Koukis
        $('#machinesview-single.single').find('#' + current_server).next().show();
429 f533f224 Vangelis Koukis
        $('#machinesview-single.single .column3').find('#link-' + current_server).removeClass('selected');
430 f533f224 Vangelis Koukis
        $('#machinesview-single.single .column3').find('#link-' + current_server).next().addClass('selected');
431 f533f224 Vangelis Koukis
        //if it is the last vm, hide the next button
432 f533f224 Vangelis Koukis
        if ($("#machinesview-single.single .column3 .selected").attr("id") == $("#machinesview-single.single .column3 .server-name:last").attr("id")) {
433 f533f224 Vangelis Koukis
            $(this).hide()
434 f533f224 Vangelis Koukis
        }
435 f533f224 Vangelis Koukis
        $("#machinesview-single.single .column3 .previous").show();
436 09828cb5 Mike Muzurakis
        return false;
437 f533f224 Vangelis Koukis
    }
438 f533f224 Vangelis Koukis
});
439 f533f224 Vangelis Koukis

440 f533f224 Vangelis Koukis
//hide prev button on startup
441 f533f224 Vangelis Koukis
$("#machinesview-single.single .column3 .previous").hide()
442 f533f224 Vangelis Koukis

443 f533f224 Vangelis Koukis
// basic functions executed on page load
444 f533f224 Vangelis Koukis
if ( flavors.length == 0 && images.length == 0 ) {
445 f533f224 Vangelis Koukis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
446 f533f224 Vangelis Koukis
    update_flavors();
447 f533f224 Vangelis Koukis
    // populate image list
448 f533f224 Vangelis Koukis
    update_images();
449 f533f224 Vangelis Koukis
} else if ( flavors.length == 0 && images.length != 0 ) {
450 f533f224 Vangelis Koukis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
451 f533f224 Vangelis Koukis
    update_flavors();
452 f533f224 Vangelis Koukis
} else if ( flavors.length != 0 && images.length == 0 ) {
453 f533f224 Vangelis Koukis
    // populate image list
454 f533f224 Vangelis Koukis
    update_images();
455 f533f224 Vangelis Koukis
    update_vms(UPDATE_INTERVAL);
456 f533f224 Vangelis Koukis
} else {
457 f533f224 Vangelis Koukis
    // start updating vm list
458 f533f224 Vangelis Koukis
    update_vms(UPDATE_INTERVAL);
459 f533f224 Vangelis Koukis
}
460 f533f224 Vangelis Koukis

461 f533f224 Vangelis Koukis
//FIXME: Hide and show welcome depending on number of machines
462 f533f224 Vangelis Koukis
hideWelcome();
463 f533f224 Vangelis Koukis
</script>