diff --git a/.rootkeys b/.rootkeys
index 053bb5cede..b888478532 100644
--- a/.rootkeys
+++ b/.rootkeys
@@ -442,6 +442,7 @@
40fcefb38OTgsUKHBpwshLLIsiIaCA tools/sv/images/middle-no-highlight.jpg
40fcefb32SPtrw36c4S6YGFlLvkKuw tools/sv/images/orb_01.jpg
40fcefb3Ok5qkX3iM7ZEPVkRInrUpg tools/sv/images/orb_02.jpg
+4104ffca9_GhWOxRE-83uZIad2Z1gg tools/sv/images/pause.png
41013a82ILk71xLqWFH5ZO5VmOIvBw tools/sv/images/reboot.png
40fcefb3JnT5XeKTuVF4yUMGOtuNZg tools/sv/images/right-end-highlight.jpg
40fcefb3-DuYOS7noo2W7b_0p7TOUg tools/sv/images/right-end-no-highlight.jpg
@@ -449,6 +450,7 @@
40fcefb3dgsa24WLk_BJeYQHrDLuOg tools/sv/images/seperator-right-highlight.jpg
40fcefb3FtiX4Pd2kT8wDlp8u8xRhQ tools/sv/images/seperator.jpg
41013a82sUdUqBv8EoAUJii3gsZ-4g tools/sv/images/shutdown.png
+4104ffca-jPHLVOrW0n0VghEXXtKxg tools/sv/images/unpause.png
40fcefb3yMSrZvApO9ToIi-iQwnchA tools/sv/images/xen.png
41013a83z27rKvWIxAfUBMVZ1eDCDg tools/sv/inc/script.js
40fcefb3zGC9XNBkSwTEobCoq8YClA tools/sv/inc/style.css
diff --git a/tools/python/xen/sv/DomInfo.py b/tools/python/xen/sv/DomInfo.py
index a718871fd5..7e23ab792d 100755
--- a/tools/python/xen/sv/DomInfo.py
+++ b/tools/python/xen/sv/DomInfo.py
@@ -26,6 +26,9 @@ class DomInfo( GenTabbed ):
self.dom = dom[0]
GenTabbed.write_BODY( self, request )
+
+ def write_MENU( self, request ):
+ pass
class DomGeneralTab( CompositeTab ):
def __init__( self ):
@@ -86,15 +89,37 @@ class DomSXPTab( PreTab ):
class DomActionTab( ActionTab ):
def __init__( self ):
- ActionTab.__init__( self, { "shutdown" : ( "Shutdown the Domain", "shutdown.png" ),
- "reboot" : ( "Reboot the Domain", "reboot.png" ) } )
+ actions = { "shutdown" : ( "Shutdown the Domain", "shutdown.png" ),
+ "reboot" : ( "Reboot the Domain", "reboot.png" ),
+ "pause" : ( "Pause the Domain", "pause.png" ),
+ "unpause" : ( "Unpause the Domain", "unpause.png" ) }
+ ActionTab.__init__( self, actions )
def op_shutdown( self, request ):
- print ">DomShutDown"
+ dom = getVar( 'dom', request )
+ if not dom is None:
+ print ">DomShutDown %s" % dom
#server.xend_node_shutdown()
def op_reboot( self, request ):
- print ">DomReboot"
+ dom = getVar( 'dom', request )
+ if not dom is None:
+ print ">DomReboot %s" % dom
#server.xend_node_reboot()
+ def op_pause( self, request ):
+ dom = getVar( 'dom', request )
+ if not dom is None:
+ print ">DomPause %s" % dom
+ server.xend_domain_pause( int( dom ) )
+
+ def op_unpause( self, request ):
+ dom = getVar( 'dom', request )
+ if not dom is None:
+ print ">DomUnpause %s" % dom
+ server.xend_domain_unpause( int( dom ) )
+
+
+
+
diff --git a/tools/python/xen/sv/DomList.py b/tools/python/xen/sv/DomList.py
index ee55957ba6..82f7cc424b 100755
--- a/tools/python/xen/sv/DomList.py
+++ b/tools/python/xen/sv/DomList.py
@@ -11,6 +11,9 @@ class DomList( HTMLBase ):
def __init__( self, urlWriter ):
HTMLBase.__init__(self)
self.urlWriter = urlWriter
+
+ def write_MENU( self, request ):
+ return self.write_BODY( request, head=True, long=False )
def write_BODY( self, request, head=True, long=True ):
@@ -44,11 +47,9 @@ class DomList( HTMLBase ):
request.write( "
%s | \n" % ( url, domInfoHash['name'] ) )
if long:
- request.write( "%(mem)7d | \n" % domInfoHash )
- request.write( "%(cpu)3d | \n" % domInfoHash )
+ request.write( "%(memory)5s | \n" % domInfoHash )
+ request.write( "%(cpu)2s | \n" % domInfoHash )
request.write( "%(state)5s | \n" % domInfoHash )
- if long:
- request.write( "%(cpu_time)7.1f | \n" % domInfoHash )
def write_DOMAIN_HEAD( self, request, long=True ):
request.write( "Domain | \n" )
@@ -57,6 +58,4 @@ class DomList( HTMLBase ):
request.write( "Memory / Mb | \n" )
request.write( "CPU | \n" )
request.write( "State | \n" )
- if long:
- request.write( "CPU time / s | \n" )
diff --git a/tools/python/xen/sv/Main.py b/tools/python/xen/sv/Main.py
index 50712c7710..9de097a1d4 100755
--- a/tools/python/xen/sv/Main.py
+++ b/tools/python/xen/sv/Main.py
@@ -38,14 +38,13 @@ class Main( HTMLBase ):
request.write( " | " )
request.write( " " )
request.write( " " )
- request.write( " " )
- request.write( "  | " )
+ request.write( " " )
+ request.write( " 
| " )
+ request.write( " SV Web Interface (C) Tom Wilkie 2004 | ")
request.write( " | " )
for (modName, (modTitle, module)) in self.modules.items():
- request.write( " %s " % (modName, modTitle))
-
- DomList( self.mainUrlWriter ).write_BODY( request, True, False )
+ module( self.mainUrlWriter ).write_MENU( request )
request.write( " | " )
request.write( " " )
diff --git a/tools/python/xen/sv/NodeInfo.py b/tools/python/xen/sv/NodeInfo.py
index f13781bf1a..a3aac1d34c 100755
--- a/tools/python/xen/sv/NodeInfo.py
+++ b/tools/python/xen/sv/NodeInfo.py
@@ -11,6 +11,9 @@ class NodeInfo( GenTabbed ):
return urlWriter( "mod=node%s" % url )
GenTabbed.__init__( self, "Node Details", newUrlWriter, [ 'General', 'Dmesg', ], [ NodeGeneralTab, NodeDmesgTab ] )
+
+ def write_MENU( self, request ):
+ request.write( "Node details " % self.urlWriter( '' ) )
class NodeGeneralTab( CompositeTab ):
def __init__( self ):
diff --git a/tools/python/xen/sv/util.py b/tools/python/xen/sv/util.py
index 64503bad29..57940d9287 100755
--- a/tools/python/xen/sv/util.py
+++ b/tools/python/xen/sv/util.py
@@ -2,26 +2,21 @@ from xen.xend.XendClient import server
from xen.xend import sxp
from xen.xend import PrettyPrint
+import types
+
def getDomInfoHash( domain ):
- domInfo = server.xend_domain( int( domain ) )
- d = {}
- d['dom'] = int( domain )
- d['name'] = sxp.child_value( domInfo, 'name' )
- d['mem'] = int( sxp.child_value( domInfo, 'memory' ) )
- d['cpu'] = int( sxp.child_value( domInfo, 'cpu' ) )
- d['state'] = sxp.child_value( domInfo, 'state' )
- d['cpu_time'] = float( sxp.child_value( domInfo, 'cpu_time' ) )
- if( sxp.child_value( domInfo, 'up_time' ) ):
- d['up_time'] = float( sxp.child_value( domInfo, 'up_time' ) )
- if( sxp.child_value( domInfo, 'start_time' ) ):
- d['start_time'] = float( sxp.child_value( domInfo, 'start_time' ) )
- return d
+ domInfoHash = sxp2hash( server.xend_domain( int( domain ) ) )
+ domInfoHash['dom'] = int( domain )
+ return domInfoHash
def sxp2hash( s ):
sxphash = {}
for child in sxp.children( s ):
- sxphash[ child[0] ] = child[1]
+ if child is types.ListType:
+ sxphash[ child[0] ] = sxp2hash( child[1] )
+ else:
+ sxphash[ child[0] ] = child[1]
return sxphash
@@ -33,9 +28,19 @@ def sxp2string( sxp ):
self.str = self.str + str
temp = tmp()
PrettyPrint.prettyprint( sxp, out=temp )
- return temp.str
+ return temp.str
+
+def getVar( var, request ):
+
+ arg = request.args.get( var )
+
+ if arg is None or len(arg) != 1:
+ return None
+ else:
+ return arg[0]
def bigTimeFormatter( time ):
+ time = float( time )
weeks = time // 604800
remainder = time % 604800
days = remainder // 86400
@@ -47,6 +52,7 @@ def bigTimeFormatter( time ):
return "%d weeks, %d days, %s" % ( weeks, days, hms )
def smallTimeFormatter( time ):
+ time = float( time )
hours = time // 3600
remainder = time % 3600
mins = remainder // 60
@@ -56,12 +62,14 @@ def smallTimeFormatter( time ):
def stateFormatter( state ):
states = [ 'Running', 'Blocked', 'Paused', 'Shutdown', 'Crashed' ]
+ stateStr = ""
+
for i in range( len( state ) ):
if state[i] != "-":
- return states[ i ] + " (%s)" % state
-
- return state
-
+ stateStr += "%s, " % states[ i ]
+
+ return stateStr + " (%s)" % state
+
def memoryFormatter( mem ):
mem = int( mem )
if mem >= 1024:
@@ -71,6 +79,7 @@ def memoryFormatter( mem ):
return "%7dMb" % mem
def cpuFormatter( mhz ):
+ mhz = int( mhz )
if mhz > 1000:
ghz = float( mhz ) / 1000.0
return "%4.2fGHz" % ghz
diff --git a/tools/sv/Makefile b/tools/sv/Makefile
index db432d18be..8a63d4ac1b 100755
--- a/tools/sv/Makefile
+++ b/tools/sv/Makefile
@@ -31,6 +31,8 @@ install:
install -m0644 images/shutdown.png $(sv_insdir)/images
install -m0644 images/reboot.png $(sv_insdir)/images
+ install -m0644 images/pause.png $(sv_insdir)/images
+ install -m0644 images/unpause.png $(sv_insdir)/images
# make include folder
mkdir -p $(sv_insdir)/inc
diff --git a/tools/sv/images/pause.png b/tools/sv/images/pause.png
new file mode 100644
index 0000000000..6e16daa177
Binary files /dev/null and b/tools/sv/images/pause.png differ
diff --git a/tools/sv/images/unpause.png b/tools/sv/images/unpause.png
new file mode 100644
index 0000000000..c971308814
Binary files /dev/null and b/tools/sv/images/unpause.png differ
|