Statistics
| Branch: | Tag: | Revision:

root / ui / templates / machines_list.html @ 2b837adf

History | View | Annotate | Download (20.1 kB)

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

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

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

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

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

30 a5bc3755 Vangelis Koukis
The views and conclusions contained in the software and
31 a5bc3755 Vangelis Koukis
documentation are those of the authors and should not be
32 a5bc3755 Vangelis Koukis
interpreted as representing official policies, either expressed
33 a5bc3755 Vangelis Koukis
or implied, of GRNET S.A.
34 a5bc3755 Vangelis Koukis
-->
35 a5bc3755 Vangelis Koukis
36 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 95772145 Christodoulos Psaltis
                    <!--  Group column is commented out for v0.5
75 f533f224 Vangelis Koukis
                    <th class="vmgroup">{% trans "Group" %}</th>
76 95772145 Christodoulos Psaltis
                    -->
77 f533f224 Vangelis Koukis
                    <th class="vmstatus">{% trans "Status" %}</th>
78 f533f224 Vangelis Koukis
                </tr>
79 f533f224 Vangelis Koukis
            </thead>
80 f533f224 Vangelis Koukis
            <tbody class="machines"></tbody>
81 f533f224 Vangelis Koukis
        </table>
82 d22b4464 Mike Muzurakis
        <!-- Drop down selector is commented out for v0.5
83 f533f224 Vangelis Koukis
        <ul class="dropdown-selector" style="display: none">
84 f533f224 Vangelis Koukis
            <li class="select-all" ><a href="#">{% trans "all" %}</a></li>
85 f533f224 Vangelis Koukis
            <li class="select-none"><a href="#">{% trans "none" %}</a></li>
86 f533f224 Vangelis Koukis
            <li class="select-group"><a href="#">{% trans "group" %}</a></li>
87 f533f224 Vangelis Koukis
        </ul>
88 d22b4464 Mike Muzurakis
        -->
89 f533f224 Vangelis Koukis
    </div>
90 f533f224 Vangelis Koukis
</div>
91 f533f224 Vangelis Koukis
92 f533f224 Vangelis Koukis
<script>
93 f533f224 Vangelis Koukis

94 a583aa29 Kostas Papadimitriou
init_action_indicator_handlers('list');
95 a583aa29 Kostas Papadimitriou

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

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

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

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

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

138 d22b4464 Mike Muzurakis
*/
139 d22b4464 Mike Muzurakis

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

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

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

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

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

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

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

232 fd70c1db Markos Gogoulos
$("#machinesview .list a.enabled#action-connect").live('click', function() {
233 fd70c1db Markos Gogoulos
    var checked = $("#machinesview .list table.list-machines tbody input[type='checkbox']:checked");
234 fd70c1db Markos Gogoulos
    $("#machinesview .list .selected").removeClass('selected');
235 fd70c1db Markos Gogoulos
    $(this).addClass('selected');
236 fd70c1db Markos Gogoulos
    pending_actions = []; // reset pending actions
237 fd70c1db Markos Gogoulos
    checked.each(function(i,c) {
238 fd70c1db Markos Gogoulos
        serverID=c.id;
239 fd70c1db Markos Gogoulos
        serverName = $('#machinesview .list #'+serverID+' span.name').text();
240 fd70c1db Markos Gogoulos
        pending_actions.push([machine_connect, serverID]);
241 fd70c1db Markos Gogoulos
    });
242 fd70c1db Markos Gogoulos
    update_confirmations();
243 fd70c1db Markos Gogoulos
    return false;
244 fd70c1db Markos Gogoulos
});
245 fd70c1db Markos Gogoulos

246 fd70c1db Markos Gogoulos

247 29ce2253 Markos Gogoulos
$("#machinesview .list a.enabled#action-details").live('click', function() {
248 29ce2253 Markos Gogoulos
    var checked = $("#machinesview .list table.list-machines tbody input[type='checkbox']:checked");
249 29ce2253 Markos Gogoulos
    $("#machinesview .list .selected").removeClass('selected');
250 29ce2253 Markos Gogoulos
    $(this).addClass('selected');
251 29ce2253 Markos Gogoulos
    pending_actions = []; // reset pending actions
252 29ce2253 Markos Gogoulos
    checked.each(function(i,c) {
253 29ce2253 Markos Gogoulos
        serverID=c.id;
254 29ce2253 Markos Gogoulos
    });
255 29ce2253 Markos Gogoulos
    $.cookie('server', serverID);
256 29ce2253 Markos Gogoulos
    $('a#single').click();
257 29ce2253 Markos Gogoulos
    return false;
258 29ce2253 Markos Gogoulos
});
259 29ce2253 Markos Gogoulos

260 29ce2253 Markos Gogoulos

261 f533f224 Vangelis Koukis
function update_machines_view(data){
262 f533f224 Vangelis Koukis
    /*
263 f533f224 Vangelis Koukis
    Go through the servers in the input data. Update existing entries, add
264 f533f224 Vangelis Koukis
    new ones to the list
265 f533f224 Vangelis Koukis
    */
266 f533f224 Vangelis Koukis
    tableData = vmTable.fnGetData();
267 f533f224 Vangelis Koukis

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

321 f533f224 Vangelis Koukis
                } else if (server.status == 'ACTIVE' &&
322 f533f224 Vangelis Koukis
                           [STATUSES['BUILD'],TRANSITIONS['Rebooting']].indexOf(server_row.find('span.status').text()) >= 0) {
323 f533f224 Vangelis Koukis
                    tableData[current][0] = "<input class="+server.status+" id="+server.id+" type=checkbox>";
324 f533f224 Vangelis Koukis
                    imgSrc = "static/icons/indicators/small/wave.gif";
325 f533f224 Vangelis Koukis
                    imgStr = "<img class=list-logo src=" + imgSrc + " title=" + osTag + "></img>";
326 f533f224 Vangelis Koukis
                    tableData[current][1] = "<span class=imagetag>" + osTag + "</span>" + imgStr;
327 f533f224 Vangelis Koukis
                    tableData[current][2] = "<a class=name><span class=name>" + server.name.substring(0,60) + "</span></a>";
328 f533f224 Vangelis Koukis
                    //tableData[current][4] = "group"; //TODO
329 95772145 Christodoulos Psaltis
                    tableData[current][4] = "<span class=status>" + STATUSES[server.status] + "</span>";
330 f533f224 Vangelis Koukis
                    vmTable.fnUpdate(tableData[current],current);
331 f533f224 Vangelis Koukis
                    setTimeout("$('#machinesview .list #"+server.id+"').parent().parent().find('.list-logo').attr('src','static/icons/machines/small/" + osIcon + "')", 1600);
332 f533f224 Vangelis Koukis
                }
333 f533f224 Vangelis Koukis
            }
334 f533f224 Vangelis Koukis
            update_listview_actions();
335 f533f224 Vangelis Koukis
        } else if (server.status != "DELETED") { // does not exist, we should create it
336 f533f224 Vangelis Koukis
            // check server status to select the appropriate OS icon
337 f533f224 Vangelis Koukis
            if (['ERROR', 'STOPPED', 'UNKNOWN'].indexOf(server.status) >= 0) {
338 f533f224 Vangelis Koukis
                osIcon = "static/icons/machines/small/" + osTag + "-off.png";
339 f533f224 Vangelis Koukis
            } else if ( server.status == 'BUILD') {
340 f533f224 Vangelis Koukis
                osIcon = "static/icons/indicators/small/progress.gif";
341 f533f224 Vangelis Koukis
            } else {
342 f533f224 Vangelis Koukis
                osIcon = "static/icons/machines/small/" + osTag + "-on.png";
343 f533f224 Vangelis Koukis
            }
344 f533f224 Vangelis Koukis
            // find flavor parameters
345 f533f224 Vangelis Koukis
            var flavorLabel;
346 f533f224 Vangelis Koukis
            if ( flavors.length > 0 ) {
347 f533f224 Vangelis Koukis
                var current_flavor = '';
348 f533f224 Vangelis Koukis
                for (i=0; i<flavors.length; i++) {
349 f533f224 Vangelis Koukis
                    if (flavors[i]['id'] == server.flavorRef) {
350 f533f224 Vangelis Koukis
                        current_flavor = flavors[i];
351 f533f224 Vangelis Koukis
                    }
352 f533f224 Vangelis Koukis
                }
353 f533f224 Vangelis Koukis
                var flavor_label = '';
354 f533f224 Vangelis Koukis
                if (current_flavor['cpu'] == '1') {
355 f533f224 Vangelis Koukis
                    flavorLabel = '1 CPU, ';
356 f533f224 Vangelis Koukis
                } else {
357 f533f224 Vangelis Koukis
                    flavorLabel = current_flavor['cpu'] + ' CPUs, ';
358 f533f224 Vangelis Koukis
                }
359 f533f224 Vangelis Koukis
                flavorLabel = flavorLabel + current_flavor['ram'] + 'MB, ' + current_flavor['disk'] + 'GB';
360 f533f224 Vangelis Koukis
            } else {
361 f533f224 Vangelis Koukis
                flavorLabel = 'No flavor data';
362 f533f224 Vangelis Koukis
            }
363 f533f224 Vangelis Koukis

364 f533f224 Vangelis Koukis
            // add new row to the table
365 f533f224 Vangelis Koukis
            vmTable.fnAddData([
366 f533f224 Vangelis Koukis
                "<input class=" + server.status + " id=" + server.id + " type=checkbox>",
367 f533f224 Vangelis Koukis
                "<span class=imagetag>" + osTag + "</span><img class=list-logo src=" + osIcon +
368 f533f224 Vangelis Koukis
                    " title=" + osTag + ">",
369 f533f224 Vangelis Koukis
                "<a class=name><span class=name>" + server.name.substring(0,60) + "</span></a>",
370 f533f224 Vangelis Koukis
                "<a class=flavor><span>"+ flavorLabel + "</span></a>",
371 95772145 Christodoulos Psaltis
                //"group",
372 f533f224 Vangelis Koukis
                "<span class=status>" + STATUSES[server.status] + "</span>"
373 f533f224 Vangelis Koukis
            ]);
374 f533f224 Vangelis Koukis
        }
375 f533f224 Vangelis Koukis
    });
376 f533f224 Vangelis Koukis
    update_listview_actions();
377 f533f224 Vangelis Koukis
    $("#machinesview .list > div.large-spinner").hide();
378 f533f224 Vangelis Koukis
    // in case there are no data, leave the page empty
379 f533f224 Vangelis Koukis
    if ($("#machinesview .list table.list-machines tbody").length > 0) {
380 f533f224 Vangelis Koukis
        $("#machinesview .list div.dataTables_filter").show();
381 f533f224 Vangelis Koukis
        $("#machinesview .list div.dataTables_filter input").show();
382 f533f224 Vangelis Koukis
        $("#machinesview .list table.list-machines").show();
383 f533f224 Vangelis Koukis
        $("#machinesview .list div.actions").show();
384 f533f224 Vangelis Koukis
    }
385 f533f224 Vangelis Koukis

386 f533f224 Vangelis Koukis
    // show message in case user has no servers!
387 f533f224 Vangelis Koukis
    if ($("#machinesview .list tbody.machines .dataTables_empty").length > 0) {
388 f533f224 Vangelis Koukis
        standard_view();
389 f533f224 Vangelis Koukis
    } else {
390 f533f224 Vangelis Koukis
        hideWelcome();
391 f533f224 Vangelis Koukis
        $("#machinesview_content").fadeIn("fast");
392 f533f224 Vangelis Koukis
    }
393 f533f224 Vangelis Koukis

394 f533f224 Vangelis Koukis
    // set confirm box position
395 f533f224 Vangelis Koukis
    if (window.innerHeight - 200 < $('#machinesview').height())
396 f533f224 Vangelis Koukis
        $('.confirm_multiple').addClass('fixed');
397 f533f224 Vangelis Koukis
    else
398 f533f224 Vangelis Koukis
        $('.confirm_multiple').removeClass('fixed');
399 f533f224 Vangelis Koukis

400 f533f224 Vangelis Koukis
    $('#machinesview .list .dataTables_scrollHeadInner table').attr('style','');
401 f533f224 Vangelis Koukis
    $('#machinesview .list .dataTables_scrollHeadInner th').attr('style','');
402 f533f224 Vangelis Koukis
}
403 f533f224 Vangelis Koukis

404 f533f224 Vangelis Koukis
function display_success(serverID) {
405 f533f224 Vangelis Koukis
    // do nothing
406 f533f224 Vangelis Koukis
}
407 f533f224 Vangelis Koukis

408 f533f224 Vangelis Koukis
// indicate that the requested action was not completed
409 f533f224 Vangelis Koukis
function display_failure(status, serverID, action, responseText) {
410 f533f224 Vangelis Koukis
    osIcon = $('#machinesview .list #'+serverID).parent().parent().find('.list-logo');
411 f533f224 Vangelis Koukis
    osIcon.attr('src',osIcon.attr('os'));
412 f533f224 Vangelis Koukis
    ajax_error(status, serverID, action, responseText);
413 f533f224 Vangelis Koukis
}
414 f533f224 Vangelis Koukis

415 f533f224 Vangelis Koukis
var vmTable = $("div.list table.list-machines").dataTable({
416 f533f224 Vangelis Koukis
    "bInfo": false,
417 f533f224 Vangelis Koukis
    "bRetrieve": true,
418 f533f224 Vangelis Koukis
    "bPaginate": false,
419 f533f224 Vangelis Koukis
    "bAutoWidth": false,
420 f533f224 Vangelis Koukis
    "bSort": true,
421 f533f224 Vangelis Koukis
    "bStateSave": true,
422 f533f224 Vangelis Koukis
    "sScrollXInner": "500px",
423 f533f224 Vangelis Koukis
    "aoColumnDefs": [
424 f533f224 Vangelis Koukis
        { "bSortable": false, "aTargets": [ 0 ] }
425 f533f224 Vangelis Koukis
    ]
426 f533f224 Vangelis Koukis
});
427 f533f224 Vangelis Koukis

428 f533f224 Vangelis Koukis
// basic functions executed on page load
429 f533f224 Vangelis Koukis
if ( flavors.length == 0 && images.length == 0 ) {
430 f533f224 Vangelis Koukis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
431 f533f224 Vangelis Koukis
    update_flavors();
432 f533f224 Vangelis Koukis
    // populate image list
433 f533f224 Vangelis Koukis
    update_images();
434 f533f224 Vangelis Koukis
} else if ( flavors.length == 0 && images.length != 0 ) {
435 f533f224 Vangelis Koukis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
436 f533f224 Vangelis Koukis
    update_flavors();
437 f533f224 Vangelis Koukis
} else if ( flavors.length != 0 && images.length == 0 ) {
438 f533f224 Vangelis Koukis
    // populate image list
439 f533f224 Vangelis Koukis
    update_images();
440 f533f224 Vangelis Koukis
    update_vms(UPDATE_INTERVAL);
441 f533f224 Vangelis Koukis
} else {
442 f533f224 Vangelis Koukis
    // start updating vm list
443 f533f224 Vangelis Koukis
    update_vms(UPDATE_INTERVAL);
444 f533f224 Vangelis Koukis
}
445 f533f224 Vangelis Koukis

446 f533f224 Vangelis Koukis
// reposition multiple confirmation box on window resize
447 f533f224 Vangelis Koukis
$(window).resize(function(){
448 f533f224 Vangelis Koukis
    if (this.innerHeight - 200 < $('#machinesview').height())
449 f533f224 Vangelis Koukis
        $('.confirm_multiple').addClass('fixed');
450 f533f224 Vangelis Koukis
    else
451 f533f224 Vangelis Koukis
        $('.confirm_multiple').removeClass('fixed');
452 f533f224 Vangelis Koukis
});
453 f533f224 Vangelis Koukis

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