Statistics
| Branch: | Tag: | Revision:

root / ui / templates / machines_list.html @ dae23b8f

History | View | Annotate | Download (19.4 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 f533f224 Vangelis Koukis
{% load i18n %}
37 f533f224 Vangelis Koukis
38 f533f224 Vangelis Koukis
<div id="machinesview-list" class="list">
39 f533f224 Vangelis Koukis
    <div class="large-spinner"></div>
40 f533f224 Vangelis Koukis
    <div id="machinesview_content">
41 f533f224 Vangelis Koukis
        <div class="actions">
42 f533f224 Vangelis Koukis
            <a id="action-start">{% trans "Start" %}</a>
43 f533f224 Vangelis Koukis
            <a id="action-reboot">{% trans "Reboot" %}</a>
44 f533f224 Vangelis Koukis
            <a id="action-shutdown">{% trans "Shutdown" %}</a>
45 f533f224 Vangelis Koukis
            <br />
46 f533f224 Vangelis Koukis
            <a id="action-destroy">{% trans "Destroy" %}</a>
47 f533f224 Vangelis Koukis
            <br />
48 f533f224 Vangelis Koukis
            <a id="action-details">{% trans "Show Details" %}</a>
49 0efc6389 Markos Gogoulos
            {% comment %}<a id="action-group">{% trans "Add to group" %}</a>{% endcomment %}
50 f533f224 Vangelis Koukis
            <br />
51 f533f224 Vangelis Koukis
            <a id="action-console">{% trans "Console" %}</a>
52 0efc6389 Markos Gogoulos
            <a id="action-connect">{% trans "Connect" %}</a>
53 f533f224 Vangelis Koukis
            <br />
54 c3bcf420 Markos Gogoulos
            {% comment %}
55 f533f224 Vangelis Koukis
            <a id="action-attach">{% trans "Attach disk" %}</a>
56 f533f224 Vangelis Koukis
            <a id="action-detach">{% trans "Detach disk" %}</a>
57 f533f224 Vangelis Koukis
            <br />
58 0efc6389 Markos Gogoulos
            <a id="action-network-connect">{% trans "Connect to network" %}</a>
59 0efc6389 Markos Gogoulos
            <a id="action-network-disconnect">{% trans "Disconnect from net" %}</a>
60 c3bcf420 Markos Gogoulos
            {% endcomment %}
61 f533f224 Vangelis Koukis
        </div>
62 f533f224 Vangelis Koukis
        <table class="list-machines" style="display: none">
63 f533f224 Vangelis Koukis
            <thead>
64 f533f224 Vangelis Koukis
                <tr>
65 f533f224 Vangelis Koukis
                    <th class="selection select-running">
66 f533f224 Vangelis Koukis
                        <input type="checkbox"/>
67 d22b4464 Mike Muzurakis
                        <!-- Drop down selector is commented out for v0.5
68 f533f224 Vangelis Koukis
                        <div class="expand-icon"></div>
69 d22b4464 Mike Muzurakis
                        -->
70 f533f224 Vangelis Koukis
                    </th>
71 f533f224 Vangelis Koukis
                    <th class="vmos">{% trans "OS" %}</th>
72 f533f224 Vangelis Koukis
                    <th class="vmname">{% trans "Name" %}</th>
73 f533f224 Vangelis Koukis
                    <th class="vmflavor">{% trans "Flavor" %}</th>
74 f533f224 Vangelis Koukis
                    <th class="vmgroup">{% trans "Group" %}</th>
75 f533f224 Vangelis Koukis
                    <th class="vmstatus">{% trans "Status" %}</th>
76 f533f224 Vangelis Koukis
                </tr>
77 f533f224 Vangelis Koukis
            </thead>
78 f533f224 Vangelis Koukis
            <tbody class="machines"></tbody>
79 f533f224 Vangelis Koukis
        </table>
80 d22b4464 Mike Muzurakis
        <!-- Drop down selector is commented out for v0.5
81 f533f224 Vangelis Koukis
        <ul class="dropdown-selector" style="display: none">
82 f533f224 Vangelis Koukis
            <li class="select-all" ><a href="#">{% trans "all" %}</a></li>
83 f533f224 Vangelis Koukis
            <li class="select-none"><a href="#">{% trans "none" %}</a></li>
84 f533f224 Vangelis Koukis
            <li class="select-group"><a href="#">{% trans "group" %}</a></li>
85 f533f224 Vangelis Koukis
        </ul>
86 d22b4464 Mike Muzurakis
        -->
87 f533f224 Vangelis Koukis
    </div>
88 f533f224 Vangelis Koukis
</div>
89 f533f224 Vangelis Koukis
90 f533f224 Vangelis Koukis
<script>
91 f533f224 Vangelis Koukis

92 a583aa29 Kostas Papadimitriou
init_action_indicator_handlers('list');
93 a583aa29 Kostas Papadimitriou

94 f533f224 Vangelis Koukis
// select/deselect all from checkbox widget of table headers
95 5e40ba16 Christodoulos Psaltis
$("#machinesview .list table thead tr th.selection input:checkbox").click( function() {
96 5e40ba16 Christodoulos Psaltis
    if ( $(this).is(":checked") ) {
97 5e40ba16 Christodoulos Psaltis
        $(":checkbox").attr("checked", true);
98 5e40ba16 Christodoulos Psaltis
    }
99 5e40ba16 Christodoulos Psaltis
    else {
100 5e40ba16 Christodoulos Psaltis
        $(":checkbox").attr("checked", false);
101 5e40ba16 Christodoulos Psaltis
    }
102 5e40ba16 Christodoulos Psaltis
    update_listview_actions();
103 5e40ba16 Christodoulos Psaltis
});
104 f533f224 Vangelis Koukis

105 d22b4464 Mike Muzurakis
/* Drop down selector is commented out for v0.5
106 f533f224 Vangelis Koukis
// select all from drop down menu
107 f533f224 Vangelis Koukis
$("#machinesview .list ul.dropdown-selector li.select-all a").live('click', function() {
108 f533f224 Vangelis Koukis
    $(":checkbox").attr("checked", true);
109 f533f224 Vangelis Koukis
    $(".dropdown-selector").slideToggle('medium');
110 f533f224 Vangelis Koukis
    update_listview_actions();
111 f533f224 Vangelis Koukis
    return false;
112 f533f224 Vangelis Koukis
});
113 f533f224 Vangelis Koukis

114 f533f224 Vangelis Koukis
// select none from drop down menu
115 f533f224 Vangelis Koukis
$("#machinesview .list ul.dropdown-selector li.select-none a").live('click', function() {
116 f533f224 Vangelis Koukis
    $(":checkbox").attr("checked", false);
117 f533f224 Vangelis Koukis
    $(".dropdown-selector").slideToggle('medium');
118 f533f224 Vangelis Koukis
    update_listview_actions();
119 f533f224 Vangelis Koukis
    return false;
120 f533f224 Vangelis Koukis
});
121 f533f224 Vangelis Koukis

122 f533f224 Vangelis Koukis
// select group from drop down menu
123 f533f224 Vangelis Koukis
$("#machinesview .list ul.dropdown-selector li.select-group a").live('click', function() {
124 f533f224 Vangelis Koukis
    $(":checkbox").attr("checked", true);
125 f533f224 Vangelis Koukis
    $(".dropdown-selector").slideToggle('medium');
126 f533f224 Vangelis Koukis
    update_listview_actions();
127 f533f224 Vangelis Koukis
    return false;
128 f533f224 Vangelis Koukis
});
129 f533f224 Vangelis Koukis

130 f533f224 Vangelis Koukis
// menu toggle, running menu
131 f533f224 Vangelis Koukis
$("#machinesview .list table.list-machines thead tr th.selection .expand-icon").click( function (obj) {
132 f533f224 Vangelis Koukis
    $(".dropdown-selector").slideToggle('medium');
133 f533f224 Vangelis Koukis
    return false;
134 f533f224 Vangelis Koukis
});
135 f533f224 Vangelis Koukis

136 d22b4464 Mike Muzurakis
*/
137 d22b4464 Mike Muzurakis

138 f533f224 Vangelis Koukis
// TODO: This should be populated with more rules for all available states
139 c3bcf420 Markos Gogoulos
//a key represents an action, while values are lists with permitted states to which the action can be applied
140 f533f224 Vangelis Koukis
var actions = { 'reboot':        ['UNKOWN', 'ACTIVE', 'REBOOT', 'multiple'],
141 f533f224 Vangelis Koukis
                'shutdown':      ['UNKOWN', 'ACTIVE', 'REBOOT', 'multiple'],
142 0efc6389 Markos Gogoulos
                'connect':       ['UNKOWN', 'ACTIVE'],
143 0efc6389 Markos Gogoulos
                //'network-connect':       ['UNKOWN', 'ACTIVE'],
144 0efc6389 Markos Gogoulos
                //'network-disconnect':    ['UNKOWN', 'ACTIVE', 'network'],
145 f533f224 Vangelis Koukis
                'console':       ['UNKOWN', 'ACTIVE', 'multiple'],
146 f533f224 Vangelis Koukis
                'details':       ['UNKOWN', 'ACTIVE', 'REBOOT', 'STOPPED'],
147 f533f224 Vangelis Koukis
                'start':         ['UNKOWN', 'STOPPED', 'multiple'],
148 4ea5cc44 Mike Muzurakis
                'destroy':       ['UNKOWN', 'ACTIVE', 'STOPPED', 'REBOOT', 'ERROR', 'BUILD', 'multiple']
149 0efc6389 Markos Gogoulos
                //'group':         ['UNKOWN', 'ACTIVE', 'STOPPED', 'REBOOT','multiple'],
150 f533f224 Vangelis Koukis
               };
151 f533f224 Vangelis Koukis

152 f533f224 Vangelis Koukis
// on checkbox click, update the actions
153 5e40ba16 Christodoulos Psaltis
$("#machinesview .list tbody input[type='checkbox']").live('click', function() {
154 f533f224 Vangelis Koukis
    update_listview_actions();
155 f533f224 Vangelis Koukis
    pending_actions = [];
156 f533f224 Vangelis Koukis
    $(".selected").removeClass('selected');
157 f533f224 Vangelis Koukis
});
158 f533f224 Vangelis Koukis

159 f533f224 Vangelis Koukis
// destroy action
160 f533f224 Vangelis Koukis
$("#machinesview .list a.enabled#action-destroy").live('click', function() {
161 f533f224 Vangelis Koukis
    var checked = $("#machinesview .list table.list-machines tbody input[type='checkbox']:checked");
162 f533f224 Vangelis Koukis
    $("#machinesview .list .selected").removeClass('selected');
163 f533f224 Vangelis Koukis
    $(this).addClass('selected');
164 f533f224 Vangelis Koukis
    pending_actions = []; // reset pending actions
165 f533f224 Vangelis Koukis
    checked.each(function(i,c) {
166 f533f224 Vangelis Koukis
        serverID=c.id;
167 f533f224 Vangelis Koukis
        serverName = $('#machinesview .list #'+serverID+' span.name').text();
168 f533f224 Vangelis Koukis
        pending_actions.push([destroy, serverID]);
169 f533f224 Vangelis Koukis
    });
170 f533f224 Vangelis Koukis
    update_confirmations();
171 f533f224 Vangelis Koukis
    return false;
172 f533f224 Vangelis Koukis
});
173 f533f224 Vangelis Koukis

174 f533f224 Vangelis Koukis
$("#machinesview .list a.enabled#action-reboot").live('click', function() {
175 f533f224 Vangelis Koukis
    var checked = $("#machinesview .list table.list-machines tbody input[type='checkbox']:checked");
176 f533f224 Vangelis Koukis
    $("#machinesview .list .selected").removeClass('selected');
177 f533f224 Vangelis Koukis
    $(this).addClass('selected');
178 f533f224 Vangelis Koukis
    pending_actions = []; // reset pending actions
179 f533f224 Vangelis Koukis
    checked.each(function(i,c) {
180 f533f224 Vangelis Koukis
        serverID=c.id;
181 f533f224 Vangelis Koukis
        serverName = $('#machinesview .list #'+serverID+' span.name').text();
182 f533f224 Vangelis Koukis
        pending_actions.push([reboot, serverID]);
183 f533f224 Vangelis Koukis
    });
184 f533f224 Vangelis Koukis
    update_confirmations();
185 f533f224 Vangelis Koukis
    return false;
186 f533f224 Vangelis Koukis
});
187 f533f224 Vangelis Koukis

188 f533f224 Vangelis Koukis
$("#machinesview .list a.enabled#action-start").live('click', function() {
189 f533f224 Vangelis Koukis
    var checked = $("#machinesview .list table.list-machines tbody input[type='checkbox']:checked");
190 f533f224 Vangelis Koukis
    $("#machinesview .list .selected").removeClass('selected');
191 f533f224 Vangelis Koukis
    $(this).addClass('selected');
192 f533f224 Vangelis Koukis
    pending_actions = []; // reset pending actions
193 f533f224 Vangelis Koukis
    checked.each(function(i,c) {
194 f533f224 Vangelis Koukis
        serverID=c.id;
195 f533f224 Vangelis Koukis
        serverName = $('#machinesview .list #'+serverID+' span.name').text();
196 f533f224 Vangelis Koukis
        pending_actions.push([start, serverID]);
197 f533f224 Vangelis Koukis
    });
198 f533f224 Vangelis Koukis
    update_confirmations();
199 f533f224 Vangelis Koukis
    return false;
200 f533f224 Vangelis Koukis
});
201 f533f224 Vangelis Koukis

202 f533f224 Vangelis Koukis
$("#machinesview .list a.enabled#action-shutdown").live('click', function() {
203 f533f224 Vangelis Koukis
    var checked = $("#machinesview .list table.list-machines tbody input[type='checkbox']:checked");
204 f533f224 Vangelis Koukis
    $("#machinesview .list .selected").removeClass('selected');
205 f533f224 Vangelis Koukis
    $(this).addClass('selected');
206 f533f224 Vangelis Koukis
    pending_actions = []; // reset pending actions
207 f533f224 Vangelis Koukis
    checked.each(function(i,c) {
208 f533f224 Vangelis Koukis
        serverID=c.id;
209 f533f224 Vangelis Koukis
        serverName = $('#machinesview .list #'+serverID+' span.name').text();
210 f533f224 Vangelis Koukis
        pending_actions.push([shutdown, serverID]);
211 f533f224 Vangelis Koukis
    });
212 f533f224 Vangelis Koukis
    update_confirmations();
213 f533f224 Vangelis Koukis
    return false;
214 f533f224 Vangelis Koukis
});
215 f533f224 Vangelis Koukis

216 f533f224 Vangelis Koukis
$("#machinesview .list a.enabled#action-console").live('click', function() {
217 f533f224 Vangelis Koukis
    var checked = $("#machinesview .list table.list-machines tbody input[type='checkbox']:checked");
218 f533f224 Vangelis Koukis
    $("#machinesview .list .selected").removeClass('selected');
219 f533f224 Vangelis Koukis
    $(this).addClass('selected');
220 f533f224 Vangelis Koukis
    pending_actions = []; // reset pending actions
221 f533f224 Vangelis Koukis
    checked.each(function(i,c) {
222 f533f224 Vangelis Koukis
        serverID=c.id;
223 f533f224 Vangelis Koukis
        serverName = $('#machinesview .list #'+serverID+' span.name').text();
224 f533f224 Vangelis Koukis
        pending_actions.push([open_console, serverID]);
225 f533f224 Vangelis Koukis
    });
226 f533f224 Vangelis Koukis
    update_confirmations();
227 f533f224 Vangelis Koukis
    return false;
228 f533f224 Vangelis Koukis
});
229 f533f224 Vangelis Koukis

230 29ce2253 Markos Gogoulos
$("#machinesview .list a.enabled#action-details").live('click', function() {
231 29ce2253 Markos Gogoulos
    var checked = $("#machinesview .list table.list-machines tbody input[type='checkbox']:checked");
232 29ce2253 Markos Gogoulos
    $("#machinesview .list .selected").removeClass('selected');
233 29ce2253 Markos Gogoulos
    $(this).addClass('selected');
234 29ce2253 Markos Gogoulos
    pending_actions = []; // reset pending actions
235 29ce2253 Markos Gogoulos
    checked.each(function(i,c) {
236 29ce2253 Markos Gogoulos
        serverID=c.id;
237 29ce2253 Markos Gogoulos
    });
238 29ce2253 Markos Gogoulos
    $.cookie('server', serverID);
239 29ce2253 Markos Gogoulos
    $('a#single').click();
240 29ce2253 Markos Gogoulos
    return false;
241 29ce2253 Markos Gogoulos
});
242 29ce2253 Markos Gogoulos

243 29ce2253 Markos Gogoulos

244 f533f224 Vangelis Koukis
function update_machines_view(data){
245 f533f224 Vangelis Koukis
    /*
246 f533f224 Vangelis Koukis
    Go through the servers in the input data. Update existing entries, add
247 f533f224 Vangelis Koukis
    new ones to the list
248 f533f224 Vangelis Koukis
    */
249 f533f224 Vangelis Koukis
    tableData = vmTable.fnGetData();
250 f533f224 Vangelis Koukis

251 f533f224 Vangelis Koukis
    $.each(data.servers.values, function(i,server){
252 f533f224 Vangelis Koukis
        current = -1;
253 f533f224 Vangelis Koukis
        // check server status to select the appropriate OS icon, defaults to on state
254 f533f224 Vangelis Koukis
        osTag = os_icon(server.metadata);
255 f533f224 Vangelis Koukis
        var osIcon = osTag + "-on.png", imgStr, imgSrc;
256 f533f224 Vangelis Koukis
        // check if the server already exists in the datatable
257 b495fe50 Mike Muzurakis
        if (tableData.length > 0) {
258 b495fe50 Mike Muzurakis
            tableData.forEach(function(row,index){
259 b495fe50 Mike Muzurakis
                if (row[0].split(' ')[2].replace('id=','') == server.id){
260 b495fe50 Mike Muzurakis
                    current = index;
261 b495fe50 Mike Muzurakis
                }
262 b495fe50 Mike Muzurakis
            });
263 b495fe50 Mike Muzurakis
        }
264 f533f224 Vangelis Koukis
        if (current != -1) { // if it's there, update the values
265 f533f224 Vangelis Koukis
            // get current status description, including non api states
266 f533f224 Vangelis Koukis
            var server_row = $('#machinesview .list #' + server.id).parent().parent();
267 f533f224 Vangelis Koukis
            var status_desc = server_row.find('span.status').text();
268 f533f224 Vangelis Koukis
            // firebug console logging
269 f533f224 Vangelis Koukis
            try {
270 f533f224 Vangelis Koukis
                console.info(server.name + ' from ' + status_desc + ' to ' + STATUSES[server.status]);
271 f533f224 Vangelis Koukis
            } catch(err) {}
272 f533f224 Vangelis Koukis
            // when server is in deleted status it must be removed from the list
273 f533f224 Vangelis Koukis
            if (server.status == "DELETED") {
274 f533f224 Vangelis Koukis
                vmTable.fnDeleteRow(current);
275 f533f224 Vangelis Koukis
            } else { // when server is not deleted, it should be updated
276 f533f224 Vangelis Koukis
                if (['BUILD','ACTIVE','REBOOT'].indexOf(server.status) >= 0 &&
277 f533f224 Vangelis Koukis
                    [STATUSES['STOPPED'], STATUSES['ERROR'], STATUSES['UNKNOWN'],
278 f533f224 Vangelis Koukis
                     TRANSITIONS['Starting']].indexOf(server_row.find('span.status').text()) >= 0) {
279 f533f224 Vangelis Koukis
                    // from stopped, on error or starting to building, active or rebooting
280 f533f224 Vangelis Koukis
                    // starting is not an api state, it means the server is stopped or on error
281 f533f224 Vangelis Koukis
                    tableData[current][0] = "<input class="+server.status+" id="+server.id+" type=checkbox>";
282 f533f224 Vangelis Koukis
                    imgSrc = "static/icons/indicators/small/wave.gif";
283 f533f224 Vangelis Koukis
                    imgStr = "<img class=list-logo src=" + imgSrc + " title=" + osTag + "></img>";
284 f533f224 Vangelis Koukis
                    tableData[current][1] = "<span class=imagetag>" + osTag + "</span>" + imgStr;
285 f533f224 Vangelis Koukis
                    tableData[current][2] = "<a class=name><span class=name>" + server.name.substring(0,60) + "</span></a>";
286 f533f224 Vangelis Koukis
                    //tableData[current][4] = "group"; //TODO
287 f533f224 Vangelis Koukis
                    tableData[current][5] = "<span class=status>" + STATUSES[server.status] + "</span>";
288 f533f224 Vangelis Koukis
                    vmTable.fnUpdate(tableData[current],current);
289 f533f224 Vangelis Koukis
                    setTimeout("$('#machinesview .list #"+server.id+"').parent().parent().find('.list-logo').attr('src','static/icons/machines/small/" + osIcon + "')", 1600);
290 f533f224 Vangelis Koukis
                } else if (['STOPPED','ERROR', 'UNKNOWN'].indexOf(server.status) >= 0 &&
291 f533f224 Vangelis Koukis
                           [STATUSES['ACTIVE'], STATUSES['BUILD'], STATUSES['REBOOT'],
292 f533f224 Vangelis Koukis
                            TRANSITIONS['Shutting down']].indexOf(server_row.find('span.status').text()) >= 0) {
293 f533f224 Vangelis Koukis
                    tableData[current][0] = "<input class="+server.status+" id="+server.id+" type=checkbox>";
294 f533f224 Vangelis Koukis
                    imgSrc = "static/icons/indicators/small/wave.gif";
295 f533f224 Vangelis Koukis
                    imgStr = "<img class=list-logo src=" + imgSrc + " title=" + osTag + "></img>";
296 f533f224 Vangelis Koukis
                    tableData[current][1] = "<span class=imagetag>" + osTag + "</span>" + imgStr;
297 f533f224 Vangelis Koukis
                    tableData[current][2] = "<a class=name><span class=name>" + server.name.substring(0,60) + "</span></a>";
298 f533f224 Vangelis Koukis
                    //tableData[current][4] = "group"; //TODO
299 f533f224 Vangelis Koukis
                    tableData[current][5] = "<span class=status>" + STATUSES[server.status] + "</span>";
300 f533f224 Vangelis Koukis
                    vmTable.fnUpdate(tableData[current],current);
301 f533f224 Vangelis Koukis
                    setTimeout("$('#machinesview .list #"+server.id+"').parent().parent().find('.list-logo').attr('src','static/icons/machines/small/" + osTag + "-off.png')", 1600);
302 f533f224 Vangelis Koukis
                } else if ( STATUSES[server.status] == server_row.find('span.status').text()) {
303 f533f224 Vangelis Koukis

304 f533f224 Vangelis Koukis
                } else if (server.status == 'ACTIVE' &&
305 f533f224 Vangelis Koukis
                           [STATUSES['BUILD'],TRANSITIONS['Rebooting']].indexOf(server_row.find('span.status').text()) >= 0) {
306 f533f224 Vangelis Koukis
                    tableData[current][0] = "<input class="+server.status+" id="+server.id+" type=checkbox>";
307 f533f224 Vangelis Koukis
                    imgSrc = "static/icons/indicators/small/wave.gif";
308 f533f224 Vangelis Koukis
                    imgStr = "<img class=list-logo src=" + imgSrc + " title=" + osTag + "></img>";
309 f533f224 Vangelis Koukis
                    tableData[current][1] = "<span class=imagetag>" + osTag + "</span>" + imgStr;
310 f533f224 Vangelis Koukis
                    tableData[current][2] = "<a class=name><span class=name>" + server.name.substring(0,60) + "</span></a>";
311 f533f224 Vangelis Koukis
                    //tableData[current][4] = "group"; //TODO
312 f533f224 Vangelis Koukis
                    tableData[current][5] = "<span class=status>" + STATUSES[server.status] + "</span>";
313 f533f224 Vangelis Koukis
                    vmTable.fnUpdate(tableData[current],current);
314 f533f224 Vangelis Koukis
                    setTimeout("$('#machinesview .list #"+server.id+"').parent().parent().find('.list-logo').attr('src','static/icons/machines/small/" + osIcon + "')", 1600);
315 f533f224 Vangelis Koukis
                }
316 f533f224 Vangelis Koukis
            }
317 f533f224 Vangelis Koukis
            update_listview_actions();
318 f533f224 Vangelis Koukis
        } else if (server.status != "DELETED") { // does not exist, we should create it
319 f533f224 Vangelis Koukis
            // check server status to select the appropriate OS icon
320 f533f224 Vangelis Koukis
            if (['ERROR', 'STOPPED', 'UNKNOWN'].indexOf(server.status) >= 0) {
321 f533f224 Vangelis Koukis
                osIcon = "static/icons/machines/small/" + osTag + "-off.png";
322 f533f224 Vangelis Koukis
            } else if ( server.status == 'BUILD') {
323 f533f224 Vangelis Koukis
                osIcon = "static/icons/indicators/small/progress.gif";
324 f533f224 Vangelis Koukis
            } else {
325 f533f224 Vangelis Koukis
                osIcon = "static/icons/machines/small/" + osTag + "-on.png";
326 f533f224 Vangelis Koukis
            }
327 f533f224 Vangelis Koukis
            // find flavor parameters
328 f533f224 Vangelis Koukis
            var flavorLabel;
329 f533f224 Vangelis Koukis
            if ( flavors.length > 0 ) {
330 f533f224 Vangelis Koukis
                var current_flavor = '';
331 f533f224 Vangelis Koukis
                for (i=0; i<flavors.length; i++) {
332 f533f224 Vangelis Koukis
                    if (flavors[i]['id'] == server.flavorRef) {
333 f533f224 Vangelis Koukis
                        current_flavor = flavors[i];
334 f533f224 Vangelis Koukis
                    }
335 f533f224 Vangelis Koukis
                }
336 f533f224 Vangelis Koukis
                var flavor_label = '';
337 f533f224 Vangelis Koukis
                if (current_flavor['cpu'] == '1') {
338 f533f224 Vangelis Koukis
                    flavorLabel = '1 CPU, ';
339 f533f224 Vangelis Koukis
                } else {
340 f533f224 Vangelis Koukis
                    flavorLabel = current_flavor['cpu'] + ' CPUs, ';
341 f533f224 Vangelis Koukis
                }
342 f533f224 Vangelis Koukis
                flavorLabel = flavorLabel + current_flavor['ram'] + 'MB, ' + current_flavor['disk'] + 'GB';
343 f533f224 Vangelis Koukis
            } else {
344 f533f224 Vangelis Koukis
                flavorLabel = 'No flavor data';
345 f533f224 Vangelis Koukis
            }
346 f533f224 Vangelis Koukis

347 f533f224 Vangelis Koukis
            // add new row to the table
348 f533f224 Vangelis Koukis
            vmTable.fnAddData([
349 f533f224 Vangelis Koukis
                "<input class=" + server.status + " id=" + server.id + " type=checkbox>",
350 f533f224 Vangelis Koukis
                "<span class=imagetag>" + osTag + "</span><img class=list-logo src=" + osIcon +
351 f533f224 Vangelis Koukis
                    " title=" + osTag + ">",
352 f533f224 Vangelis Koukis
                "<a class=name><span class=name>" + server.name.substring(0,60) + "</span></a>",
353 f533f224 Vangelis Koukis
                "<a class=flavor><span>"+ flavorLabel + "</span></a>",
354 f533f224 Vangelis Koukis
                "group",
355 f533f224 Vangelis Koukis
                "<span class=status>" + STATUSES[server.status] + "</span>"
356 f533f224 Vangelis Koukis
            ]);
357 f533f224 Vangelis Koukis
        }
358 f533f224 Vangelis Koukis
    });
359 f533f224 Vangelis Koukis
    update_listview_actions();
360 f533f224 Vangelis Koukis
    $("#machinesview .list > div.large-spinner").hide();
361 f533f224 Vangelis Koukis
    // in case there are no data, leave the page empty
362 f533f224 Vangelis Koukis
    if ($("#machinesview .list table.list-machines tbody").length > 0) {
363 f533f224 Vangelis Koukis
        $("#machinesview .list div.dataTables_filter").show();
364 f533f224 Vangelis Koukis
        $("#machinesview .list div.dataTables_filter input").show();
365 f533f224 Vangelis Koukis
        $("#machinesview .list table.list-machines").show();
366 f533f224 Vangelis Koukis
        $("#machinesview .list div.actions").show();
367 f533f224 Vangelis Koukis
    }
368 f533f224 Vangelis Koukis

369 f533f224 Vangelis Koukis
    // show message in case user has no servers!
370 f533f224 Vangelis Koukis
    if ($("#machinesview .list tbody.machines .dataTables_empty").length > 0) {
371 f533f224 Vangelis Koukis
        standard_view();
372 f533f224 Vangelis Koukis
    } else {
373 f533f224 Vangelis Koukis
        hideWelcome();
374 f533f224 Vangelis Koukis
        $("#machinesview_content").fadeIn("fast");
375 f533f224 Vangelis Koukis
    }
376 f533f224 Vangelis Koukis

377 f533f224 Vangelis Koukis
    // set confirm box position
378 f533f224 Vangelis Koukis
    if (window.innerHeight - 200 < $('#machinesview').height())
379 f533f224 Vangelis Koukis
        $('.confirm_multiple').addClass('fixed');
380 f533f224 Vangelis Koukis
    else
381 f533f224 Vangelis Koukis
        $('.confirm_multiple').removeClass('fixed');
382 f533f224 Vangelis Koukis

383 f533f224 Vangelis Koukis
    $('#machinesview .list .dataTables_scrollHeadInner table').attr('style','');
384 f533f224 Vangelis Koukis
    $('#machinesview .list .dataTables_scrollHeadInner th').attr('style','');
385 f533f224 Vangelis Koukis
}
386 f533f224 Vangelis Koukis

387 f533f224 Vangelis Koukis
function display_success(serverID) {
388 f533f224 Vangelis Koukis
    // do nothing
389 f533f224 Vangelis Koukis
}
390 f533f224 Vangelis Koukis

391 f533f224 Vangelis Koukis
// indicate that the requested action was not completed
392 f533f224 Vangelis Koukis
function display_failure(status, serverID, action, responseText) {
393 f533f224 Vangelis Koukis
    osIcon = $('#machinesview .list #'+serverID).parent().parent().find('.list-logo');
394 f533f224 Vangelis Koukis
    osIcon.attr('src',osIcon.attr('os'));
395 f533f224 Vangelis Koukis
    ajax_error(status, serverID, action, responseText);
396 f533f224 Vangelis Koukis
}
397 f533f224 Vangelis Koukis

398 f533f224 Vangelis Koukis
var vmTable = $("div.list table.list-machines").dataTable({
399 f533f224 Vangelis Koukis
    "bInfo": false,
400 f533f224 Vangelis Koukis
    "bRetrieve": true,
401 f533f224 Vangelis Koukis
    "bPaginate": false,
402 f533f224 Vangelis Koukis
    "bAutoWidth": false,
403 f533f224 Vangelis Koukis
    "bSort": true,
404 f533f224 Vangelis Koukis
    "bStateSave": true,
405 f533f224 Vangelis Koukis
    "sScrollXInner": "500px",
406 f533f224 Vangelis Koukis
    "aoColumnDefs": [
407 f533f224 Vangelis Koukis
        { "bSortable": false, "aTargets": [ 0 ] }
408 f533f224 Vangelis Koukis
    ]
409 f533f224 Vangelis Koukis
});
410 f533f224 Vangelis Koukis

411 f533f224 Vangelis Koukis
// basic functions executed on page load
412 f533f224 Vangelis Koukis
if ( flavors.length == 0 && images.length == 0 ) {
413 f533f224 Vangelis Koukis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
414 f533f224 Vangelis Koukis
    update_flavors();
415 f533f224 Vangelis Koukis
    // populate image list
416 f533f224 Vangelis Koukis
    update_images();
417 f533f224 Vangelis Koukis
} else if ( flavors.length == 0 && images.length != 0 ) {
418 f533f224 Vangelis Koukis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
419 f533f224 Vangelis Koukis
    update_flavors();
420 f533f224 Vangelis Koukis
} else if ( flavors.length != 0 && images.length == 0 ) {
421 f533f224 Vangelis Koukis
    // populate image list
422 f533f224 Vangelis Koukis
    update_images();
423 f533f224 Vangelis Koukis
    update_vms(UPDATE_INTERVAL);
424 f533f224 Vangelis Koukis
} else {
425 f533f224 Vangelis Koukis
    // start updating vm list
426 f533f224 Vangelis Koukis
    update_vms(UPDATE_INTERVAL);
427 f533f224 Vangelis Koukis
}
428 f533f224 Vangelis Koukis

429 f533f224 Vangelis Koukis
// reposition multiple confirmation box on window resize
430 f533f224 Vangelis Koukis
$(window).resize(function(){
431 f533f224 Vangelis Koukis
    if (this.innerHeight - 200 < $('#machinesview').height())
432 f533f224 Vangelis Koukis
        $('.confirm_multiple').addClass('fixed');
433 f533f224 Vangelis Koukis
    else
434 f533f224 Vangelis Koukis
        $('.confirm_multiple').removeClass('fixed');
435 f533f224 Vangelis Koukis
});
436 f533f224 Vangelis Koukis

437 f533f224 Vangelis Koukis
// set the label of the multiple buttons
438 b495fe50 Mike Muzurakis
$('.confirm_multiple button.yes').text(VARIOUS["CONFIRM"]);
439 b495fe50 Mike Muzurakis
$('.confirm_multiple button.no').text(VARIOUS["CANCEL"]);
440 f533f224 Vangelis Koukis
</script>