Statistics
| Branch: | Tag: | Revision:

root / ui / templates / machines_list.html @ cb748f1f

History | View | Annotate | Download (20.5 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 4b2ed497 Kostas Papadimitriou

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

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

365 4b2ed497 Kostas Papadimitriou
            var status_string = STATUSES[server.status];
366 4b2ed497 Kostas Papadimitriou

367 4b2ed497 Kostas Papadimitriou
            // if destroy is requested don't change the state
368 4b2ed497 Kostas Papadimitriou
            var server = get_machine(server.id);
369 4b2ed497 Kostas Papadimitriou
            if (server.status == "DESTROY") {
370 4b2ed497 Kostas Papadimitriou
                status_string = TRANSITIONS['Destroying'];
371 708122de Kostas Papadimitriou
                osIcon = "static/icons/indicators/small/progress.gif";
372 4b2ed497 Kostas Papadimitriou
            }
373 4b2ed497 Kostas Papadimitriou

374 f533f224 Vangelis Koukis
            // add new row to the table
375 f533f224 Vangelis Koukis
            vmTable.fnAddData([
376 f533f224 Vangelis Koukis
                "<input class=" + server.status + " id=" + server.id + " type=checkbox>",
377 f533f224 Vangelis Koukis
                "<span class=imagetag>" + osTag + "</span><img class=list-logo src=" + osIcon +
378 f533f224 Vangelis Koukis
                    " title=" + osTag + ">",
379 f533f224 Vangelis Koukis
                "<a class=name><span class=name>" + server.name.substring(0,60) + "</span></a>",
380 f533f224 Vangelis Koukis
                "<a class=flavor><span>"+ flavorLabel + "</span></a>",
381 95772145 Christodoulos Psaltis
                //"group",
382 4b2ed497 Kostas Papadimitriou
                "<span class=status>" + status_string + "</span>"
383 f533f224 Vangelis Koukis
            ]);
384 f533f224 Vangelis Koukis
        }
385 f533f224 Vangelis Koukis
    });
386 f533f224 Vangelis Koukis
    update_listview_actions();
387 f533f224 Vangelis Koukis
    $("#machinesview .list > div.large-spinner").hide();
388 f533f224 Vangelis Koukis
    // in case there are no data, leave the page empty
389 f533f224 Vangelis Koukis
    if ($("#machinesview .list table.list-machines tbody").length > 0) {
390 f533f224 Vangelis Koukis
        $("#machinesview .list div.dataTables_filter").show();
391 f533f224 Vangelis Koukis
        $("#machinesview .list div.dataTables_filter input").show();
392 f533f224 Vangelis Koukis
        $("#machinesview .list table.list-machines").show();
393 f533f224 Vangelis Koukis
        $("#machinesview .list div.actions").show();
394 f533f224 Vangelis Koukis
    }
395 f533f224 Vangelis Koukis

396 f533f224 Vangelis Koukis
    // show message in case user has no servers!
397 f533f224 Vangelis Koukis
    if ($("#machinesview .list tbody.machines .dataTables_empty").length > 0) {
398 f533f224 Vangelis Koukis
        standard_view();
399 f533f224 Vangelis Koukis
    } else {
400 f533f224 Vangelis Koukis
        hideWelcome();
401 f533f224 Vangelis Koukis
        $("#machinesview_content").fadeIn("fast");
402 f533f224 Vangelis Koukis
    }
403 f533f224 Vangelis Koukis

404 f533f224 Vangelis Koukis
    // set confirm box position
405 f533f224 Vangelis Koukis
    if (window.innerHeight - 200 < $('#machinesview').height())
406 f533f224 Vangelis Koukis
        $('.confirm_multiple').addClass('fixed');
407 f533f224 Vangelis Koukis
    else
408 f533f224 Vangelis Koukis
        $('.confirm_multiple').removeClass('fixed');
409 f533f224 Vangelis Koukis

410 f533f224 Vangelis Koukis
    $('#machinesview .list .dataTables_scrollHeadInner table').attr('style','');
411 f533f224 Vangelis Koukis
    $('#machinesview .list .dataTables_scrollHeadInner th').attr('style','');
412 f533f224 Vangelis Koukis
}
413 f533f224 Vangelis Koukis

414 f533f224 Vangelis Koukis
function display_success(serverID) {
415 f533f224 Vangelis Koukis
    // do nothing
416 f533f224 Vangelis Koukis
}
417 f533f224 Vangelis Koukis

418 f533f224 Vangelis Koukis
// indicate that the requested action was not completed
419 f533f224 Vangelis Koukis
function display_failure(status, serverID, action, responseText) {
420 f533f224 Vangelis Koukis
    osIcon = $('#machinesview .list #'+serverID).parent().parent().find('.list-logo');
421 f533f224 Vangelis Koukis
    osIcon.attr('src',osIcon.attr('os'));
422 f533f224 Vangelis Koukis
    ajax_error(status, serverID, action, responseText);
423 f533f224 Vangelis Koukis
}
424 f533f224 Vangelis Koukis

425 f533f224 Vangelis Koukis
var vmTable = $("div.list table.list-machines").dataTable({
426 f533f224 Vangelis Koukis
    "bInfo": false,
427 f533f224 Vangelis Koukis
    "bRetrieve": true,
428 f533f224 Vangelis Koukis
    "bPaginate": false,
429 f533f224 Vangelis Koukis
    "bAutoWidth": false,
430 f533f224 Vangelis Koukis
    "bSort": true,
431 f533f224 Vangelis Koukis
    "bStateSave": true,
432 f533f224 Vangelis Koukis
    "sScrollXInner": "500px",
433 f533f224 Vangelis Koukis
    "aoColumnDefs": [
434 f533f224 Vangelis Koukis
        { "bSortable": false, "aTargets": [ 0 ] }
435 f533f224 Vangelis Koukis
    ]
436 f533f224 Vangelis Koukis
});
437 f533f224 Vangelis Koukis

438 f533f224 Vangelis Koukis
// basic functions executed on page load
439 f533f224 Vangelis Koukis
if ( flavors.length == 0 && images.length == 0 ) {
440 f533f224 Vangelis Koukis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
441 f533f224 Vangelis Koukis
    update_flavors();
442 f533f224 Vangelis Koukis
    // populate image list
443 f533f224 Vangelis Koukis
    update_images();
444 f533f224 Vangelis Koukis
} else if ( flavors.length == 0 && images.length != 0 ) {
445 f533f224 Vangelis Koukis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
446 f533f224 Vangelis Koukis
    update_flavors();
447 f533f224 Vangelis Koukis
} else if ( flavors.length != 0 && images.length == 0 ) {
448 f533f224 Vangelis Koukis
    // populate image list
449 f533f224 Vangelis Koukis
    update_images();
450 f533f224 Vangelis Koukis
    update_vms(UPDATE_INTERVAL);
451 f533f224 Vangelis Koukis
} else {
452 f533f224 Vangelis Koukis
    // start updating vm list
453 f533f224 Vangelis Koukis
    update_vms(UPDATE_INTERVAL);
454 f533f224 Vangelis Koukis
}
455 f533f224 Vangelis Koukis

456 f533f224 Vangelis Koukis
// reposition multiple confirmation box on window resize
457 f533f224 Vangelis Koukis
$(window).resize(function(){
458 f533f224 Vangelis Koukis
    if (this.innerHeight - 200 < $('#machinesview').height())
459 f533f224 Vangelis Koukis
        $('.confirm_multiple').addClass('fixed');
460 f533f224 Vangelis Koukis
    else
461 f533f224 Vangelis Koukis
        $('.confirm_multiple').removeClass('fixed');
462 f533f224 Vangelis Koukis
});
463 f533f224 Vangelis Koukis

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