# HG changeset patch
# User emellor@xxxxxxxxxxxxxxxxxxxxxx
# Node ID 457c427c28fcc65dc30c52c50662f404b3f6c475
# Parent 44aa6f86830d90c007d23e1d1ce6ff6e2fe0841b
New xm uptime command.
>From Alex Brett <alex.brett@xxxxxxxxxxxxx>
Signed-off-by: Ewan Mellor <ewan@xxxxxxxxxxxxx>
---
docs/src/user.tex | 3 ++
tools/python/xen/xm/main.py | 59 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 62 insertions(+)
diff -r 44aa6f86830d -r 457c427c28fc docs/src/user.tex
--- a/docs/src/user.tex Fri Aug 11 18:09:13 2006 +0100
+++ b/docs/src/user.tex Sat Aug 12 12:25:42 2006 +0100
@@ -1089,6 +1089,9 @@ The \path{xm list} command also supports
The \path{xm list} command also supports a long output format when the
\path{-l} switch is used. This outputs the full details of the
running domains in \xend's SXP configuration format.
+
+If you want to know how long your domains have been running for, then
+you can use the \verb_# xm uptime_ command.
You can get access to the console of a particular domain using
diff -r 44aa6f86830d -r 457c427c28fc tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py Fri Aug 11 18:09:13 2006 +0100
+++ b/tools/python/xen/xm/main.py Sat Aug 12 12:25:42 2006 +0100
@@ -31,6 +31,7 @@ warnings.filterwarnings('ignore', catego
warnings.filterwarnings('ignore', category=FutureWarning)
import xmlrpclib
import traceback
+import datetime
import xen.xend.XendProtocol
@@ -70,6 +71,7 @@ shutdown_help ="shutdown <DomId> [-w][-a
shutdown_help ="shutdown <DomId> [-w][-a][-R|-H] Shutdown a domain"
top_help = "top Monitor system and domains in
real-time"
unpause_help = "unpause <DomId> Unpause a paused domain"
+uptime_help = "uptime [-s|--short] [DomId, ...] List uptime for domains"
help_spacer = """
"""
@@ -149,6 +151,7 @@ short_command_list = [
"shutdown",
"top",
"unpause",
+ "uptime",
"vcpu-set",
]
@@ -172,6 +175,7 @@ domain_commands = [
"sysrq",
"top",
"unpause",
+ "uptime",
"vcpu-list",
"vcpu-pin",
"vcpu-set",
@@ -412,6 +416,7 @@ def parse_doms_info(info):
'vcpus' : get_info('online_vcpus', int, 0),
'state' : get_info('state', str, '??'),
'cpu_time' : get_info('cpu_time', float, 0),
+ 'up_time' : get_info('up_time', float, -1),
'seclabel' : security.get_security_printlabel(info),
}
@@ -818,6 +823,59 @@ def xm_console(args):
domid = int(sxp.child_value(info, 'domid', '-1'))
console.execConsole(domid)
+def xm_uptime(args):
+ short_mode = 0
+
+ try:
+ (options, params) = getopt.gnu_getopt(args, 's', ['short'])
+ except getopt.GetoptError, opterr:
+ err(opterr)
+ sys.exit(1)
+
+ for (k, v) in options:
+ if k in ['-s', '--short']:
+ short_mode = 1
+
+ doms = getDomains(params)
+
+ if short_mode == 0:
+ print 'Name ID Uptime'
+
+ for dom in doms:
+ d = parse_doms_info(dom)
+ if d['dom'] > 0:
+ uptime = int(round(d['up_time']))
+ else:
+ f=open('/proc/uptime', 'r')
+ upfile = f.read()
+ uptime = int(round(float(upfile.split(' ')[0])))
+ f.close()
+
+ days = int(uptime / 86400)
+ uptime -= (days * 86400)
+ hours = int(uptime / 3600)
+ uptime -= (hours * 3600)
+ minutes = int(uptime / 60)
+ uptime -= (minutes * 60)
+ seconds = uptime
+
+ upstring = ""
+ if days > 0:
+ upstring += str(days) + " day"
+ if days > 1:
+ upstring += "s"
+ upstring += ", "
+ upstring += '%(hours)2d:%(minutes)02d' % vars()
+
+ if short_mode:
+ now = datetime.datetime.now()
+ upstring = now.strftime(" %H:%M:%S") + " up " + upstring
+ upstring += ", " + d['name'] + " (" + str(d['dom']) + ")"
+ else:
+ upstring += ':%(seconds)02d' % vars()
+ upstring = ("%(name)-32s %(dom)3d " % d) + upstring
+
+ print upstring
def xm_top(args):
arg_check(args, "top", 0)
@@ -1117,6 +1175,7 @@ commands = {
"save": xm_save,
"reboot": xm_reboot,
"shutdown": xm_shutdown,
+ "uptime": xm_uptime,
"list": xm_list,
# memory commands
"mem-max": xm_mem_max,
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|