|   sorry, Ian, I resend the patch and attach it here. thank you very much!         Signed-off-by: James (Song Wei) <jsong@xxxxxxxxxx>   diff -r b622e411eef8 tools/python/xen/xend/XendDomain.py--- a/tools/python/xen/xend/XendDomain.py Thu Jun 24 21:56:03 2010 +0100
 +++ b/tools/python/xen/xend/XendDomain.py Tue Jun 29 11:06:56 2010 +0800
 @@ -250,6 +250,18 @@
 @return: path to config file.
 """
 return os.path.join(self._managed_path(domuuid), CACHED_CONFIG_FILE)
 +    def domain_setpauseflag(self, dom, flag=False):
 +        try:
 +            dominfo = self.domain_lookup_nr(dom)
 +            dominfo.paused_by_admin = flag
 +        except Exception, err:
 +            log.debug("error in in setpauseflag")
 +    def domain_getpauseflag(self, dom):
 +        try:
 +            dominfo = self.domain_lookup_nr(dom)
 +            return dominfo.paused_by_admin
 +        except Exception, err:
 +            log.debug("error in in getpauseflag")
 
 def _managed_check_point_path(self, domuuid):
 """Returns absolute path to check point file for managed domain.
 diff -r b622e411eef8 tools/python/xen/xend/XendDomainInfo.py
 --- a/tools/python/xen/xend/XendDomainInfo.py Thu Jun 24 21:56:03 2010 +0100
 +++ b/tools/python/xen/xend/XendDomainInfo.py Tue Jun 29 11:06:56 2010 +0800
 @@ -329,6 +329,8 @@
 @type info: dictionary
 @ivar domid: Domain ID (if VM has started)
 @type domid: int or None
 +    @ivar paused_by_admin: Is this Domain paused by command or API
 +    @type paused_by_admin: bool
 @ivar guest_bitsize: the bitsize of guest
 @type guest_bitsize: int or None
 @ivar alloc_mem: the memory domain allocated when booting
 @@ -392,6 +394,7 @@
 self.domid = domid
 self.guest_bitsize = None
 self.alloc_mem = None
 +        self.paused_by_admin = False
 
 maxmem = self.info.get('memory_static_max', 0)
 memory = self.info.get('memory_dynamic_max', 0)
 diff -r b622e411eef8 tools/python/xen/xend/server/SrvDomain.py
 --- a/tools/python/xen/xend/server/SrvDomain.py Thu Jun 24 21:56:03 2010 +0100
 +++ b/tools/python/xen/xend/server/SrvDomain.py Tue Jun 29 11:06:56 2010 +0800
 @@ -238,6 +238,20 @@
 def op_reset(self, _, req):
 self.acceptCommand(req)
 return self.xd.domain_reset(self.dom.getName())
 +
 +    def op_do_get_pauseflag(self, op, req):
 +        self.acceptCommand(req)
 +        return req.threadRequest(self.do_get_pauseflag, op, req)
 +
 +    def do_get_pauseflag(self, _, req):
 +        return self.xd.domain_getpauseflag(self.dom.getName(), req)
 +
 +    def op_do_set_pauseflag(self, op, req):
 +        self.acceptCommand(req)
 +        return req.threadRequest(self.do_set_pauseflag, op, req)
 +
 +    def do_set_pauseflag(self, _, req):
 +        return self.xd.domain_setpauseflag(self.dom.getName(), req)
 
 def op_usb_add(self, op, req):
 self.acceptCommand(req)
 diff -r b622e411eef8 tools/python/xen/xm/main.py
 --- a/tools/python/xen/xm/main.py Thu Jun 24 21:56:03 2010 +0100
 +++ b/tools/python/xen/xm/main.py Tue Jun 29 11:06:56 2010 +0800
 @@ -169,6 +169,8 @@
 #usb
 'usb-add'     : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Add the usb device to FV VM.'),
 'usb-del'     : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Delete the usb device to FV VM.'),
 +    #domstate
 +    'domstate'  : ('<domain> ', 'get the state of a domain'),
 
 # device commands
 
 @@ -401,6 +403,7 @@
 "uptime",
 "usb-add",
 "usb-del",
 +    "domstate",
 "vcpu-set",
 ]
 
 @@ -435,6 +438,7 @@
 "uptime",
 "usb-add",
 "usb-del",
 +    "domstate",
 "vcpu-list",
 "vcpu-pin",
 "vcpu-set",
 @@ -948,7 +952,6 @@
 return "-"
 state_str = "".join([state_on_off(state)
 for state in states])
 -
 dom_rec.update({'name':     dom_rec['name_label'],
 'memory_actual': int(dom_metrics_rec['memory_actual'])/1024,
 'vcpus':    dom_metrics_rec['VCPUs_number'],
 @@ -1457,8 +1460,10 @@
 
 if serverType == SERVER_XEN_API:
 server.xenapi.VM.pause(get_single_vm(dom))
 +        server.xenapi.VM.set_pauseflag(get_single_vm(dom), True)
 else:
 server.xend.domain.pause(dom)
 +        server.xend.domain.setpauseflag(dom, True)
 
 def xm_unpause(args):
 arg_check(args, "unpause", 1)
 @@ -1466,8 +1471,10 @@
 
 if serverType == SERVER_XEN_API:
 server.xenapi.VM.unpause(get_single_vm(dom))
 +        server.xenapi.VM.set_pauseflag(get_single_vm(dom), False)
 else:
 server.xend.domain.unpause(dom)
 +        server.xend.domain.setpauseflag(dom, False)
 
 def xm_dump_core(args):
 live = False
 @@ -1579,6 +1586,32 @@
 arg_check(args, "usb-add", 2)
 server.xend.domain.usb_add(args[0],args[1])
 
 +def xm_domstate(args):
 +    arg_check(args, "domstate", 1)
 +    (opitons, params) = getopt.gnu_getopt(args, 's',  ['domname='])
 +    doms = getDomains(params, 'all')
 +    d = parse_doms_info(doms[0])
 +    state =  d['state']
 +    if state:
 +        if   state.find('s') > 0:
 +            print 'shutoff'
 +        elif state.find('b') > 0:
 +            print 'idle'
 +        elif state.find('d') > 0:
 +            print 'shutdown'
 +        elif state.find('r') > 0:
 +            print 'running'
 +        elif state.find('c') > 0:
 +            print 'crashed'
 +        elif state.find('p') > 0:
 +            if server.xend.domain.getpauseflag(args[0]):
 +                print 'paused by admin'
 +            else:
 +                print 'paused'
 +    else:
 +        print 'shutoff'
 +    return
 +
 def xm_usb_del(args):
 arg_check(args, "usb-del", 2)
 server.xend.domain.usb_del(args[0],args[1])
 @@ -3861,6 +3894,8 @@
 #usb
 "usb-add": xm_usb_add,
 "usb-del": xm_usb_del,
 +    #domstate
 +    "domstate": xm_domstate,
 }
 
 ## The commands supported by a separate argument parser in xend.xm.
 
 
 >>> Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> 2010-6-25 22:21 >>>
 I wrote:
 > James (song wei) writes ("[Xen-devel] [PATCH] add a command to get the state of VMs"):
 > > add a command "domstate" to get the state of Vms, which may have one state of
 > > {'shutoff', 'idle','shutdown','running','crashed','paused' or 'paused by
 > > admin"}.
 >
 > I'm going to apply this patch, but:
 
 I'm afraid that the patch has been mangled by your email client; it
 has been wordwrapped.
 
 Can you submit it again, please ?  If you can't manage to stop your
 email program mangling it, try sending it as an attachment (although
 if you do this please send a copy in the body of the message too as
 otherwise it can be hard for people to review it).
 
 Thanks,
 Ian.
 
 |