Statistics
| Branch: | Tag: | Revision:

root / ui / templates / machines_icon.html @ 23a4a31b

History | View | Annotate | Download (37.9 kB)

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

4 a5bc3755 Vangelis Koukis
Redistribution and use in source and binary forms, with or
5 a5bc3755 Vangelis Koukis
without modification, are permitted provided that the following
6 a5bc3755 Vangelis Koukis
conditions are met:
7 a5bc3755 Vangelis Koukis

8 a5bc3755 Vangelis Koukis
  1. Redistributions of source code must retain the above
9 a5bc3755 Vangelis Koukis
     copyright notice, this list of conditions and the following
10 a5bc3755 Vangelis Koukis
     disclaimer.
11 a5bc3755 Vangelis Koukis

12 a5bc3755 Vangelis Koukis
  2. Redistributions in binary form must reproduce the above
13 a5bc3755 Vangelis Koukis
     copyright notice, this list of conditions and the following
14 a5bc3755 Vangelis Koukis
     disclaimer in the documentation and/or other materials
15 a5bc3755 Vangelis Koukis
     provided with the distribution.
16 a5bc3755 Vangelis Koukis

17 a5bc3755 Vangelis Koukis
THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
18 a5bc3755 Vangelis Koukis
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 a5bc3755 Vangelis Koukis
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 a5bc3755 Vangelis Koukis
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
21 a5bc3755 Vangelis Koukis
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 a5bc3755 Vangelis Koukis
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 a5bc3755 Vangelis Koukis
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
24 a5bc3755 Vangelis Koukis
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25 a5bc3755 Vangelis Koukis
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 a5bc3755 Vangelis Koukis
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27 a5bc3755 Vangelis Koukis
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 a5bc3755 Vangelis Koukis
POSSIBILITY OF SUCH DAMAGE.
29 a5bc3755 Vangelis Koukis

30 a5bc3755 Vangelis Koukis
The views and conclusions contained in the software and
31 a5bc3755 Vangelis Koukis
documentation are those of the authors and should not be
32 a5bc3755 Vangelis Koukis
interpreted as representing official policies, either expressed
33 a5bc3755 Vangelis Koukis
or implied, of GRNET S.A.
34 a5bc3755 Vangelis Koukis
-->
35 a5bc3755 Vangelis Koukis
36 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 5c5b3e58 Christodoulos Psaltis
            <div class='connect-border' title='{% trans 'Connect  machine' %}'></div>
43 5c5b3e58 Christodoulos Psaltis
            <div class='connect-arrow' title='{% trans 'Connect  machine' %}'></div>
44 7af53e78 Kostas Papadimitriou
            <div class="logo"></div>
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 bd80f212 Christodoulos Psaltis
                        <div class='stat-label'>{% trans "CPU" %}</div>
76 bd80f212 Christodoulos Psaltis
                        <div class='stat-content'>
77 bd80f212 Christodoulos Psaltis
                            <img src="./static/icons/indicators/small/progress.gif" class="cpu busy" />
78 bd80f212 Christodoulos Psaltis
                            <div class='stat-error'>{% trans "Could not fetch CPU stats." %}</div>
79 bd80f212 Christodoulos Psaltis
                        </div>
80 bd80f212 Christodoulos Psaltis
                        <div class='stat-label'>{% trans "Net" %}</div>
81 bd80f212 Christodoulos Psaltis
                        <div class='stat-content'>
82 bd80f212 Christodoulos Psaltis
                            <img src="./static/icons/indicators/small/progress.gif" class="net busy" />
83 bd80f212 Christodoulos Psaltis
                            <div class='stat-error'>{% trans "Could not fetch Net stats." %}</div>
84 bd80f212 Christodoulos Psaltis
                        </div>
85 bd80f212 Christodoulos Psaltis
                        <a href="#" class="stats-report">{% trans "Full report" %}</a>
86 aae6187b Mike Muzurakis
                    </div>
87 aae6187b Mike Muzurakis
                    <div class="vm-metadata metadata-column">
88 aae6187b Mike Muzurakis
                        <div class="metadata-left">
89 98c8d3f2 Christodoulos Psaltis
                            {% trans "Tags" %}: <br />
90 aae6187b Mike Muzurakis
                            (<span class="metadata-count">0</span>)
91 aae6187b Mike Muzurakis
                        </div>
92 aae6187b Mike Muzurakis
                        <div class="metadata-keys-container">
93 aae6187b Mike Muzurakis
                            <div class="scrollable vertical">
94 aae6187b Mike Muzurakis
                                <div class="items">
95 aae6187b Mike Muzurakis
                                </div>
96 aae6187b Mike Muzurakis
                            </div>
97 aae6187b Mike Muzurakis
                            <div class="metadata-actions">
98 aae6187b Mike Muzurakis
                                <div class="prev"></div>
99 aae6187b Mike Muzurakis
                                <div class="next"></div>
100 aae6187b Mike Muzurakis
                            </div>
101 aae6187b Mike Muzurakis
                        </div>
102 aae6187b Mike Muzurakis
                        <a href="#" class="manage-metadata">{% trans "Manage Tags" %}</a>
103 aae6187b Mike Muzurakis
                    </div>
104 aae6187b Mike Muzurakis
                </div>
105 aae6187b Mike Muzurakis
            </div>
106 aae6187b Mike Muzurakis
            <div class="state">
107 aae6187b Mike Muzurakis
                <div class="status">{% trans "Running" %}</div>
108 aae6187b Mike Muzurakis
                <div class="indicators">
109 aae6187b Mike Muzurakis
                    <div class="indicator1"></div>
110 aae6187b Mike Muzurakis
                    <div class="indicator2"></div>
111 aae6187b Mike Muzurakis
                    <div class="indicator3"></div>
112 aae6187b Mike Muzurakis
                    <div class="indicator4"></div>
113 aae6187b Mike Muzurakis
                </div>
114 a583aa29 Kostas Papadimitriou
                <div class="action-indicator" style="display:none"></div>
115 aae6187b Mike Muzurakis
                <img class="spinner" style="display:none" src="static/icons/indicators/medium/progress.gif" />
116 aae6187b Mike Muzurakis
                <img class="wave" style="display:none" src="static/icons/indicators/medium/wave.gif" />
117 aae6187b Mike Muzurakis
            </div>
118 14f61457 Mike Muzurakis
            <div class="actions">
119 72872ba2 Christodoulos Psaltis
                <div class="action-container start">
120 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-start">{% trans "Start" %}</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 reboot">
127 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-reboot">{% trans "Reboot" %}</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 shutdown">
134 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-shutdown">{% trans "Shutdown" %}</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 console">
141 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-console">{% trans "Console" %}</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 72872ba2 Christodoulos Psaltis
                <div class="action-container destroy">
148 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-destroy">{% trans "Destroy" %}</a>
149 72872ba2 Christodoulos Psaltis
                    <div class="confirm_single">
150 72872ba2 Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
151 72872ba2 Christodoulos Psaltis
                        <button class="no">X</button>
152 72872ba2 Christodoulos Psaltis
                    </div>
153 72872ba2 Christodoulos Psaltis
                </div>
154 f533f224 Vangelis Koukis
            </div>
155 09d3fbbf Mike Muzurakis
            <div class="action_error" align="center">
156 9e53fd01 Christodoulos Psaltis
                {% trans "<span>Error</span> on" %} <span class="action">{% trans "error action" %}</span>
157 f533f224 Vangelis Koukis
                <span class="code"></span>
158 09d3fbbf Mike Muzurakis
                <span class="message"></span>
159 09d3fbbf Mike Muzurakis
                <button class="details">{% trans "Details" %}</button>
160 09d3fbbf Mike Muzurakis
            </div>
161 879748ec Markos Gogoulos
        </div>
162 c2464ef2 Christodoulos Psaltis
        <div class="separator"></div>
163 42f67a2a Dimitris Moraitis
    </div>
164 7a3f7b8f Mike Muzurakis
    <div class="running"><div class="large-spinner"></div></div>
165 f533f224 Vangelis Koukis
    <div class="terminated" style="display:none;"></div>
166 42f67a2a Dimitris Moraitis
</div>
167 42f67a2a Dimitris Moraitis
168 42f67a2a Dimitris Moraitis
<script>
169 bb253902 Dimitris Moraitis
CONFIRMBOX_OFFSET = 200;
170 31e549f5 Christodoulos Psaltis

171 a583aa29 Kostas Papadimitriou
init_action_indicator_handlers('icon');
172 a583aa29 Kostas Papadimitriou

173 7af53e78 Kostas Papadimitriou
// handle connect machine image states
174 23a4a31b Kostas Papadimitriou
$("div.connect-arrow, div.running .machine .logo").live('mouseover',
175 7af53e78 Kostas Papadimitriou
    function() {
176 23a4a31b Kostas Papadimitriou
        if ($(this).parent().parent().find('.status').text() != STATUSES['ACTIVE']) { return };
177 7af53e78 Kostas Papadimitriou
        set_machine_os_image($(this).parent().parent(), "icon", "hover", undefined, 1);
178 7af53e78 Kostas Papadimitriou
    });
179 7af53e78 Kostas Papadimitriou

180 7af53e78 Kostas Papadimitriou
$("div.connect-arrow, div.running .machine .logo").live('mouseleave',
181 7af53e78 Kostas Papadimitriou
    function() {
182 23a4a31b Kostas Papadimitriou
        if ($(this).parent().parent().find('.status').text() != STATUSES['ACTIVE']) { return };
183 7af53e78 Kostas Papadimitriou
        set_machine_os_image($(this).parent().parent(), "icon", "hover", undefined, 1, "hover");
184 23a4a31b Kostas Papadimitriou
        // mouseup outside the element is not fired
185 23a4a31b Kostas Papadimitriou
        set_machine_os_image($(this).parent().parent(), "icon", "hover", undefined, 1, "click");
186 7af53e78 Kostas Papadimitriou
    });
187 7af53e78 Kostas Papadimitriou

188 7af53e78 Kostas Papadimitriou
$("div.connect-arrow, div.running .machine .logo").live('mousedown',
189 23a4a31b Kostas Papadimitriou
function() {
190 23a4a31b Kostas Papadimitriou
        if ($(this).parent().parent().find(".connect-arrow:visible").length == 0) { return };
191 7af53e78 Kostas Papadimitriou
        set_machine_os_image($(this).parent().parent(), "icon", "click", undefined, 1);
192 7af53e78 Kostas Papadimitriou
    });
193 7af53e78 Kostas Papadimitriou

194 7af53e78 Kostas Papadimitriou
$("div.connect-arrow, div.running .machine .logo").live('mouseup',
195 7af53e78 Kostas Papadimitriou
    function() {
196 23a4a31b Kostas Papadimitriou
        if ($(this).parent().parent().find(".connect-arrow:visible").length == 0) { return };
197 7af53e78 Kostas Papadimitriou
        set_machine_os_image($(this).parent().parent(), "icon", "click", undefined, 1, "click");
198 7af53e78 Kostas Papadimitriou
    });
199 7af53e78 Kostas Papadimitriou

200 1310d4f0 Christodoulos Psaltis
// actions on machine mouseover
201 38d99960 Christodoulos Psaltis
$("#machinesview-icon.standard .machine").live('mouseover', function() {
202 206e04ae Christodoulos Psaltis
    // show connect button only if the machine is active
203 206e04ae Christodoulos Psaltis
    if ($(this).find('.status').text() == STATUSES['ACTIVE']) {
204 206e04ae Christodoulos Psaltis
        $(this).find("div.connect-arrow").show();
205 206e04ae Christodoulos Psaltis
        $(this).find("div.connect-border").show();
206 206e04ae Christodoulos Psaltis
    }
207 38d99960 Christodoulos Psaltis
});
208 38d99960 Christodoulos Psaltis

209 1310d4f0 Christodoulos Psaltis
// actions on machine mouseout
210 38d99960 Christodoulos Psaltis
$("#machinesview-icon.standard .machine").live('mouseout', function() {
211 0a6b3683 Christodoulos Psaltis
    // hide connect button
212 ba16aed0 Christodoulos Psaltis
    $(this).find("div.connect-arrow").hide();
213 38d99960 Christodoulos Psaltis
    $(this).find("div.connect-border").hide();
214 38d99960 Christodoulos Psaltis
});
215 38d99960 Christodoulos Psaltis

216 1310d4f0 Christodoulos Psaltis
// actions on connect arrow border mouseover
217 1310d4f0 Christodoulos Psaltis
$("#machinesview-icon.standard .running div.connect-border").live('mouseover', function() {
218 1310d4f0 Christodoulos Psaltis
    $(this).next().addClass('border-hover');
219 1310d4f0 Christodoulos Psaltis
});
220 1310d4f0 Christodoulos Psaltis

221 1310d4f0 Christodoulos Psaltis
// actions on connect arrow border mouseout
222 1310d4f0 Christodoulos Psaltis
$("#machinesview-icon.standard .running div.connect-border").live('mouseout', function() {
223 1310d4f0 Christodoulos Psaltis
    $(this).next().removeClass('border-hover');
224 1310d4f0 Christodoulos Psaltis
});
225 1310d4f0 Christodoulos Psaltis

226 31e549f5 Christodoulos Psaltis
// open console on machine logo click
227 31e549f5 Christodoulos Psaltis
$("#machinesview-icon.standard .running img.logo").live('click', function(){
228 31e549f5 Christodoulos Psaltis
    $(this).parent().parent().find("a.action-console").click();
229 31e549f5 Christodoulos Psaltis
    return false;
230 31e549f5 Christodoulos Psaltis
});
231 31e549f5 Christodoulos Psaltis

232 31e549f5 Christodoulos Psaltis
// open console on connect arrow click
233 7af53e78 Kostas Papadimitriou
$("#machinesview-icon.standard .running div.logo").live('click', function(){
234 7af53e78 Kostas Papadimitriou
    $(this).parent().parent().find("a.action-console").click();
235 7af53e78 Kostas Papadimitriou
    return false;
236 7af53e78 Kostas Papadimitriou
});
237 7af53e78 Kostas Papadimitriou

238 31e549f5 Christodoulos Psaltis
$("#machinesview-icon.standard .running div.connect-arrow").live('click', function(){
239 31e549f5 Christodoulos Psaltis
    $(this).parent().parent().find("a.action-console").click();
240 31e549f5 Christodoulos Psaltis
    return false;
241 31e549f5 Christodoulos Psaltis
});
242 0a6b3683 Christodoulos Psaltis

243 1310d4f0 Christodoulos Psaltis
// open console on connect arrow border click
244 1310d4f0 Christodoulos Psaltis
$("#machinesview-icon.standard .running div.connect-border").live('click', function(){
245 02ca470d Markos Gogoulos
    var serverID = $(this).parent().parent().attr("id");
246 02ca470d Markos Gogoulos
    machine_connect([machine_connect, serverID]);
247 02ca470d Markos Gogoulos
    return false;
248 1310d4f0 Christodoulos Psaltis
    return false;
249 1310d4f0 Christodoulos Psaltis
});
250 1310d4f0 Christodoulos Psaltis

251 beef1f05 Mike Muzurakis
//hide the all of the info contents
252 f533f224 Vangelis Koukis
$("#machinesview-icon.standard .info-content").hide();
253 beef1f05 Mike Muzurakis
//toggle the component with class info-content
254 0f47e121 Christodoulos Psaltis
$("#machinesview-icon.standard div.info-header").live('click', function() {
255 69cebe8a Christodoulos Psaltis
    if ($(this).find('.toggler').hasClass('up')) {
256 23ca3bc9 Christodoulos Psaltis
        // toggle drop-down pane
257 69cebe8a Christodoulos Psaltis
        $(this).find('.toggler').removeClass('up');
258 0be864b6 Christodoulos Psaltis
        $(this).find('.toggler').addClass('down');
259 8e88c3fe Christodoulos Psaltis
        $(this).find('.info-label').removeClass('darker');
260 e5b6f8f8 Christodoulos Psaltis
        $(this).parent().parent().removeClass('light-background');
261 69cebe8a Christodoulos Psaltis
    } else {
262 bd80f212 Christodoulos Psaltis
        // reset stats
263 bd80f212 Christodoulos Psaltis
        $(this).closest('.machine-container').find('.vm-stats div.stat-error').hide();
264 bd80f212 Christodoulos Psaltis
        $(this).closest('.machine-container').find('.vm-stats img.cpu').attr('src', './static/icons/indicators/small/progress.gif').addClass('busy').show();
265 bd80f212 Christodoulos Psaltis
        $(this).closest('.machine-container').find('.vm-stats img.net').attr('src', './static/icons/indicators/small/progress.gif').addClass('busy').show();
266 bd80f212 Christodoulos Psaltis
        // get new stats
267 23ca3bc9 Christodoulos Psaltis
        var serverID = $(this).closest('.machine-container').attr('id');
268 23ca3bc9 Christodoulos Psaltis
        get_server_stats(serverID);
269 23ca3bc9 Christodoulos Psaltis
        // toggle drop-down pane
270 0be864b6 Christodoulos Psaltis
        $(this).find('.toggler').removeClass('down');
271 69cebe8a Christodoulos Psaltis
        $(this).find('.toggler').addClass('up');
272 8e88c3fe Christodoulos Psaltis
        $(this).find('.info-label').addClass('darker');
273 0f47e121 Christodoulos Psaltis
        $(this).parent().parent().addClass('light-background');
274 69cebe8a Christodoulos Psaltis
    }
275 826ba503 Mike Muzurakis
    $(this).parent().parent().find(".info-content").slideToggle(600);
276 0a8e39b4 Mike Muzurakis
    return false;
277 beef1f05 Mike Muzurakis
});
278 beef1f05 Mike Muzurakis

279 beef1f05 Mike Muzurakis
// intercept manage metadata click
280 f533f224 Vangelis Koukis
$("#machinesview-icon.standard a.manage-metadata").live('click', function() {
281 339712cb Christodoulos Psaltis
    // get server name and server ID
282 9a3c23db Christodoulos Psaltis
    var serverID = $(this).closest('.machine-container').attr("id");
283 9a3c23db Christodoulos Psaltis
    var serverName = $(this).closest('.machine').find("span.name").text();
284 4629cc1f Christodoulos Psaltis
    // set server name to all related metadata dialogs
285 f533f224 Vangelis Koukis
    $("#metadata-wizard div.machine-name").text(serverName);
286 00ee3189 Christodoulos Psaltis
    if ($(this).closest('.machine-container').parent().hasClass('terminated')) {
287 f533f224 Vangelis Koukis
        $("#metadata-wizard div#on-off").text('off');
288 f533f224 Vangelis Koukis
    } else {
289 f533f224 Vangelis Koukis
        $("#metadata-wizard div#on-off").text('on');
290 f533f224 Vangelis Koukis
    }
291 4629cc1f Christodoulos Psaltis
    // set server id to all related metadata dialogs
292 f533f224 Vangelis Koukis
    $("#metadata-wizard p").text(serverID);
293 71eade6b Christodoulos Psaltis
    show_metadata_wizard();
294 ef7770cf Dimitris Moraitis
    return false;
295 339712cb Christodoulos Psaltis
});
296 339712cb Christodoulos Psaltis

297 a70a9116 Mike Muzurakis
//initiate machine renaming
298 f533f224 Vangelis Koukis
$("#machinesview-icon.standard .rename, #machinesview-icon.standard h5.editable span.name").live('click', function() {
299 380c0520 Dimitris Moraitis
    $(this).parent().find('.name').html("<input type=\"text\" class=\"nametextbox\" value=\"" +
300 f533f224 Vangelis Koukis
                                        $(this).parent().find('.name').text() +
301 f533f224 Vangelis Koukis
                                        "\" / ><span class=\"oldValue\">" +
302 134a9f26 Christodoulos Psaltis
                                        $(this).parent().find('.name').text() + "</span>");
303 c64c04ec Dimitris Moraitis
    $(this).parent().find('.rename').hide();
304 c64c04ec Dimitris Moraitis
    $(this).parent().find(".editbuttons").fadeIn();
305 96bb1d47 Christodoulos Psaltis
    $(this).parent().find(".nametextbox").focus().select();
306 3f198846 Dimitris Moraitis
    $(this).parent().removeClass('editable');
307 86c97ac3 Christodoulos Psaltis

308 86c97ac3 Christodoulos Psaltis
    //submit wizard by pressing enter on the name textbox
309 380c0520 Dimitris Moraitis
    $(".nametextbox").keydown(function (e) {
310 f533f224 Vangelis Koukis
        if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
311 380c0520 Dimitris Moraitis
            $(this).parent().parent().find('div.editbuttons div.save').click();
312 f533f224 Vangelis Koukis
            return false;
313 f533f224 Vangelis Koukis
        } else if ((e.which && e.which == 27) || (e.keyCode && e.keyCode == 27)) {
314 380c0520 Dimitris Moraitis
            $(this).parent().parent().find('div.editbuttons div.cancel').click();
315 f533f224 Vangelis Koukis
            return true;
316 f533f224 Vangelis Koukis
        }
317 86c97ac3 Christodoulos Psaltis
    });
318 3f198846 Dimitris Moraitis
    return false;
319 0d4faeb8 Mike Muzurakis
});
320 0d4faeb8 Mike Muzurakis

321 a70a9116 Mike Muzurakis
//rename machine
322 f533f224 Vangelis Koukis
$("#machinesview-icon.standard .editbuttons .save").live('click', function() {
323 14f61457 Mike Muzurakis
    serverID = $(this).closest('.machine-container').attr("id");
324 a70a9116 Mike Muzurakis
    serverName = $(this).parent().parent().find('.name').find('.nametextbox').val();
325 2b10d496 Mike Muzurakis
    if (serverName.trim() == ''){
326 2b10d496 Mike Muzurakis
        return false;
327 2b10d496 Mike Muzurakis
    }
328 a70a9116 Mike Muzurakis
    $(this).parent().parent().find('.name').html($(this).parent().parent().find('.nametextbox').val());
329 a70a9116 Mike Muzurakis
    $(this).parent().parent().find(".editbuttons").fadeOut("fast");
330 a70a9116 Mike Muzurakis
    $(this).parent().parent().find(".rename").fadeIn("slow");
331 380c0520 Dimitris Moraitis
    $(this).parent().parent().addClass('editable');
332 73715544 Christodoulos Psaltis
    rename(serverID, serverName);
333 a70a9116 Mike Muzurakis
    return false;
334 a70a9116 Mike Muzurakis
});
335 a70a9116 Mike Muzurakis

336 0d4faeb8 Mike Muzurakis
//cancel renaming
337 f533f224 Vangelis Koukis
$("#machinesview-icon.standard .editbuttons .cancel").live('click', function() {
338 f533f224 Vangelis Koukis
    $(this).parent().parent().find('.name').html($(this).parent().parent().find('.oldValue').text());
339 c64c04ec Dimitris Moraitis
    $(this).parent().parent().find(".editbuttons").hide();
340 c64c04ec Dimitris Moraitis
    $(this).parent().parent().find(".rename").fadeIn();
341 3f198846 Dimitris Moraitis
    $(this).parent().parent().addClass('editable');
342 f533f224 Vangelis Koukis
    return false;
343 0d4faeb8 Mike Muzurakis
});
344 0d4faeb8 Mike Muzurakis

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

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

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

421 b02144c8 Vangelis Koukis
// intercept console click
422 72872ba2 Christodoulos Psaltis
$("#machinesview-icon.standard div.actions a.action-console").live('click', function() {
423 72872ba2 Christodoulos Psaltis
    // get server id and server name from DOM
424 72872ba2 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
425 72872ba2 Christodoulos Psaltis
    var serverName = $(this).closest("div.machine").find("div.name span.name").text();
426 b02144c8 Vangelis Koukis
    var found = false;
427 72872ba2 Christodoulos Psaltis
    // show/hide proper menus
428 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().find('a').removeClass('selected');
429 b02144c8 Vangelis Koukis
    $(this).addClass('selected');
430 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().addClass('display');
431 72872ba2 Christodoulos Psaltis
    $(this).closest("div.machine").find('.action_error').hide();
432 72872ba2 Christodoulos Psaltis
    // if there is already a pending action for this server replace it
433 72872ba2 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) {
434 db269618 Christodoulos Psaltis
        if (pending_actions[i][1] == serverID) {
435 fb3eec11 Christodoulos Psaltis
            pending_actions[i][0] = open_console;
436 b02144c8 Vangelis Koukis
            found = true
437 b02144c8 Vangelis Koukis
        }
438 b02144c8 Vangelis Koukis
    }
439 72872ba2 Christodoulos Psaltis
    // no pending action for this server was found, so let's just add it to the list
440 72872ba2 Christodoulos Psaltis
    if (!found)
441 fb3eec11 Christodoulos Psaltis
        pending_actions.push([open_console, serverID, serverName])
442 a70fb308 Christodoulos Psaltis
    update_confirmations();
443 b02144c8 Vangelis Koukis
    return false;
444 b02144c8 Vangelis Koukis
});
445 b02144c8 Vangelis Koukis

446 b02144c8 Vangelis Koukis

447 f3632e8d Christodoulos Psaltis
// intercept destroy click
448 72872ba2 Christodoulos Psaltis
$("#machinesview-icon.standard div.actions a.action-destroy").live('click', function() {
449 72872ba2 Christodoulos Psaltis
    // get server id and server name from DOM
450 72872ba2 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
451 72872ba2 Christodoulos Psaltis
    var serverName = $(this).closest("div.machine").find("div.name span.name").text();
452 f3632e8d Christodoulos Psaltis
    var found = false;
453 72872ba2 Christodoulos Psaltis
    // show/hide proper menus
454 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().find('a').removeClass('selected');
455 f3632e8d Christodoulos Psaltis
    $(this).addClass('selected');
456 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().addClass('display');
457 72872ba2 Christodoulos Psaltis
    $(this).closest("div.machine").find('.action_error').hide();
458 72872ba2 Christodoulos Psaltis
    // if there is already a pending action for this server replace it
459 72872ba2 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) {
460 db269618 Christodoulos Psaltis
        if (pending_actions[i][1] == serverID) {
461 c5ffb0de Christodoulos Psaltis
            pending_actions[i][0] = destroy;
462 f3632e8d Christodoulos Psaltis
            found = true
463 f3632e8d Christodoulos Psaltis
        }
464 f3632e8d Christodoulos Psaltis
    }
465 72872ba2 Christodoulos Psaltis
    // no pending action for this server was found, so let's just add it to the list
466 72872ba2 Christodoulos Psaltis
    if (!found)
467 f3632e8d Christodoulos Psaltis
        pending_actions.push([destroy, serverID, serverName])
468 a70fb308 Christodoulos Psaltis
    update_confirmations();
469 f3632e8d Christodoulos Psaltis
    return false;
470 16e27b76 Markos Gogoulos
});
471 16e27b76 Markos Gogoulos

472 a70fb308 Christodoulos Psaltis
$("#machinesview-icon.standard div.confirm_single button.yes").live('click', function(){
473 15a09a33 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
474 15a09a33 Christodoulos Psaltis
    // if there is a pending action for this server execute it
475 15a09a33 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) {
476 267403ca Dimitris Moraitis
        if (pending_actions[i][1]==serverID){
477 a1a31201 Dimitris Moraitis
            action = pending_actions.splice(i,1)[0]; // extract action
478 198e13aa Christodoulos Psaltis
            // change the status text in cases where no api state exists
479 198e13aa Christodoulos Psaltis
            if (action[0] == start) {
480 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.status').text(TRANSITIONS['Starting']);
481 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.state').removeClass().addClass('state starting-state');
482 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.spinner').show();
483 198e13aa Christodoulos Psaltis
            } else if (action[0] == shutdown) {
484 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.status').text(TRANSITIONS['Shutting down']);
485 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.state').removeClass().addClass('state shutting-state');
486 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.spinner').show();
487 66edd851 Christodoulos Psaltis
            } else if (action[0] == reboot) {
488 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.status').text(TRANSITIONS['Rebooting']);
489 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.state').removeClass().addClass('state rebooting-state');
490 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.spinner').show();
491 66edd851 Christodoulos Psaltis
            }  else if (action[0] == destroy) {
492 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.status').text(TRANSITIONS['Destroying']);
493 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.state').removeClass().addClass('state destroying-state');
494 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.spinner').show();
495 f533f224 Vangelis Koukis
            }
496 198e13aa Christodoulos Psaltis
            action[0]([action[1]]); // execute action
497 267403ca Dimitris Moraitis
        }
498 267403ca Dimitris Moraitis
    }
499 267403ca Dimitris Moraitis
    $(this).parent().hide();
500 15a09a33 Christodoulos Psaltis
    $(this).closest('div.actions').find('a').removeClass('selected');
501 15a09a33 Christodoulos Psaltis
    $(this).closest("div.machine").children('.state').children('.spinner').show()
502 15a09a33 Christodoulos Psaltis
    $(this).closest("div.machine").children('div.actions').removeClass('display');
503 f533f224 Vangelis Koukis
    update_confirmations();
504 42f67a2a Dimitris Moraitis
    return false;
505 42f67a2a Dimitris Moraitis
});
506 42f67a2a Dimitris Moraitis

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

511 72872ba2 Christodoulos Psaltis
    $(this).closest('div.action-container').children('a').removeClass('selected');
512 72872ba2 Christodoulos Psaltis
    $(this).closest('div.actions').removeClass('display');
513 72872ba2 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) { // if there is a pending action for this server remove it
514 db269618 Christodoulos Psaltis
        if (pending_actions[i][1] == serverID) {
515 267403ca Dimitris Moraitis
            pending_actions.splice(i,1);
516 267403ca Dimitris Moraitis
        }
517 267403ca Dimitris Moraitis
    }
518 267403ca Dimitris Moraitis
    $(this).parent().hide();
519 f533f224 Vangelis Koukis
    update_confirmations();
520 267403ca Dimitris Moraitis
    return false;
521 267403ca Dimitris Moraitis
});
522 267403ca Dimitris Moraitis

523 f533f224 Vangelis Koukis
$("#machinesview-icon.standard div.action_error .details").live('click', function(){
524 695e1b21 Dimitris Moraitis
    // remove the action from the pending list
525 038383b1 Dimitris Moraitis
    ajax_error($(this).parent().children('.code').text(), undefined, $(this).parent().children('.action').text(), $(this).parent().children('.message').text());
526 695e1b21 Dimitris Moraitis
    $(this).parent().hide();
527 695e1b21 Dimitris Moraitis
});
528 695e1b21 Dimitris Moraitis

529 eae0a59a Dimitris Moraitis
// update the servers list
530 f533f224 Vangelis Koukis
function update_machines_view(data) {
531 f533f224 Vangelis Koukis
    /*
532 1a49199e Dimitris Moraitis
    Go through the servers in the input data. Update existing entries, add
533 eae0a59a Dimitris Moraitis
    new ones to the list
534 cf5c41d0 Christodoulos Psaltis
    */
535 f533f224 Vangelis Koukis
    $.each(data.servers.values, function(i,server) {
536 f533f224 Vangelis Koukis
        // get DOM element, if it exists
537 f533f224 Vangelis Koukis
        existing = $('#machinesview-icon.standard #' + server.id);
538 f533f224 Vangelis Koukis
        // get server OS, if it exists
539 f533f224 Vangelis Koukis
        if (!(server.metadata == undefined)) {
540 f533f224 Vangelis Koukis
            var server_image = os_icon(server.metadata);
541 f533f224 Vangelis Koukis
        } else {
542 f533f224 Vangelis Koukis
            var server_image = "unknown"
543 f533f224 Vangelis Koukis
        }
544 f533f224 Vangelis Koukis
        // get server status message, if it exists
545 f533f224 Vangelis Koukis
        var current_message = existing.find(".status").text();
546 87feccc4 Dimitris Moraitis
        // if multiple machines exist in the DOM, delete all but one
547 87feccc4 Dimitris Moraitis
        // defensive coding - that shouldn't happen normally
548 87feccc4 Dimitris Moraitis
        while (existing.length > 1){
549 eae0a59a Dimitris Moraitis
            existing.remove();
550 eae0a59a Dimitris Moraitis
        }
551 f533f224 Vangelis Koukis
        // if server already exists in DOM, update its values
552 1a49199e Dimitris Moraitis
        if (existing.length){
553 f533f224 Vangelis Koukis
            //  if the status is deleted
554 87feccc4 Dimitris Moraitis
            if (server.status == 'DELETED') {
555 f533f224 Vangelis Koukis
                // delete server entry from the DOM
556 f533f224 Vangelis Koukis
                log_server_status_change(existing, 'DELETED');
557 d1aa78ff Mike Muzurakis
                existing.remove();
558 f533f224 Vangelis Koukis
            }
559 f533f224 Vangelis Koukis
            // if the status has changed
560 f533f224 Vangelis Koukis
            else if ( current_message != STATUSES[server.status]) {
561 f533f224 Vangelis Koukis
                /*
562 f533f224 Vangelis Koukis
                Here there are 4 possibilities:
563 f533f224 Vangelis Koukis
                    1. From an active state to an inactive one
564 f533f224 Vangelis Koukis
                    2. From an inactive state to an active one
565 f533f224 Vangelis Koukis
                    3. From an active state to a different active one
566 f533f224 Vangelis Koukis
                    4. From an inactive state to a different inactive one
567 f533f224 Vangelis Koukis
                The last two (3, 4) can be dealt with the same way
568 f533f224 Vangelis Koukis
                */
569 f533f224 Vangelis Koukis
                if (ACTIVE_STATES.indexOf(current_message) >= 0 &&
570 f533f224 Vangelis Koukis
                    INACTIVE_STATES.indexOf(STATUSES[server.status]) >= 0) {
571 f533f224 Vangelis Koukis
                    // from an active state to an inactive one
572 f533f224 Vangelis Koukis
                    log_server_status_change(existing, server.status);
573 f533f224 Vangelis Koukis
                    moved = existing.clone().appendTo("#machinesview-icon.standard .terminated");
574 7af53e78 Kostas Papadimitriou
                    set_machine_os_image(moved, "icon", "off", server_image);
575 1a49199e Dimitris Moraitis
                    existing.remove();
576 1a49199e Dimitris Moraitis
                    existing = moved;
577 f533f224 Vangelis Koukis
                    existing.find(".status").text(STATUSES[server.status]);
578 f533f224 Vangelis Koukis
                    existing.find('.spinner').hide();
579 bc80540d Mike Muzurakis
                    if ($("div.terminated").find("div.machine-container").length > 0) {
580 bc80540d Mike Muzurakis
                        $("div.terminated").show();
581 bc80540d Mike Muzurakis
                    }
582 f533f224 Vangelis Koukis
                    existing.find(' .wave').attr('src','static/icons/indicators/medium/wave.gif').show();
583 e5e5e4de Markos Gogoulos
                    existing.find('.state').removeClass().addClass('state terminated-state');
584 f533f224 Vangelis Koukis
                    setTimeout("$('#" + server.id +" .wave').attr('src','').hide()", 3000);
585 f533f224 Vangelis Koukis
                }
586 f533f224 Vangelis Koukis
                else if (INACTIVE_STATES.indexOf(current_message) >= 0 &&
587 f533f224 Vangelis Koukis
                         ACTIVE_STATES.indexOf(STATUSES[server.status]) >= 0) {
588 f533f224 Vangelis Koukis
                    // From an inactive state to an active one
589 f533f224 Vangelis Koukis
                    log_server_status_change(existing, server.status);
590 f533f224 Vangelis Koukis
                    moved = existing.clone().appendTo("#machinesview-icon.standard .running");
591 7af53e78 Kostas Papadimitriou
                    set_machine_os_image(moved, "icon", "on", server_image);
592 198e13aa Christodoulos Psaltis
                    existing.remove();
593 198e13aa Christodoulos Psaltis
                    existing = moved;
594 f533f224 Vangelis Koukis
                    existing.find(".status").text(STATUSES[server.status]);
595 f533f224 Vangelis Koukis
                    existing.find('.spinner').hide();
596 bc80540d Mike Muzurakis
                    if ($("div.terminated").find("div.machine-container").length == 0) {
597 bc80540d Mike Muzurakis
                        $("div.terminated").hide();
598 bc80540d Mike Muzurakis
                    }
599 f533f224 Vangelis Koukis
                    existing.find(' .wave').attr('src','static/icons/indicators/medium/wave.gif').show();
600 e30babe3 Markos Gogoulos
                    existing.find('.state').removeClass().addClass('state running-state');
601 f533f224 Vangelis Koukis
                    setTimeout("$('#" + server.id +" .wave').attr('src','').hide()", 3000);
602 f533f224 Vangelis Koukis
                }
603 f533f224 Vangelis Koukis
                else {
604 f533f224 Vangelis Koukis
                    // handling active to active or inactive to inactive changes
605 f533f224 Vangelis Koukis
                    if (TRANSITIONS[current_message] && TRANSITIONS[current_message] != 'Rebooting') {
606 f533f224 Vangelis Koukis
                        // don't do anything if it is still in transition
607 d8fce384 Mike Muzurakis
                    }
608 f533f224 Vangelis Koukis
                    else if ((TRANSITIONS[current_message] == 'Rebooting' && server.status == 'ACTIVE') ||
609 f533f224 Vangelis Koukis
                             (STATUSES['BUILD'] == current_message && server.status == 'ACTIVE')) {
610 f533f224 Vangelis Koukis
                        // if it has been rebooted or just created
611 f533f224 Vangelis Koukis
                        log_server_status_change(existing, server.status);
612 f533f224 Vangelis Koukis
                        existing.find(".status").text(STATUSES[server.status]);
613 f533f224 Vangelis Koukis
                        existing.find('.spinner').hide();
614 f533f224 Vangelis Koukis
                        existing.find(' .wave').attr('src','static/icons/indicators/medium/wave.gif').show();
615 e30babe3 Markos Gogoulos
                        existing.find('.state').removeClass().addClass('state running-state');
616 f533f224 Vangelis Koukis
                        setTimeout("$('#" + server.id +" .wave').attr('src','').hide()", 3000);
617 d8fce384 Mike Muzurakis
                    }
618 f533f224 Vangelis Koukis
                    else {
619 f533f224 Vangelis Koukis
                        // in any other case just change the status and ignore spinners/waves
620 f533f224 Vangelis Koukis
                        existing.find(".status").text(STATUSES[server.status]);
621 e30babe3 Markos Gogoulos
                        existing.appendTo("#machinesview-icon.standard .running");
622 e30babe3 Markos Gogoulos
                        existing.find('.state').removeClass().addClass('state running-state');
623 f533f224 Vangelis Koukis
                    }
624 f533f224 Vangelis Koukis
                }
625 d8fce384 Mike Muzurakis
            }
626 f533f224 Vangelis Koukis
            // find and display ips
627 f533f224 Vangelis Koukis
            var ips = get_public_ips(server);
628 f533f224 Vangelis Koukis
            existing.find("a.ip span.public").text(ips['ip4']);
629 f533f224 Vangelis Koukis
        }
630 f533f224 Vangelis Koukis
        // if it doesn't exist and the server is not DELETED, make a new entry
631 f533f224 Vangelis Koukis
        else if ( server.status != 'DELETED') {
632 f533f224 Vangelis Koukis
            // clone the proper template and put basic values in
633 f533f224 Vangelis Koukis
            var machine = $("#machinesview-icon.standard #machine-container-template").clone().attr("id", server.id).fadeIn("slow");
634 f533f224 Vangelis Koukis
            machine.find(".scrollable").scrollable({vertical: true});
635 b437ff91 Mike Muzurakis
            machine.find("div.name span.name").text(server.name.substring(0,50));
636 f533f224 Vangelis Koukis
            machine.find("span.imagetag").text(server_image);
637 f533f224 Vangelis Koukis
            machine.find(".status").text(STATUSES[server.status]);
638 f533f224 Vangelis Koukis
            // check server status to select where to append the new server to
639 f533f224 Vangelis Koukis
            if (ACTIVE_STATES.indexOf(STATUSES[server.status]) >= 0 ) {
640 f533f224 Vangelis Koukis
                // append to running
641 7af53e78 Kostas Papadimitriou
                set_machine_os_image(machine, "icon", "on", server_image);
642 f533f224 Vangelis Koukis
                machine.appendTo("#machinesview-icon.standard .running");
643 eae0a59a Dimitris Moraitis
            } else {
644 f533f224 Vangelis Koukis
                // append to terminated
645 7af53e78 Kostas Papadimitriou
                set_machine_os_image(machine, "icon", "off", server_image);
646 31e549f5 Christodoulos Psaltis
                machine.appendTo("#machinesview-icon.standard .terminated");
647 4449fac0 Markos Gogoulos
                if (server.status == "STOPPED") { //if server status us stopped is a different case than status unknown/error
648 4449fac0 Markos Gogoulos
                    machine.find('.state').removeClass().addClass('state terminated-state');
649 4449fac0 Markos Gogoulos
                } else {
650 4449fac0 Markos Gogoulos
                       machine.find('.state').removeClass().addClass('state error-state');
651 4449fac0 Markos Gogoulos
                }
652 eae0a59a Dimitris Moraitis
            }
653 f533f224 Vangelis Koukis
            //show spinner if server is still building or rebooting
654 be8c2a2d Markos Gogoulos
            if (server.status == 'BUILD') {
655 97a4b51d Christodoulos Psaltis
                machine.find('.spinner').show();
656 08c6e8da Markos Gogoulos
                machine.find('.state').removeClass().addClass('state build-state');
657 e64bfe94 Markos Gogoulos
            }
658 be8c2a2d Markos Gogoulos
            if (server.status == 'REBOOT') {
659 3cdf1ded Markos Gogoulos
                machine.find('.spinner').show();
660 3cdf1ded Markos Gogoulos
                machine.find('.state').removeClass().addClass('state rebooting-state');
661 3cdf1ded Markos Gogoulos
            }
662 f533f224 Vangelis Koukis
            // find and display flavor parameters
663 f533f224 Vangelis Koukis
            var flavor_params = get_flavor_params(server.flavorRef);
664 f533f224 Vangelis Koukis
            machine.find(".cpu-data").text(flavor_params['cpus']);
665 f533f224 Vangelis Koukis
            machine.find(".ram-data").text(flavor_params['ram']);
666 f533f224 Vangelis Koukis
            machine.find(".disk-data").text(flavor_params['disk']);
667 f533f224 Vangelis Koukis
            // find and display image parameters
668 f533f224 Vangelis Koukis
            var image_params = get_image_params(server.imageRef);
669 f533f224 Vangelis Koukis
            machine.find(".image-data").text(image_params['name'].substring(0,15));
670 f533f224 Vangelis Koukis
            machine.find(".image-size-data").text(image_params['size']);
671 f533f224 Vangelis Koukis
            // find and display ips
672 f533f224 Vangelis Koukis
            var ips = get_public_ips(server);
673 f533f224 Vangelis Koukis
            machine.find("a.ip span.public").text(ips['ip4']);
674 f533f224 Vangelis Koukis
        }
675 f533f224 Vangelis Koukis
        /*
676 f533f224 Vangelis Koukis
        Do some repeated actions that include:
677 f533f224 Vangelis Koukis
            1. Update actions
678 f533f224 Vangelis Koukis
            2. Metadata list updating
679 f533f224 Vangelis Koukis
        */
680 f533f224 Vangelis Koukis
        update_iconview_actions(server.id, server.status);
681 f533f224 Vangelis Koukis
        if (!(server.metadata == undefined)) {
682 f533f224 Vangelis Koukis
                list_metadata_keys(server.id, server.metadata.values);
683 f533f224 Vangelis Koukis
        }
684 eae0a59a Dimitris Moraitis
    });
685 f533f224 Vangelis Koukis
    /*
686 f533f224 Vangelis Koukis
    Do some standard stuff, repeated each time
687 f533f224 Vangelis Koukis
    FIXME: Can these be moved to a new function?
688 f533f224 Vangelis Koukis
    */
689 7a3f7b8f Mike Muzurakis
    $("div.running > div.large-spinner").hide();
690 f533f224 Vangelis Koukis
    // show all separators and hide the last one
691 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.machine-container div.separator").show();
692 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.machine-container:last-child").find("div.separator").hide();
693 f533f224 Vangelis Koukis
    // the terminated div shows only when terminated machines are available
694 f533f224 Vangelis Koukis
    if ($("#machinesview-icon.standard .terminated div.name").length > 0) {
695 f533f224 Vangelis Koukis
        $("div.terminated").fadeIn("slow");
696 e5b0ba20 Vangelis Koukis
    } else {
697 f533f224 Vangelis Koukis
        $("div.terminated").fadeOut("slow");
698 bde97369 Dimitris Moraitis
    }
699 834824c1 Mike Muzurakis
    // show message in case user has no servers!
700 f533f224 Vangelis Koukis
    if ($('#machinesview-icon .machine-container').length < 2) {
701 cebcd8ea Mike Muzurakis
        showWelcome();
702 834824c1 Mike Muzurakis
    } else {
703 cebcd8ea Mike Muzurakis
        hideWelcome();
704 bde97369 Dimitris Moraitis
    }
705 309d7ed2 Dimitris Moraitis
    // set confirm box position
706 98c2ee91 Mike Muzurakis
    if (window.innerHeight - CONFIRMBOX_OFFSET < $('#machinesview-icon.standard').height()) {
707 309d7ed2 Dimitris Moraitis
        $('.confirm_multiple').addClass('fixed');
708 98c2ee91 Mike Muzurakis
    } else {
709 309d7ed2 Dimitris Moraitis
        $('.confirm_multiple').removeClass('fixed');
710 98c2ee91 Mike Muzurakis
    }
711 eae0a59a Dimitris Moraitis
}
712 eae0a59a Dimitris Moraitis

713 bb253902 Dimitris Moraitis
// reposition multiple confirmation box on window resize
714 bb253902 Dimitris Moraitis
$(window).resize(function(){
715 bb253902 Dimitris Moraitis
    if (this.innerHeight - CONFIRMBOX_OFFSET < $('#machinesview-icon').height())
716 bb253902 Dimitris Moraitis
        $('.confirm_multiple').addClass('fixed');
717 bb253902 Dimitris Moraitis
    else
718 bb253902 Dimitris Moraitis
        $('.confirm_multiple').removeClass('fixed');
719 bb253902 Dimitris Moraitis
});
720 bb253902 Dimitris Moraitis

721 fb117e42 Mike Muzurakis
// update metadata list
722 f533f224 Vangelis Koukis
function list_metadata_keys(serverID, keys) {
723 fb117e42 Mike Muzurakis
    // empty the list if it already exists
724 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.#" +serverID).find("div.items").empty();
725 fb117e42 Mike Muzurakis
    //start counter
726 fb117e42 Mike Muzurakis
    var i=0;
727 fb117e42 Mike Muzurakis
    // show values
728 f533f224 Vangelis Koukis
    for (var key in keys) {
729 f533f224 Vangelis Koukis
        $("#machinesview-icon.standard div.#" +serverID).find(".items").append("<div class='item'>" + key + "</div>");
730 f533f224 Vangelis Koukis
        i++;
731 fb117e42 Mike Muzurakis
    }
732 fb117e42 Mike Muzurakis
    //hide the metadata controls if we have less than 3 metadata
733 fb117e42 Mike Muzurakis
    if (i <= 3) {
734 f533f224 Vangelis Koukis
        $("#machinesview-icon.standard div.#" +serverID).find(".metadata-actions").hide();
735 fb117e42 Mike Muzurakis
    }
736 461ebec9 Mike Muzurakis
    //show the metadata controls if we have more than 3 metadata
737 461ebec9 Mike Muzurakis
    if (i > 3) {
738 f533f224 Vangelis Koukis
        $("#machinesview-icon.standard div.#" +serverID).find(".metadata-actions").show();
739 461ebec9 Mike Muzurakis
    }
740 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.#" +serverID).find(".metadata-count").text(i);
741 fb117e42 Mike Muzurakis
}
742 fb117e42 Mike Muzurakis

743 a1a31201 Dimitris Moraitis
// indicate that the requested action was succesfully completed
744 a1a31201 Dimitris Moraitis
function display_success(serverID) {
745 6d0a36e5 Dimitris Moraitis

746 a1a31201 Dimitris Moraitis
}
747 a1a31201 Dimitris Moraitis

748 879748ec Markos Gogoulos
// indicate that the requested action was not completed
749 038383b1 Dimitris Moraitis
function display_failure(status, serverID, action, responseText) {
750 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .spinner').hide();
751 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error .action').text(action);
752 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error .code').text(status);
753 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error .message').text(responseText);
754 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error').show();
755 879748ec Markos Gogoulos
}
756 879748ec Markos Gogoulos

757 339712cb Christodoulos Psaltis
// basic functions executed on page load
758 7338f38d Christodoulos Psaltis
if ( flavors.length == 0 && images.length == 0 ) {
759 7338f38d Christodoulos Psaltis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
760 7338f38d Christodoulos Psaltis
    update_flavors();
761 7338f38d Christodoulos Psaltis
    // populate image list
762 f533f224 Vangelis Koukis
    update_images();
763 7338f38d Christodoulos Psaltis
} else if ( flavors.length == 0 && images.length != 0 ) {
764 7338f38d Christodoulos Psaltis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
765 7338f38d Christodoulos Psaltis
    update_flavors();
766 7338f38d Christodoulos Psaltis
} else if ( flavors.length != 0 && images.length == 0 ) {
767 7338f38d Christodoulos Psaltis
    // populate image list
768 f533f224 Vangelis Koukis
    update_images();
769 7338f38d Christodoulos Psaltis
    update_vms(UPDATE_INTERVAL);
770 66307c9e Christodoulos Psaltis
} else {
771 66307c9e Christodoulos Psaltis
    // start updating vm list
772 66307c9e Christodoulos Psaltis
    update_vms(UPDATE_INTERVAL);
773 146b6003 Dimitris Moraitis
}
774 a7b7536a Dimitris Moraitis

775 f533f224 Vangelis Koukis
// set the label of the multiple buttons
776 f533f224 Vangelis Koukis
$('.confirm_multiple button.yes').text('Confirm All');
777 f533f224 Vangelis Koukis
$('.confirm_multiple button.no').text('Cancel All');
778 9d32dca2 Mike Muzurakis

779 64fe1ae8 Mike Muzurakis
//IE specific fixes
780 1293d3ed Mike Muzurakis
if ($.browser.msie) {
781 4f0bd9ec Mike Muzurakis
    //IE fix for machine div hover
782 1293d3ed Mike Muzurakis
    $("div.machine").live("mouseenter", function () {
783 1293d3ed Mike Muzurakis
        $(this).css("background-color","#A1C8DB");
784 fe52d18f Christodoulos Psaltis
        $(this).find("div.info-header").css("background-color","#84b7d0");
785 fe52d18f Christodoulos Psaltis
        $(this).find("div.toggler div.down").css("background-color","#84b7d0");
786 146f242d Christodoulos Psaltis
        $(this).find(".actions a").css("visibility","visible");
787 1293d3ed Mike Muzurakis
    });
788 1293d3ed Mike Muzurakis
    $("div.machine").live("mouseleave", function () {
789 1293d3ed Mike Muzurakis
        $(this).css("background-color","transparent");
790 fe52d18f Christodoulos Psaltis
        $(this).find("div.info-header").css("background-color","#A1C8DB");
791 fe52d18f Christodoulos Psaltis
        $(this).find("div.toggler div.down").css("background-color","#A1C8DB");
792 146f242d Christodoulos Psaltis
        $(this).find(".actions a").css("visibility","hidden");
793 1293d3ed Mike Muzurakis
    });
794 4f0bd9ec Mike Muzurakis
    //IE fix for green arrow hover
795 4f0bd9ec Mike Muzurakis
    $("div.connect-arrow").live("mouseenter", function () {
796 4f0bd9ec Mike Muzurakis
        $(this).addClass("connect-arrow-ie");
797 4f0bd9ec Mike Muzurakis
    });
798 4f0bd9ec Mike Muzurakis
    $("div.connect-arrow").live("mouseleave", function () {
799 4f0bd9ec Mike Muzurakis
        $(this).removeClass("connect-arrow-ie");
800 4f0bd9ec Mike Muzurakis
    });
801 0aec49e0 Mike Muzurakis
    //IE fix for details button
802 0aec49e0 Mike Muzurakis
    $("button.details").live("mouseenter", function () {
803 0aec49e0 Mike Muzurakis
        $(this).css("background-color","#FF7F2A");
804 0aec49e0 Mike Muzurakis
    });
805 0aec49e0 Mike Muzurakis
    $("button.details").live("mouseleave", function () {
806 0aec49e0 Mike Muzurakis
        $(this).css("background-color","transparent");
807 0aec49e0 Mike Muzurakis
    });
808 835ce70a Mike Muzurakis
    //IE fix for multiple conf yes button
809 835ce70a Mike Muzurakis
    $("div.confirm_multiple button.yes").live("mouseenter", function () {
810 835ce70a Mike Muzurakis
        $(this).css("background-color","#FF7F2A");
811 835ce70a Mike Muzurakis
    });
812 835ce70a Mike Muzurakis
    $("div.confirm_multiple button.yes").live("mouseleave", function () {
813 835ce70a Mike Muzurakis
        $(this).css("background-color","transparent");
814 835ce70a Mike Muzurakis
    });
815 835ce70a Mike Muzurakis
    //IE fix for multiple conf no button
816 835ce70a Mike Muzurakis
    $("div.confirm_multiple button.no").live("mouseenter", function () {
817 835ce70a Mike Muzurakis
        $(this).css("background-color","#5CA1C0");
818 835ce70a Mike Muzurakis
    });
819 835ce70a Mike Muzurakis
    $("div.confirm_multiple button.no").live("mouseleave", function () {
820 835ce70a Mike Muzurakis
        $(this).css("background-color","transparent");
821 835ce70a Mike Muzurakis
    });
822 1293d3ed Mike Muzurakis
}
823 2ed4ced5 Markos Gogoulos
</script>