Statistics
| Branch: | Tag: | Revision:

root / ui / templates / machines.html @ dddb9274

History | View | Annotate | Download (30.1 kB)

1 edda4d30 Markos Gogoulos
{% load i18n %}
2 edda4d30 Markos Gogoulos
3 43df43aa Markos Gogoulos
<div id="machines" class="seperator"></div>
4 e55b8703 Christodoulos Psaltis
5 d165dbb4 Christodoulos Psaltis
<!-- the create button -->
6 edda4d30 Markos Gogoulos
<a id="create" rel="#wizard" href="#">{% trans "Create New +" %}</a>
7 d165dbb4 Christodoulos Psaltis
8 d165dbb4 Christodoulos Psaltis
<!-- changing between standard/list view -->
9 e55b8703 Christodoulos Psaltis
<div id="view-select">
10 43df43aa Markos Gogoulos
    <a id="standard" class="current" href="/machines">#</a>
11 1dd48fea Markos Gogoulos
    <span class="view-seperator">|</span>
12 43df43aa Markos Gogoulos
    <a id="list" href="/machines/list">=</a>
13 e55b8703 Christodoulos Psaltis
</div>
14 e55b8703 Christodoulos Psaltis
15 d165dbb4 Christodoulos Psaltis
<!-- the standard view -->
16 43df43aa Markos Gogoulos
<div id="machinesview" class="standard">
17 38e2c5ed Christodoulos Psaltis
    <div id="spinner"></div>
18 c376783b Markos Gogoulos
    <div class="machine" id="machine-template" style="display:none">
19 ec06b07c Dimitris Moraitis
        <div class="state">
20 cf0eb36b Markos Gogoulos
            <div class="status">{% trans "Running" %}</div>
21 ec06b07c Dimitris Moraitis
            <div class="indicator"></div>
22 ec06b07c Dimitris Moraitis
            <div class="indicator"></div>
23 ec06b07c Dimitris Moraitis
            <div class="indicator"></div>
24 ec06b07c Dimitris Moraitis
            <div class="indicator"></div>
25 ec06b07c Dimitris Moraitis
        </div>
26 c3b3043d Dimitris Moraitis
        <img class="logo" src="" />
27 ec06b07c Dimitris Moraitis
        <a href="#" class="name">
28 b7f8c534 Christodoulos Psaltis
            <h5>Νame: <span class="name">node.name</span><span class="rename"></span></h5>
29 ec06b07c Dimitris Moraitis
        </a>
30 ec06b07c Dimitris Moraitis
        <a href="#" class="ip">
31 ec06b07c Dimitris Moraitis
            <h5>IP: <span class="public">node.public_ip</span></h5>
32 ec06b07c Dimitris Moraitis
        </a>
33 5de45a61 Christodoulos Psaltis
        <h5 class="settings">
34 cf0eb36b Markos Gogoulos
            {% trans "Show:" %} <a href="#">{% trans "disks" %}</a> | <a href="#">{% trans "networks" %}</a> | <a href="#">{% trans "group" %}</a>
35 ec06b07c Dimitris Moraitis
        </h5>
36 ec06b07c Dimitris Moraitis
        <div class="actions">
37 6a94c3c4 Christodoulos Psaltis
            <a href="#" class="action-start">{% trans "Start" %}</a>
38 bd8b1d60 Christodoulos Psaltis
            <a href="#" class="action-reboot">{% trans "Reboot" %}</a>
39 bd8b1d60 Christodoulos Psaltis
            <a href="#" class="action-shutdown">{% trans "Shutdown" %}</a>
40 c376783b Markos Gogoulos
            <a href="#" class="more">{% trans "more &hellip;" %}</a>
41 ec06b07c Dimitris Moraitis
        </div>
42 5435c65a Christodoulos Psaltis
        <div class="seperator"></div>
43 ec06b07c Dimitris Moraitis
    </div>
44 ec06b07c Dimitris Moraitis
45 5de45a61 Christodoulos Psaltis
    <div class="running"></div>
46 e55b8703 Christodoulos Psaltis
    <div id="mini" class="seperator"></div>
47 5de45a61 Christodoulos Psaltis
    <div class="terminated"></div>
48 cc7c5902 Dimitris Moraitis
</div>
49 cc7c5902 Dimitris Moraitis
50 43df43aa Markos Gogoulos
<div id="machines" class="seperator"></div>
51 e55b8703 Christodoulos Psaltis
52 cc7c5902 Dimitris Moraitis
<!-- the form -->
53 cc7c5902 Dimitris Moraitis
<form action="#">
54 cc7c5902 Dimitris Moraitis
        <!-- scrollable root element -->
55 cc7c5902 Dimitris Moraitis
        <div class="modal" id="wizard">
56 cc7c5902 Dimitris Moraitis
                <!-- status bar -->
57 cc7c5902 Dimitris Moraitis
                <ul id="status">
58 cf0eb36b Markos Gogoulos
                        <li class="active"><strong>1.</strong> {% trans "Image" %}</li>
59 c376783b Markos Gogoulos
                        <li><strong>2.</strong> {% trans "Machine" %}</li>
60 cf0eb36b Markos Gogoulos
                        <li><strong>3.</strong> {% trans "Review" %}</li>
61 cc7c5902 Dimitris Moraitis
                </ul>
62 cc7c5902 Dimitris Moraitis
                <!-- scrollable items -->
63 cc7c5902 Dimitris Moraitis
                <div class="items">
64 cc7c5902 Dimitris Moraitis
                        <!-- pages -->
65 cc7c5902 Dimitris Moraitis
                        <div class="page">
66 cf0eb36b Markos Gogoulos
                <h2>{% trans "Select an OS" %}</h2>
67 cc7c5902 Dimitris Moraitis
                <ul class="tabs">
68 cf0eb36b Markos Gogoulos
                    <li><a href="#">{% trans "standard" %}</a></li>
69 cf0eb36b Markos Gogoulos
                    <li><a href="#">{% trans "custom" %}</a></li>
70 cc7c5902 Dimitris Moraitis
                </ul>
71 89976b6c Christodoulos Psaltis
                <div class="panes">
72 ec06b07c Dimitris Moraitis
                            <li id="image-template" style="display:none">
73 ec06b07c Dimitris Moraitis
                                    <label for="image.id"> 
74 ec06b07c Dimitris Moraitis
                            <a><div class="image">
75 c3b3043d Dimitris Moraitis
                                <img src="" class="image-logo"/>
76 ec06b07c Dimitris Moraitis
                                <strong class="image-title">image.title</strong>
77 ec06b07c Dimitris Moraitis
                                <input class="radio" type="radio" name="image-id" id="image-id" />
78 ec06b07c Dimitris Moraitis
                                <br />
79 ec06b07c Dimitris Moraitis
                                <span class="description">image.description</span> 
80 ec06b07c Dimitris Moraitis
                                <span class="size">?? MB</span>
81 ec06b07c Dimitris Moraitis
                                
82 ec06b07c Dimitris Moraitis
                            </div></a>
83 ec06b07c Dimitris Moraitis
                                    </label>
84 ec06b07c Dimitris Moraitis
                            </li>
85 ec06b07c Dimitris Moraitis
                    <ul class="pane" id="standard-images">
86 cc7c5902 Dimitris Moraitis
                                            <!-- standard images -->
87 cc7c5902 Dimitris Moraitis
                                    </ul>
88 ec06b07c Dimitris Moraitis
                    <ul class="pane" id="custom-images">
89 cc7c5902 Dimitris Moraitis
                                            <!-- custom images -->
90 ec06b07c Dimitris Moraitis
91 cc7c5902 Dimitris Moraitis
                    </ul>
92 cc7c5902 Dimitris Moraitis
                </div>
93 cf0eb36b Markos Gogoulos
                                <button type="button" class="prev" id="cancel">{% trans "Cancel" %}</button>
94 cf0eb36b Markos Gogoulos
                                <button type="button" class="next right">{% trans "Next" %} &raquo;</button>
95 cc7c5902 Dimitris Moraitis
            </div>
96 cc7c5902 Dimitris Moraitis
                        <div class="page">
97 cf0eb36b Markos Gogoulos
                                <h2>{% trans "Select CPU, RAM and storage" %}</h2>
98 cc7c5902 Dimitris Moraitis
                <ul>
99 cc7c5902 Dimitris Moraitis
                    <li>
100 c376783b Markos Gogoulos
                        <div class="machine-type">
101 cc7c5902 Dimitris Moraitis
                            <label for="small">
102 c376783b Markos Gogoulos
                                <input type="radio" id="small" name="machine-type" value="small" checked="true" />
103 cf0eb36b Markos Gogoulos
                                <strong>{% trans "small" %}</strong>
104 cc7c5902 Dimitris Moraitis
                            </label>
105 cc7c5902 Dimitris Moraitis
                        </div>
106 c376783b Markos Gogoulos
                        <div class="machine-type">      
107 cc7c5902 Dimitris Moraitis
                            <label for="medium">
108 c376783b Markos Gogoulos
                                <input type="radio" id="medium" name="machine-type" value="medium" />                  
109 cf0eb36b Markos Gogoulos
                                <strong>{% trans "medium" %}</strong>
110 cc7c5902 Dimitris Moraitis
                            </label>
111 cc7c5902 Dimitris Moraitis
                        </div>
112 c376783b Markos Gogoulos
                        <div class="machine-type">
113 cc7c5902 Dimitris Moraitis
                            <label for="large">
114 c376783b Markos Gogoulos
                                <input type="radio" id="large" name="machine-type" value="large" />
115 cf0eb36b Markos Gogoulos
                                <strong>{% trans "large" %}</strong>
116 cc7c5902 Dimitris Moraitis
                            </label>
117 cc7c5902 Dimitris Moraitis
                        </div>
118 c376783b Markos Gogoulos
                        <div class="machine-type">
119 cc7c5902 Dimitris Moraitis
                            <label for="custom">
120 c376783b Markos Gogoulos
                                <input type="radio" name="machine-type" id="custom" value="large" />
121 cf0eb36b Markos Gogoulos
                                <strong>{% trans "custom" %}</strong>
122 cc7c5902 Dimitris Moraitis
                            </label>
123 cc7c5902 Dimitris Moraitis
                        </div>
124 cc7c5902 Dimitris Moraitis
                    </li>
125 cc7c5902 Dimitris Moraitis
                    <li>
126 cc7c5902 Dimitris Moraitis
                                    <label><strong class="sliders">CPU (cores)</strong></label>
127 71642965 Dimitris Moraitis
                        <input type="range" id="cpu" style="display:none" />
128 71642965 Dimitris Moraitis
                        <input type="text" class="range" id="cpu-indicator" />
129 cc7c5902 Dimitris Moraitis
                    </li>
130 cc7c5902 Dimitris Moraitis
                    <li>
131 cc7c5902 Dimitris Moraitis
                                    <label><strong class="sliders">RAM (MB)</strong></label>
132 71642965 Dimitris Moraitis
                        <input type="range" id="ram" style="display:none" />
133 71642965 Dimitris Moraitis
                        <input type="text" class="range" id="ram-indicator" />
134 71642965 Dimitris Moraitis
135 cc7c5902 Dimitris Moraitis
                    </li>
136 cc7c5902 Dimitris Moraitis
                    <li>
137 cc7c5902 Dimitris Moraitis
                                <label><strong class="sliders">Storage (GB)</strong></label>
138 71642965 Dimitris Moraitis
                        <input type="range" id="storage" style="display:none" />
139 71642965 Dimitris Moraitis
                        <input type="text" class="range" id="storage-indicator" />
140 71642965 Dimitris Moraitis
141 cc7c5902 Dimitris Moraitis
                    </li>
142 cc7c5902 Dimitris Moraitis
                    <li>
143 cc7c5902 Dimitris Moraitis
                        <div class="cost">
144 cf0eb36b Markos Gogoulos
                            {% trans "Cost per hour:" %} 20 {% trans "credits" %} | {% trans "Credits currently in account:" %} 10.000
145 cc7c5902 Dimitris Moraitis
                        </div>
146 cc7c5902 Dimitris Moraitis
                    </li>
147 cc7c5902 Dimitris Moraitis
                </ul>
148 cf0eb36b Markos Gogoulos
                                <button type="button" class="prev">&laquo; {% trans "Back" %}</button>
149 cf0eb36b Markos Gogoulos
                                <button type="button" class="next right">{% trans "Next" %} &raquo;</button>
150 cc7c5902 Dimitris Moraitis
            </div>
151 cc7c5902 Dimitris Moraitis
                        <div class="page">
152 cf0eb36b Markos Gogoulos
                                <h2>{% trans "Confirm your settings" %}</h2>
153 cc7c5902 Dimitris Moraitis
                <ul>
154 cc7c5902 Dimitris Moraitis
                    <li class="required">
155 cc7c5902 Dimitris Moraitis
                        <label>
156 c376783b Markos Gogoulos
                            <strong>Machine name</strong>
157 c376783b Markos Gogoulos
                            <input type="text" class="text" name="machine_name" value="My Ubuntu 10.04 x86_64 server"/>
158 cc7c5902 Dimitris Moraitis
                        </label>
159 cc7c5902 Dimitris Moraitis
                    </li>
160 cc7c5902 Dimitris Moraitis
                    <li>
161 71642965 Dimitris Moraitis
                        <strong>{% trans "Image:" %}</strong> <span id="machine_image-label">Ubuntu 10.04 x86_64 server</span>
162 cc7c5902 Dimitris Moraitis
                    </li>
163 cc7c5902 Dimitris Moraitis
                    <li>
164 71642965 Dimitris Moraitis
                        <strong>{% trans "CPU:" %}</strong> <span id="machine_cpu-label">2</span> <span>{% trans "cores" %}</span>
165 cc7c5902 Dimitris Moraitis
                    </li>
166 cc7c5902 Dimitris Moraitis
                    <li>
167 71642965 Dimitris Moraitis
                        <strong>{% trans "RAM:" %}</strong> <span id="machine_ram-label">1024</span><span>MB</span>
168 cc7c5902 Dimitris Moraitis
                    </li>
169 cc7c5902 Dimitris Moraitis
                    <li>
170 71642965 Dimitris Moraitis
                        <strong>{% trans "Storage:" %}</strong> <span id="machine_storage-label">10</span><span>GB</span>
171 cc7c5902 Dimitris Moraitis
                    </li>
172 cc7c5902 Dimitris Moraitis
                    <li>
173 cf0eb36b Markos Gogoulos
                        <strong>{% trans "Cost per hour:" %}</strong> <span>20 {% trans "credits" %}</span>
174 cc7c5902 Dimitris Moraitis
                    </li>
175 cc7c5902 Dimitris Moraitis
                    <li>
176 cf0eb36b Markos Gogoulos
                        <strong>{% trans "Remaining credits:" %}</strong> <span>10.000</span>
177 cc7c5902 Dimitris Moraitis
                    </li>
178 cc7c5902 Dimitris Moraitis
                </ul>
179 cf0eb36b Markos Gogoulos
                                <button type="button" class="prev">&laquo; {% trans "Back" %}</button>
180 cf0eb36b Markos Gogoulos
                                <button type="button" class="next right" id="start">{% trans "Create VM" %}</button>        
181 cc7c5902 Dimitris Moraitis
            </div>
182 cc7c5902 Dimitris Moraitis
                </div>
183 cc7c5902 Dimitris Moraitis
        </div>
184 cc7c5902 Dimitris Moraitis
</form>
185 cc7c5902 Dimitris Moraitis
186 d165dbb4 Christodoulos Psaltis
<!-- notification after wizard completion -->
187 f58ec963 Christodoulos Psaltis
<a id="notification" rel="#error-success" href="#"></a>
188 d165dbb4 Christodoulos Psaltis
189 f58ec963 Christodoulos Psaltis
<div class="modal" id="error-success">
190 f58ec963 Christodoulos Psaltis
    <h3>{% trans "Error!/Success!" %}</h3>
191 f58ec963 Christodoulos Psaltis
    <p>{% trans "More details about the result"%}</p>
192 cc7c5902 Dimitris Moraitis
</div>
193 cc7c5902 Dimitris Moraitis
194 bd528b3b Christodoulos Psaltis
<!-- confirmation before executing an action -->
195 f58ec963 Christodoulos Psaltis
<a id="confirmation" rel="#yes-no" href="#"></a>
196 d165dbb4 Christodoulos Psaltis
197 f58ec963 Christodoulos Psaltis
<div class="modal" id="yes-no">
198 bd528b3b Christodoulos Psaltis
    <h3>{% trans "You are about to xxx machine yyy" %}</h3>
199 bd528b3b Christodoulos Psaltis
    <p>{% trans "Are you sure you want to proceed?" %}</p>
200 bd528b3b Christodoulos Psaltis
    <button>{% trans "Yes" %}</button>
201 bd528b3b Christodoulos Psaltis
        <button>{% trans "No" %}</button>
202 d165dbb4 Christodoulos Psaltis
</div>
203 d165dbb4 Christodoulos Psaltis
204 941b00d4 Markos Gogoulos
<script type="text/javascript"> 
205 941b00d4 Markos Gogoulos
var TIMEOUT = {{timeout}};
206 941b00d4 Markos Gogoulos
</script>
207 941b00d4 Markos Gogoulos
208 cc7c5902 Dimitris Moraitis
<script>
209 bd8b1d60 Christodoulos Psaltis
// hardcoded image types
210 ec06b07c Dimitris Moraitis
var image_tags = {
211 ec06b07c Dimitris Moraitis
                1: 'archlinux',
212 ec06b07c Dimitris Moraitis
                2: 'centos',
213 ec06b07c Dimitris Moraitis
                3: 'debian',
214 ec06b07c Dimitris Moraitis
                4: 'freebsd',
215 ec06b07c Dimitris Moraitis
                5: 'gentoo',
216 ec06b07c Dimitris Moraitis
                6: 'netbsd',
217 ec06b07c Dimitris Moraitis
                7: 'openbsd',
218 ec06b07c Dimitris Moraitis
                8: 'redhat',
219 ec06b07c Dimitris Moraitis
                9: 'slackware',
220 ec06b07c Dimitris Moraitis
                10: 'suse',
221 ec06b07c Dimitris Moraitis
                11: 'ubuntu',
222 ec06b07c Dimitris Moraitis
                12: 'windows',
223 cbec4223 Markos Gogoulos
                20: 'ubuntu',
224 ec06b07c Dimitris Moraitis
               };
225 ec06b07c Dimitris Moraitis

226 bd528b3b Christodoulos Psaltis
// ajax error checking  
227 f58ec963 Christodoulos Psaltis
function ajax_error(jqXHR) {; 
228 f58ec963 Christodoulos Psaltis
    // prepare the error message
229 dddb9274 Markos Gogoulos
    $("#error-success h3").text('{% trans "Error!" %}');
230 bd96a56b Christodoulos Psaltis
    // check the error code
231 bd96a56b Christodoulos Psaltis
    switch (jqXHR.status) {
232 bd96a56b Christodoulos Psaltis
        case 400: // YY error/message
233 dddb9274 Markos Gogoulos
            $("#error-success p").text('{% trans "A Bad Request has been made." %}');
234 dddb9274 Markos Gogoulos
            break;
235 dddb9274 Markos Gogoulos
        case 404: // YY error/message
236 dddb9274 Markos Gogoulos
            $("#error-success p").text('{% trans "Your request has failed." %}');
237 dddb9274 Markos Gogoulos
            break;
238 dddb9274 Markos Gogoulos
        case 501: // XX error/message
239 dddb9274 Markos Gogoulos
            $("#error-success p").text('{% trans "There has been an Internal Error. Our administrators have been notified." %}');
240 dddb9274 Markos Gogoulos
            break;
241 dddb9274 Markos Gogoulos
        case 503: // XX error/message
242 dddb9274 Markos Gogoulos
            $("#error-success p").text('{% trans "This service is unavailble right now, please try again later." %}');
243 bd96a56b Christodoulos Psaltis
            break;
244 bd96a56b Christodoulos Psaltis
        default: // XXYY error/message
245 dddb9274 Markos Gogoulos
            $("#error-success p").text('{% trans "An Error has happened. Our administrators have been notified." %}');
246 a30a43a7 Markos Gogoulos
    }
247 bd96a56b Christodoulos Psaltis
    // bring up error notification
248 f58ec963 Christodoulos Psaltis
    var triggers = $("a#notification").overlay({
249 4e5d5e70 Christodoulos Psaltis
            // some mask tweaks suitable for modal dialogs
250 4e5d5e70 Christodoulos Psaltis
            mask: {
251 4e5d5e70 Christodoulos Psaltis
                    color: '#ebecff',
252 4e5d5e70 Christodoulos Psaltis
                    opacity: '0.9'
253 4e5d5e70 Christodoulos Psaltis
            },
254 4e5d5e70 Christodoulos Psaltis
        top: 'center',
255 f58ec963 Christodoulos Psaltis
            closeOnClick: false,
256 f58ec963 Christodoulos Psaltis
        oneInstance: false,
257 4e5d5e70 Christodoulos Psaltis
        load: true,
258 4e5d5e70 Christodoulos Psaltis
        onClose: function(){
259 4e5d5e70 Christodoulos Psaltis
            $("div.pane#machines-pane").load($("a#standard").attr("href"));
260 4e5d5e70 Christodoulos Psaltis
        }
261 4e5d5e70 Christodoulos Psaltis
    });
262 facad27f Christodoulos Psaltis
    return false;
263 bd528b3b Christodoulos Psaltis
}
264 bd528b3b Christodoulos Psaltis

265 f58ec963 Christodoulos Psaltis
// ajax success checking
266 f58ec963 Christodoulos Psaltis
function ajax_success() {
267 f58ec963 Christodoulos Psaltis
    // prepare the error message
268 f58ec963 Christodoulos Psaltis
    $("#error-success h3").text('Success!');
269 f58ec963 Christodoulos Psaltis
    $("#error-success p").text('Your request has been succefully executed.');
270 bd96a56b Christodoulos Psaltis
    // bring up success notification
271 962733ad Christodoulos Psaltis
    var triggers = $("a#notification").overlay({
272 962733ad Christodoulos Psaltis
            // some mask tweaks suitable for modal dialogs
273 962733ad Christodoulos Psaltis
            mask: {
274 962733ad Christodoulos Psaltis
                    color: '#ebecff',
275 962733ad Christodoulos Psaltis
                    opacity: '0.9'
276 962733ad Christodoulos Psaltis
            },
277 962733ad Christodoulos Psaltis
        top: 'center',
278 962733ad Christodoulos Psaltis
            closeOnClick: false,
279 962733ad Christodoulos Psaltis
        oneInstance: false,
280 962733ad Christodoulos Psaltis
        load: true,
281 962733ad Christodoulos Psaltis
        onClose: function(){
282 962733ad Christodoulos Psaltis
            $("div.pane#machines-pane").load($("a#standard").attr("href"));
283 962733ad Christodoulos Psaltis
        }
284 962733ad Christodoulos Psaltis
    });
285 f58ec963 Christodoulos Psaltis
    return false;
286 f58ec963 Christodoulos Psaltis
}
287 f58ec963 Christodoulos Psaltis

288 f58ec963 Christodoulos Psaltis
// confirmation overlay generation
289 f58ec963 Christodoulos Psaltis
function confirm_action(action_string, action_function, serverID, serverName) {
290 f58ec963 Christodoulos Psaltis
    $("#yes-no h3").text('You are about to ' + action_string + ' vm ' + serverName);
291 f58ec963 Christodoulos Psaltis
    // action confirmation overlay
292 f58ec963 Christodoulos Psaltis
    var triggers = $("a#confirmation").overlay({
293 f58ec963 Christodoulos Psaltis
            // some mask tweaks suitable for modal dialogs
294 f58ec963 Christodoulos Psaltis
            mask: {
295 f58ec963 Christodoulos Psaltis
                    color: '#ebecff',
296 f58ec963 Christodoulos Psaltis
                    opacity: '0.9'
297 f58ec963 Christodoulos Psaltis
            },
298 f58ec963 Christodoulos Psaltis
        top: 'center',
299 f58ec963 Christodoulos Psaltis
        load: true
300 f58ec963 Christodoulos Psaltis
    });
301 f58ec963 Christodoulos Psaltis
    // yes or no?
302 f58ec963 Christodoulos Psaltis
    var buttons = $("#yes-no button").click(function(e) {
303 f58ec963 Christodoulos Psaltis
            // get user input
304 f58ec963 Christodoulos Psaltis
            var yes = buttons.index(this) === 0;
305 f58ec963 Christodoulos Psaltis
        //close the confirmation window
306 f58ec963 Christodoulos Psaltis
        $("a#confirmation").overlay().close(); 
307 f58ec963 Christodoulos Psaltis
        // return true=yes or false=no
308 f58ec963 Christodoulos Psaltis
        if (yes) {
309 f58ec963 Christodoulos Psaltis
            action_function(serverID);
310 b8bbd09f Christodoulos Psaltis
        } else {
311 b8bbd09f Christodoulos Psaltis
            // reload page
312 b8bbd09f Christodoulos Psaltis
            $("div.pane#machines-pane").load($("a#standard").attr("href"));
313 f58ec963 Christodoulos Psaltis
        }
314 f58ec963 Christodoulos Psaltis
    });
315 f58ec963 Christodoulos Psaltis
    return false;
316 962733ad Christodoulos Psaltis
}
317 962733ad Christodoulos Psaltis

318 bd528b3b Christodoulos Psaltis
// get and show a list of running and terminated machines
319 bd528b3b Christodoulos Psaltis
function update_vms() {
320 facad27f Christodoulos Psaltis

321 1c86af5b Christodoulos Psaltis
    $(".running").text('');
322 1c86af5b Christodoulos Psaltis
    $(".terminated").text('');
323 ec06b07c Dimitris Moraitis
    $("ul#standard-images").text('');
324 ec06b07c Dimitris Moraitis
    $("ul#custom-images").text('');
325 facad27f Christodoulos Psaltis

326 ec06b07c Dimitris Moraitis
    $.ajax({
327 ec06b07c Dimitris Moraitis
        url: '/api/v1.0/servers/detail',
328 ec06b07c Dimitris Moraitis
        type: "GET",
329 941b00d4 Markos Gogoulos
        timeout: TIMEOUT,
330 ec06b07c Dimitris Moraitis
        dataType: "json",
331 facad27f Christodoulos Psaltis
        error: function(jqXHR, textStatus, errorThrown) { 
332 facad27f Christodoulos Psaltis
                    ajax_error(jqXHR);
333 c18611c8 Markos Gogoulos
                    return false;
334 facad27f Christodoulos Psaltis
                    },
335 facad27f Christodoulos Psaltis
        success: function(data, textStatus, jqXHR) {
336 9ea8125a Christodoulos Psaltis
            if ($(".running a.name").length + $(".terminated a.name").length == 0) {
337 fb66080c Dimitris Moraitis
            
338 fb66080c Dimitris Moraitis
                $.each(data.servers, function(i,server){
339 9ea8125a Christodoulos Psaltis
                    // if the machine is deleted it should not be included in any list
340 9ea8125a Christodoulos Psaltis
                    if (server.status == 'DELETED') {
341 a9d8ed3a Christodoulos Psaltis
                        return;
342 9ea8125a Christodoulos Psaltis
                    }
343 fb66080c Dimitris Moraitis
                    var machine = $("#machine-template").clone().attr("id", server.id).fadeIn("slow");
344 fb66080c Dimitris Moraitis
                    machine.find("input[type='checkbox']").attr("id", "input-" + server.id);
345 fb66080c Dimitris Moraitis
                    machine.find("input[type='checkbox']").attr("class", server.status);
346 fb66080c Dimitris Moraitis
                    machine.find("a.name span.name").text(server.name);
347 fb66080c Dimitris Moraitis
                    machine.find("img.logo").attr("src","static/machines/"+image_tags[server.imageId]+'.png');
348 fb66080c Dimitris Moraitis
                    machine.find("img.list-logo").attr("src","static/os_logos/"+image_tags[server.imageId]+'.png');
349 fb66080c Dimitris Moraitis
                    machine.find("img.list-logo").attr("title",image_tags[server.imageId]);
350 fb66080c Dimitris Moraitis
                    machine.find("span.imagetag").text(image_tags[server.imageId]);
351 fb66080c Dimitris Moraitis
    
352 1cea389e Markos Gogoulos
                    machine.find("a.ip span.public").text(String(server.addresses.public.ip.addr).replace(',',' '));            
353 fb66080c Dimitris Moraitis
    
354 b9e0f667 Dimitris Moraitis
                    // TODO: handle SHARE_IP, SHARE_IP_NO_CONFIG, DELETE_IP, REBUILD, QUEUE_RESIZE, PREP_RESIZE, RESIZE, VERIFY_RESIZE, PASSWORD, RESCUE
355 b9e0f667 Dimitris Moraitis
                    if (server.status == 'BUILD'){
356 fb66080c Dimitris Moraitis
                        machine.find(".status").text('Building');
357 fb66080c Dimitris Moraitis
                        machine.appendTo(".running");
358 b9e0f667 Dimitris Moraitis
                    } else if (server.status == 'ACTIVE') {
359 fb66080c Dimitris Moraitis
                        machine.find(".status").text('Running');
360 b9e0f667 Dimitris Moraitis
                        machine.appendTo(".running"); 
361 b9e0f667 Dimitris Moraitis
                    } else if (server.status == 'REBOOT' || server.status == 'HARD_REBOOT') {
362 b9e0f667 Dimitris Moraitis
                        machine.find(".status").text('Rebooting');
363 fb66080c Dimitris Moraitis
                        machine.appendTo(".running");
364 9ea8125a Christodoulos Psaltis
                    } else if (server.status == 'STOPPED') {
365 9ea8125a Christodoulos Psaltis
                        machine.find(".status").text('Stopped');
366 9ea8125a Christodoulos Psaltis
                        machine.find("img.logo").attr("src","static/machines/"+image_tags[server.imageId]+'-off.png');
367 9ea8125a Christodoulos Psaltis
                        machine.find("img.list-logo").attr("src","static/os_logos/"+image_tags[server.imageId]+'-off.png');
368 9ea8125a Christodoulos Psaltis
                        machine.appendTo(".terminated");
369 9ea8125a Christodoulos Psaltis
                    } else if (server.status == 'ERROR') {
370 9ea8125a Christodoulos Psaltis
                        machine.find(".status").text('Error');
371 fb66080c Dimitris Moraitis
                        machine.find("img.logo").attr("src","static/machines/"+image_tags[server.imageId]+'-off.png');
372 fb66080c Dimitris Moraitis
                        machine.find("img.list-logo").attr("src","static/os_logos/"+image_tags[server.imageId]+'-off.png');
373 fb66080c Dimitris Moraitis
                        machine.appendTo(".terminated");
374 9ea8125a Christodoulos Psaltis
                    } 
375 9ea8125a Christodoulos Psaltis
                    else {
376 fb66080c Dimitris Moraitis
                        machine.find(".status").text('Unknown');
377 fb66080c Dimitris Moraitis
                        machine.find("img.logo").attr("src","static/machines/"+image_tags[server.imageId]+'-off.png');
378 fb66080c Dimitris Moraitis
                        machine.find("img.list-logo").attr("src","static/os_logos/"+image_tags[server.imageId]+'-off.png');
379 fb66080c Dimitris Moraitis
                        machine.appendTo(".terminated");
380 fb66080c Dimitris Moraitis
                    }
381 fb66080c Dimitris Moraitis
                });
382 fb66080c Dimitris Moraitis
            }
383 38e2c5ed Christodoulos Psaltis
            $("#spinner").hide();
384 3d6e97af Christodoulos Psaltis
            $("div.machine:last-child").find("div.seperator").hide();
385 3d6e97af Christodoulos Psaltis
            // if the terminated list is populated then the seperator must be shown
386 3d6e97af Christodoulos Psaltis
            if ($(".terminated a.name").length > 0) {
387 3d6e97af Christodoulos Psaltis
                $("#mini.seperator").fadeIn("slow");
388 3d6e97af Christodoulos Psaltis
            }
389 008b3ae8 Christodoulos Psaltis
            // creating the table in list view, if there are machines to show
390 008b3ae8 Christodoulos Psaltis
            if ($("div.list table.list-machines tbody").length > 0) {
391 008b3ae8 Christodoulos Psaltis
                $("div.list table.list-machines").dataTable({
392 a4531705 Christodoulos Psaltis
                    "bInfo": false,
393 a4531705 Christodoulos Psaltis
                    "bPaginate": false,
394 a4531705 Christodoulos Psaltis
                            "bAutoWidth": false,
395 bd96a56b Christodoulos Psaltis
                            "bSort": true,    
396 bd96a56b Christodoulos Psaltis
                    "bStateSave": true,
397 3a49d1da Christodoulos Psaltis
                    //"sScrollY": "250px",
398 3a49d1da Christodoulos Psaltis
                    //"sScrollX": "500px",
399 3a49d1da Christodoulos Psaltis
                    //"sScrollXInner": "480px",
400 bd96a56b Christodoulos Psaltis
                    "aoColumnDefs": [
401 bd96a56b Christodoulos Psaltis
                        { "bSortable": false, "aTargets": [ 0 ] }
402 008b3ae8 Christodoulos Psaltis
                    ]
403 a4531705 Christodoulos Psaltis
                });
404 008b3ae8 Christodoulos Psaltis
                $("div.list table.list-machines").show();
405 a4531705 Christodoulos Psaltis
                $("div.list div.actions").show();
406 9918dde8 Christodoulos Psaltis
            }
407 ec06b07c Dimitris Moraitis
        }
408 ec06b07c Dimitris Moraitis
    });
409 bd528b3b Christodoulos Psaltis
    return false;
410 bd528b3b Christodoulos Psaltis
}
411 ec06b07c Dimitris Moraitis

412 bd528b3b Christodoulos Psaltis
// get and show a list of anvailable standard and custom images
413 bd528b3b Christodoulos Psaltis
function update_images() { 
414 ec06b07c Dimitris Moraitis
    $.ajax({
415 ec06b07c Dimitris Moraitis
        url: '/api/v1.0/images/detail',
416 ec06b07c Dimitris Moraitis
        type: "GET",
417 14739cd6 Christodoulos Psaltis
        //async: false,
418 ec06b07c Dimitris Moraitis
        dataType: "json",
419 941b00d4 Markos Gogoulos
        timeout: TIMEOUT,
420 facad27f Christodoulos Psaltis
        error: function(jqXHR, textStatus, errorThrown) { 
421 facad27f Christodoulos Psaltis
                    ajax_error(jqXHR);
422 facad27f Christodoulos Psaltis
                    },
423 facad27f Christodoulos Psaltis
        success: function(data, textStatus, jqXHR) {
424 fac6fbbe Dimitris Moraitis
            if ($("ul#standard-images li").toArray().length + $("ul#custom-images li").toArray().length == 0) {
425 fac6fbbe Dimitris Moraitis
                $.each(data.images, function(i,image){
426 fac6fbbe Dimitris Moraitis
                    var img = $('#image-template').clone().attr("id","img-"+image.id).fadeIn("slow");
427 fac6fbbe Dimitris Moraitis
                    img.find("label").attr('for',"img-radio-" + image.id);
428 fac6fbbe Dimitris Moraitis
                    img.find(".image-title").text(image.name);
429 fac6fbbe Dimitris Moraitis
                    img.find(".description").text(image.description);
430 93a10af1 Markos Gogoulos
                    img.find(".size").text(image.size);
431 fac6fbbe Dimitris Moraitis
                    img.find("input.radio").attr('id',"img-radio-" + image.id);
432 fac6fbbe Dimitris Moraitis
                    if (i==0) img.find("input.radio").attr("checked","checked"); 
433 fac6fbbe Dimitris Moraitis
                    img.find("img.image-logo").attr('src','static/os_logos/'+image_tags[image.id]+'.png');
434 fac6fbbe Dimitris Moraitis
                    if (image.serverId) {
435 fac6fbbe Dimitris Moraitis
                        img.appendTo("ul#custom-images");
436 fac6fbbe Dimitris Moraitis
                    } else {
437 fac6fbbe Dimitris Moraitis
                        img.appendTo("ul#standard-images");
438 fac6fbbe Dimitris Moraitis
                    }
439 fac6fbbe Dimitris Moraitis
                });
440 fac6fbbe Dimitris Moraitis
            }
441 ec06b07c Dimitris Moraitis
        }
442 ec06b07c Dimitris Moraitis
    });
443 fac6fbbe Dimitris Moraitis
    return false;
444 c3b3043d Dimitris Moraitis
}
445 c3b3043d Dimitris Moraitis

446 71642965 Dimitris Moraitis
var flavors = {}, disks = [], cpus = [], ram = [];
447 71642965 Dimitris Moraitis

448 71642965 Dimitris Moraitis
Array.prototype.unique = function () {
449 71642965 Dimitris Moraitis
        var r = new Array();
450 71642965 Dimitris Moraitis
        o:for(var i = 0, n = this.length; i < n; i++)
451 71642965 Dimitris Moraitis
        {
452 71642965 Dimitris Moraitis
                for(var x = 0, y = r.length; x < y; x++)
453 71642965 Dimitris Moraitis
                {
454 71642965 Dimitris Moraitis
                        if(r[x]==this[i])
455 71642965 Dimitris Moraitis
                        {
456 71642965 Dimitris Moraitis
                                continue o;
457 71642965 Dimitris Moraitis
                        }
458 71642965 Dimitris Moraitis
                }
459 71642965 Dimitris Moraitis
                r[r.length] = this[i];
460 71642965 Dimitris Moraitis
        }
461 71642965 Dimitris Moraitis
        return r;
462 71642965 Dimitris Moraitis
}
463 285a1fa8 Dimitris Moraitis

464 3a49d1da Christodoulos Psaltis
// get and configure flavor selection
465 3a49d1da Christodoulos Psaltis
function update_flavors() { 
466 3a49d1da Christodoulos Psaltis
    $.ajax({
467 3a49d1da Christodoulos Psaltis
        url: '/api/v1.0/flavors/detail',
468 3a49d1da Christodoulos Psaltis
        type: "GET",
469 3a49d1da Christodoulos Psaltis
        //async: false,
470 3a49d1da Christodoulos Psaltis
        dataType: "json",
471 3a49d1da Christodoulos Psaltis
        timeout: TIMEOUT,
472 3a49d1da Christodoulos Psaltis
        error: function(jqXHR, textStatus, errorThrown) { 
473 71642965 Dimitris Moraitis
            ajax_error(jqXHR);
474 71642965 Dimitris Moraitis
        },
475 3a49d1da Christodoulos Psaltis
        success: function(data, textStatus, jqXHR) {
476 71642965 Dimitris Moraitis
            flavors = data.flavors;
477 71642965 Dimitris Moraitis
            $.each(flavors, function(i, flavor) {
478 71642965 Dimitris Moraitis
                cpus[i] = flavor['cpu'];
479 71642965 Dimitris Moraitis
                disks[i] = flavor['disk'];
480 71642965 Dimitris Moraitis
                ram[i] = flavor['ram'];
481 71642965 Dimitris Moraitis
            });
482 71642965 Dimitris Moraitis
            cpus = cpus.unique();
483 71642965 Dimitris Moraitis
            disks = disks.unique();
484 71642965 Dimitris Moraitis
            ram = ram.unique();
485 71642965 Dimitris Moraitis
            // sliders for selecting VM flavor
486 71642965 Dimitris Moraitis
            $("#cpu:range").rangeinput({min:0,
487 71642965 Dimitris Moraitis
                                       value:0,
488 71642965 Dimitris Moraitis
                                       step:1,
489 3a150bbe Dimitris Moraitis
                                       progress: true,
490 71642965 Dimitris Moraitis
                                       max:cpus.length-1});
491 71642965 Dimitris Moraitis
            
492 71642965 Dimitris Moraitis
            $("#storage:range").rangeinput({min:0,
493 71642965 Dimitris Moraitis
                                       value:0,
494 71642965 Dimitris Moraitis
                                       step:1,
495 3a150bbe Dimitris Moraitis
                                       progress: true,
496 71642965 Dimitris Moraitis
                                       max:disks.length-1});
497 71642965 Dimitris Moraitis

498 71642965 Dimitris Moraitis
            $("#ram:range").rangeinput({min:0,
499 71642965 Dimitris Moraitis
                                       value:0,
500 71642965 Dimitris Moraitis
                                       step:1,
501 3a150bbe Dimitris Moraitis
                                       progress: true,
502 71642965 Dimitris Moraitis
                                       max:ram.length-1});
503 68a49035 Dimitris Moraitis
            $("#small").click();
504 68a49035 Dimitris Moraitis

505 3a49d1da Christodoulos Psaltis
        }
506 3a49d1da Christodoulos Psaltis
    });
507 3a49d1da Christodoulos Psaltis
    return false;
508 3a49d1da Christodoulos Psaltis
}
509 71642965 Dimitris Moraitis
// return flavorId from cpu, disk, ram values
510 71642965 Dimitris Moraitis
function identify_flavor(cpu, disk, ram){
511 71642965 Dimitris Moraitis
    for (i=0;i<flavors.length;i++){
512 71642965 Dimitris Moraitis
        if (flavors[i]['cpu'] == cpu && flavors[i]['disk']==disk && flavors[i]['ram']==ram) {
513 71642965 Dimitris Moraitis
            return flavors[i]['id']
514 71642965 Dimitris Moraitis
        }
515 71642965 Dimitris Moraitis
    }
516 71642965 Dimitris Moraitis
    return 0;
517 71642965 Dimitris Moraitis
}
518 285a1fa8 Dimitris Moraitis

519 fb66080c Dimitris Moraitis
// switch to list view
520 fb66080c Dimitris Moraitis
$("#list").click(function(){
521 fac6fbbe Dimitris Moraitis
    $.cookie("list", '1'); // set list cookie
522 fb66080c Dimitris Moraitis
    $("div.standard#machinesview").load($("#list").attr("href"));
523 fb66080c Dimitris Moraitis
    $("a#standard")[0].className += ' activelink'
524 fb66080c Dimitris Moraitis
    this.style.color = '#5f8dd3';
525 bd528b3b Christodoulos Psaltis
    update_vms();
526 fb66080c Dimitris Moraitis
    return false;
527 fb66080c Dimitris Moraitis
});
528 fb66080c Dimitris Moraitis

529 fb66080c Dimitris Moraitis
// switch to standard view
530 fb66080c Dimitris Moraitis
$("a#standard").click(function(){
531 fb66080c Dimitris Moraitis
    $.cookie("list", '0');
532 fb66080c Dimitris Moraitis
    href=$("a#standard").attr("href");
533 fb66080c Dimitris Moraitis
    $("div.pane#machines-pane").load(href);
534 fb66080c Dimitris Moraitis
    return false;
535 fb66080c Dimitris Moraitis
});
536 fb66080c Dimitris Moraitis

537 fac6fbbe Dimitris Moraitis
// redirect to list view if the list cookie is set
538 fb66080c Dimitris Moraitis
if ($.cookie("list") == '1') {
539 fb66080c Dimitris Moraitis
    $("#list").click();
540 fb66080c Dimitris Moraitis
} else {
541 fac6fbbe Dimitris Moraitis
    // execute the update function to populate the list
542 bd528b3b Christodoulos Psaltis
    update_vms();
543 fb66080c Dimitris Moraitis
}
544 38e2c5ed Christodoulos Psaltis

545 bd8b1d60 Christodoulos Psaltis
// launch VM creation wizard
546 8fd5c3a5 Christodoulos Psaltis
$("a#create").click(function(){
547 bd528b3b Christodoulos Psaltis
    // populate image list
548 bd528b3b Christodoulos Psaltis
    update_images();
549 3a49d1da Christodoulos Psaltis
    // configure flavors
550 3a49d1da Christodoulos Psaltis
    update_flavors(); 
551 bd528b3b Christodoulos Psaltis
    // launch the wizard
552 bd8b1d60 Christodoulos Psaltis
    $("#wizard").scrollable().begin();
553 ec06b07c Dimitris Moraitis
});
554 ec06b07c Dimitris Moraitis

555 f124656b Christodoulos Psaltis
// create wizard overlay
556 f124656b Christodoulos Psaltis
$(function() { 
557 4e5d5e70 Christodoulos Psaltis
    $("a#create").overlay({
558 f124656b Christodoulos Psaltis
        mask: '#000', 
559 f124656b Christodoulos Psaltis
        effect: 'default', 
560 f124656b Christodoulos Psaltis
        top: '5%', 
561 f124656b Christodoulos Psaltis
        oneInstance: false,
562 f124656b Christodoulos Psaltis
        closeOnClick: false
563 f124656b Christodoulos Psaltis
    });
564 f124656b Christodoulos Psaltis
});
565 f124656b Christodoulos Psaltis

566 bd8b1d60 Christodoulos Psaltis
// wizard
567 bd8b1d60 Christodoulos Psaltis
$(function() {
568 bd8b1d60 Christodoulos Psaltis
    var root = $("#wizard").scrollable();
569 cc7c5902 Dimitris Moraitis

570 bd8b1d60 Christodoulos Psaltis
    // some variables that we need
571 bd8b1d60 Christodoulos Psaltis
    var api = root.scrollable();
572 cc7c5902 Dimitris Moraitis

573 bd8b1d60 Christodoulos Psaltis
    // rangeinput with default configuration
574 bd8b1d60 Christodoulos Psaltis
    // validation logic is done inside the onBeforeSeek callback
575 bd8b1d60 Christodoulos Psaltis
    api.onBeforeSeek(function(event, i) {
576 bd8b1d60 Christodoulos Psaltis
            // we are going 1 step backwards so no need for validation
577 bd8b1d60 Christodoulos Psaltis
            if (api.getIndex() < i) {
578 bd8b1d60 Christodoulos Psaltis
             // 1. get current page
579 bd8b1d60 Christodoulos Psaltis
                     var page = root.find(".page").eq(api.getIndex()),
580 bd8b1d60 Christodoulos Psaltis
                         // 2. .. and all required fields inside the page
581 bd8b1d60 Christodoulos Psaltis
                         inputs = page.find(".required :input").removeClass("error"),
582 bd8b1d60 Christodoulos Psaltis
                         // 3. .. which are empty
583 bd8b1d60 Christodoulos Psaltis
                         empty = inputs.filter(function() {
584 bd8b1d60 Christodoulos Psaltis
                                return $(this).val().replace(/\s*/g, '') == '';
585 bd8b1d60 Christodoulos Psaltis
                         });
586 bd8b1d60 Christodoulos Psaltis
                     // if there are empty fields, then
587 bd8b1d60 Christodoulos Psaltis
                    if (empty.length) {
588 bd8b1d60 Christodoulos Psaltis
                            // add a CSS class name "error" for empty & required fields
589 bd8b1d60 Christodoulos Psaltis
                            empty.addClass("error");
590 bd8b1d60 Christodoulos Psaltis
                            // cancel seeking of the scrollable by returning false
591 bd8b1d60 Christodoulos Psaltis
                            return false;
592 bd8b1d60 Christodoulos Psaltis
                    // everything is good
593 bd8b1d60 Christodoulos Psaltis
                    } 
594 bd8b1d60 Christodoulos Psaltis
            }
595 bd8b1d60 Christodoulos Psaltis
            // update status bar
596 bd8b1d60 Christodoulos Psaltis
            $("#status li").removeClass("active").eq(i).addClass("active");
597 71642965 Dimitris Moraitis
        
598 71642965 Dimitris Moraitis
        // update confirm step
599 71642965 Dimitris Moraitis
        var image = $("input[type=radio][name=image-id]:checked");
600 71642965 Dimitris Moraitis
        var imageId = image.length ? image[0].id : false
601 71642965 Dimitris Moraitis
        if (imageId) {
602 71642965 Dimitris Moraitis
            var imageName = $("label[for=" + imageId + "] .image-title").text();
603 71642965 Dimitris Moraitis
            $("#machine_image-label")[0].textContent = imageName;
604 71642965 Dimitris Moraitis
            $("input[type=text][name=machine_name]")[0].value = "My " + imageName + " server";
605 71642965 Dimitris Moraitis
        }
606 71642965 Dimitris Moraitis
        $("#machine_cpu-label")[0].textContent = $("#cpu-indicator")[0].value;
607 71642965 Dimitris Moraitis
        $("#machine_ram-label")[0].textContent = $("#ram-indicator")[0].value;
608 71642965 Dimitris Moraitis
        $("#machine_storage-label")[0].textContent = $("#storage-indicator")[0].value;
609 71642965 Dimitris Moraitis
        
610 bd8b1d60 Christodoulos Psaltis
    });
611 bd8b1d60 Christodoulos Psaltis

612 bd8b1d60 Christodoulos Psaltis
    // if tab is pressed on the next button seek to next page
613 bd8b1d60 Christodoulos Psaltis
    root.find("button.next").keydown(function(e) {
614 bd8b1d60 Christodoulos Psaltis
            if (e.keyCode == 9) {
615 bd8b1d60 Christodoulos Psaltis
                    // seeks to next tab by executing our validation routine
616 bd8b1d60 Christodoulos Psaltis
                    api.next();
617 bd8b1d60 Christodoulos Psaltis
                    e.preventDefault();
618 bd8b1d60 Christodoulos Psaltis
            }
619 bd8b1d60 Christodoulos Psaltis
    });
620 bd8b1d60 Christodoulos Psaltis

621 71642965 Dimitris Moraitis
});
622 cc7c5902 Dimitris Moraitis

623 bd8b1d60 Christodoulos Psaltis
// disable sliders in flavor selection
624 cc7c5902 Dimitris Moraitis
function disableSliders() {
625 cc7c5902 Dimitris Moraitis
    $("#cpu").attr('disabled',true);
626 cc7c5902 Dimitris Moraitis
    $("#ram").attr('disabled',true);
627 cc7c5902 Dimitris Moraitis
    $("#storage").attr('disabled',true);
628 cc7c5902 Dimitris Moraitis
}
629 cc7c5902 Dimitris Moraitis

630 bd8b1d60 Christodoulos Psaltis
// selecting the small size
631 8fd5c3a5 Christodoulos Psaltis
$("#small").click(function(){
632 71642965 Dimitris Moraitis
    $("#cpu").data('rangeinput').setValue(0);
633 71642965 Dimitris Moraitis
    $("#ram").data('rangeinput').setValue(0);
634 71642965 Dimitris Moraitis
    $("#storage").data('rangeinput').setValue(0);
635 68a49035 Dimitris Moraitis
    $("#cpu-indicator")[0].value = cpus[0];
636 68a49035 Dimitris Moraitis
    $("#ram-indicator")[0].value = ram[0];
637 68a49035 Dimitris Moraitis
    $("#storage-indicator")[0].value = disks[0];
638 cc7c5902 Dimitris Moraitis
});
639 cc7c5902 Dimitris Moraitis

640 bd8b1d60 Christodoulos Psaltis
// selecting the medium size
641 8fd5c3a5 Christodoulos Psaltis
$("#medium").click(function(){
642 71642965 Dimitris Moraitis
    $("#cpu").data('rangeinput').setValue(1);
643 71642965 Dimitris Moraitis
    $("#ram").data('rangeinput').setValue(1);
644 71642965 Dimitris Moraitis
    $("#storage").data('rangeinput').setValue(1);
645 68a49035 Dimitris Moraitis
    $("#cpu-indicator")[0].value = cpus[1];
646 68a49035 Dimitris Moraitis
    $("#ram-indicator")[0].value = ram[1];
647 68a49035 Dimitris Moraitis
    $("#storage-indicator")[0].value = disks[1];    
648 cc7c5902 Dimitris Moraitis
});
649 cc7c5902 Dimitris Moraitis

650 bd8b1d60 Christodoulos Psaltis
// selecting the large size
651 8fd5c3a5 Christodoulos Psaltis
$("#large").click(function(){
652 71642965 Dimitris Moraitis
    $("#cpu").data('rangeinput').setValue(2);
653 71642965 Dimitris Moraitis
    $("#ram").data('rangeinput').setValue(2);
654 71642965 Dimitris Moraitis
    $("#storage").data('rangeinput').setValue(2);
655 68a49035 Dimitris Moraitis
    $("#cpu-indicator")[0].value = cpus[2];
656 68a49035 Dimitris Moraitis
    $("#ram-indicator")[0].value = ram[2];
657 68a49035 Dimitris Moraitis
    $("#storage-indicator")[0].value = disks[2];    
658 cc7c5902 Dimitris Moraitis
});
659 cc7c5902 Dimitris Moraitis

660 bd8b1d60 Christodoulos Psaltis
// selecting the custom flavor enables the sliders
661 8fd5c3a5 Christodoulos Psaltis
$("#custom").click(function(){
662 bd8b1d60 Christodoulos Psaltis
    $("#cpu").attr('disabled',false);
663 bd8b1d60 Christodoulos Psaltis
    $("#ram").attr('disabled',false);
664 bd8b1d60 Christodoulos Psaltis
    $("#storage").attr('disabled',false);
665 bd8b1d60 Christodoulos Psaltis
    $("strong.sliders").style = 'color: #778899;';
666 bd8b1d60 Christodoulos Psaltis
});
667 bd8b1d60 Christodoulos Psaltis

668 bd8b1d60 Christodoulos Psaltis
// get cpu value for custom flavor
669 71642965 Dimitris Moraitis
$("#cpu:range").change(function(event, value){
670 68a49035 Dimitris Moraitis
    $("#custom").click();
671 68a49035 Dimitris Moraitis
    // update cpu indicator
672 71642965 Dimitris Moraitis
    $("#cpu-indicator")[0].value = cpus[Number(value)];
673 71642965 Dimitris Moraitis
});
674 71642965 Dimitris Moraitis

675 bd8b1d60 Christodoulos Psaltis
// get ram value for custom flavor
676 68a49035 Dimitris Moraitis
$("#ram:range").change(function(event, value){
677 bd8b1d60 Christodoulos Psaltis
    $("#custom").click();
678 68a49035 Dimitris Moraitis
    // update ram indicator
679 68a49035 Dimitris Moraitis
    $("#ram-indicator")[0].value = ram[Number(value)];
680 bd8b1d60 Christodoulos Psaltis
});
681 bd8b1d60 Christodoulos Psaltis

682 bd8b1d60 Christodoulos Psaltis
// get storage value for custom flavor
683 71642965 Dimitris Moraitis
$("#storage:range").change(function(event, value){
684 68a49035 Dimitris Moraitis
    $("#custom").click();
685 68a49035 Dimitris Moraitis
    // update disk indicator
686 71642965 Dimitris Moraitis
    $("#storage-indicator")[0].value = disks[Number(value)];
687 71642965 Dimitris Moraitis
    return false;
688 71642965 Dimitris Moraitis
});
689 71642965 Dimitris Moraitis

690 bd8b1d60 Christodoulos Psaltis
// exit the wizard
691 8fd5c3a5 Christodoulos Psaltis
$("#cancel").click(function(){
692 b6270d15 Christodoulos Psaltis
    $("a#create").overlay().close();
693 cc7c5902 Dimitris Moraitis
});
694 cc7c5902 Dimitris Moraitis

695 bd8b1d60 Christodoulos Psaltis
// starting a new VM through the wizard
696 8fd5c3a5 Christodoulos Psaltis
$("#start").click(function(){
697 285a1fa8 Dimitris Moraitis
    //TODO: get the real data
698 71642965 Dimitris Moraitis
    var flavorId = identify_flavor($("#cpu-indicator")[0].value, $("#storage-indicator")[0].value, $("#ram-indicator")[0].value);
699 285a1fa8 Dimitris Moraitis
    var payload = {
700 52bc1c74 Markos Gogoulos
        "server": {
701 52bc1c74 Markos Gogoulos
            "name": "image-name",
702 52bc1c74 Markos Gogoulos
            "imageId": 1,
703 71642965 Dimitris Moraitis
            "flavorId" : flavorId,
704 52bc1c74 Markos Gogoulos
            "metadata" : {
705 71642965 Dimitris Moraitis
                "My Server Name" : $("input[name=machine_name]")[0].value
706 52bc1c74 Markos Gogoulos
            },
707 52bc1c74 Markos Gogoulos
        }
708 285a1fa8 Dimitris Moraitis
    };
709 71642965 Dimitris Moraitis

710 5c908a0f Christodoulos Psaltis
    $.ajax({
711 285a1fa8 Dimitris Moraitis
    url: "/api/v1.0/servers",
712 5c908a0f Christodoulos Psaltis
    type: "POST",
713 285a1fa8 Dimitris Moraitis
    dataType: "json",    
714 285a1fa8 Dimitris Moraitis
    data: JSON.stringify(payload),
715 debeeec9 Markos Gogoulos
    timeout: TIMEOUT,
716 facad27f Christodoulos Psaltis
    error: function(jqXHR, textStatus, errorThrown) { 
717 facad27f Christodoulos Psaltis
                ajax_error(jqXHR);
718 b6270d15 Christodoulos Psaltis
           },
719 facad27f Christodoulos Psaltis
    success: function(data, textStatus, jqXHR) {
720 f58ec963 Christodoulos Psaltis
                if ( jqXHR.status == '202') {
721 debeeec9 Markos Gogoulos
                    ajax_success(jqXHR);                   
722 f58ec963 Christodoulos Psaltis
                } else {
723 f58ec963 Christodoulos Psaltis
                    ajax_error(jqXHR);
724 285a1fa8 Dimitris Moraitis
                }
725 285a1fa8 Dimitris Moraitis
            }
726 cc7c5902 Dimitris Moraitis
    });
727 217b2431 Dimitris Moraitis
    console.warn('creating ' + $("input[name=machine_name]")[0].value)
728 285a1fa8 Dimitris Moraitis

729 ec06b07c Dimitris Moraitis
    $("#wizard").hide();
730 cc7c5902 Dimitris Moraitis
});
731 cc7c5902 Dimitris Moraitis

732 1e03328c Christodoulos Psaltis
// reboot action
733 facad27f Christodoulos Psaltis
function reboot(serverID){
734 b6270d15 Christodoulos Psaltis
    // ajax post reboot call
735 52bc1c74 Markos Gogoulos
    var payload = {
736 52bc1c74 Markos Gogoulos
        "reboot": {"type" : "HARD"}
737 52bc1c74 Markos Gogoulos
    };   
738 52bc1c74 Markos Gogoulos

739 facad27f Christodoulos Psaltis
    $.ajax({
740 facad27f Christodoulos Psaltis
        url: '/api/v1.0/servers/' + serverID + '/action',
741 52bc1c74 Markos Gogoulos
        type: "POST",        
742 facad27f Christodoulos Psaltis
        dataType: "json",
743 52bc1c74 Markos Gogoulos
        data: JSON.stringify(payload),
744 facad27f Christodoulos Psaltis
        timeout: TIMEOUT,
745 facad27f Christodoulos Psaltis
        error: function(jqXHR, textStatus, errorThrown) { 
746 facad27f Christodoulos Psaltis
                    ajax_error(jqXHR);
747 facad27f Christodoulos Psaltis
                    },
748 facad27f Christodoulos Psaltis
        success: function(data, textStatus, jqXHR) {
749 facad27f Christodoulos Psaltis
                    if ( jqXHR.status == '202') {
750 ba4c763b Christodoulos Psaltis
                        ajax_success(jqXHR);
751 facad27f Christodoulos Psaltis
                    } else {
752 facad27f Christodoulos Psaltis
                        ajax_error(jqXHR);
753 facad27f Christodoulos Psaltis
                    }}
754 facad27f Christodoulos Psaltis
    });
755 217b2431 Dimitris Moraitis
    console.warn('rebooting ' + serverID);    
756 fac6fbbe Dimitris Moraitis
    return false;
757 fac6fbbe Dimitris Moraitis
}
758 8400e1a5 Markos Gogoulos

759 1e03328c Christodoulos Psaltis
// shutdown action
760 facad27f Christodoulos Psaltis
function shutdown(serverID) {
761 b6270d15 Christodoulos Psaltis
    // ajax post shutdown call
762 52bc1c74 Markos Gogoulos
    var payload = {
763 52bc1c74 Markos Gogoulos
        "shutdown": {"timeout" : "5"}
764 52bc1c74 Markos Gogoulos
    };   
765 52bc1c74 Markos Gogoulos

766 facad27f Christodoulos Psaltis
    $.ajax({
767 facad27f Christodoulos Psaltis
            url: '/api/v1.0/servers/' + serverID + '/action',
768 facad27f Christodoulos Psaltis
            type: "POST",
769 facad27f Christodoulos Psaltis
            dataType: "json",
770 52bc1c74 Markos Gogoulos
        data: JSON.stringify(payload),
771 facad27f Christodoulos Psaltis
        timeout: TIMEOUT,
772 facad27f Christodoulos Psaltis
        error: function(jqXHR, textStatus, errorThrown) { 
773 facad27f Christodoulos Psaltis
                    ajax_error(jqXHR);
774 facad27f Christodoulos Psaltis
                    },
775 facad27f Christodoulos Psaltis
        success: function(data, textStatus, jqXHR) {
776 facad27f Christodoulos Psaltis
                    if ( jqXHR.status == '202') {
777 ba4c763b Christodoulos Psaltis
                        ajax_success(jqXHR);
778 facad27f Christodoulos Psaltis
                    } else {
779 facad27f Christodoulos Psaltis
                        ajax_error(jqXHR);
780 facad27f Christodoulos Psaltis
                    }}             
781 facad27f Christodoulos Psaltis
    });
782 217b2431 Dimitris Moraitis
    console.warn('shutting down ' + serverID);        
783 fac6fbbe Dimitris Moraitis
    return false;    
784 fac6fbbe Dimitris Moraitis
}
785 fac6fbbe Dimitris Moraitis

786 e98852ba Markos Gogoulos

787 9eef701d Markos Gogoulos
// start action
788 e98852ba Markos Gogoulos
function start(serverID){
789 e98852ba Markos Gogoulos
    // ajax post start call
790 52bc1c74 Markos Gogoulos
    var payload = {
791 52bc1c74 Markos Gogoulos
        "start": {"type" : "NORMAL"}
792 52bc1c74 Markos Gogoulos
    };   
793 52bc1c74 Markos Gogoulos

794 e98852ba Markos Gogoulos
    $.ajax({
795 e98852ba Markos Gogoulos
        url: '/api/v1.0/servers/' + serverID + '/action',
796 e98852ba Markos Gogoulos
        type: "POST",
797 e98852ba Markos Gogoulos
        dataType: "json",
798 52bc1c74 Markos Gogoulos
        data: JSON.stringify(payload),
799 e98852ba Markos Gogoulos
        timeout: TIMEOUT,
800 e98852ba Markos Gogoulos
        error: function(jqXHR, textStatus, errorThrown) { 
801 e98852ba Markos Gogoulos
                    ajax_error(jqXHR);
802 e98852ba Markos Gogoulos
                    },
803 e98852ba Markos Gogoulos
        success: function(data, textStatus, jqXHR) {
804 e98852ba Markos Gogoulos
                    if ( jqXHR.status == '202') {
805 e98852ba Markos Gogoulos
                        ajax_success(jqXHR);
806 e98852ba Markos Gogoulos
                    } else {
807 e98852ba Markos Gogoulos
                        ajax_error(jqXHR);
808 e98852ba Markos Gogoulos
                    }}
809 e98852ba Markos Gogoulos
    });
810 217b2431 Dimitris Moraitis
    console.warn('starting ' + serverID);        
811 e98852ba Markos Gogoulos
    return false;
812 e98852ba Markos Gogoulos
}
813 e98852ba Markos Gogoulos

814 e98852ba Markos Gogoulos

815 bd528b3b Christodoulos Psaltis
// basic functions executed on page load
816 bd528b3b Christodoulos Psaltis

817 bd528b3b Christodoulos Psaltis
// create tabs for main menu
818 bd528b3b Christodoulos Psaltis
$("ul.tabs").tabs("div.panes ul");
819 bd528b3b Christodoulos Psaltis

820 b6270d15 Christodoulos Psaltis
// intercept reboot click 
821 facad27f Christodoulos Psaltis
$("div.actions a.action-reboot").live('click', function(){ 
822 facad27f Christodoulos Psaltis
    var serverID = $(this).parent().parent().attr("id");
823 facad27f Christodoulos Psaltis
    var serverName = $(this).parent().prevAll("a.name").find("span.name").text();
824 facad27f Christodoulos Psaltis
    confirm_action('reboot', reboot, serverID, serverName);
825 facad27f Christodoulos Psaltis
    return false;
826 facad27f Christodoulos Psaltis
});
827 facad27f Christodoulos Psaltis

828 b6270d15 Christodoulos Psaltis
// intercept shutdown click
829 facad27f Christodoulos Psaltis
$("div.actions a.action-shutdown").live('click', function(){ 
830 facad27f Christodoulos Psaltis
    var serverID = $(this).parent().parent().attr("id");
831 facad27f Christodoulos Psaltis
    var serverName = $(this).parent().prevAll("a.name").find("span.name").text();
832 f58ec963 Christodoulos Psaltis
    confirm_action('shutdown', shutdown, serverID, serverName);
833 facad27f Christodoulos Psaltis
    return false;
834 facad27f Christodoulos Psaltis
});
835 e98852ba Markos Gogoulos
// intercept start click
836 e98852ba Markos Gogoulos
$("div.actions a.action-start").live('click', function(){ 
837 e98852ba Markos Gogoulos
    var serverID = $(this).parent().parent().attr("id");
838 e98852ba Markos Gogoulos
    var serverName = $(this).parent().prevAll("a.name").find("span.name").text();
839 e98852ba Markos Gogoulos
    confirm_action('start', start, serverID, serverName);
840 e98852ba Markos Gogoulos
    return false;
841 e98852ba Markos Gogoulos
});
842 8400e1a5 Markos Gogoulos
</script>