[vbox-dev] getStatistic method issues

Sander van Leeuwen Sander.Vanleeuwen at Sun.COM
Tue Feb 16 09:19:24 GMT 2010


Another important detail: guest statistics are only implemented in the 
windows guest additions.

Klaus Espenlaub wrote:
> Igor Shkodyrev wrote:
>> But does the getStatistic method work for python bindings at all?
>> I already spent a bunch of time trying to get this method working for
>> all kinds of hosts/guests combinations (Ubuntu/WinXP as host +
>> Ubuntu/WinXP as guest) and couldn't succeed in it, i get the mentioned
>> errors.
>
> What does make you think the python bindings are special in any way? 
> They're autogenerated like the others, with some manually written glue 
> code which can certainly handle getStatistic.
>
> You get an error clearly saying that the arguments you're passing are 
> incorrect.
>
> The API code implements exactly 4 parameter validity checks:
> * first parameter must be 0
> * second parameter must be a valid guest statistic type
> * third parameter must be a valid pointer (automatically true for python)
> * finally if the guest statistic is not available, i.e. because it 
> hasn't been updated by the guest additions
>
> I suspect the last condition is what you're running into.
>
> The API you're insisting on using hasn't been adapted to guest SMP 
> support so far, that's why there is the CPU number = 0 check. No 
> client has called this API in quite some time.
>
> Klaus
>
>>
>> 2010/1/29 Klaus Espenlaub <Klaus.Espenlaub at sun.com>:
>>> Igor Shkodyrev schrieb:
>>>> Hello,
>>>> my Vbox v3.1.2 is running on Linux Ubuntu Desktop 9.10 as a host
>>>> system, as a guest system i use Ubuntu Server 9.10 with Guest
>>>> Additions installed.
>>>> I tried to write a function on Python which returns information about
>>>> the OS running inside the virtual machine, for this purpose i was
>>>> going to use methods of IGuest interface.
>>> The statistics stuff was only implemented for Windows guests. For 
>>> others
>>> it's still on the todo list (low priority).
>>>
>>> So the behavior you see is about as good as it gets. The only thing 
>>> I can't
>>> explain is the odd error code you get.
>>>
>>> Klaus
>>>
>>>> At first i tried to modify existing vboxshell.py script in order to
>>>> implement own function 'stats3':
>>>>
>>>> ----
>>>> def stats3Cmd(ctx, args):
>>>> print args
>>>> vers = ctx['vb'].version
>>>> print "Version is", vers
>>>>
>>>> if (len(args) < 2):
>>>> print "usage: stats3 [vmname|uuid]"
>>>> return 0
>>>>
>>>> mach = argsToMach(ctx,args)
>>>> if mach == None:
>>>> return 0
>>>> os = ctx['vb'].getGuestOSType(mach.OSTypeId)
>>>> print " Name [name]: %s" %(mach.name)
>>>> print " ID [n/a]: %s" %(mach.id)
>>>> print " OS Type [n/a]: %s" %(os.description)
>>>>
>>>> manager = ctx['mgr']
>>>> vb = ctx['vb']
>>>> session = manager.getSessionObject(vb)
>>>> if mach.sessionState == ctx['ifaces'].SessionState_Open:
>>>> vb.openExistingSession(session, mach.id )
>>>> else:
>>>> vb.openSession(session, mach.id )
>>>>
>>>> console = session.console
>>>> guest = console.guest
>>>> guestadd_ver1 = guest.additionsVersion
>>>> print guestadd_ver1
>>>>
>>>> cpu = 0
>>>> threads = guest.getStatistic( cpu, 4 )
>>>> print threads
>>>>
>>>> return 0
>>>>
>>>> ----
>>>>
>>>> after execution this function i've got the following traceback:
>>>> ----
>>>> $ python vboxshell2.py
>>>> Running VirtualBox version 3.1.2
>>>> vbox> stats3 ubuntusrv1
>>>> ['stats3', 'ubuntusrv1']
>>>> Version is 3.1.2
>>>> Name [name]: ubuntusrv1
>>>> ID [n/a]: 1c58fc27-ed25-4e82-b041-47c312296b82
>>>> OS Type [n/a]: Ubuntu
>>>> 65540
>>>> 0x80070057 (Invalid argument value (NS_ERROR_INVALID_ARG))
>>>> Traceback (most recent call last):
>>>> File "vboxshell2.py", line 1258, in interpret
>>>> done = runCommand(ctx, cmd)
>>>> File "vboxshell2.py", line 1177, in runCommand
>>>> return runCommandArgs(ctx, args)
>>>> File "vboxshell2.py", line 1170, in runCommandArgs
>>>> return ci[1](ctx, args)
>>>> File "vboxshell2.py", line 642, in stats3Cmd
>>>> threads = guest.getStatistic( cpu, 4 )
>>>> File "<XPCOMObject method 'getStatistic'>", line 3, in getStatistic
>>>> Exception: 0x80070057 (Invalid argument value (NS_ERROR_INVALID_ARG))
>>>> vbox>
>>>> ----
>>>>
>>>> after this i tried to implement this function to work over vboxwebsrv,
>>>> but .. no luck again:
>>>> ----
>>>> $ python vboxtests.py
>>>>
>>>> Version is 3.1.2
>>>> revision is 56127
>>>> host is Linux
>>>> home folder /home/isv/.VirtualBox
>>>> machs_list:ubuntusrv1
>>>>
>>>> Traceback (most recent call last):
>>>> File "vboxtests.py", line 90, in <module>
>>>> main()
>>>> File "vboxtests.py", line 85, in main
>>>> machineInfo(manager, machine)
>>>> File "vboxtests.py", line 61, in machineInfo
>>>> memory_available = guest.getStatistic( cpu, 4 )
>>>> File "/home/isv/home/diplom/src/VirtualBox_wrappers.py", line 4114,
>>>> in getStatistic
>>>> val=self.mgr.getPort().IGuest_getStatistic(req)
>>>> File "/home/isv/home/diplom/src/VirtualBox_services.py", line 3746,
>>>> in IGuest_getStatistic
>>>> response = self.binding.Receive(IGuest_getStatisticResultMsg.typecode)
>>>> File "/usr/lib/pymodules/python2.6/ZSI/client.py", line 536, in 
>>>> Receive
>>>> return _Binding.Receive(self, replytype, **kw)
>>>> File "/usr/lib/pymodules/python2.6/ZSI/client.py", line 455, in 
>>>> Receive
>>>> raise FaultException(msg)
>>>> ZSI.FaultException: VirtualBox error: (0x0)
>>>> <VirtualBox_services_types.RuntimeFault_Holder object at 0xa9fa28c>
>>>> ----
>>>>
>>>> the following output fragment in vboxwebsrv was printed while
>>>> executing the getStatistic method:
>>>> ---
>>>> 25: accepted connection from IP=127.0.0.1 socket=9...
>>>> -- entering __vbox__IGuest_USCOREgetStatistic
>>>> findRefFromId(): looking up objref 41f8a9570158f2dd-0000000000000007
>>>> findRefFromId(): sessid 41F8A9570158F2DD, objid 7
>>>> calling COM method GetStatistic
>>>> error, raising SOAP exception
>>>> API return code: 0x80070057 (NS_ERROR_INVALID_ARG)
>>>> COM error info result code: 0x0
>>>> COM error info text: <NULL>
>>>> -- leaving __vbox__IGuest_USCOREgetStatistic, rc: 0x80070057 
>>>> (-2147024809)
>>>> #### SOAP FAULT: VirtualBox error: (0x0) [SOAP-ENV:Client]
>>>> Request served
>>>> ---
>>>>
>>>>
>>>> was anyone able to implement any function with use of getStatistic 
>>>> method?
>>>> if yes, any example of getStatistic use will be very appreciated.
>>>>
>>>> Thanks.
>>>>
>>>> _______________________________________________
>>>> vbox-dev mailing list
>>>> vbox-dev at virtualbox.org
>>>> http://vbox.innotek.de/mailman/listinfo/vbox-dev
>>>
>>> -- 
>>> Dr. Klaus Espenlaub
>>> Sun Microsystems GmbH
>>> Werkstrasse 24
>>> 71384 Weinstadt
>>> Germany
>>>
>>> =====================================================================
>>> Sitz der Gesellschaft:
>>> Sun Microsystems GmbH, Sonnenallee 1, D-85551 Kirchheim-Heimstetten
>>> Amtsgericht Muenchen: HRB 161028
>>> Geschaeftsfuehrer: Thomas Schroeder, Wolfgang Engels, Wolf Frenkel
>>> Vorsitzender des Aufsichtsrates: Martin Haering
>>> =====================================================================
>>>
>>
>> _______________________________________________
>> vbox-dev mailing list
>> vbox-dev at virtualbox.org
>> http://vbox.innotek.de/mailman/listinfo/vbox-dev
>
>


-- 
Kind regards / Mit freundlichen Gruessen / Met vriendelijke groet

--

Sun Microsystems GmbH        Sander van Leeuwen
Werkstrasse 24               Senior Staff Engineer, VirtualBox
71384 Weinstadt, Germany     mailto:Sander.Vanleeuwen at sun.com


================================================
Sitz der Gesellschaft:
Sun Microsystems GmbH, Sonnenallee 1, D-85551 Kirchheim-Heimstetten
Amtsgericht Mnchen: HRB 161028
Gesch„ftsfhrer: Thomas Schr”der, Wolfgang Engels
Vorsitzender des Aufsichtsrates: Martin H„ring
================================================





More information about the vbox-dev mailing list