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

Annotation of /misc/xenconsole/index.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1884 - (hide annotations) (download)
Fri Nov 30 15:54:54 2012 UTC (11 years, 6 months ago) by torben
File size: 7372 byte(s)
use ajax to refresh vm states
1 torben 1876 <?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 torben 1884 setInterval(refreshData, 60000);
43     refreshData();
44 torben 1876 });
45    
46 torben 1884 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 torben 1876 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 torben 1884
80     refreshData();
81 torben 1876 });
82     }
83    
84     function console(url, session) {
85 torben 1878 if (url == '')
86     return;
87    
88 torben 1876 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 torben 1878 //$('#mainwindow').load(url);
96     window.open(url);
97 torben 1876 }
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 torben 1884 $clean_name = str_replace(" ", "_", $name);
176     $clean_name = str_replace(".", "_", $clean_name);
177    
178    
179 torben 1876 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 torben 1881 $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 torben 1878 $url = "";
205     $session = "";
206     foreach($vm["consoles"] as $conref) {
207     $con = $xenserver->console__get_record( $conref );
208     //var_dump($con);
209 torben 1876
210 torben 1878 if ($con["protocol"] == "rfb") {
211     $url = urlencode( $con["location"] );
212     $session = $xenserver->get_id();
213     }
214     }
215 torben 1882
216 torben 1878
217    
218    
219 torben 1876 // echo "<a href='#' onclick=\"loadvm('$uuid');\">$name</a><br>\n";
220     ?>
221     <!-- MACHINE -->
222 torben 1882 <table width='99%' cellpadding='3' cellspacing='0' border='0' class='vps' id='<?php echo $name;?>'>
223 torben 1876 <tr background='gfx/vps_topbg.png'>
224 torben 1884 <td width='10' background='gfx/<?php echo $vps_topbg; ?>' class='small' id='state_<?php echo $clean_name;?>'>&nbsp;</td>
225 torben 1876 <td colspan='2' class='small'><b><?php echo $name; ?></b></td>
226 torben 1878 <td colspan='2' class='small' align='right'>
227 torben 1881 <?php echo $network;?>
228 torben 1882 <?php
229     if ($url != "") {
230 torben 1883 echo "<a href='#' onclick=\"console('$url','$session')\"><img src='gfx/icon-terminal.png' style='vertical-align: middle;'></a>";
231 torben 1882 }
232     ?>
233 torben 1878 </td>
234 torben 1876 </tr>
235    
236     <tr bgcolor='#eee'>
237     <td></td>
238    
239 torben 1879 <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 torben 1876
252 torben 1879 </td>
253    
254 torben 1876 <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