/[projects]/misc/xenconsole/index.php
ViewVC logotype

Contents of /misc/xenconsole/index.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1884 - (show annotations) (download)
Fri Nov 30 15:54:54 2012 UTC (11 years, 5 months ago) by torben
File size: 7372 byte(s)
use ajax to refresh vm states
1 <?php
2 include("config.php");
3
4 function format_memory($size) {
5 if (1024 > $size) {
6 return "$size B";
7 } else if (pow(1024,2) > $size) {
8 return round(($size / 1024),2) . " kB";
9 } else {
10 return round(($size / pow(1024,2)), 2) . " MB";
11 }
12 }
13
14 function format_storage($size) {
15 if (1024 > $size) {
16 return "$size B";
17 } else if (pow(1024,2) > $size) {
18 return round(($size / 1024),2) . " kB";
19 } else if (pow(1024,3) > $size) {
20 return round(($size / pow(1024,2)), 2) . " MB";
21 } else if (pow(1024,4) > $size) {
22 return round(($size / pow(1024,3)), 2). " GB";
23 }
24 }
25
26 include('xenapi.php');
27
28 /* Establish session with Xenserver */
29 $xenserver = new XenApi($url, $login, $password);
30
31 $vms_array = $xenserver->VM__get_all_records();
32
33
34 ?>
35 <html>
36 <head>
37 <title>XenServer::SERVER</title>
38 <script type='text/javascript' src="jquery-1.8.2.min.js"></script>
39
40 <script type='text/javascript'>
41 $(document).ready( function() {
42 setInterval(refreshData, 60000);
43 refreshData();
44 });
45
46 function refreshData() {
47 $.get('ajaxdata.php', function(xml) {
48 $(xml).find('vm').each(function() {
49 var name = $(this).find('name').text();
50 var state = $(this).find('state').text();
51
52 name = name.replace(" ", "_");
53 name = name.replace(".", "_");
54
55 var id = "#state_" + name;
56 var css = $(id).css("background");
57
58 if (state == "Running") {
59 $(id).css("background-image", "url('gfx/vps_topgreen.png')");
60 } else {
61 $(id).css("background-image", "url('gfx/vps_topred.png')");
62 }
63
64 })
65 });
66 }
67
68 function doAction(action, uuid) {
69 var key = prompt("Key");
70 if (key == "" || key == null) {
71 return;
72 }
73 document.body.style.cursor = 'wait';
74
75 var url = "action.php?action=" + action + "&uuid=" + uuid + "&key=" + key;
76 var response = $.get(url, function(data) {
77 alert(data);
78 document.body.style.cursor = 'default'
79
80 refreshData();
81 });
82 }
83
84 function console(url, session) {
85 if (url == '')
86 return;
87
88 var key = prompt("Key");
89 if (key == "" || key == null) {
90 return;
91 }
92 var url = "console.php?url=" + url + "&session=" + session + "&key=" + key;
93
94 //window.location = url;
95 //$('#mainwindow').load(url);
96 window.open(url);
97 }
98
99
100
101 </script>
102
103 <style>
104 body {
105 background: #eee;
106 margin-top: 5px;
107 font-family:verdana,helvetica,arial,sans-serif;
108 font-size: 14px;
109
110 }
111
112 .maintable {
113 background: #fff;
114 margin-left:auto; // Smart center
115 margin-right:auto;
116 padding: 0;
117 border: 3px solid #999;
118 }
119
120 .small {
121 font-family:verdana,helvetica,arial,sans-serif;
122 font-size: 11px;
123 }
124
125 .toptable {
126 border-bottom: 3px solid #999;
127 }
128
129 .vps {
130 margin: 4;
131 border: 1px solid #222;
132 }
133 </style>
134 </head>
135 <body>
136
137 <table class='maintable' width='800' align='center' cellpadding='0' cellspacing='0'><tr><td>
138
139 <table width='100%' background='gfx/topbg.png' cellpadding='3' cellspacing='0' border='0' class='toptable'>
140 <tr>
141 <td rowspan='2' width='160'><img src='gfx/citrix-logo.png'></td>
142 <td colspan='3' class='small' align='right'>Linux:2.6.32.12-0.7.1.xs6.0.2.542.170665xen / xen: 4.1.2 / xapi: 1.3</td>
143 </tr>
144 <tr>
145 <td width='150' align='right' class='small'><img src='gfx/icon-cpu.png'>
146 <img id='server_cpu_usage' src='usagebar.php?usage=12' width='102' height='16'><div id='server_cpu_usage_txt'>12%</div></td>
147 <!--
148 <td width='150' align='right' class='small'><img src='gfx/icon-memory.png'>
149 <img id='server_memory_usage' src='usagebar.php?usage=81' width='102' height='16'><div id='server_memory_usage_txt'>4096/7912 MB</div></td>
150 -->
151 <td width='150' align='right' class='small'><img src='gfx/icon-network.png'>
152 <img id='server_net_usage' src='usagebar.php?usage=41' width='102' height='16'><div id='server_net_usage_txt'>1%</div></td>
153 <td width='150' align='right' class='small'><img src='gfx/icon-disk.png'>
154 <img id='server_disk_usage' src='usagebar.php?usage=41' width='102' height='16'><div id='server_memory_usage_txt'>89.3/405.5 GB</div></td>
155
156 </td>
157 </tr></table>
158
159
160
161 <?php
162 // List all machines
163 foreach($vms_array as $vm) {
164 if ($vm["is_a_template"] != 0 || $vm["is_control_domain"] != 0) {
165 continue;
166 }
167
168 $name = $vm["name_label"];
169 $uuid = $vm["uuid"];
170 $state = $vm["power_state"] ;
171 $memory = $vm['memory_target'];
172 $harddrive_size = 0;
173 $cpu_count = $vm["VCPUs_max"];
174
175 $clean_name = str_replace(" ", "_", $name);
176 $clean_name = str_replace(".", "_", $clean_name);
177
178
179 foreach ($vm["VBDs"] as $vbds) {
180 $vbd = $xenserver->VBD__get_record($vbds);
181 if ($vbd["type"] == 'Disk') {
182 $vdi = $xenserver->VDI__get_record( $vbd["VDI"] );
183 $harddrive_size += $vdi["virtual_size"];
184 }
185 }
186
187 $vps_topbg = 'vps_topyellow.png';
188
189 if ($state == "Running") {
190 $vps_topbg = 'vps_topgreen.png';
191 } else if ($state == "Halted") {
192 $vps_topbg = 'vps_topred.png';
193 }
194
195 $network = "";
196 if ( $vm["power_state"] == "Running" && $vm["guest_metrics"] != "OpaqueRef:NULL" ) {
197 $guest_metrics = $xenserver->VM_guest_metrics__get_record( $vm["guest_metrics"] );
198 $network = "(IP: " . implode( ",", $guest_metrics["networks"]) . ")";
199 } else {
200 $guest_metrics = Array() ;
201 }
202
203
204 $url = "";
205 $session = "";
206 foreach($vm["consoles"] as $conref) {
207 $con = $xenserver->console__get_record( $conref );
208 //var_dump($con);
209
210 if ($con["protocol"] == "rfb") {
211 $url = urlencode( $con["location"] );
212 $session = $xenserver->get_id();
213 }
214 }
215
216
217
218
219 // echo "<a href='#' onclick=\"loadvm('$uuid');\">$name</a><br>\n";
220 ?>
221 <!-- MACHINE -->
222 <table width='99%' cellpadding='3' cellspacing='0' border='0' class='vps' id='<?php echo $name;?>'>
223 <tr background='gfx/vps_topbg.png'>
224 <td width='10' background='gfx/<?php echo $vps_topbg; ?>' class='small' id='state_<?php echo $clean_name;?>'>&nbsp;</td>
225 <td colspan='2' class='small'><b><?php echo $name; ?></b></td>
226 <td colspan='2' class='small' align='right'>
227 <?php echo $network;?>
228 <?php
229 if ($url != "") {
230 echo "<a href='#' onclick=\"console('$url','$session')\"><img src='gfx/icon-terminal.png' style='vertical-align: middle;'></a>";
231 }
232 ?>
233 </td>
234 </tr>
235
236 <tr bgcolor='#eee'>
237 <td></td>
238
239 <td width='150' class='small'>
240 <?php
241 if ($state == "Running") {
242 echo "start | ";
243 echo "<a href='#' onclick=\"doAction('shutdown','$uuid')\">stop</a> | ";
244 echo "<a href='#' onclick=\"doAction('hardshutdown','$uuid')\">force shutdown</a>";
245 } else {
246 echo "<a href='#' onclick=\"doAction('start','$uuid')\">start</a> | ";
247 echo "stop | ";
248 echo "force shutdown";
249 }
250 ?>
251
252 </td>
253
254 <td width='100' align='right' class='small'>
255 <img src='gfx/icon-cpu.png' style='vertical-align: middle;'>
256 <span id='vps_cpu_usage_txt_UID'><?php echo $cpu_count; ?> VCPU</span>
257 </td>
258 <td width='100' align='right' class='small'>
259 <img src='gfx/icon-memory.png' style='vertical-align: middle;'>
260 <span id='vps_memory_usage_txt_UID'><?php echo format_memory($memory); ?></span>
261 </td>
262 <!--
263 <td width='100' align='right' class='small'>
264 <img src='gfx/icon-network.png' style='vertical-align: middle;'>
265 <span id='vps_net_usage_txt_UID'>na</span>
266 </td>
267 -->
268 <td width='100' align='right' class='small'>
269 <img src='gfx/icon-disk.png' style='vertical-align: middle;'>
270 <span id='vps_disk_usage_txt_UID'><?php echo format_storage($harddrive_size); ?></span>
271 </td>
272 </tr>
273
274 </table>
275 <!-- MACHINE END -->
276
277 <?PHP } ?>
278 </td></tr></table>
279 </body></html>

  ViewVC Help
Powered by ViewVC 1.1.20