Statistics
| Branch: | Tag: | Revision:

root / ui / templates / machines_icon.html @ a70fb308

History | View | Annotate | Download (33.9 kB)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

391 b02144c8 Vangelis Koukis

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

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

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

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

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

474 f533f224 Vangelis Koukis
// TODO: This should be populated with more rules for all available states
475 f533f224 Vangelis Koukis
var actions = { 'reboot':        ['UNKOWN', 'ACTIVE', 'REBOOT'],
476 f533f224 Vangelis Koukis
                'shutdown':      ['UNKOWN', 'ACTIVE', 'REBOOT'],
477 f533f224 Vangelis Koukis
                'console':       ['ACTIVE'],
478 f533f224 Vangelis Koukis
                'start':         ['UNKOWN', 'STOPPED'],
479 f533f224 Vangelis Koukis
                'destroy':       ['UNKOWN', 'ACTIVE', 'STOPPED', 'REBOOT', 'ERROR', 'BUILD']
480 f533f224 Vangelis Koukis
               };
481 cf5c41d0 Christodoulos Psaltis

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

666 bb253902 Dimitris Moraitis
// reposition multiple confirmation box on window resize
667 bb253902 Dimitris Moraitis
$(window).resize(function(){
668 bb253902 Dimitris Moraitis
    if (this.innerHeight - CONFIRMBOX_OFFSET < $('#machinesview-icon').height())
669 bb253902 Dimitris Moraitis
        $('.confirm_multiple').addClass('fixed');
670 bb253902 Dimitris Moraitis
    else
671 bb253902 Dimitris Moraitis
        $('.confirm_multiple').removeClass('fixed');
672 bb253902 Dimitris Moraitis
});
673 bb253902 Dimitris Moraitis

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

696 a1a31201 Dimitris Moraitis
// indicate that the requested action was succesfully completed
697 a1a31201 Dimitris Moraitis
function display_success(serverID) {
698 6d0a36e5 Dimitris Moraitis

699 a1a31201 Dimitris Moraitis
}
700 a1a31201 Dimitris Moraitis

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

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

728 f533f224 Vangelis Koukis
// set the label of the multiple buttons
729 f533f224 Vangelis Koukis
$('.confirm_multiple button.yes').text('Confirm All');
730 f533f224 Vangelis Koukis
$('.confirm_multiple button.no').text('Cancel All');
731 9d32dca2 Mike Muzurakis
732 2ed4ced5 Markos Gogoulos
</script>