Statistics
| Branch: | Tag: | Revision:

root / ui / templates / machines_icon.html @ 6b1c18d5

History | View | Annotate | Download (39.6 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 f277a1cd Kostas Papadimitriou
                    <h5>
57 f277a1cd Kostas Papadimitriou
                        {% trans "IP:" %} <span class="ip-version-label">v4</span> <span class="public ipv4-text"></span>
58 f277a1cd Kostas Papadimitriou
                        <span class="ip-version-label">v6</span> <span class="public ipv6-text"></span>
59 f277a1cd Kostas Papadimitriou
                    </h5>
60 aae6187b Mike Muzurakis
                </a>
61 aae6187b Mike Muzurakis
            </div>
62 aae6187b Mike Muzurakis
            <div class="info">
63 aae6187b Mike Muzurakis
                <div class="info-header">
64 aae6187b Mike Muzurakis
                    <div class="info-label">{% trans "info" %}</div>
65 aae6187b Mike Muzurakis
                    <div class="toggler down"></div>
66 aae6187b Mike Muzurakis
                </div>
67 aae6187b Mike Muzurakis
            </div>
68 aae6187b Mike Muzurakis
            <div class="info-content">
69 aae6187b Mike Muzurakis
                <div class="metadata-container">
70 aae6187b Mike Muzurakis
                    <div class="vm-details metadata-column">
71 aae6187b Mike Muzurakis
                        {% trans "CPUs" %}: <span class="cpu-data">1</span><br />
72 3fc164d2 Vangelis Koukis
                        {% trans "RAM" %}: <span class="ram-data">2048</span>MB<br />
73 3fc164d2 Vangelis Koukis
                        {% trans "System Disk" %}: <span class="disk-data">20</span>GB <br /><br />
74 aae6187b Mike Muzurakis
                        {% trans "Image" %}: <span class="image-data">Debian</span><br />
75 3fc164d2 Vangelis Koukis
                        {% trans "Image Size" %}: <span class="image-size-data">2.3</span>MB
76 aae6187b Mike Muzurakis
                    </div>
77 aae6187b Mike Muzurakis
                    <div class="vm-stats metadata-column">
78 bd80f212 Christodoulos Psaltis
                        <div class='stat-label'>{% trans "CPU" %}</div>
79 bd80f212 Christodoulos Psaltis
                        <div class='stat-content'>
80 bd80f212 Christodoulos Psaltis
                            <img src="./static/icons/indicators/small/progress.gif" class="cpu busy" />
81 bd80f212 Christodoulos Psaltis
                            <div class='stat-error'>{% trans "Could not fetch CPU stats." %}</div>
82 bd80f212 Christodoulos Psaltis
                        </div>
83 bd80f212 Christodoulos Psaltis
                        <div class='stat-label'>{% trans "Net" %}</div>
84 bd80f212 Christodoulos Psaltis
                        <div class='stat-content'>
85 bd80f212 Christodoulos Psaltis
                            <img src="./static/icons/indicators/small/progress.gif" class="net busy" />
86 bd80f212 Christodoulos Psaltis
                            <div class='stat-error'>{% trans "Could not fetch Net stats." %}</div>
87 bd80f212 Christodoulos Psaltis
                        </div>
88 bd80f212 Christodoulos Psaltis
                        <a href="#" class="stats-report">{% trans "Full report" %}</a>
89 aae6187b Mike Muzurakis
                    </div>
90 aae6187b Mike Muzurakis
                    <div class="vm-metadata metadata-column">
91 aae6187b Mike Muzurakis
                        <div class="metadata-left">
92 98c8d3f2 Christodoulos Psaltis
                            {% trans "Tags" %}: <br />
93 aae6187b Mike Muzurakis
                            (<span class="metadata-count">0</span>)
94 aae6187b Mike Muzurakis
                        </div>
95 aae6187b Mike Muzurakis
                        <div class="metadata-keys-container">
96 aae6187b Mike Muzurakis
                            <div class="scrollable vertical">
97 aae6187b Mike Muzurakis
                                <div class="items">
98 aae6187b Mike Muzurakis
                                </div>
99 aae6187b Mike Muzurakis
                            </div>
100 aae6187b Mike Muzurakis
                            <div class="metadata-actions">
101 aae6187b Mike Muzurakis
                                <div class="prev"></div>
102 aae6187b Mike Muzurakis
                                <div class="next"></div>
103 aae6187b Mike Muzurakis
                            </div>
104 aae6187b Mike Muzurakis
                        </div>
105 aae6187b Mike Muzurakis
                        <a href="#" class="manage-metadata">{% trans "Manage Tags" %}</a>
106 aae6187b Mike Muzurakis
                    </div>
107 aae6187b Mike Muzurakis
                </div>
108 aae6187b Mike Muzurakis
            </div>
109 aae6187b Mike Muzurakis
            <div class="state">
110 aae6187b Mike Muzurakis
                <div class="status">{% trans "Running" %}</div>
111 aae6187b Mike Muzurakis
                <div class="indicators">
112 aae6187b Mike Muzurakis
                    <div class="indicator1"></div>
113 aae6187b Mike Muzurakis
                    <div class="indicator2"></div>
114 aae6187b Mike Muzurakis
                    <div class="indicator3"></div>
115 aae6187b Mike Muzurakis
                    <div class="indicator4"></div>
116 aae6187b Mike Muzurakis
                </div>
117 a583aa29 Kostas Papadimitriou
                <div class="action-indicator" style="display:none"></div>
118 aae6187b Mike Muzurakis
                <img class="spinner" style="display:none" src="static/icons/indicators/medium/progress.gif" />
119 aae6187b Mike Muzurakis
                <img class="wave" style="display:none" src="static/icons/indicators/medium/wave.gif" />
120 aae6187b Mike Muzurakis
            </div>
121 5b80c071 Kostas Papadimitriou
            <div class="actions clearfix">
122 72872ba2 Christodoulos Psaltis
                <div class="action-container start">
123 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-start">{% trans "Start" %}</a>
124 72872ba2 Christodoulos Psaltis
                    <div class="confirm_single">
125 72872ba2 Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
126 72872ba2 Christodoulos Psaltis
                        <button class="no">X</button>
127 72872ba2 Christodoulos Psaltis
                    </div>
128 72872ba2 Christodoulos Psaltis
                </div>
129 72872ba2 Christodoulos Psaltis
                <div class="action-container reboot">
130 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-reboot">{% trans "Reboot" %}</a>
131 72872ba2 Christodoulos Psaltis
                    <div class="confirm_single">
132 72872ba2 Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
133 72872ba2 Christodoulos Psaltis
                        <button class="no">X</button>
134 72872ba2 Christodoulos Psaltis
                    </div>
135 72872ba2 Christodoulos Psaltis
                </div>
136 72872ba2 Christodoulos Psaltis
                <div class="action-container shutdown">
137 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-shutdown">{% trans "Shutdown" %}</a>
138 72872ba2 Christodoulos Psaltis
                    <div class="confirm_single">
139 72872ba2 Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
140 72872ba2 Christodoulos Psaltis
                        <button class="no">X</button>
141 72872ba2 Christodoulos Psaltis
                    </div>
142 72872ba2 Christodoulos Psaltis
                </div>
143 72872ba2 Christodoulos Psaltis
                <div class="action-container console">
144 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-console">{% trans "Console" %}</a>
145 72872ba2 Christodoulos Psaltis
                    <div class="confirm_single">
146 72872ba2 Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
147 72872ba2 Christodoulos Psaltis
                        <button class="no">X</button>
148 72872ba2 Christodoulos Psaltis
                    </div>
149 72872ba2 Christodoulos Psaltis
                </div>
150 72872ba2 Christodoulos Psaltis
                <div class="action-container destroy">
151 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-destroy">{% trans "Destroy" %}</a>
152 72872ba2 Christodoulos Psaltis
                    <div class="confirm_single">
153 72872ba2 Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
154 72872ba2 Christodoulos Psaltis
                        <button class="no">X</button>
155 72872ba2 Christodoulos Psaltis
                    </div>
156 72872ba2 Christodoulos Psaltis
                </div>
157 f533f224 Vangelis Koukis
            </div>
158 09d3fbbf Mike Muzurakis
            <div class="action_error" align="center">
159 9e53fd01 Christodoulos Psaltis
                {% trans "<span>Error</span> on" %} <span class="action">{% trans "error action" %}</span>
160 f533f224 Vangelis Koukis
                <span class="code"></span>
161 09d3fbbf Mike Muzurakis
                <span class="message"></span>
162 09d3fbbf Mike Muzurakis
                <button class="details">{% trans "Details" %}</button>
163 09d3fbbf Mike Muzurakis
            </div>
164 879748ec Markos Gogoulos
        </div>
165 c2464ef2 Christodoulos Psaltis
        <div class="separator"></div>
166 6f578c81 Kostas Papadimitriou
    </div><div class="large-spinner"></div>
167 6f578c81 Kostas Papadimitriou
    <div class="running disabled"></div>
168 f533f224 Vangelis Koukis
    <div class="terminated" style="display:none;"></div>
169 42f67a2a Dimitris Moraitis
</div>
170 42f67a2a Dimitris Moraitis
171 42f67a2a Dimitris Moraitis
<script>
172 bb253902 Dimitris Moraitis
CONFIRMBOX_OFFSET = 200;
173 31e549f5 Christodoulos Psaltis

174 a583aa29 Kostas Papadimitriou
init_action_indicator_handlers('icon');
175 a583aa29 Kostas Papadimitriou

176 7af53e78 Kostas Papadimitriou
// handle connect machine image states
177 23a4a31b Kostas Papadimitriou
$("div.connect-arrow, div.running .machine .logo").live('mouseover',
178 7af53e78 Kostas Papadimitriou
    function() {
179 23a4a31b Kostas Papadimitriou
        if ($(this).parent().parent().find('.status').text() != STATUSES['ACTIVE']) { return };
180 7af53e78 Kostas Papadimitriou
        set_machine_os_image($(this).parent().parent(), "icon", "hover", undefined, 1);
181 097b720a Kostas Papadimitriou
        var parent = $(this).parent().parent();
182 097b720a Kostas Papadimitriou
        parent.find(".connect-arrow").show().addClass('border-hover');
183 7af53e78 Kostas Papadimitriou
    });
184 7af53e78 Kostas Papadimitriou

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

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

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

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

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

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

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

233 31e549f5 Christodoulos Psaltis
// open console on machine logo click
234 7af53e78 Kostas Papadimitriou
$("#machinesview-icon.standard .running div.logo").live('click', function(){
235 33470701 Kostas Papadimitriou
    if ($(this).parent().parent().find(".connect-arrow:visible").length == 0) { return };
236 78167f3e Mike Muzurakis
    var serverID = $(this).parent().parent().attr("id");
237 78167f3e Mike Muzurakis
    machine_connect([machine_connect, serverID]);
238 7af53e78 Kostas Papadimitriou
    return false;
239 7af53e78 Kostas Papadimitriou
});
240 7af53e78 Kostas Papadimitriou

241 31e549f5 Christodoulos Psaltis
$("#machinesview-icon.standard .running div.connect-arrow").live('click', function(){
242 78167f3e Mike Muzurakis
    var serverID = $(this).parent().parent().attr("id");
243 78167f3e Mike Muzurakis
    machine_connect([machine_connect, serverID]);
244 31e549f5 Christodoulos Psaltis
    return false;
245 31e549f5 Christodoulos Psaltis
});
246 0a6b3683 Christodoulos Psaltis

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

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

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

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

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

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

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

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

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

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

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

449 b02144c8 Vangelis Koukis

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

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

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

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

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

532 eae0a59a Dimitris Moraitis
// update the servers list
533 f533f224 Vangelis Koukis
function update_machines_view(data) {
534 f533f224 Vangelis Koukis
    /*
535 1a49199e Dimitris Moraitis
    Go through the servers in the input data. Update existing entries, add
536 eae0a59a Dimitris Moraitis
    new ones to the list
537 cf5c41d0 Christodoulos Psaltis
    */
538 f533f224 Vangelis Koukis
    $.each(data.servers.values, function(i,server) {
539 4b2ed497 Kostas Papadimitriou

540 f533f224 Vangelis Koukis
        // get DOM element, if it exists
541 f533f224 Vangelis Koukis
        existing = $('#machinesview-icon.standard #' + server.id);
542 f533f224 Vangelis Koukis
        // get server OS, if it exists
543 f533f224 Vangelis Koukis
        if (!(server.metadata == undefined)) {
544 f533f224 Vangelis Koukis
            var server_image = os_icon(server.metadata);
545 f533f224 Vangelis Koukis
        } else {
546 f533f224 Vangelis Koukis
            var server_image = "unknown"
547 f533f224 Vangelis Koukis
        }
548 f533f224 Vangelis Koukis
        // get server status message, if it exists
549 f533f224 Vangelis Koukis
        var current_message = existing.find(".status").text();
550 87feccc4 Dimitris Moraitis
        // if multiple machines exist in the DOM, delete all but one
551 87feccc4 Dimitris Moraitis
        // defensive coding - that shouldn't happen normally
552 87feccc4 Dimitris Moraitis
        while (existing.length > 1){
553 eae0a59a Dimitris Moraitis
            existing.remove();
554 eae0a59a Dimitris Moraitis
        }
555 f533f224 Vangelis Koukis
        // if server already exists in DOM, update its values
556 1a49199e Dimitris Moraitis
        if (existing.length){
557 f533f224 Vangelis Koukis
            //  if the status is deleted
558 87feccc4 Dimitris Moraitis
            if (server.status == 'DELETED') {
559 f533f224 Vangelis Koukis
                // delete server entry from the DOM
560 f533f224 Vangelis Koukis
                log_server_status_change(existing, 'DELETED');
561 d1aa78ff Mike Muzurakis
                existing.remove();
562 f533f224 Vangelis Koukis
            }
563 f533f224 Vangelis Koukis
            // if the status has changed
564 f533f224 Vangelis Koukis
            else if ( current_message != STATUSES[server.status]) {
565 f533f224 Vangelis Koukis
                /*
566 f533f224 Vangelis Koukis
                Here there are 4 possibilities:
567 f533f224 Vangelis Koukis
                    1. From an active state to an inactive one
568 f533f224 Vangelis Koukis
                    2. From an inactive state to an active one
569 f533f224 Vangelis Koukis
                    3. From an active state to a different active one
570 f533f224 Vangelis Koukis
                    4. From an inactive state to a different inactive one
571 f533f224 Vangelis Koukis
                The last two (3, 4) can be dealt with the same way
572 f533f224 Vangelis Koukis
                */
573 f533f224 Vangelis Koukis
                if (ACTIVE_STATES.indexOf(current_message) >= 0 &&
574 f533f224 Vangelis Koukis
                    INACTIVE_STATES.indexOf(STATUSES[server.status]) >= 0) {
575 f533f224 Vangelis Koukis
                    // from an active state to an inactive one
576 f533f224 Vangelis Koukis
                    log_server_status_change(existing, server.status);
577 f533f224 Vangelis Koukis
                    moved = existing.clone().appendTo("#machinesview-icon.standard .terminated");
578 7af53e78 Kostas Papadimitriou
                    set_machine_os_image(moved, "icon", "off", server_image);
579 1a49199e Dimitris Moraitis
                    existing.remove();
580 1a49199e Dimitris Moraitis
                    existing = moved;
581 f533f224 Vangelis Koukis
                    existing.find(".status").text(STATUSES[server.status]);
582 f533f224 Vangelis Koukis
                    existing.find('.spinner').hide();
583 bc80540d Mike Muzurakis
                    if ($("div.terminated").find("div.machine-container").length > 0) {
584 bc80540d Mike Muzurakis
                        $("div.terminated").show();
585 bc80540d Mike Muzurakis
                    }
586 f533f224 Vangelis Koukis
                    existing.find(' .wave').attr('src','static/icons/indicators/medium/wave.gif').show();
587 e5e5e4de Markos Gogoulos
                    existing.find('.state').removeClass().addClass('state terminated-state');
588 f533f224 Vangelis Koukis
                    setTimeout("$('#" + server.id +" .wave').attr('src','').hide()", 3000);
589 f533f224 Vangelis Koukis
                }
590 f533f224 Vangelis Koukis
                else if (INACTIVE_STATES.indexOf(current_message) >= 0 &&
591 f533f224 Vangelis Koukis
                         ACTIVE_STATES.indexOf(STATUSES[server.status]) >= 0) {
592 f533f224 Vangelis Koukis
                    // From an inactive state to an active one
593 f533f224 Vangelis Koukis
                    log_server_status_change(existing, server.status);
594 f533f224 Vangelis Koukis
                    moved = existing.clone().appendTo("#machinesview-icon.standard .running");
595 7af53e78 Kostas Papadimitriou
                    set_machine_os_image(moved, "icon", "on", server_image);
596 198e13aa Christodoulos Psaltis
                    existing.remove();
597 198e13aa Christodoulos Psaltis
                    existing = moved;
598 f533f224 Vangelis Koukis
                    existing.find(".status").text(STATUSES[server.status]);
599 f533f224 Vangelis Koukis
                    existing.find('.spinner').hide();
600 bc80540d Mike Muzurakis
                    if ($("div.terminated").find("div.machine-container").length == 0) {
601 bc80540d Mike Muzurakis
                        $("div.terminated").hide();
602 bc80540d Mike Muzurakis
                    }
603 f533f224 Vangelis Koukis
                    existing.find(' .wave').attr('src','static/icons/indicators/medium/wave.gif').show();
604 e30babe3 Markos Gogoulos
                    existing.find('.state').removeClass().addClass('state running-state');
605 f533f224 Vangelis Koukis
                    setTimeout("$('#" + server.id +" .wave').attr('src','').hide()", 3000);
606 f533f224 Vangelis Koukis
                }
607 f533f224 Vangelis Koukis
                else {
608 f533f224 Vangelis Koukis
                    // handling active to active or inactive to inactive changes
609 f533f224 Vangelis Koukis
                    if (TRANSITIONS[current_message] && TRANSITIONS[current_message] != 'Rebooting') {
610 f533f224 Vangelis Koukis
                        // don't do anything if it is still in transition
611 d8fce384 Mike Muzurakis
                    }
612 f533f224 Vangelis Koukis
                    else if ((TRANSITIONS[current_message] == 'Rebooting' && server.status == 'ACTIVE') ||
613 f533f224 Vangelis Koukis
                             (STATUSES['BUILD'] == current_message && server.status == 'ACTIVE')) {
614 f533f224 Vangelis Koukis
                        // if it has been rebooted or just created
615 f533f224 Vangelis Koukis
                        log_server_status_change(existing, server.status);
616 f533f224 Vangelis Koukis
                        existing.find(".status").text(STATUSES[server.status]);
617 f533f224 Vangelis Koukis
                        existing.find('.spinner').hide();
618 f533f224 Vangelis Koukis
                        existing.find(' .wave').attr('src','static/icons/indicators/medium/wave.gif').show();
619 e30babe3 Markos Gogoulos
                        existing.find('.state').removeClass().addClass('state running-state');
620 f533f224 Vangelis Koukis
                        setTimeout("$('#" + server.id +" .wave').attr('src','').hide()", 3000);
621 d8fce384 Mike Muzurakis
                    }
622 1df63521 Kostas Papadimitriou
                    else if (STATUSES[server.status] == "Rebooting") { 
623 1df63521 Kostas Papadimitriou
                        // from running to rebooting
624 1df63521 Kostas Papadimitriou
                        log_server_status_change(existing, server.status);
625 1df63521 Kostas Papadimitriou
                        existing.find(".state").removeClass().addClass('state rebooting-state');
626 1df63521 Kostas Papadimitriou
                        existing.find('.spinner').show();
627 1df63521 Kostas Papadimitriou
                        existing.find(".status").text(STATUSES[server.status]);
628 1df63521 Kostas Papadimitriou
                    } else {
629 f533f224 Vangelis Koukis
                        // in any other case just change the status and ignore spinners/waves
630 f533f224 Vangelis Koukis
                        existing.find(".status").text(STATUSES[server.status]);
631 e30babe3 Markos Gogoulos
                        existing.appendTo("#machinesview-icon.standard .running");
632 e30babe3 Markos Gogoulos
                        existing.find('.state').removeClass().addClass('state running-state');
633 f533f224 Vangelis Koukis
                    }
634 f533f224 Vangelis Koukis
                }
635 d8fce384 Mike Muzurakis
            }
636 f533f224 Vangelis Koukis
            // find and display ips
637 f533f224 Vangelis Koukis
            var ips = get_public_ips(server);
638 f533f224 Vangelis Koukis
            existing.find("a.ip span.public").text(ips['ip4']);
639 f277a1cd Kostas Papadimitriou
            existing.find("a.ip span.public.ipv6-text").text(ips['ip6']);
640 f533f224 Vangelis Koukis
        }
641 f533f224 Vangelis Koukis
        // if it doesn't exist and the server is not DELETED, make a new entry
642 f533f224 Vangelis Koukis
        else if ( server.status != 'DELETED') {
643 f533f224 Vangelis Koukis
            // clone the proper template and put basic values in
644 f533f224 Vangelis Koukis
            var machine = $("#machinesview-icon.standard #machine-container-template").clone().attr("id", server.id).fadeIn("slow");
645 93ddb02b Kostas Papadimitriou

646 f533f224 Vangelis Koukis
            machine.find(".scrollable").scrollable({vertical: true});
647 b437ff91 Mike Muzurakis
            machine.find("div.name span.name").text(server.name.substring(0,50));
648 f533f224 Vangelis Koukis
            machine.find("span.imagetag").text(server_image);
649 f533f224 Vangelis Koukis
            machine.find(".status").text(STATUSES[server.status]);
650 f533f224 Vangelis Koukis
            // check server status to select where to append the new server to
651 f533f224 Vangelis Koukis
            if (ACTIVE_STATES.indexOf(STATUSES[server.status]) >= 0 ) {
652 f533f224 Vangelis Koukis
                // append to running
653 7af53e78 Kostas Papadimitriou
                set_machine_os_image(machine, "icon", "on", server_image);
654 f533f224 Vangelis Koukis
                machine.appendTo("#machinesview-icon.standard .running");
655 eae0a59a Dimitris Moraitis
            } else {
656 f533f224 Vangelis Koukis
                // append to terminated
657 7af53e78 Kostas Papadimitriou
                set_machine_os_image(machine, "icon", "off", server_image);
658 31e549f5 Christodoulos Psaltis
                machine.appendTo("#machinesview-icon.standard .terminated");
659 4449fac0 Markos Gogoulos
                if (server.status == "STOPPED") { //if server status us stopped is a different case than status unknown/error
660 4449fac0 Markos Gogoulos
                    machine.find('.state').removeClass().addClass('state terminated-state');
661 4449fac0 Markos Gogoulos
                } else {
662 4449fac0 Markos Gogoulos
                       machine.find('.state').removeClass().addClass('state error-state');
663 4449fac0 Markos Gogoulos
                }
664 eae0a59a Dimitris Moraitis
            }
665 93ddb02b Kostas Papadimitriou

666 f533f224 Vangelis Koukis
            //show spinner if server is still building or rebooting
667 be8c2a2d Markos Gogoulos
            if (server.status == 'BUILD') {
668 97a4b51d Christodoulos Psaltis
                machine.find('.spinner').show();
669 08c6e8da Markos Gogoulos
                machine.find('.state').removeClass().addClass('state build-state');
670 93ddb02b Kostas Papadimitriou
                machine.addClass('vm-building');
671 93ddb02b Kostas Papadimitriou
            } else {
672 93ddb02b Kostas Papadimitriou
                machine.removeClass('vm-building');
673 e64bfe94 Markos Gogoulos
            }
674 93ddb02b Kostas Papadimitriou

675 be8c2a2d Markos Gogoulos
            if (server.status == 'REBOOT') {
676 3cdf1ded Markos Gogoulos
                machine.find('.spinner').show();
677 3cdf1ded Markos Gogoulos
                machine.find('.state').removeClass().addClass('state rebooting-state');
678 3cdf1ded Markos Gogoulos
            }
679 f533f224 Vangelis Koukis
            // find and display flavor parameters
680 f533f224 Vangelis Koukis
            var flavor_params = get_flavor_params(server.flavorRef);
681 f533f224 Vangelis Koukis
            machine.find(".cpu-data").text(flavor_params['cpus']);
682 f533f224 Vangelis Koukis
            machine.find(".ram-data").text(flavor_params['ram']);
683 f533f224 Vangelis Koukis
            machine.find(".disk-data").text(flavor_params['disk']);
684 f533f224 Vangelis Koukis
            // find and display image parameters
685 f533f224 Vangelis Koukis
            var image_params = get_image_params(server.imageRef);
686 f533f224 Vangelis Koukis
            machine.find(".image-data").text(image_params['name'].substring(0,15));
687 f533f224 Vangelis Koukis
            machine.find(".image-size-data").text(image_params['size']);
688 f533f224 Vangelis Koukis
            // find and display ips
689 f533f224 Vangelis Koukis
            var ips = get_public_ips(server);
690 f533f224 Vangelis Koukis
            machine.find("a.ip span.public").text(ips['ip4']);
691 f277a1cd Kostas Papadimitriou
            machine.find("a.ip span.public.ipv6-text").text(ips['ip6']);
692 f533f224 Vangelis Koukis
        }
693 f533f224 Vangelis Koukis
        /*
694 f533f224 Vangelis Koukis
        Do some repeated actions that include:
695 f533f224 Vangelis Koukis
            1. Update actions
696 f533f224 Vangelis Koukis
            2. Metadata list updating
697 f533f224 Vangelis Koukis
        */
698 f533f224 Vangelis Koukis
        update_iconview_actions(server.id, server.status);
699 f533f224 Vangelis Koukis
        if (!(server.metadata == undefined)) {
700 f533f224 Vangelis Koukis
                list_metadata_keys(server.id, server.metadata.values);
701 f533f224 Vangelis Koukis
        }
702 4b2ed497 Kostas Papadimitriou

703 4b2ed497 Kostas Papadimitriou
        // if machine in destroy state keep it that way
704 4b2ed497 Kostas Papadimitriou
        var server = get_machine(server.id);
705 4b2ed497 Kostas Papadimitriou
        if (server.status == "DESTROY") {
706 4b2ed497 Kostas Papadimitriou
            existing = $('#machinesview-icon.standard #' + server.id);
707 4b2ed497 Kostas Papadimitriou
            if (existing.length) {
708 4b2ed497 Kostas Papadimitriou
                $(existing).find('.status').text(TRANSITIONS['Destroying']);
709 4b2ed497 Kostas Papadimitriou
                $(existing).find('.state').removeClass().addClass('state destroying-state');
710 4b2ed497 Kostas Papadimitriou
                $(existing).find('.spinner').show();
711 cb748f1f Kostas Papadimitriou
                $(existing).find('.wave').hide();
712 4b2ed497 Kostas Papadimitriou
            }
713 4b2ed497 Kostas Papadimitriou
        }
714 4b2ed497 Kostas Papadimitriou

715 4b2ed497 Kostas Papadimitriou

716 eae0a59a Dimitris Moraitis
    });
717 f533f224 Vangelis Koukis
    /*
718 f533f224 Vangelis Koukis
    Do some standard stuff, repeated each time
719 f533f224 Vangelis Koukis
    FIXME: Can these be moved to a new function?
720 f533f224 Vangelis Koukis
    */
721 f277a1cd Kostas Papadimitriou
    fix_v6_addresses();
722 6f578c81 Kostas Papadimitriou
    $("div.large-spinner").hide();
723 6f578c81 Kostas Papadimitriou
    $("div.running").removeClass("disabled");
724 f533f224 Vangelis Koukis
    // show all separators and hide the last one
725 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.machine-container div.separator").show();
726 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.machine-container:last-child").find("div.separator").hide();
727 f533f224 Vangelis Koukis
    // the terminated div shows only when terminated machines are available
728 f533f224 Vangelis Koukis
    if ($("#machinesview-icon.standard .terminated div.name").length > 0) {
729 f533f224 Vangelis Koukis
        $("div.terminated").fadeIn("slow");
730 e5b0ba20 Vangelis Koukis
    } else {
731 f533f224 Vangelis Koukis
        $("div.terminated").fadeOut("slow");
732 bde97369 Dimitris Moraitis
    }
733 834824c1 Mike Muzurakis
    // show message in case user has no servers!
734 f533f224 Vangelis Koukis
    if ($('#machinesview-icon .machine-container').length < 2) {
735 cebcd8ea Mike Muzurakis
        showWelcome();
736 834824c1 Mike Muzurakis
    } else {
737 cebcd8ea Mike Muzurakis
        hideWelcome();
738 bde97369 Dimitris Moraitis
    }
739 309d7ed2 Dimitris Moraitis
    // set confirm box position
740 98c2ee91 Mike Muzurakis
    if (window.innerHeight - CONFIRMBOX_OFFSET < $('#machinesview-icon.standard').height()) {
741 309d7ed2 Dimitris Moraitis
        $('.confirm_multiple').addClass('fixed');
742 98c2ee91 Mike Muzurakis
    } else {
743 309d7ed2 Dimitris Moraitis
        $('.confirm_multiple').removeClass('fixed');
744 98c2ee91 Mike Muzurakis
    }
745 eae0a59a Dimitris Moraitis
}
746 eae0a59a Dimitris Moraitis

747 bb253902 Dimitris Moraitis
// reposition multiple confirmation box on window resize
748 bb253902 Dimitris Moraitis
$(window).resize(function(){
749 bb253902 Dimitris Moraitis
    if (this.innerHeight - CONFIRMBOX_OFFSET < $('#machinesview-icon').height())
750 bb253902 Dimitris Moraitis
        $('.confirm_multiple').addClass('fixed');
751 bb253902 Dimitris Moraitis
    else
752 bb253902 Dimitris Moraitis
        $('.confirm_multiple').removeClass('fixed');
753 bb253902 Dimitris Moraitis
});
754 bb253902 Dimitris Moraitis

755 fb117e42 Mike Muzurakis
// update metadata list
756 f533f224 Vangelis Koukis
function list_metadata_keys(serverID, keys) {
757 fb117e42 Mike Muzurakis
    // empty the list if it already exists
758 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.#" +serverID).find("div.items").empty();
759 fb117e42 Mike Muzurakis
    //start counter
760 fb117e42 Mike Muzurakis
    var i=0;
761 fb117e42 Mike Muzurakis
    // show values
762 f533f224 Vangelis Koukis
    for (var key in keys) {
763 f533f224 Vangelis Koukis
        $("#machinesview-icon.standard div.#" +serverID).find(".items").append("<div class='item'>" + key + "</div>");
764 f533f224 Vangelis Koukis
        i++;
765 fb117e42 Mike Muzurakis
    }
766 fb117e42 Mike Muzurakis
    //hide the metadata controls if we have less than 3 metadata
767 fb117e42 Mike Muzurakis
    if (i <= 3) {
768 f533f224 Vangelis Koukis
        $("#machinesview-icon.standard div.#" +serverID).find(".metadata-actions").hide();
769 fb117e42 Mike Muzurakis
    }
770 461ebec9 Mike Muzurakis
    //show the metadata controls if we have more than 3 metadata
771 461ebec9 Mike Muzurakis
    if (i > 3) {
772 f533f224 Vangelis Koukis
        $("#machinesview-icon.standard div.#" +serverID).find(".metadata-actions").show();
773 461ebec9 Mike Muzurakis
    }
774 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.#" +serverID).find(".metadata-count").text(i);
775 fb117e42 Mike Muzurakis
}
776 fb117e42 Mike Muzurakis

777 a1a31201 Dimitris Moraitis
// indicate that the requested action was succesfully completed
778 a1a31201 Dimitris Moraitis
function display_success(serverID) {
779 6d0a36e5 Dimitris Moraitis

780 a1a31201 Dimitris Moraitis
}
781 a1a31201 Dimitris Moraitis

782 879748ec Markos Gogoulos
// indicate that the requested action was not completed
783 038383b1 Dimitris Moraitis
function display_failure(status, serverID, action, responseText) {
784 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .spinner').hide();
785 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error .action').text(action);
786 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error .code').text(status);
787 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error .message').text(responseText);
788 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error').show();
789 879748ec Markos Gogoulos
}
790 879748ec Markos Gogoulos

791 339712cb Christodoulos Psaltis
// basic functions executed on page load
792 7338f38d Christodoulos Psaltis
if ( flavors.length == 0 && images.length == 0 ) {
793 7338f38d Christodoulos Psaltis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
794 7338f38d Christodoulos Psaltis
    update_flavors();
795 7338f38d Christodoulos Psaltis
    // populate image list
796 f533f224 Vangelis Koukis
    update_images();
797 7338f38d Christodoulos Psaltis
} else if ( flavors.length == 0 && images.length != 0 ) {
798 7338f38d Christodoulos Psaltis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
799 7338f38d Christodoulos Psaltis
    update_flavors();
800 7338f38d Christodoulos Psaltis
} else if ( flavors.length != 0 && images.length == 0 ) {
801 7338f38d Christodoulos Psaltis
    // populate image list
802 f533f224 Vangelis Koukis
    update_images();
803 7338f38d Christodoulos Psaltis
    update_vms(UPDATE_INTERVAL);
804 66307c9e Christodoulos Psaltis
} else {
805 66307c9e Christodoulos Psaltis
    // start updating vm list
806 66307c9e Christodoulos Psaltis
    update_vms(UPDATE_INTERVAL);
807 146b6003 Dimitris Moraitis
}
808 a7b7536a Dimitris Moraitis

809 f533f224 Vangelis Koukis
// set the label of the multiple buttons
810 f533f224 Vangelis Koukis
$('.confirm_multiple button.yes').text('Confirm All');
811 f533f224 Vangelis Koukis
$('.confirm_multiple button.no').text('Cancel All');
812 9d32dca2 Mike Muzurakis

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