Statistics
| Branch: | Tag: | Revision:

root / ui / templates / machines_icon.html @ db269618

History | View | Annotate | Download (33.5 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 42f67a2a Dimitris Moraitis
{% load i18n %}
37 42f67a2a Dimitris Moraitis
38 42f67a2a Dimitris Moraitis
<!-- the standard view -->
39 f533f224 Vangelis Koukis
<div id="machinesview-icon" class="standard">
40 14f61457 Mike Muzurakis
    <div class="machine-container" id="machine-container-template" style="display:none">
41 c9f5ed3f Christodoulos Psaltis
        <div class="machine" id="machine-template">
42 aae6187b Mike Muzurakis
            <div class='connect-border'></div>
43 aae6187b Mike Muzurakis
            <div class='connect-arrow'></div>
44 aae6187b Mike Muzurakis
            <img class="logo" src="" />
45 aae6187b Mike Muzurakis
            <div class="machine-details">
46 aae6187b Mike Muzurakis
                <div href="#" class="name">
47 aae6187b Mike Muzurakis
                    <h5 class="namecontainer editable">
48 aae6187b Mike Muzurakis
                        <span class="name">node.name</span><span class="rename"></span>
49 aae6187b Mike Muzurakis
                        <div class="editbuttons" style="display:none">
50 aae6187b Mike Muzurakis
                            <div class="save"></div>
51 aae6187b Mike Muzurakis
                            <div class="cancel"></div>
52 aae6187b Mike Muzurakis
                        </div>
53 aae6187b Mike Muzurakis
                    </h5>
54 aae6187b Mike Muzurakis
                </div>
55 aae6187b Mike Muzurakis
                <a href="#" class="ip">
56 aae6187b Mike Muzurakis
                    <h5>{% trans "IP" %}: <span class="public">node.public_ip</span></h5>
57 aae6187b Mike Muzurakis
                </a>
58 aae6187b Mike Muzurakis
            </div>
59 aae6187b Mike Muzurakis
            <div class="info">
60 aae6187b Mike Muzurakis
                <div class="info-header">
61 aae6187b Mike Muzurakis
                    <div class="info-label">{% trans "info" %}</div>
62 aae6187b Mike Muzurakis
                    <div class="toggler down"></div>
63 aae6187b Mike Muzurakis
                </div>
64 aae6187b Mike Muzurakis
            </div>
65 aae6187b Mike Muzurakis
            <div class="info-content">
66 aae6187b Mike Muzurakis
                <div class="metadata-container">
67 aae6187b Mike Muzurakis
                    <div class="vm-details metadata-column">
68 aae6187b Mike Muzurakis
                        {% trans "CPUs" %}: <span class="cpu-data">1</span><br />
69 aae6187b Mike Muzurakis
                        {% trans "RAM" %}: <span class="ram-data">2048</span> (MB)<br />
70 aae6187b Mike Muzurakis
                        {% trans "System Disk" %}: <span class="disk-data">20</span> (GB) <br /><br />
71 aae6187b Mike Muzurakis
                        {% trans "Image" %}: <span class="image-data">Debian</span><br />
72 aae6187b Mike Muzurakis
                        {% trans "Image Size" %}: <span class="image-size-data">2.3</span> (GB)
73 aae6187b Mike Muzurakis
                    </div>
74 aae6187b Mike Muzurakis
                    <div class="vm-stats metadata-column">
75 aae6187b Mike Muzurakis
                        {% trans "CPU" %} <img src="static/cpu-bar.png" class="metadata-bar" /><br />
76 aae6187b Mike Muzurakis
                        {% trans "RAM" %} <img src="static/ram-bar.png" class="metadata-bar" /><br />
77 aae6187b Mike Muzurakis
                        {% trans "S.Disk" %} <img src="static/cpu-bar.png" class="metadata-bar" /><br />
78 aae6187b Mike Muzurakis
                        {% trans "Net" %} <img src="static/net-bar.png" class="metadata-bar" /><br /><br />
79 aae6187b Mike Muzurakis
                        {% trans "details" %}
80 aae6187b Mike Muzurakis
                    </div>
81 aae6187b Mike Muzurakis
                    <div class="vm-metadata metadata-column">
82 aae6187b Mike Muzurakis
                        <div class="metadata-left">
83 aae6187b Mike Muzurakis
                            {% trans "Metadata" %}: <br />
84 aae6187b Mike Muzurakis
                            (<span class="metadata-count">0</span>)
85 aae6187b Mike Muzurakis
                        </div>
86 aae6187b Mike Muzurakis
                        <div class="metadata-keys-container">
87 aae6187b Mike Muzurakis
                            <div class="scrollable vertical">
88 aae6187b Mike Muzurakis
                                <div class="items">
89 aae6187b Mike Muzurakis
                                </div>
90 aae6187b Mike Muzurakis
                            </div>
91 aae6187b Mike Muzurakis
                            <div class="metadata-actions">
92 aae6187b Mike Muzurakis
                                <div class="prev"></div>
93 aae6187b Mike Muzurakis
                                <div class="next"></div>
94 aae6187b Mike Muzurakis
                            </div>
95 aae6187b Mike Muzurakis
                        </div>
96 aae6187b Mike Muzurakis
                        <a href="#" class="manage-metadata">{% trans "Manage Tags" %}</a>
97 aae6187b Mike Muzurakis
                    </div>
98 aae6187b Mike Muzurakis
                </div>
99 aae6187b Mike Muzurakis
            </div>
100 aae6187b Mike Muzurakis
            <div class="state">
101 aae6187b Mike Muzurakis
                <div class="status">{% trans "Running" %}</div>
102 aae6187b Mike Muzurakis
                <div class="indicators">
103 aae6187b Mike Muzurakis
                    <div class="indicator1"></div>
104 aae6187b Mike Muzurakis
                    <div class="indicator2"></div>
105 aae6187b Mike Muzurakis
                    <div class="indicator3"></div>
106 aae6187b Mike Muzurakis
                    <div class="indicator4"></div>
107 aae6187b Mike Muzurakis
                </div>
108 aae6187b Mike Muzurakis
                <img class="spinner" style="display:none" src="static/icons/indicators/medium/progress.gif" />
109 aae6187b Mike Muzurakis
                <img class="wave" style="display:none" src="static/icons/indicators/medium/wave.gif" />
110 aae6187b Mike Muzurakis
            </div>
111 14f61457 Mike Muzurakis
            <div class="actions">
112 72872ba2 Christodoulos Psaltis
                <div class="action-container start">
113 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-start">{% trans "Start" %}</a>
114 72872ba2 Christodoulos Psaltis
                    <div class="confirm_single">
115 72872ba2 Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
116 72872ba2 Christodoulos Psaltis
                        <button class="no">X</button>
117 72872ba2 Christodoulos Psaltis
                    </div>
118 72872ba2 Christodoulos Psaltis
                </div>
119 72872ba2 Christodoulos Psaltis
                <div class="action-container reboot">
120 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-reboot">{% trans "Reboot" %}</a>
121 72872ba2 Christodoulos Psaltis
                    <div class="confirm_single">
122 72872ba2 Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
123 72872ba2 Christodoulos Psaltis
                        <button class="no">X</button>
124 72872ba2 Christodoulos Psaltis
                    </div>
125 72872ba2 Christodoulos Psaltis
                </div>
126 72872ba2 Christodoulos Psaltis
                <div class="action-container shutdown">
127 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-shutdown">{% trans "Shutdown" %}</a>
128 72872ba2 Christodoulos Psaltis
                    <div class="confirm_single">
129 72872ba2 Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
130 72872ba2 Christodoulos Psaltis
                        <button class="no">X</button>
131 72872ba2 Christodoulos Psaltis
                    </div>
132 72872ba2 Christodoulos Psaltis
                </div>
133 72872ba2 Christodoulos Psaltis
                <div class="action-container console">
134 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-console">{% trans "Console" %}</a>
135 72872ba2 Christodoulos Psaltis
                    <div class="confirm_single">
136 72872ba2 Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
137 72872ba2 Christodoulos Psaltis
                        <button class="no">X</button>
138 72872ba2 Christodoulos Psaltis
                    </div>
139 72872ba2 Christodoulos Psaltis
                </div>
140 72872ba2 Christodoulos Psaltis
                <div class="action-container destroy">
141 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-destroy">{% trans "Destroy" %}</a>
142 72872ba2 Christodoulos Psaltis
                    <div class="confirm_single">
143 72872ba2 Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
144 72872ba2 Christodoulos Psaltis
                        <button class="no">X</button>
145 72872ba2 Christodoulos Psaltis
                    </div>
146 72872ba2 Christodoulos Psaltis
                </div>
147 f533f224 Vangelis Koukis
            </div>
148 09d3fbbf Mike Muzurakis
            <div class="action_error" align="center">
149 9e53fd01 Christodoulos Psaltis
                {% trans "<span>Error</span> on" %} <span class="action">{% trans "error action" %}</span>
150 f533f224 Vangelis Koukis
                <span class="code"></span>
151 09d3fbbf Mike Muzurakis
                <span class="message"></span>
152 09d3fbbf Mike Muzurakis
                <button class="details">{% trans "Details" %}</button>
153 09d3fbbf Mike Muzurakis
            </div>
154 879748ec Markos Gogoulos
        </div>
155 c2464ef2 Christodoulos Psaltis
        <div class="separator"></div>
156 42f67a2a Dimitris Moraitis
    </div>
157 7a3f7b8f Mike Muzurakis
    <div class="running"><div class="large-spinner"></div></div>
158 f533f224 Vangelis Koukis
    <div class="terminated" style="display:none;"></div>
159 42f67a2a Dimitris Moraitis
</div>
160 42f67a2a Dimitris Moraitis
161 42f67a2a Dimitris Moraitis
<script>
162 bb253902 Dimitris Moraitis
CONFIRMBOX_OFFSET = 200;
163 31e549f5 Christodoulos Psaltis

164 1310d4f0 Christodoulos Psaltis
// actions on machine mouseover
165 38d99960 Christodoulos Psaltis
$("#machinesview-icon.standard .machine").live('mouseover', function() {
166 206e04ae Christodoulos Psaltis
    // show connect button only if the machine is active
167 206e04ae Christodoulos Psaltis
    if ($(this).find('.status').text() == STATUSES['ACTIVE']) {
168 206e04ae Christodoulos Psaltis
        $(this).find("div.connect-arrow").show();
169 206e04ae Christodoulos Psaltis
        $(this).find("div.connect-border").show();
170 206e04ae Christodoulos Psaltis
    }
171 38d99960 Christodoulos Psaltis
});
172 38d99960 Christodoulos Psaltis

173 1310d4f0 Christodoulos Psaltis
// actions on machine mouseout
174 38d99960 Christodoulos Psaltis
$("#machinesview-icon.standard .machine").live('mouseout', function() {
175 0a6b3683 Christodoulos Psaltis
    // hide connect button
176 ba16aed0 Christodoulos Psaltis
    $(this).find("div.connect-arrow").hide();
177 38d99960 Christodoulos Psaltis
    $(this).find("div.connect-border").hide();
178 38d99960 Christodoulos Psaltis
});
179 38d99960 Christodoulos Psaltis

180 1310d4f0 Christodoulos Psaltis
// actions on connect arrow border mouseover
181 1310d4f0 Christodoulos Psaltis
$("#machinesview-icon.standard .running div.connect-border").live('mouseover', function() {
182 1310d4f0 Christodoulos Psaltis
    $(this).next().addClass('border-hover');
183 1310d4f0 Christodoulos Psaltis
});
184 1310d4f0 Christodoulos Psaltis

185 1310d4f0 Christodoulos Psaltis
// actions on connect arrow border mouseout
186 1310d4f0 Christodoulos Psaltis
$("#machinesview-icon.standard .running div.connect-border").live('mouseout', function() {
187 1310d4f0 Christodoulos Psaltis
    $(this).next().removeClass('border-hover');
188 1310d4f0 Christodoulos Psaltis
});
189 1310d4f0 Christodoulos Psaltis

190 31e549f5 Christodoulos Psaltis
// open console on machine logo click
191 31e549f5 Christodoulos Psaltis
$("#machinesview-icon.standard .running img.logo").live('click', function(){
192 31e549f5 Christodoulos Psaltis
    $(this).parent().parent().find("a.action-console").click();
193 31e549f5 Christodoulos Psaltis
    return false;
194 31e549f5 Christodoulos Psaltis
});
195 31e549f5 Christodoulos Psaltis

196 31e549f5 Christodoulos Psaltis
// open console on connect arrow click
197 31e549f5 Christodoulos Psaltis
$("#machinesview-icon.standard .running div.connect-arrow").live('click', function(){
198 31e549f5 Christodoulos Psaltis
    $(this).parent().parent().find("a.action-console").click();
199 31e549f5 Christodoulos Psaltis
    return false;
200 31e549f5 Christodoulos Psaltis
});
201 0a6b3683 Christodoulos Psaltis

202 1310d4f0 Christodoulos Psaltis
// open console on connect arrow border click
203 1310d4f0 Christodoulos Psaltis
$("#machinesview-icon.standard .running div.connect-border").live('click', function(){
204 1310d4f0 Christodoulos Psaltis
    $(this).parent().parent().find("a.action-console").click();
205 1310d4f0 Christodoulos Psaltis
    return false;
206 1310d4f0 Christodoulos Psaltis
});
207 1310d4f0 Christodoulos Psaltis

208 beef1f05 Mike Muzurakis
//hide the all of the info contents
209 f533f224 Vangelis Koukis
$("#machinesview-icon.standard .info-content").hide();
210 beef1f05 Mike Muzurakis
//toggle the component with class info-content
211 0f47e121 Christodoulos Psaltis
$("#machinesview-icon.standard div.info-header").live('click', function() {
212 69cebe8a Christodoulos Psaltis
    if ($(this).find('.toggler').hasClass('up')) {
213 69cebe8a Christodoulos Psaltis
        $(this).find('.toggler').removeClass('up');
214 0be864b6 Christodoulos Psaltis
        $(this).find('.toggler').addClass('down');
215 8e88c3fe Christodoulos Psaltis
        $(this).find('.info-label').removeClass('darker');
216 e5b6f8f8 Christodoulos Psaltis
        $(this).parent().parent().removeClass('light-background');
217 69cebe8a Christodoulos Psaltis
    } else {
218 0be864b6 Christodoulos Psaltis
        $(this).find('.toggler').removeClass('down');
219 69cebe8a Christodoulos Psaltis
        $(this).find('.toggler').addClass('up');
220 8e88c3fe Christodoulos Psaltis
        $(this).find('.info-label').addClass('darker');
221 0f47e121 Christodoulos Psaltis
        $(this).parent().parent().addClass('light-background');
222 69cebe8a Christodoulos Psaltis
    }
223 826ba503 Mike Muzurakis
    $(this).parent().parent().find(".info-content").slideToggle(600);
224 0a8e39b4 Mike Muzurakis
    return false;
225 beef1f05 Mike Muzurakis
});
226 beef1f05 Mike Muzurakis

227 beef1f05 Mike Muzurakis
// intercept manage metadata click
228 f533f224 Vangelis Koukis
$("#machinesview-icon.standard a.manage-metadata").live('click', function() {
229 339712cb Christodoulos Psaltis
    // get server name and server ID
230 9a3c23db Christodoulos Psaltis
    var serverID = $(this).closest('.machine-container').attr("id");
231 9a3c23db Christodoulos Psaltis
    var serverName = $(this).closest('.machine').find("span.name").text();
232 4629cc1f Christodoulos Psaltis
    // set server name to all related metadata dialogs
233 f533f224 Vangelis Koukis
    $("#metadata-wizard div.machine-name").text(serverName);
234 00ee3189 Christodoulos Psaltis
    if ($(this).closest('.machine-container').parent().hasClass('terminated')) {
235 f533f224 Vangelis Koukis
        $("#metadata-wizard div#on-off").text('off');
236 f533f224 Vangelis Koukis
    } else {
237 f533f224 Vangelis Koukis
        $("#metadata-wizard div#on-off").text('on');
238 f533f224 Vangelis Koukis
    }
239 4629cc1f Christodoulos Psaltis
    // set server id to all related metadata dialogs
240 f533f224 Vangelis Koukis
    $("#metadata-wizard p").text(serverID);
241 71eade6b Christodoulos Psaltis
    show_metadata_wizard();
242 ef7770cf Dimitris Moraitis
    return false;
243 339712cb Christodoulos Psaltis
});
244 339712cb Christodoulos Psaltis

245 a70a9116 Mike Muzurakis
//initiate machine renaming
246 f533f224 Vangelis Koukis
$("#machinesview-icon.standard .rename, #machinesview-icon.standard h5.editable span.name").live('click', function() {
247 134a9f26 Christodoulos Psaltis
    $(this).parent().find('.name').html("<input id=\"txtEdit\" type=\"text\" class=\"nametextbox\" value=\"" +
248 f533f224 Vangelis Koukis
                                        $(this).parent().find('.name').text() +
249 f533f224 Vangelis Koukis
                                        "\" / ><span class=\"oldValue\">" +
250 134a9f26 Christodoulos Psaltis
                                        $(this).parent().find('.name').text() + "</span>");
251 c64c04ec Dimitris Moraitis
    $(this).parent().find('.rename').hide();
252 c64c04ec Dimitris Moraitis
    $(this).parent().find(".editbuttons").fadeIn();
253 96bb1d47 Christodoulos Psaltis
    $(this).parent().find(".nametextbox").focus().select();
254 3f198846 Dimitris Moraitis
    $(this).parent().removeClass('editable');
255 86c97ac3 Christodoulos Psaltis

256 86c97ac3 Christodoulos Psaltis
    //submit wizard by pressing enter on the name textbox
257 5868fb6e Christodoulos Psaltis
    $("#txtEdit").keydown(function (e) {
258 f533f224 Vangelis Koukis
        if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
259 86c97ac3 Christodoulos Psaltis
            $(this).parent().parent().find('div.editbuttons span.save').click();
260 f533f224 Vangelis Koukis
            return false;
261 f533f224 Vangelis Koukis
        } else if ((e.which && e.which == 27) || (e.keyCode && e.keyCode == 27)) {
262 86c97ac3 Christodoulos Psaltis
            $(this).parent().parent().find('div.editbuttons span.cancel').click();
263 f533f224 Vangelis Koukis
            return true;
264 f533f224 Vangelis Koukis
        }
265 86c97ac3 Christodoulos Psaltis
    });
266 3f198846 Dimitris Moraitis
    return false;
267 0d4faeb8 Mike Muzurakis
});
268 0d4faeb8 Mike Muzurakis

269 a70a9116 Mike Muzurakis
//rename machine
270 f533f224 Vangelis Koukis
$("#machinesview-icon.standard .editbuttons .save").live('click', function() {
271 14f61457 Mike Muzurakis
    serverID = $(this).closest('.machine-container').attr("id");
272 a70a9116 Mike Muzurakis
    serverName = $(this).parent().parent().find('.name').find('.nametextbox').val();
273 2b10d496 Mike Muzurakis
    if (serverName.trim() == ''){
274 2b10d496 Mike Muzurakis
        return false;
275 2b10d496 Mike Muzurakis
    }
276 a70a9116 Mike Muzurakis
    $(this).parent().parent().find('.name').html($(this).parent().parent().find('.nametextbox').val());
277 a70a9116 Mike Muzurakis
    $(this).parent().parent().find(".editbuttons").fadeOut("fast");
278 a70a9116 Mike Muzurakis
    $(this).parent().parent().find(".rename").fadeIn("slow");
279 73715544 Christodoulos Psaltis
    rename(serverID, serverName);
280 a70a9116 Mike Muzurakis
    return false;
281 a70a9116 Mike Muzurakis
});
282 a70a9116 Mike Muzurakis

283 0d4faeb8 Mike Muzurakis
//cancel renaming
284 f533f224 Vangelis Koukis
$("#machinesview-icon.standard .editbuttons .cancel").live('click', function() {
285 f533f224 Vangelis Koukis
    $(this).parent().parent().find('.name').html($(this).parent().parent().find('.oldValue').text());
286 c64c04ec Dimitris Moraitis
    $(this).parent().parent().find(".editbuttons").hide();
287 c64c04ec Dimitris Moraitis
    $(this).parent().parent().find(".rename").fadeIn();
288 3f198846 Dimitris Moraitis
    $(this).parent().parent().addClass('editable');
289 f533f224 Vangelis Koukis
    return false;
290 0d4faeb8 Mike Muzurakis
});
291 0d4faeb8 Mike Muzurakis

292 f533f224 Vangelis Koukis
// intercept reboot click
293 72872ba2 Christodoulos Psaltis
$("#machinesview-icon.standard div.actions a.action-reboot").live('click', function() {
294 72872ba2 Christodoulos Psaltis
    // get server id and server name from DOM
295 72872ba2 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
296 72872ba2 Christodoulos Psaltis
    var serverName = $(this).closest("div.machine").find("div.name span.name").text();
297 267403ca Dimitris Moraitis
    var found = false;
298 72872ba2 Christodoulos Psaltis
    // show/hide proper menus
299 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().find('a').removeClass('selected');
300 aa0534a7 Dimitris Moraitis
    $(this).addClass('selected');
301 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().addClass('display');
302 72872ba2 Christodoulos Psaltis
    $(this).closest("div.machine").find('.action_error').hide();
303 72872ba2 Christodoulos Psaltis
    // if there is already a pending action for this server replace it
304 72872ba2 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) {
305 db269618 Christodoulos Psaltis
        if (pending_actions[i][1] == serverID) {
306 267403ca Dimitris Moraitis
            pending_actions[i][0] = reboot;
307 267403ca Dimitris Moraitis
            found = true
308 267403ca Dimitris Moraitis
        }
309 267403ca Dimitris Moraitis
    }
310 72872ba2 Christodoulos Psaltis
    // no pending action for this server was found, so let's just add it to the list
311 72872ba2 Christodoulos Psaltis
    if (!found)
312 267403ca Dimitris Moraitis
        pending_actions.push([reboot, serverID, serverName])
313 72872ba2 Christodoulos Psaltis
    // pass the proper action to update confirmation boxes
314 a70fb308 Christodoulos Psaltis
    update_confirmations();
315 42f67a2a Dimitris Moraitis
    return false;
316 42f67a2a Dimitris Moraitis
});
317 42f67a2a Dimitris Moraitis

318 42f67a2a Dimitris Moraitis
// intercept shutdown click
319 72872ba2 Christodoulos Psaltis
$("#machinesview-icon.standard div.actions a.action-shutdown").live('click', function() {
320 72872ba2 Christodoulos Psaltis
    // get server id and server name from DOM
321 72872ba2 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
322 72872ba2 Christodoulos Psaltis
    var serverName = $(this).closest("div.machine").find("div.name span.name").text();
323 267403ca Dimitris Moraitis
    var found = false;
324 72872ba2 Christodoulos Psaltis
    // show/hide proper menus
325 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().find('a').removeClass('selected');
326 aa0534a7 Dimitris Moraitis
    $(this).addClass('selected');
327 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().addClass('display');
328 72872ba2 Christodoulos Psaltis
    $(this).closest("div.machine").find('.action_error').hide();
329 72872ba2 Christodoulos Psaltis
    // if there is already a pending action for this server replace it
330 72872ba2 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) {
331 db269618 Christodoulos Psaltis
        if (pending_actions[i][1] == serverID) {
332 267403ca Dimitris Moraitis
            pending_actions[i][0] = shutdown;
333 267403ca Dimitris Moraitis
            found = true
334 267403ca Dimitris Moraitis
        }
335 267403ca Dimitris Moraitis
    }
336 72872ba2 Christodoulos Psaltis
    // no pending action for this server was found, so let's just add it to the list
337 72872ba2 Christodoulos Psaltis
    if (!found)
338 267403ca Dimitris Moraitis
        pending_actions.push([shutdown, serverID, serverName])
339 a70fb308 Christodoulos Psaltis
    update_confirmations();
340 42f67a2a Dimitris Moraitis
    return false;
341 42f67a2a Dimitris Moraitis
});
342 eae0a59a Dimitris Moraitis

343 42f67a2a Dimitris Moraitis
// intercept start click
344 72872ba2 Christodoulos Psaltis
$("#machinesview-icon.standard div.actions a.action-start").live('click', function() {
345 72872ba2 Christodoulos Psaltis
    // get server id and server name from DOM
346 72872ba2 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
347 72872ba2 Christodoulos Psaltis
    var serverName = $(this).closest("div.machine").find("div.name span.name").text();
348 267403ca Dimitris Moraitis
    var found = false;
349 72872ba2 Christodoulos Psaltis
    // show/hide proper menus
350 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().find('a').removeClass('selected');
351 aa0534a7 Dimitris Moraitis
    $(this).addClass('selected');
352 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().addClass('display');
353 72872ba2 Christodoulos Psaltis
    $(this).closest("div.machine").find('.action_error').hide();
354 72872ba2 Christodoulos Psaltis
    // if there is already a pending action for this server replace it
355 72872ba2 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) {
356 db269618 Christodoulos Psaltis
        if (pending_actions[i][1] == serverID) {
357 267403ca Dimitris Moraitis
            pending_actions[i][0] = start;
358 267403ca Dimitris Moraitis
            found = true
359 267403ca Dimitris Moraitis
        }
360 267403ca Dimitris Moraitis
    }
361 72872ba2 Christodoulos Psaltis
    // no pending action for this server was found, so let's just add it to the list
362 72872ba2 Christodoulos Psaltis
    if (!found)
363 267403ca Dimitris Moraitis
        pending_actions.push([start, serverID, serverName])
364 a70fb308 Christodoulos Psaltis
    update_confirmations();
365 267403ca Dimitris Moraitis
    return false;
366 267403ca Dimitris Moraitis
});
367 267403ca Dimitris Moraitis

368 b02144c8 Vangelis Koukis
// intercept console click
369 72872ba2 Christodoulos Psaltis
$("#machinesview-icon.standard div.actions a.action-console").live('click', function() {
370 72872ba2 Christodoulos Psaltis
    // get server id and server name from DOM
371 72872ba2 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
372 72872ba2 Christodoulos Psaltis
    var serverName = $(this).closest("div.machine").find("div.name span.name").text();
373 b02144c8 Vangelis Koukis
    var found = false;
374 72872ba2 Christodoulos Psaltis
    // show/hide proper menus
375 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().find('a').removeClass('selected');
376 b02144c8 Vangelis Koukis
    $(this).addClass('selected');
377 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().addClass('display');
378 72872ba2 Christodoulos Psaltis
    $(this).closest("div.machine").find('.action_error').hide();
379 72872ba2 Christodoulos Psaltis
    // if there is already a pending action for this server replace it
380 72872ba2 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) {
381 db269618 Christodoulos Psaltis
        if (pending_actions[i][1] == serverID) {
382 fb3eec11 Christodoulos Psaltis
            pending_actions[i][0] = open_console;
383 b02144c8 Vangelis Koukis
            found = true
384 b02144c8 Vangelis Koukis
        }
385 b02144c8 Vangelis Koukis
    }
386 72872ba2 Christodoulos Psaltis
    // no pending action for this server was found, so let's just add it to the list
387 72872ba2 Christodoulos Psaltis
    if (!found)
388 fb3eec11 Christodoulos Psaltis
        pending_actions.push([open_console, serverID, serverName])
389 a70fb308 Christodoulos Psaltis
    update_confirmations();
390 b02144c8 Vangelis Koukis
    return false;
391 b02144c8 Vangelis Koukis
});
392 b02144c8 Vangelis Koukis

393 b02144c8 Vangelis Koukis

394 f3632e8d Christodoulos Psaltis
// intercept destroy click
395 72872ba2 Christodoulos Psaltis
$("#machinesview-icon.standard div.actions a.action-destroy").live('click', function() {
396 72872ba2 Christodoulos Psaltis
    // get server id and server name from DOM
397 72872ba2 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
398 72872ba2 Christodoulos Psaltis
    var serverName = $(this).closest("div.machine").find("div.name span.name").text();
399 f3632e8d Christodoulos Psaltis
    var found = false;
400 72872ba2 Christodoulos Psaltis
    // show/hide proper menus
401 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().find('a').removeClass('selected');
402 f3632e8d Christodoulos Psaltis
    $(this).addClass('selected');
403 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().addClass('display');
404 72872ba2 Christodoulos Psaltis
    $(this).closest("div.machine").find('.action_error').hide();
405 72872ba2 Christodoulos Psaltis
    // if there is already a pending action for this server replace it
406 72872ba2 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) {
407 db269618 Christodoulos Psaltis
        if (pending_actions[i][1] == serverID) {
408 c5ffb0de Christodoulos Psaltis
            pending_actions[i][0] = destroy;
409 f3632e8d Christodoulos Psaltis
            found = true
410 f3632e8d Christodoulos Psaltis
        }
411 f3632e8d Christodoulos Psaltis
    }
412 72872ba2 Christodoulos Psaltis
    // no pending action for this server was found, so let's just add it to the list
413 72872ba2 Christodoulos Psaltis
    if (!found)
414 f3632e8d Christodoulos Psaltis
        pending_actions.push([destroy, serverID, serverName])
415 a70fb308 Christodoulos Psaltis
    update_confirmations();
416 f3632e8d Christodoulos Psaltis
    return false;
417 16e27b76 Markos Gogoulos
});
418 16e27b76 Markos Gogoulos

419 a70fb308 Christodoulos Psaltis
$("#machinesview-icon.standard div.confirm_single button.yes").live('click', function(){
420 15a09a33 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
421 15a09a33 Christodoulos Psaltis
    // if there is a pending action for this server execute it
422 15a09a33 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) {
423 267403ca Dimitris Moraitis
        if (pending_actions[i][1]==serverID){
424 a1a31201 Dimitris Moraitis
            action = pending_actions.splice(i,1)[0]; // extract action
425 198e13aa Christodoulos Psaltis
            // change the status text in cases where no api state exists
426 198e13aa Christodoulos Psaltis
            if (action[0] == start) {
427 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.status').text(TRANSITIONS['Starting']);
428 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.state').removeClass().addClass('state starting-state');
429 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.spinner').show();
430 198e13aa Christodoulos Psaltis
            } else if (action[0] == shutdown) {
431 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.status').text(TRANSITIONS['Shutting down']);
432 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.state').removeClass().addClass('state shutting-state');
433 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.spinner').show();
434 66edd851 Christodoulos Psaltis
            } else if (action[0] == reboot) {
435 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.status').text(TRANSITIONS['Rebooting']);
436 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.state').removeClass().addClass('state rebooting-state');
437 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.spinner').show();
438 66edd851 Christodoulos Psaltis
            }  else if (action[0] == destroy) {
439 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.status').text(TRANSITIONS['Destroying']);
440 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.state').removeClass().addClass('state destroying-state');
441 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.spinner').show();
442 f533f224 Vangelis Koukis
            }
443 198e13aa Christodoulos Psaltis
            action[0]([action[1]]); // execute action
444 267403ca Dimitris Moraitis
        }
445 267403ca Dimitris Moraitis
    }
446 267403ca Dimitris Moraitis
    $(this).parent().hide();
447 15a09a33 Christodoulos Psaltis
    $(this).closest('div.actions').find('a').removeClass('selected');
448 15a09a33 Christodoulos Psaltis
    $(this).closest("div.machine").children('.state').children('.spinner').show()
449 15a09a33 Christodoulos Psaltis
    $(this).closest("div.machine").children('div.actions').removeClass('display');
450 f533f224 Vangelis Koukis
    update_confirmations();
451 42f67a2a Dimitris Moraitis
    return false;
452 42f67a2a Dimitris Moraitis
});
453 42f67a2a Dimitris Moraitis

454 a70fb308 Christodoulos Psaltis
$("#machinesview-icon.standard div.confirm_single button.no").live('click', function(){
455 267403ca Dimitris Moraitis
    // remove the action from the pending list
456 72872ba2 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
457 f533f224 Vangelis Koukis

458 72872ba2 Christodoulos Psaltis
    $(this).closest('div.action-container').children('a').removeClass('selected');
459 72872ba2 Christodoulos Psaltis
    $(this).closest('div.actions').removeClass('display');
460 72872ba2 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) { // if there is a pending action for this server remove it
461 db269618 Christodoulos Psaltis
        if (pending_actions[i][1] == serverID) {
462 267403ca Dimitris Moraitis
            pending_actions.splice(i,1);
463 267403ca Dimitris Moraitis
        }
464 267403ca Dimitris Moraitis
    }
465 267403ca Dimitris Moraitis
    $(this).parent().hide();
466 f533f224 Vangelis Koukis
    update_confirmations();
467 267403ca Dimitris Moraitis
    return false;
468 267403ca Dimitris Moraitis
});
469 267403ca Dimitris Moraitis

470 f533f224 Vangelis Koukis
$("#machinesview-icon.standard div.action_error .details").live('click', function(){
471 695e1b21 Dimitris Moraitis
    // remove the action from the pending list
472 038383b1 Dimitris Moraitis
    ajax_error($(this).parent().children('.code').text(), undefined, $(this).parent().children('.action').text(), $(this).parent().children('.message').text());
473 695e1b21 Dimitris Moraitis
    $(this).parent().hide();
474 695e1b21 Dimitris Moraitis
});
475 695e1b21 Dimitris Moraitis

476 eae0a59a Dimitris Moraitis
// update the servers list
477 f533f224 Vangelis Koukis
function update_machines_view(data) {
478 f533f224 Vangelis Koukis
    /*
479 1a49199e Dimitris Moraitis
    Go through the servers in the input data. Update existing entries, add
480 eae0a59a Dimitris Moraitis
    new ones to the list
481 cf5c41d0 Christodoulos Psaltis
    */
482 f533f224 Vangelis Koukis
    $.each(data.servers.values, function(i,server) {
483 f533f224 Vangelis Koukis
        // get DOM element, if it exists
484 f533f224 Vangelis Koukis
        existing = $('#machinesview-icon.standard #' + server.id);
485 f533f224 Vangelis Koukis
        // get server OS, if it exists
486 f533f224 Vangelis Koukis
        if (!(server.metadata == undefined)) {
487 f533f224 Vangelis Koukis
            var server_image = os_icon(server.metadata);
488 f533f224 Vangelis Koukis
        } else {
489 f533f224 Vangelis Koukis
            var server_image = "unknown"
490 f533f224 Vangelis Koukis
        }
491 f533f224 Vangelis Koukis
        // get server status message, if it exists
492 f533f224 Vangelis Koukis
        var current_message = existing.find(".status").text();
493 87feccc4 Dimitris Moraitis
        // if multiple machines exist in the DOM, delete all but one
494 87feccc4 Dimitris Moraitis
        // defensive coding - that shouldn't happen normally
495 87feccc4 Dimitris Moraitis
        while (existing.length > 1){
496 eae0a59a Dimitris Moraitis
            existing.remove();
497 eae0a59a Dimitris Moraitis
        }
498 f533f224 Vangelis Koukis
        // if server already exists in DOM, update its values
499 1a49199e Dimitris Moraitis
        if (existing.length){
500 f533f224 Vangelis Koukis
            //  if the status is deleted
501 87feccc4 Dimitris Moraitis
            if (server.status == 'DELETED') {
502 f533f224 Vangelis Koukis
                // delete server entry from the DOM
503 f533f224 Vangelis Koukis
                log_server_status_change(existing, 'DELETED');
504 d1aa78ff Mike Muzurakis
                existing.remove();
505 f533f224 Vangelis Koukis
            }
506 f533f224 Vangelis Koukis
            // if the status has changed
507 f533f224 Vangelis Koukis
            else if ( current_message != STATUSES[server.status]) {
508 f533f224 Vangelis Koukis
                /*
509 f533f224 Vangelis Koukis
                Here there are 4 possibilities:
510 f533f224 Vangelis Koukis
                    1. From an active state to an inactive one
511 f533f224 Vangelis Koukis
                    2. From an inactive state to an active one
512 f533f224 Vangelis Koukis
                    3. From an active state to a different active one
513 f533f224 Vangelis Koukis
                    4. From an inactive state to a different inactive one
514 f533f224 Vangelis Koukis
                The last two (3, 4) can be dealt with the same way
515 f533f224 Vangelis Koukis
                */
516 f533f224 Vangelis Koukis
                if (ACTIVE_STATES.indexOf(current_message) >= 0 &&
517 f533f224 Vangelis Koukis
                    INACTIVE_STATES.indexOf(STATUSES[server.status]) >= 0) {
518 f533f224 Vangelis Koukis
                    // from an active state to an inactive one
519 f533f224 Vangelis Koukis
                    log_server_status_change(existing, server.status);
520 f533f224 Vangelis Koukis
                    moved = existing.clone().appendTo("#machinesview-icon.standard .terminated");
521 f533f224 Vangelis Koukis
                    moved.find("img.logo").attr("src",'static/icons/machines/medium/' + server_image + '-off.png');
522 1a49199e Dimitris Moraitis
                    existing.remove();
523 1a49199e Dimitris Moraitis
                    existing = moved;
524 f533f224 Vangelis Koukis
                    existing.find(".status").text(STATUSES[server.status]);
525 f533f224 Vangelis Koukis
                    existing.find('.spinner').hide();
526 bc80540d Mike Muzurakis
                    if ($("div.terminated").find("div.machine-container").length > 0) {
527 bc80540d Mike Muzurakis
                        $("div.terminated").show();
528 bc80540d Mike Muzurakis
                    }
529 f533f224 Vangelis Koukis
                    existing.find(' .wave').attr('src','static/icons/indicators/medium/wave.gif').show();
530 e5e5e4de Markos Gogoulos
                    existing.find('.state').removeClass().addClass('state terminated-state');
531 f533f224 Vangelis Koukis
                    setTimeout("$('#" + server.id +" .wave').attr('src','').hide()", 3000);
532 f533f224 Vangelis Koukis
                }
533 f533f224 Vangelis Koukis
                else if (INACTIVE_STATES.indexOf(current_message) >= 0 &&
534 f533f224 Vangelis Koukis
                         ACTIVE_STATES.indexOf(STATUSES[server.status]) >= 0) {
535 f533f224 Vangelis Koukis
                    // From an inactive state to an active one
536 f533f224 Vangelis Koukis
                    log_server_status_change(existing, server.status);
537 f533f224 Vangelis Koukis
                    moved = existing.clone().appendTo("#machinesview-icon.standard .running");
538 f533f224 Vangelis Koukis
                    moved.find("img.logo").attr('src','static/icons/machines/medium/' + server_image + '-on.png');
539 198e13aa Christodoulos Psaltis
                    existing.remove();
540 198e13aa Christodoulos Psaltis
                    existing = moved;
541 f533f224 Vangelis Koukis
                    existing.find(".status").text(STATUSES[server.status]);
542 f533f224 Vangelis Koukis
                    existing.find('.spinner').hide();
543 bc80540d Mike Muzurakis
                    if ($("div.terminated").find("div.machine-container").length == 0) {
544 bc80540d Mike Muzurakis
                        $("div.terminated").hide();
545 bc80540d Mike Muzurakis
                    }
546 f533f224 Vangelis Koukis
                    existing.find(' .wave').attr('src','static/icons/indicators/medium/wave.gif').show();
547 e30babe3 Markos Gogoulos
                    existing.find('.state').removeClass().addClass('state running-state');
548 f533f224 Vangelis Koukis
                    setTimeout("$('#" + server.id +" .wave').attr('src','').hide()", 3000);
549 f533f224 Vangelis Koukis
                }
550 f533f224 Vangelis Koukis
                else {
551 f533f224 Vangelis Koukis
                    // handling active to active or inactive to inactive changes
552 f533f224 Vangelis Koukis
                    if (TRANSITIONS[current_message] && TRANSITIONS[current_message] != 'Rebooting') {
553 f533f224 Vangelis Koukis
                        // don't do anything if it is still in transition
554 d8fce384 Mike Muzurakis
                    }
555 f533f224 Vangelis Koukis
                    else if ((TRANSITIONS[current_message] == 'Rebooting' && server.status == 'ACTIVE') ||
556 f533f224 Vangelis Koukis
                             (STATUSES['BUILD'] == current_message && server.status == 'ACTIVE')) {
557 f533f224 Vangelis Koukis
                        // if it has been rebooted or just created
558 f533f224 Vangelis Koukis
                        log_server_status_change(existing, server.status);
559 f533f224 Vangelis Koukis
                        existing.find(".status").text(STATUSES[server.status]);
560 f533f224 Vangelis Koukis
                        existing.find('.spinner').hide();
561 f533f224 Vangelis Koukis
                        existing.find(' .wave').attr('src','static/icons/indicators/medium/wave.gif').show();
562 e30babe3 Markos Gogoulos
                        existing.find('.state').removeClass().addClass('state running-state');
563 f533f224 Vangelis Koukis
                        setTimeout("$('#" + server.id +" .wave').attr('src','').hide()", 3000);
564 d8fce384 Mike Muzurakis
                    }
565 f533f224 Vangelis Koukis
                    else {
566 f533f224 Vangelis Koukis
                        // in any other case just change the status and ignore spinners/waves
567 f533f224 Vangelis Koukis
                        existing.find(".status").text(STATUSES[server.status]);
568 e30babe3 Markos Gogoulos
                        existing.appendTo("#machinesview-icon.standard .running");
569 e30babe3 Markos Gogoulos
                        existing.find('.state').removeClass().addClass('state running-state');
570 f533f224 Vangelis Koukis
                    }
571 f533f224 Vangelis Koukis
                }
572 d8fce384 Mike Muzurakis
            }
573 f533f224 Vangelis Koukis
            // find and display ips
574 f533f224 Vangelis Koukis
            var ips = get_public_ips(server);
575 f533f224 Vangelis Koukis
            existing.find("a.ip span.public").text(ips['ip4']);
576 f533f224 Vangelis Koukis
        }
577 f533f224 Vangelis Koukis
        // if it doesn't exist and the server is not DELETED, make a new entry
578 f533f224 Vangelis Koukis
        else if ( server.status != 'DELETED') {
579 f533f224 Vangelis Koukis
            // clone the proper template and put basic values in
580 f533f224 Vangelis Koukis
            var machine = $("#machinesview-icon.standard #machine-container-template").clone().attr("id", server.id).fadeIn("slow");
581 f533f224 Vangelis Koukis
            machine.find(".scrollable").scrollable({vertical: true});
582 f533f224 Vangelis Koukis
            machine.find("div.name span.name").text(server.name.substring(0,100));
583 f533f224 Vangelis Koukis
            machine.find("span.imagetag").text(server_image);
584 f533f224 Vangelis Koukis
            machine.find(".status").text(STATUSES[server.status]);
585 f533f224 Vangelis Koukis
            // check server status to select where to append the new server to
586 f533f224 Vangelis Koukis
            if (ACTIVE_STATES.indexOf(STATUSES[server.status]) >= 0 ) {
587 f533f224 Vangelis Koukis
                // append to running
588 f533f224 Vangelis Koukis
                machine.find("img.logo").attr("src","static/icons/machines/medium/"+server_image+'-on.png');
589 f533f224 Vangelis Koukis
                machine.appendTo("#machinesview-icon.standard .running");
590 eae0a59a Dimitris Moraitis
            } else {
591 f533f224 Vangelis Koukis
                // append to terminated
592 f533f224 Vangelis Koukis
                machine.find("img.logo").attr("src","static/icons/machines/medium/"+server_image+'-off.png');
593 31e549f5 Christodoulos Psaltis
                machine.appendTo("#machinesview-icon.standard .terminated");
594 4449fac0 Markos Gogoulos
                if (server.status == "STOPPED") { //if server status us stopped is a different case than status unknown/error
595 4449fac0 Markos Gogoulos
                    machine.find('.state').removeClass().addClass('state terminated-state');
596 4449fac0 Markos Gogoulos
                } else {
597 4449fac0 Markos Gogoulos
                       machine.find('.state').removeClass().addClass('state error-state');
598 4449fac0 Markos Gogoulos
                }
599 eae0a59a Dimitris Moraitis
            }
600 f533f224 Vangelis Koukis
            //show spinner if server is still building or rebooting
601 be8c2a2d Markos Gogoulos
            if (server.status == 'BUILD') {
602 97a4b51d Christodoulos Psaltis
                machine.find('.spinner').show();
603 08c6e8da Markos Gogoulos
                machine.find('.state').removeClass().addClass('state build-state');
604 e64bfe94 Markos Gogoulos
            }
605 be8c2a2d Markos Gogoulos
            if (server.status == 'REBOOT') {
606 3cdf1ded Markos Gogoulos
                machine.find('.spinner').show();
607 3cdf1ded Markos Gogoulos
                machine.find('.state').removeClass().addClass('state rebooting-state');
608 3cdf1ded Markos Gogoulos
            }
609 f533f224 Vangelis Koukis
            // find and display flavor parameters
610 f533f224 Vangelis Koukis
            var flavor_params = get_flavor_params(server.flavorRef);
611 f533f224 Vangelis Koukis
            machine.find(".cpu-data").text(flavor_params['cpus']);
612 f533f224 Vangelis Koukis
            machine.find(".ram-data").text(flavor_params['ram']);
613 f533f224 Vangelis Koukis
            machine.find(".disk-data").text(flavor_params['disk']);
614 f533f224 Vangelis Koukis
            // find and display image parameters
615 f533f224 Vangelis Koukis
            var image_params = get_image_params(server.imageRef);
616 f533f224 Vangelis Koukis
            machine.find(".image-data").text(image_params['name'].substring(0,15));
617 f533f224 Vangelis Koukis
            machine.find(".image-size-data").text(image_params['size']);
618 f533f224 Vangelis Koukis
            // find and display ips
619 f533f224 Vangelis Koukis
            var ips = get_public_ips(server);
620 f533f224 Vangelis Koukis
            machine.find("a.ip span.public").text(ips['ip4']);
621 f533f224 Vangelis Koukis
        }
622 f533f224 Vangelis Koukis
        /*
623 f533f224 Vangelis Koukis
        Do some repeated actions that include:
624 f533f224 Vangelis Koukis
            1. Update actions
625 f533f224 Vangelis Koukis
            2. Metadata list updating
626 f533f224 Vangelis Koukis
        */
627 f533f224 Vangelis Koukis
        update_iconview_actions(server.id, server.status);
628 f533f224 Vangelis Koukis
        if (!(server.metadata == undefined)) {
629 f533f224 Vangelis Koukis
                list_metadata_keys(server.id, server.metadata.values);
630 f533f224 Vangelis Koukis
        }
631 eae0a59a Dimitris Moraitis
    });
632 f533f224 Vangelis Koukis
    /*
633 f533f224 Vangelis Koukis
    Do some standard stuff, repeated each time
634 f533f224 Vangelis Koukis
    FIXME: Can these be moved to a new function?
635 f533f224 Vangelis Koukis
    */
636 7a3f7b8f Mike Muzurakis
    $("div.running > div.large-spinner").hide();
637 f533f224 Vangelis Koukis
    // show all separators and hide the last one
638 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.machine-container div.separator").show();
639 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.machine-container:last-child").find("div.separator").hide();
640 f533f224 Vangelis Koukis
    // the terminated div shows only when terminated machines are available
641 f533f224 Vangelis Koukis
    if ($("#machinesview-icon.standard .terminated div.name").length > 0) {
642 f533f224 Vangelis Koukis
        $("div.terminated").fadeIn("slow");
643 e5b0ba20 Vangelis Koukis
    } else {
644 f533f224 Vangelis Koukis
        $("div.terminated").fadeOut("slow");
645 bde97369 Dimitris Moraitis
    }
646 834824c1 Mike Muzurakis
    // show message in case user has no servers!
647 f533f224 Vangelis Koukis
    if ($('#machinesview-icon .machine-container').length < 2) {
648 cebcd8ea Mike Muzurakis
        showWelcome();
649 834824c1 Mike Muzurakis
    } else {
650 cebcd8ea Mike Muzurakis
        hideWelcome();
651 bde97369 Dimitris Moraitis
    }
652 309d7ed2 Dimitris Moraitis
    // set confirm box position
653 98c2ee91 Mike Muzurakis
    if (window.innerHeight - CONFIRMBOX_OFFSET < $('#machinesview-icon.standard').height()) {
654 309d7ed2 Dimitris Moraitis
        $('.confirm_multiple').addClass('fixed');
655 98c2ee91 Mike Muzurakis
    } else {
656 309d7ed2 Dimitris Moraitis
        $('.confirm_multiple').removeClass('fixed');
657 98c2ee91 Mike Muzurakis
    }
658 eae0a59a Dimitris Moraitis
}
659 eae0a59a Dimitris Moraitis

660 bb253902 Dimitris Moraitis
// reposition multiple confirmation box on window resize
661 bb253902 Dimitris Moraitis
$(window).resize(function(){
662 bb253902 Dimitris Moraitis
    if (this.innerHeight - CONFIRMBOX_OFFSET < $('#machinesview-icon').height())
663 bb253902 Dimitris Moraitis
        $('.confirm_multiple').addClass('fixed');
664 bb253902 Dimitris Moraitis
    else
665 bb253902 Dimitris Moraitis
        $('.confirm_multiple').removeClass('fixed');
666 bb253902 Dimitris Moraitis
});
667 bb253902 Dimitris Moraitis

668 fb117e42 Mike Muzurakis
// update metadata list
669 f533f224 Vangelis Koukis
function list_metadata_keys(serverID, keys) {
670 fb117e42 Mike Muzurakis
    // empty the list if it already exists
671 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.#" +serverID).find("div.items").empty();
672 fb117e42 Mike Muzurakis
    //start counter
673 fb117e42 Mike Muzurakis
    var i=0;
674 fb117e42 Mike Muzurakis
    // show values
675 f533f224 Vangelis Koukis
    for (var key in keys) {
676 f533f224 Vangelis Koukis
        $("#machinesview-icon.standard div.#" +serverID).find(".items").append("<div class='item'>" + key + "</div>");
677 f533f224 Vangelis Koukis
        i++;
678 fb117e42 Mike Muzurakis
    }
679 fb117e42 Mike Muzurakis
    //hide the metadata controls if we have less than 3 metadata
680 fb117e42 Mike Muzurakis
    if (i <= 3) {
681 f533f224 Vangelis Koukis
        $("#machinesview-icon.standard div.#" +serverID).find(".metadata-actions").hide();
682 fb117e42 Mike Muzurakis
    }
683 461ebec9 Mike Muzurakis
    //show the metadata controls if we have more than 3 metadata
684 461ebec9 Mike Muzurakis
    if (i > 3) {
685 f533f224 Vangelis Koukis
        $("#machinesview-icon.standard div.#" +serverID).find(".metadata-actions").show();
686 461ebec9 Mike Muzurakis
    }
687 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.#" +serverID).find(".metadata-count").text(i);
688 fb117e42 Mike Muzurakis
}
689 fb117e42 Mike Muzurakis

690 a1a31201 Dimitris Moraitis
// indicate that the requested action was succesfully completed
691 a1a31201 Dimitris Moraitis
function display_success(serverID) {
692 6d0a36e5 Dimitris Moraitis

693 a1a31201 Dimitris Moraitis
}
694 a1a31201 Dimitris Moraitis

695 879748ec Markos Gogoulos
// indicate that the requested action was not completed
696 038383b1 Dimitris Moraitis
function display_failure(status, serverID, action, responseText) {
697 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .spinner').hide();
698 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error .action').text(action);
699 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error .code').text(status);
700 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error .message').text(responseText);
701 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error').show();
702 879748ec Markos Gogoulos
}
703 879748ec Markos Gogoulos

704 339712cb Christodoulos Psaltis
// basic functions executed on page load
705 7338f38d Christodoulos Psaltis
if ( flavors.length == 0 && images.length == 0 ) {
706 7338f38d Christodoulos Psaltis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
707 7338f38d Christodoulos Psaltis
    update_flavors();
708 7338f38d Christodoulos Psaltis
    // populate image list
709 f533f224 Vangelis Koukis
    update_images();
710 7338f38d Christodoulos Psaltis
} else if ( flavors.length == 0 && images.length != 0 ) {
711 7338f38d Christodoulos Psaltis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
712 7338f38d Christodoulos Psaltis
    update_flavors();
713 7338f38d Christodoulos Psaltis
} else if ( flavors.length != 0 && images.length == 0 ) {
714 7338f38d Christodoulos Psaltis
    // populate image list
715 f533f224 Vangelis Koukis
    update_images();
716 7338f38d Christodoulos Psaltis
    update_vms(UPDATE_INTERVAL);
717 66307c9e Christodoulos Psaltis
} else {
718 66307c9e Christodoulos Psaltis
    // start updating vm list
719 66307c9e Christodoulos Psaltis
    update_vms(UPDATE_INTERVAL);
720 146b6003 Dimitris Moraitis
}
721 a7b7536a Dimitris Moraitis

722 f533f224 Vangelis Koukis
// set the label of the multiple buttons
723 f533f224 Vangelis Koukis
$('.confirm_multiple button.yes').text('Confirm All');
724 f533f224 Vangelis Koukis
$('.confirm_multiple button.no').text('Cancel All');
725 9d32dca2 Mike Muzurakis
726 2ed4ced5 Markos Gogoulos
</script>