Statistics
| Branch: | Tag: | Revision:

root / ui / templates / list.html @ 1508a5ab

History | View | Annotate | Download (14.3 kB)

1 42f67a2a Dimitris Moraitis
{% load i18n %}
2 42f67a2a Dimitris Moraitis
3 6902f72e clopy
<div id="machinesview_wrapper" class="list">
4 1c86af5b Christodoulos Psaltis
    <div id="spinner"></div>
5 f87e79a4 Mike Muzurakis
    <div id="machinesview_content">
6 f87e79a4 Mike Muzurakis
        <div class="actions">
7 f87e79a4 Mike Muzurakis
            <a id="action-start">{% trans "Start" %}</a>
8 f87e79a4 Mike Muzurakis
            <a id="action-reboot">{% trans "Reboot" %}</a>
9 f87e79a4 Mike Muzurakis
            <a id="action-shutdown">{% trans "Shutdown" %}</a>
10 f87e79a4 Mike Muzurakis
            <br />
11 f87e79a4 Mike Muzurakis
            <a id="action-destroy">{% trans "Destroy" %}</a>
12 f87e79a4 Mike Muzurakis
            <br />
13 f87e79a4 Mike Muzurakis
            <a id="action-details">{% trans "Show Details" %}</a>
14 f87e79a4 Mike Muzurakis
            <a id="action-group">{% trans "Add to group" %}</a>
15 f87e79a4 Mike Muzurakis
            <br />
16 f87e79a4 Mike Muzurakis
            <a id="action-band">{% trans "Out of band" %}</a>
17 f87e79a4 Mike Muzurakis
            <br />
18 f87e79a4 Mike Muzurakis
            <a id="action-attach">{% trans "Attach disk" %}</a>
19 f87e79a4 Mike Muzurakis
            <a id="action-detach">{% trans "Detach disk" %}</a>
20 f87e79a4 Mike Muzurakis
            <br />
21 f87e79a4 Mike Muzurakis
            <a id="action-connect">{% trans "Connect to network" %}</a>
22 f87e79a4 Mike Muzurakis
            <a id="action-disconnect">{% trans "Disconnect from net" %}</a>
23 f87e79a4 Mike Muzurakis
        </div>
24 f87e79a4 Mike Muzurakis
        <table class="list-machines" style="display: none">
25 f87e79a4 Mike Muzurakis
            <thead> 
26 f87e79a4 Mike Muzurakis
                <tr> 
27 f87e79a4 Mike Muzurakis
                    <th id="selection" class="select-running">
28 f87e79a4 Mike Muzurakis
                        <input type="checkbox"/>
29 f87e79a4 Mike Muzurakis
                        <div class="expand-icon"></div>          
30 f87e79a4 Mike Muzurakis
                    </th>
31 f87e79a4 Mike Muzurakis
                    <th id="os">{% trans "OS" %}</th> 
32 f87e79a4 Mike Muzurakis
                    <th id="name">{% trans "Name" %}</th> 
33 f87e79a4 Mike Muzurakis
                    <th id="flavor">{% trans "Flavor" %}</th> 
34 f87e79a4 Mike Muzurakis
                    <th id="group">{% trans "Group" %}</th>
35 f87e79a4 Mike Muzurakis
                    <th id="status">{% trans "Status" %}</th> 
36 f87e79a4 Mike Muzurakis
                </tr>
37 f87e79a4 Mike Muzurakis
            </thead> 
38 f87e79a4 Mike Muzurakis
            <tbody class="machines"></tbody>
39 f87e79a4 Mike Muzurakis
        </table>
40 f87e79a4 Mike Muzurakis
            <ul class="dropdown-selector" style="display: none">
41 f87e79a4 Mike Muzurakis
                    <li class="select-all" ><a href="#">{% trans "all" %}</a></li>
42 f87e79a4 Mike Muzurakis
                    <li class="select-none"><a href="#">{% trans "none" %}</a></li>
43 f87e79a4 Mike Muzurakis
                    <li class="select-group"><a href="#">{% trans "group" %}</a></li>
44 f87e79a4 Mike Muzurakis
            </ul>  
45 b303ba05 Christodoulos Psaltis
    </div>
46 b303ba05 Christodoulos Psaltis
</div>
47 c3b3043d Dimitris Moraitis
48 c3b3043d Dimitris Moraitis
<script>
49 990772be Dimitris Moraitis

50 35b8688f Christodoulos Psaltis
// select/deselect all from checkbox widget of table headers
51 35b8688f Christodoulos Psaltis
$("table thead tr th#selection :checkbox").live('change', function() {
52 35b8688f Christodoulos Psaltis
    if ( $(this).is(":checked") ) {
53 008b3ae8 Christodoulos Psaltis
        $(":checkbox").attr("checked", true);
54 35b8688f Christodoulos Psaltis
    }
55 35b8688f Christodoulos Psaltis
    else {
56 008b3ae8 Christodoulos Psaltis
        $(":checkbox").attr("checked", false);
57 35b8688f Christodoulos Psaltis
    }
58 4da3085a Dimitris Moraitis
        updateActions();
59 190e3256 Dimitris Moraitis
        return false;
60 35b8688f Christodoulos Psaltis
});
61 35b8688f Christodoulos Psaltis

62 190e3256 Dimitris Moraitis
// select all from drop down menu
63 190e3256 Dimitris Moraitis
$("ul.dropdown-selector li.select-all a").live('click', function() {
64 190e3256 Dimitris Moraitis
        $(":checkbox").attr("checked", true);
65 79b68e7c Christodoulos Psaltis
    $(".dropdown-selector").slideToggle('medium');
66 82bf6df0 Dimitris Moraitis
        updateActions();
67 190e3256 Dimitris Moraitis
        return false;        
68 1e03328c Christodoulos Psaltis
});
69 1e03328c Christodoulos Psaltis

70 190e3256 Dimitris Moraitis
// select none from drop down menu
71 190e3256 Dimitris Moraitis
$("ul.dropdown-selector li.select-none a").live('click', function() {
72 190e3256 Dimitris Moraitis
        $(":checkbox").attr("checked", false);
73 79b68e7c Christodoulos Psaltis
    $(".dropdown-selector").slideToggle('medium');
74 82bf6df0 Dimitris Moraitis
        updateActions();
75 190e3256 Dimitris Moraitis
        return false;        
76 164d6386 Christodoulos Psaltis
});
77 164d6386 Christodoulos Psaltis

78 190e3256 Dimitris Moraitis
// select group from drop down menu
79 190e3256 Dimitris Moraitis
$("ul.dropdown-selector li.select-group a").live('click', function() {
80 190e3256 Dimitris Moraitis
        $(":checkbox").attr("checked", true);
81 79b68e7c Christodoulos Psaltis
    $(".dropdown-selector").slideToggle('medium');
82 82bf6df0 Dimitris Moraitis
        updateActions();
83 190e3256 Dimitris Moraitis
        return false;
84 190e3256 Dimitris Moraitis
});
85 190e3256 Dimitris Moraitis

86 190e3256 Dimitris Moraitis
// menu toggle, running menu
87 190e3256 Dimitris Moraitis
$("table.list-machines thead tr th#selection .expand-icon").click( function (obj) {
88 190e3256 Dimitris Moraitis
        $(".dropdown-selector").slideToggle('medium');
89 164d6386 Christodoulos Psaltis
    return false;
90 164d6386 Christodoulos Psaltis
});
91 164d6386 Christodoulos Psaltis

92 bd96a56b Christodoulos Psaltis
// TODO: This should be populated with more rules for all available states
93 a9d8ed3a Christodoulos Psaltis
var actions = { 'reboot':                ['ACTIVE', 'REBOOT', 'multiple'],
94 a9d8ed3a Christodoulos Psaltis
                                'shutdown':                ['ACTIVE', 'REBOOT', 'multiple'],
95 a9d8ed3a Christodoulos Psaltis
                                'connect':                ['ACTIVE', ],
96 a9d8ed3a Christodoulos Psaltis
                                'disconnect':        ['ACTIVE', 'network'],
97 a9d8ed3a Christodoulos Psaltis
                                'band':                        ['ACTIVE', 'REBOOT'],
98 a9d8ed3a Christodoulos Psaltis
                                'details':                ['ACTIVE', 'REBOOT', 'STOPPED'],
99 a9d8ed3a Christodoulos Psaltis
                                'start':                 ['STOPPED', 'multiple'],
100 56c986b5 Markos Gogoulos
                                'destroy':                ['ACTIVE', 'STOPPED', 'REBOOT', 'ERROR', 'multiple', 'BUILD'],
101 a9d8ed3a Christodoulos Psaltis
                                'group':                ['ACTIVE', 'STOPPED', 'REBOOT','multiple'],
102 0604f74f Dimitris Moraitis
                           };
103 0604f74f Dimitris Moraitis

104 379a34cf Dimitris Moraitis
// on checkbox click, update the actions
105 bdbd43a1 Christodoulos Psaltis
$("tbody input[type='checkbox']").live('change', function() { 
106 bdbd43a1 Christodoulos Psaltis
    updateActions();
107 bdbd43a1 Christodoulos Psaltis
    pending_actions = [];
108 bdbd43a1 Christodoulos Psaltis
    $(".selected").removeClass('selected');
109 bdbd43a1 Christodoulos Psaltis
    update_confirmations(); 
110 bdbd43a1 Christodoulos Psaltis
});
111 4da3085a Dimitris Moraitis

112 df1257a5 Christodoulos Psaltis
$("div.confirm_multiple button").click(function() {
113 df1257a5 Christodoulos Psaltis
    $(".selected").removeClass('selected');
114 df1257a5 Christodoulos Psaltis
});
115 df1257a5 Christodoulos Psaltis

116 d7c4ab32 Dimitris Moraitis
// destroy action
117 ae0aea6d Dimitris Moraitis
$("a.enabled#action-destroy").live('click', function() {
118 217b2431 Dimitris Moraitis
        var checked = $("table.list-machines tbody input[type='checkbox']:checked");
119 bdbd43a1 Christodoulos Psaltis
    $(".selected").removeClass('selected');
120 bdbd43a1 Christodoulos Psaltis
    $(this).addClass('selected');
121 990772be Dimitris Moraitis
        pending_actions = []; // reset pending actions
122 217b2431 Dimitris Moraitis
        checked.each(function(i,c) {
123 48ce8b68 Christodoulos Psaltis
                serverID=c.id;
124 990772be Dimitris Moraitis
                serverName = $('#'+serverID+' span.name').text();
125 990772be Dimitris Moraitis
                pending_actions.push([destroy, serverID]);
126 217b2431 Dimitris Moraitis
        });
127 990772be Dimitris Moraitis
        update_confirmations();
128 217b2431 Dimitris Moraitis
        return false;
129 d7c4ab32 Dimitris Moraitis
});
130 d7c4ab32 Dimitris Moraitis

131 ae0aea6d Dimitris Moraitis
$("a.enabled#action-reboot").live('click', function() {
132 42f67a2a Dimitris Moraitis
        var checked = $("table.list-machines tbody input[type='checkbox']:checked");
133 bdbd43a1 Christodoulos Psaltis
    $(".selected").removeClass('selected');
134 bdbd43a1 Christodoulos Psaltis
    $(this).addClass('selected');
135 990772be Dimitris Moraitis
        pending_actions = []; // reset pending actions
136 217b2431 Dimitris Moraitis
        checked.each(function(i,c) {
137 48ce8b68 Christodoulos Psaltis
                serverID=c.id;
138 990772be Dimitris Moraitis
                serverName = $('#'+serverID+' span.name').text();
139 990772be Dimitris Moraitis
                pending_actions.push([reboot, serverID]);
140 217b2431 Dimitris Moraitis
        });
141 990772be Dimitris Moraitis
        update_confirmations();
142 217b2431 Dimitris Moraitis
        return false;
143 d7c4ab32 Dimitris Moraitis
});
144 d7c4ab32 Dimitris Moraitis

145 a37690bd Markos Gogoulos
$("a.enabled#action-start").live('click', function() {
146 42f67a2a Dimitris Moraitis
        var checked = $("table.list-machines tbody input[type='checkbox']:checked");
147 bdbd43a1 Christodoulos Psaltis
    $(".selected").removeClass('selected');
148 bdbd43a1 Christodoulos Psaltis
    $(this).addClass('selected');
149 990772be Dimitris Moraitis
        pending_actions = []; // reset pending actions
150 217b2431 Dimitris Moraitis
        checked.each(function(i,c) {
151 48ce8b68 Christodoulos Psaltis
                serverID=c.id;
152 990772be Dimitris Moraitis
                serverName = $('#'+serverID+' span.name').text();
153 990772be Dimitris Moraitis
                pending_actions.push([start, serverID]);
154 217b2431 Dimitris Moraitis
        });
155 990772be Dimitris Moraitis
        update_confirmations();
156 217b2431 Dimitris Moraitis
        return false;
157 a37690bd Markos Gogoulos
});
158 a37690bd Markos Gogoulos

159 a37690bd Markos Gogoulos
$("a.enabled#action-shutdown").live('click', function() {
160 42f67a2a Dimitris Moraitis
        var checked = $("table.list-machines tbody input[type='checkbox']:checked");
161 bdbd43a1 Christodoulos Psaltis
    $(".selected").removeClass('selected');
162 bdbd43a1 Christodoulos Psaltis
    $(this).addClass('selected');
163 990772be Dimitris Moraitis
        pending_actions = []; // reset pending actions
164 217b2431 Dimitris Moraitis
        checked.each(function(i,c) {
165 48ce8b68 Christodoulos Psaltis
                serverID=c.id;
166 990772be Dimitris Moraitis
                serverName = $('#'+serverID+' span.name').text();
167 990772be Dimitris Moraitis
                pending_actions.push([shutdown, serverID]);
168 217b2431 Dimitris Moraitis
        });
169 990772be Dimitris Moraitis
        update_confirmations();
170 217b2431 Dimitris Moraitis
        return false;
171 d7c4ab32 Dimitris Moraitis
});
172 d7c4ab32 Dimitris Moraitis

173 eae0a59a Dimitris Moraitis
function update_machines_view(data){
174 eae0a59a Dimitris Moraitis
    /* 
175 1a49199e Dimitris Moraitis
    Go through the servers in the input data. Update existing entries, add
176 eae0a59a Dimitris Moraitis
    new ones to the list
177 1a49199e Dimitris Moraitis
    */
178 1a49199e Dimitris Moraitis
        tableData = vmTable.fnGetData();
179 7e45ddef Dimitris Moraitis
    $.each(data.servers.values, function(i,server){        
180 1a49199e Dimitris Moraitis
        current = -1;
181 c459a72f Christodoulos Psaltis
        // check server status to select the appropriate OS icon
182 a64e74f0 Markos Gogoulos
        osTag = os_icon(server.metadata);
183 e2ccad35 Dimitris Moraitis
        var osIcon = osTag + ".png", imgStr, imgSrc;
184 c459a72f Christodoulos Psaltis

185 1a49199e Dimitris Moraitis
                // check if the server already exists in the datatable
186 1a49199e Dimitris Moraitis
                tableData.forEach(function(row,index){
187 1a49199e Dimitris Moraitis
                        
188 1a49199e Dimitris Moraitis
                        if (row[0].split(' ')[2].replace('id=','') == server.id){
189 1a49199e Dimitris Moraitis
                                current = index;
190 1a49199e Dimitris Moraitis
                        } 
191 1a49199e Dimitris Moraitis
                });
192 eae0a59a Dimitris Moraitis
        
193 e357c9f0 Christodoulos Psaltis
        if (current != -1) { // if it's there, update the values
194 e357c9f0 Christodoulos Psaltis
            // get current status description, including non api states
195 e357c9f0 Christodoulos Psaltis
            var server_row = $('#' + server.id).parent().parent();
196 e357c9f0 Christodoulos Psaltis
            var status_desc = server_row.find('span.status').text();
197 e357c9f0 Christodoulos Psaltis
            // firebug console logging
198 e357c9f0 Christodoulos Psaltis
                        try { 
199 e357c9f0 Christodoulos Psaltis
                                console.info(server.name + ' from ' + status_desc + ' to ' + STATUS_MESSAGES[server.status]);
200 e357c9f0 Christodoulos Psaltis
                        } catch(err) {}
201 e357c9f0 Christodoulos Psaltis
                    // when server is in deleted status it must be removed from the list
202 0e1531b4 Markos Gogoulos
                        if (server.status == "DELETED") {
203 1a49199e Dimitris Moraitis
                                vmTable.fnDeleteRow(current);        
204 e357c9f0 Christodoulos Psaltis
                        } else { // when server is not be deleted, it should be updated
205 e357c9f0 Christodoulos Psaltis
                if (['BUILD','ACTIVE','REBOOT'].indexOf(server.status) >= 0 &&
206 e357c9f0 Christodoulos Psaltis
                    [STATUS_MESSAGES['STOPPED'], STATUS_MESSAGES['ERROR'],
207 e357c9f0 Christodoulos Psaltis
                     'Starting'].indexOf(server_row.find('span.status').text()) >= 0) {        
208 e357c9f0 Christodoulos Psaltis
                    // from stopped, on error or starting to building, active or rebooting
209 e357c9f0 Christodoulos Psaltis
                    // starting is not an api state, it means the server is stopped or on error
210 e357c9f0 Christodoulos Psaltis
                                        tableData[current][0] = "<input class="+server.status+" id="+server.id+" type=checkbox>";
211 e357c9f0 Christodoulos Psaltis
                    imgSrc = "static/wave.gif";
212 e357c9f0 Christodoulos Psaltis
                                        imgStr = "<img class=list-logo src=" + imgSrc + " title=" + osTag + " height=16 width=16 />";
213 e357c9f0 Christodoulos Psaltis
                                        tableData[current][1] = "<span class=imagetag>" + osTag + "</span>" + imgStr;
214 e357c9f0 Christodoulos Psaltis
                                        tableData[current][2] = "<a class=name><span class=name>" + server.name + "</span></a>";
215 e357c9f0 Christodoulos Psaltis
                                        //tableData[current][4] = "group"; //TODO
216 e357c9f0 Christodoulos Psaltis
                                        tableData[current][5] = "<span class=status>" + STATUS_MESSAGES[server.status] + "</span>";
217 e357c9f0 Christodoulos Psaltis
                                        vmTable.fnUpdate(tableData[current],current);
218 e357c9f0 Christodoulos Psaltis
                    setTimeout("$('#"+server.id+"').parent().parent().find('.list-logo').attr('src','static/os_logos/" 
219 e357c9f0 Christodoulos Psaltis
                                                                                               + osIcon + "')", 1600);
220 e357c9f0 Christodoulos Psaltis
                } else if (['STOPPED','ERROR'].indexOf(server.status) >= 0 &&
221 e357c9f0 Christodoulos Psaltis
                           [STATUS_MESSAGES['ACTIVE'], STATUS_MESSAGES['BUILD'], STATUS_MESSAGES['REBOOT'],
222 e357c9f0 Christodoulos Psaltis
                            'Shutting down'].indexOf(server_row.find('span.status').text()) >= 0) {
223 e357c9f0 Christodoulos Psaltis
                                        tableData[current][0] = "<input class="+server.status+" id="+server.id+" type=checkbox>";
224 e357c9f0 Christodoulos Psaltis
                    imgSrc = "static/wave.gif";
225 e357c9f0 Christodoulos Psaltis
                                        imgStr = "<img class=list-logo src=" + imgSrc + " title=" + osTag + " height=16 width=16 />";
226 e357c9f0 Christodoulos Psaltis
                                        tableData[current][1] = "<span class=imagetag>" + osTag + "</span>" + imgStr;
227 e357c9f0 Christodoulos Psaltis
                                        tableData[current][2] = "<a class=name><span class=name>" + server.name + "</span></a>";
228 e357c9f0 Christodoulos Psaltis
                                        //tableData[current][4] = "group"; //TODO
229 e357c9f0 Christodoulos Psaltis
                                        tableData[current][5] = "<span class=status>" + STATUS_MESSAGES[server.status] + "</span>";
230 e357c9f0 Christodoulos Psaltis
                                        vmTable.fnUpdate(tableData[current],current);
231 e357c9f0 Christodoulos Psaltis
                    setTimeout("$('#"+server.id+"').parent().parent().find('.list-logo').attr('src','static/os_logos/" 
232 e357c9f0 Christodoulos Psaltis
                                                                                        + osTag + "-off.png')", 1600);        
233 e357c9f0 Christodoulos Psaltis
                } else if ( STATUS_MESSAGES[server.status] == server_row.find('span.status').text()) {
234 e357c9f0 Christodoulos Psaltis

235 e357c9f0 Christodoulos Psaltis
                } else if (server.status == 'ACTIVE' && 
236 e357c9f0 Christodoulos Psaltis
                           [STATUS_MESSAGES['BUILD'], 'Rebooting'].indexOf(server_row.find('span.status').text()) >= 0) {
237 e2ccad35 Dimitris Moraitis
                                        tableData[current][0] = "<input class="+server.status+" id="+server.id+" type=checkbox>";
238 e357c9f0 Christodoulos Psaltis
                    imgSrc = "static/wave.gif";
239 e2ccad35 Dimitris Moraitis
                                        imgStr = "<img class=list-logo src=" + imgSrc + " title=" + osTag + " height=16 width=16 />";
240 e2ccad35 Dimitris Moraitis
                                        tableData[current][1] = "<span class=imagetag>" + osTag + "</span>" + imgStr;
241 e2ccad35 Dimitris Moraitis
                                        tableData[current][2] = "<a class=name><span class=name>" + server.name + "</span></a>";
242 e2ccad35 Dimitris Moraitis
                                        //tableData[current][4] = "group"; //TODO
243 e2ccad35 Dimitris Moraitis
                                        tableData[current][5] = "<span class=status>" + STATUS_MESSAGES[server.status] + "</span>";
244 e357c9f0 Christodoulos Psaltis
                                        vmTable.fnUpdate(tableData[current],current);
245 e357c9f0 Christodoulos Psaltis
                    setTimeout("$('#"+server.id+"').parent().parent().find('.list-logo').attr('src','static/os_logos/" 
246 e357c9f0 Christodoulos Psaltis
                                                                                               + osIcon + "')", 1600);
247 e357c9f0 Christodoulos Psaltis
                }
248 1a49199e Dimitris Moraitis
                        }
249 1a49199e Dimitris Moraitis
                        updateActions();
250 0e1531b4 Markos Gogoulos
        } else if (server.status != "DELETED") { // does not exist, we should create it
251 48ce8b68 Christodoulos Psaltis
            // check server status to select the appropriate OS icon
252 48ce8b68 Christodoulos Psaltis
            if (['ERROR', 'STOPPED'].indexOf(server.status) >= 0) {
253 e357c9f0 Christodoulos Psaltis
                osIcon = "static/os_logos/" + osTag + "-off.png";
254 e357c9f0 Christodoulos Psaltis
            } else if ( server.status == 'BUILD') {
255 e357c9f0 Christodoulos Psaltis
                osIcon = "static/progress.gif"; 
256 e357c9f0 Christodoulos Psaltis
            } else {
257 e357c9f0 Christodoulos Psaltis
                osIcon = "static/os_logos/" + osTag + ".png";
258 eae0a59a Dimitris Moraitis
            }
259 63119250 Christodoulos Psaltis
            // find flavor parameters
260 2b7ae4be Christodoulos Psaltis
            var current_flavor = '';
261 2b7ae4be Christodoulos Psaltis
            for (i=0; i<flavors.length; i++) {
262 2b7ae4be Christodoulos Psaltis
                if (flavors[i]['id'] == server.flavorRef) {
263 2b7ae4be Christodoulos Psaltis
                    current_flavor = flavors[i];
264 2b7ae4be Christodoulos Psaltis
                }
265 2b7ae4be Christodoulos Psaltis
            } 
266 2b7ae4be Christodoulos Psaltis
            var flavor_label = '';
267 2b7ae4be Christodoulos Psaltis
            if (current_flavor['cpu'] == '1') {
268 36f65c1f Christodoulos Psaltis
                flavorLabel = '1 CPU, ';
269 36f65c1f Christodoulos Psaltis
            } else {
270 2b7ae4be Christodoulos Psaltis
                flavorLabel = current_flavor['cpu'] + ' CPUs, ';
271 36f65c1f Christodoulos Psaltis
            }
272 2b7ae4be Christodoulos Psaltis
            flavorLabel = flavorLabel + current_flavor['ram'] + 'MB, ' + current_flavor['disk'] + 'GB'; 
273 36f65c1f Christodoulos Psaltis

274 48ce8b68 Christodoulos Psaltis
            // add new row to the table
275 48ce8b68 Christodoulos Psaltis
            vmTable.fnAddData([
276 48ce8b68 Christodoulos Psaltis
                "<input class=" + server.status + " id=" + server.id + " type=checkbox>",
277 e357c9f0 Christodoulos Psaltis
                "<span class=imagetag>" + osTag + "</span><img class=list-logo src=" + osIcon +
278 48ce8b68 Christodoulos Psaltis
                    " title=" + osTag + " height=16 width=16>",
279 48ce8b68 Christodoulos Psaltis
                "<a class=name><span class=name>" + server.name + "</span></a>",
280 36f65c1f Christodoulos Psaltis
                "<a class=flavor><span>"+ flavorLabel + "</span></a>",
281 48ce8b68 Christodoulos Psaltis
                "group",
282 48ce8b68 Christodoulos Psaltis
                "<span class=status>" + STATUS_MESSAGES[server.status] + "</span>"
283 48ce8b68 Christodoulos Psaltis
            ]);
284 eae0a59a Dimitris Moraitis
        }
285 eae0a59a Dimitris Moraitis
    });
286 1a49199e Dimitris Moraitis
        updateActions();
287 48ce8b68 Christodoulos Psaltis
        $("#spinner").hide();        
288 48ce8b68 Christodoulos Psaltis
    // in case there are no data, leave the page empty
289 eae0a59a Dimitris Moraitis
    if ($("div.list table.list-machines tbody").length > 0) {
290 48ce8b68 Christodoulos Psaltis
        $("div.list div.dataTables_filter").show();
291 48ce8b68 Christodoulos Psaltis
        $("div.list div.dataTables_filter input").show();
292 eae0a59a Dimitris Moraitis
        $("div.list table.list-machines").show();
293 eae0a59a Dimitris Moraitis
        $("div.list div.actions").show();
294 eae0a59a Dimitris Moraitis
    }
295 6902f72e clopy

296 6902f72e clopy
    // show message in case user has no servers!
297 6902f72e clopy
    if (servers.length == 0) {
298 6902f72e clopy
        showWelcome()
299 6902f72e clopy
    } else {
300 6902f72e clopy
        hideWelcome()
301 f87e79a4 Mike Muzurakis
        $("#machinesview_content").fadeIn("fast")
302 6902f72e clopy
    }      
303 ed4781b5 Dimitris Moraitis
        
304 ed4781b5 Dimitris Moraitis
        // set confirm box position
305 e2ccad35 Dimitris Moraitis
    if (window.innerHeight - 200 < $('#machinesview').height())
306 ed4781b5 Dimitris Moraitis
        $('.confirm_multiple').addClass('fixed');
307 ed4781b5 Dimitris Moraitis
    else
308 ed4781b5 Dimitris Moraitis
        $('.confirm_multiple').removeClass('fixed');
309 eae0a59a Dimitris Moraitis
}
310 eae0a59a Dimitris Moraitis

311 a1a31201 Dimitris Moraitis
function display_success(serverID) {
312 6d0a36e5 Dimitris Moraitis
        // do nothing
313 879748ec Markos Gogoulos
}
314 879748ec Markos Gogoulos

315 879748ec Markos Gogoulos
// indicate that the requested action was not completed
316 038383b1 Dimitris Moraitis
function display_failure(status, serverID, action, responseText) {
317 695e1b21 Dimitris Moraitis
        osIcon = $('#'+serverID).parent().parent().find('.list-logo');
318 695e1b21 Dimitris Moraitis
        osIcon.attr('src',osIcon.attr('os'));
319 038383b1 Dimitris Moraitis
    ajax_error(status, serverID, action, responseText);
320 a1a31201 Dimitris Moraitis
}
321 a1a31201 Dimitris Moraitis

322 48ce8b68 Christodoulos Psaltis
var vmTable = $("div.list table.list-machines").dataTable({
323 48ce8b68 Christodoulos Psaltis
    "bInfo": false,
324 48ce8b68 Christodoulos Psaltis
    "bRetrieve": true,
325 48ce8b68 Christodoulos Psaltis
    "bPaginate": false,
326 48ce8b68 Christodoulos Psaltis
    "bAutoWidth": false,
327 48ce8b68 Christodoulos Psaltis
    "bSort": true,    
328 48ce8b68 Christodoulos Psaltis
    "bStateSave": true,
329 48ce8b68 Christodoulos Psaltis
    "sScrollY": "270px",
330 48ce8b68 Christodoulos Psaltis
    "sScrollX": "515px",
331 48ce8b68 Christodoulos Psaltis
    "sScrollXInner": "500px",
332 48ce8b68 Christodoulos Psaltis
    "aoColumnDefs": [
333 48ce8b68 Christodoulos Psaltis
        { "bSortable": false, "aTargets": [ 0 ] }
334 48ce8b68 Christodoulos Psaltis
    ]
335 48ce8b68 Christodoulos Psaltis
});
336 48ce8b68 Christodoulos Psaltis

337 339712cb Christodoulos Psaltis
// basic functions executed on page load
338 146b6003 Dimitris Moraitis
if (images.length == 0) {
339 146b6003 Dimitris Moraitis
    // populate image list
340 146b6003 Dimitris Moraitis
    update_images();
341 146b6003 Dimitris Moraitis
}
342 146b6003 Dimitris Moraitis
if (flavors.length == 0) {
343 146b6003 Dimitris Moraitis
    // configure flavors
344 146b6003 Dimitris Moraitis
    update_flavors(); 
345 146b6003 Dimitris Moraitis
}
346 c53d09e2 Christodoulos Psaltis
// set the label of the multiple buttons 
347 c53d09e2 Christodoulos Psaltis
$('div.confirm_multiple button.yes').text('Confirm');
348 c53d09e2 Christodoulos Psaltis
$('div.confirm_multiple button.no').text('Cancel');
349 82bf6df0 Dimitris Moraitis
// reposition multiple confirmation box on window resize
350 82bf6df0 Dimitris Moraitis
$(window).resize(function(){
351 82bf6df0 Dimitris Moraitis
    if (this.innerHeight - 200 < $('#machinesview').height())
352 82bf6df0 Dimitris Moraitis
        $('.confirm_multiple').addClass('fixed');
353 82bf6df0 Dimitris Moraitis
    else
354 82bf6df0 Dimitris Moraitis
        $('.confirm_multiple').removeClass('fixed');
355 82bf6df0 Dimitris Moraitis
});
356 c53d09e2 Christodoulos Psaltis
// start updating vm list
357 146b6003 Dimitris Moraitis
update_vms(UPDATE_INTERVAL);
358 42f67a2a Dimitris Moraitis
359 35b8688f Christodoulos Psaltis
</script>