Statistics
| Branch: | Tag: | Revision:

root / ui / templates / machines_icon.html @ af324176

History | View | Annotate | Download (39.1 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 5b80c071 Kostas Papadimitriou
            <div class="actions clearfix">
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 097b720a Kostas Papadimitriou
        var parent = $(this).parent().parent();
179 097b720a Kostas Papadimitriou
        parent.find(".connect-arrow").show().addClass('border-hover');
180 7af53e78 Kostas Papadimitriou
    });
181 7af53e78 Kostas Papadimitriou

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

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

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

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

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

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

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

230 31e549f5 Christodoulos Psaltis
// open console on machine logo click
231 7af53e78 Kostas Papadimitriou
$("#machinesview-icon.standard .running div.logo").live('click', function(){
232 33470701 Kostas Papadimitriou
    if ($(this).parent().parent().find(".connect-arrow:visible").length == 0) { return };
233 78167f3e Mike Muzurakis
    var serverID = $(this).parent().parent().attr("id");
234 78167f3e Mike Muzurakis
    machine_connect([machine_connect, serverID]);
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 78167f3e Mike Muzurakis
    var serverID = $(this).parent().parent().attr("id");
240 78167f3e Mike Muzurakis
    machine_connect([machine_connect, serverID]);
241 31e549f5 Christodoulos Psaltis
    return false;
242 31e549f5 Christodoulos Psaltis
});
243 0a6b3683 Christodoulos Psaltis

244 1310d4f0 Christodoulos Psaltis
// open console on connect arrow border click
245 1310d4f0 Christodoulos Psaltis
$("#machinesview-icon.standard .running div.connect-border").live('click', function(){
246 02ca470d Markos Gogoulos
    var serverID = $(this).parent().parent().attr("id");
247 02ca470d Markos Gogoulos
    machine_connect([machine_connect, serverID]);
248 02ca470d Markos Gogoulos
    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 4b2ed497 Kostas Papadimitriou

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

692 4b2ed497 Kostas Papadimitriou
        // if machine in destroy state keep it that way
693 4b2ed497 Kostas Papadimitriou
        var server = get_machine(server.id);
694 4b2ed497 Kostas Papadimitriou
        if (server.status == "DESTROY") {
695 4b2ed497 Kostas Papadimitriou
            existing = $('#machinesview-icon.standard #' + server.id);
696 4b2ed497 Kostas Papadimitriou
            if (existing.length) {
697 4b2ed497 Kostas Papadimitriou
                $(existing).find('.status').text(TRANSITIONS['Destroying']);
698 4b2ed497 Kostas Papadimitriou
                $(existing).find('.state').removeClass().addClass('state destroying-state');
699 4b2ed497 Kostas Papadimitriou
                $(existing).find('.spinner').show();
700 af324176 Kostas Papadimitriou
                $(existing).find('.wave').hide();
701 4b2ed497 Kostas Papadimitriou
            }
702 4b2ed497 Kostas Papadimitriou
        }
703 4b2ed497 Kostas Papadimitriou

704 4b2ed497 Kostas Papadimitriou

705 eae0a59a Dimitris Moraitis
    });
706 f533f224 Vangelis Koukis
    /*
707 f533f224 Vangelis Koukis
    Do some standard stuff, repeated each time
708 f533f224 Vangelis Koukis
    FIXME: Can these be moved to a new function?
709 f533f224 Vangelis Koukis
    */
710 7a3f7b8f Mike Muzurakis
    $("div.running > div.large-spinner").hide();
711 f533f224 Vangelis Koukis
    // show all separators and hide the last one
712 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.machine-container div.separator").show();
713 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.machine-container:last-child").find("div.separator").hide();
714 f533f224 Vangelis Koukis
    // the terminated div shows only when terminated machines are available
715 f533f224 Vangelis Koukis
    if ($("#machinesview-icon.standard .terminated div.name").length > 0) {
716 f533f224 Vangelis Koukis
        $("div.terminated").fadeIn("slow");
717 e5b0ba20 Vangelis Koukis
    } else {
718 f533f224 Vangelis Koukis
        $("div.terminated").fadeOut("slow");
719 bde97369 Dimitris Moraitis
    }
720 834824c1 Mike Muzurakis
    // show message in case user has no servers!
721 f533f224 Vangelis Koukis
    if ($('#machinesview-icon .machine-container').length < 2) {
722 cebcd8ea Mike Muzurakis
        showWelcome();
723 834824c1 Mike Muzurakis
    } else {
724 cebcd8ea Mike Muzurakis
        hideWelcome();
725 bde97369 Dimitris Moraitis
    }
726 309d7ed2 Dimitris Moraitis
    // set confirm box position
727 98c2ee91 Mike Muzurakis
    if (window.innerHeight - CONFIRMBOX_OFFSET < $('#machinesview-icon.standard').height()) {
728 309d7ed2 Dimitris Moraitis
        $('.confirm_multiple').addClass('fixed');
729 98c2ee91 Mike Muzurakis
    } else {
730 309d7ed2 Dimitris Moraitis
        $('.confirm_multiple').removeClass('fixed');
731 98c2ee91 Mike Muzurakis
    }
732 eae0a59a Dimitris Moraitis
}
733 eae0a59a Dimitris Moraitis

734 bb253902 Dimitris Moraitis
// reposition multiple confirmation box on window resize
735 bb253902 Dimitris Moraitis
$(window).resize(function(){
736 bb253902 Dimitris Moraitis
    if (this.innerHeight - CONFIRMBOX_OFFSET < $('#machinesview-icon').height())
737 bb253902 Dimitris Moraitis
        $('.confirm_multiple').addClass('fixed');
738 bb253902 Dimitris Moraitis
    else
739 bb253902 Dimitris Moraitis
        $('.confirm_multiple').removeClass('fixed');
740 bb253902 Dimitris Moraitis
});
741 bb253902 Dimitris Moraitis

742 fb117e42 Mike Muzurakis
// update metadata list
743 f533f224 Vangelis Koukis
function list_metadata_keys(serverID, keys) {
744 fb117e42 Mike Muzurakis
    // empty the list if it already exists
745 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.#" +serverID).find("div.items").empty();
746 fb117e42 Mike Muzurakis
    //start counter
747 fb117e42 Mike Muzurakis
    var i=0;
748 fb117e42 Mike Muzurakis
    // show values
749 f533f224 Vangelis Koukis
    for (var key in keys) {
750 f533f224 Vangelis Koukis
        $("#machinesview-icon.standard div.#" +serverID).find(".items").append("<div class='item'>" + key + "</div>");
751 f533f224 Vangelis Koukis
        i++;
752 fb117e42 Mike Muzurakis
    }
753 fb117e42 Mike Muzurakis
    //hide the metadata controls if we have less than 3 metadata
754 fb117e42 Mike Muzurakis
    if (i <= 3) {
755 f533f224 Vangelis Koukis
        $("#machinesview-icon.standard div.#" +serverID).find(".metadata-actions").hide();
756 fb117e42 Mike Muzurakis
    }
757 461ebec9 Mike Muzurakis
    //show the metadata controls if we have more than 3 metadata
758 461ebec9 Mike Muzurakis
    if (i > 3) {
759 f533f224 Vangelis Koukis
        $("#machinesview-icon.standard div.#" +serverID).find(".metadata-actions").show();
760 461ebec9 Mike Muzurakis
    }
761 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.#" +serverID).find(".metadata-count").text(i);
762 fb117e42 Mike Muzurakis
}
763 fb117e42 Mike Muzurakis

764 a1a31201 Dimitris Moraitis
// indicate that the requested action was succesfully completed
765 a1a31201 Dimitris Moraitis
function display_success(serverID) {
766 6d0a36e5 Dimitris Moraitis

767 a1a31201 Dimitris Moraitis
}
768 a1a31201 Dimitris Moraitis

769 879748ec Markos Gogoulos
// indicate that the requested action was not completed
770 038383b1 Dimitris Moraitis
function display_failure(status, serverID, action, responseText) {
771 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .spinner').hide();
772 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error .action').text(action);
773 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error .code').text(status);
774 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error .message').text(responseText);
775 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error').show();
776 879748ec Markos Gogoulos
}
777 879748ec Markos Gogoulos

778 339712cb Christodoulos Psaltis
// basic functions executed on page load
779 7338f38d Christodoulos Psaltis
if ( flavors.length == 0 && images.length == 0 ) {
780 7338f38d Christodoulos Psaltis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
781 7338f38d Christodoulos Psaltis
    update_flavors();
782 7338f38d Christodoulos Psaltis
    // populate image list
783 f533f224 Vangelis Koukis
    update_images();
784 7338f38d Christodoulos Psaltis
} else if ( flavors.length == 0 && images.length != 0 ) {
785 7338f38d Christodoulos Psaltis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
786 7338f38d Christodoulos Psaltis
    update_flavors();
787 7338f38d Christodoulos Psaltis
} else if ( flavors.length != 0 && images.length == 0 ) {
788 7338f38d Christodoulos Psaltis
    // populate image list
789 f533f224 Vangelis Koukis
    update_images();
790 7338f38d Christodoulos Psaltis
    update_vms(UPDATE_INTERVAL);
791 66307c9e Christodoulos Psaltis
} else {
792 66307c9e Christodoulos Psaltis
    // start updating vm list
793 66307c9e Christodoulos Psaltis
    update_vms(UPDATE_INTERVAL);
794 146b6003 Dimitris Moraitis
}
795 a7b7536a Dimitris Moraitis

796 f533f224 Vangelis Koukis
// set the label of the multiple buttons
797 f533f224 Vangelis Koukis
$('.confirm_multiple button.yes').text('Confirm All');
798 f533f224 Vangelis Koukis
$('.confirm_multiple button.no').text('Cancel All');
799 9d32dca2 Mike Muzurakis

800 64fe1ae8 Mike Muzurakis
//IE specific fixes
801 1293d3ed Mike Muzurakis
if ($.browser.msie) {
802 4f0bd9ec Mike Muzurakis
    //IE fix for machine div hover
803 1293d3ed Mike Muzurakis
    $("div.machine").live("mouseenter", function () {
804 1293d3ed Mike Muzurakis
        $(this).css("background-color","#A1C8DB");
805 fe52d18f Christodoulos Psaltis
        $(this).find("div.info-header").css("background-color","#84b7d0");
806 fe52d18f Christodoulos Psaltis
        $(this).find("div.toggler div.down").css("background-color","#84b7d0");
807 146f242d Christodoulos Psaltis
        $(this).find(".actions a").css("visibility","visible");
808 1293d3ed Mike Muzurakis
    });
809 1293d3ed Mike Muzurakis
    $("div.machine").live("mouseleave", function () {
810 1293d3ed Mike Muzurakis
        $(this).css("background-color","transparent");
811 fe52d18f Christodoulos Psaltis
        $(this).find("div.info-header").css("background-color","#A1C8DB");
812 fe52d18f Christodoulos Psaltis
        $(this).find("div.toggler div.down").css("background-color","#A1C8DB");
813 5b80c071 Kostas Papadimitriou
        if ($(this).parent().find(".confirm_single:visible").length == 0) {
814 5b80c071 Kostas Papadimitriou
            $(this).find(".actions a").css("visibility","hidden");
815 5b80c071 Kostas Papadimitriou
        }
816 1293d3ed Mike Muzurakis
    });
817 4f0bd9ec Mike Muzurakis
    //IE fix for green arrow hover
818 4f0bd9ec Mike Muzurakis
    $("div.connect-arrow").live("mouseenter", function () {
819 4f0bd9ec Mike Muzurakis
        $(this).addClass("connect-arrow-ie");
820 4f0bd9ec Mike Muzurakis
    });
821 4f0bd9ec Mike Muzurakis
    $("div.connect-arrow").live("mouseleave", function () {
822 4f0bd9ec Mike Muzurakis
        $(this).removeClass("connect-arrow-ie");
823 4f0bd9ec Mike Muzurakis
    });
824 0aec49e0 Mike Muzurakis
    //IE fix for details button
825 0aec49e0 Mike Muzurakis
    $("button.details").live("mouseenter", function () {
826 0aec49e0 Mike Muzurakis
        $(this).css("background-color","#FF7F2A");
827 0aec49e0 Mike Muzurakis
    });
828 0aec49e0 Mike Muzurakis
    $("button.details").live("mouseleave", function () {
829 0aec49e0 Mike Muzurakis
        $(this).css("background-color","transparent");
830 0aec49e0 Mike Muzurakis
    });
831 835ce70a Mike Muzurakis
    //IE fix for multiple conf yes button
832 835ce70a Mike Muzurakis
    $("div.confirm_multiple button.yes").live("mouseenter", function () {
833 835ce70a Mike Muzurakis
        $(this).css("background-color","#FF7F2A");
834 835ce70a Mike Muzurakis
    });
835 835ce70a Mike Muzurakis
    $("div.confirm_multiple button.yes").live("mouseleave", function () {
836 835ce70a Mike Muzurakis
        $(this).css("background-color","transparent");
837 835ce70a Mike Muzurakis
    });
838 835ce70a Mike Muzurakis
    //IE fix for multiple conf no button
839 835ce70a Mike Muzurakis
    $("div.confirm_multiple button.no").live("mouseenter", function () {
840 835ce70a Mike Muzurakis
        $(this).css("background-color","#5CA1C0");
841 835ce70a Mike Muzurakis
    });
842 835ce70a Mike Muzurakis
    $("div.confirm_multiple button.no").live("mouseleave", function () {
843 835ce70a Mike Muzurakis
        $(this).css("background-color","transparent");
844 835ce70a Mike Muzurakis
    });
845 1293d3ed Mike Muzurakis
}
846 2ed4ced5 Markos Gogoulos
</script>