]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
python: Expose binding for virNodeGetCPUStats()
authorPeter Krempa <pkrempa@redhat.com>
Mon, 28 Nov 2011 17:19:27 +0000 (18:19 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 5 Dec 2011 11:22:33 +0000 (12:22 +0100)
This patch adds binding for virNodeGetCPUStats method of libvirtd.
Return value is represented as a python dictionary mapping field names
to values.

include/libvirt/libvirt.h.in
python/libvirt-override-api.xml
python/libvirt-override.c

index d01d1bc5fa8d5d879772784185447d176b2d04bc..b0fbf947b2b3466ee67436833f187f07e246b3e7 100644 (file)
@@ -375,9 +375,11 @@ struct _virNodeInfo {
 /**
  * VIR_NODE_CPU_STATS_ALL_CPUS:
  *
- * Macro for the total CPU time/utilization
+ * Value for specifying request for the total CPU time/utilization
  */
-#define VIR_NODE_CPU_STATS_ALL_CPUS (-1)
+typedef enum {
+    VIR_NODE_CPU_STATS_ALL_CPUS = -1,
+} virNodeGetCPUStatsAllCPUs;
 
 /**
  * VIR_NODE_CPU_STATS_KERNEL:
index 6aad49cbec34f3949c9d45ca3c4ca08847d681e4..9cc7840bd9b6e7dfd78ee7d60c9b1f76ec98c1ab 100644 (file)
       <return type='int *' info='the list of information or None in case of error'/>
       <arg name='conn' type='virConnectPtr' info='pointer to the hypervisor connection'/>
     </function>
+    <function name='virNodeGetCPUStats' file='python'>
+      <info>Extract node's CPU statistics.</info>
+      <return type='virNodeCPUStats' info='dictionary mapping field names to values or None in case of error'/>
+      <arg name='conn' type='virConnectPtr' info='pointer to hypervisor connection'/>
+      <arg name='cpuNum' type='int' info='number of node cpu. (VIR_NODE_CPU_STATS_ALL_CPUS means total cpu statistics)'/>
+      <arg name='flags' type='unsigned int' info='additional flags'/>
+    </function>
     <function name='virDomainGetUUID' file='python'>
       <info>Extract the UUID unique Identifier of a domain.</info>
       <return type='char *' info='the 16 bytes string or None in case of error'/>
index cfb9a31975981436f20f29545c52a55ef82e7444..5d80e646260fb555ef4e15bfa740a3a73c657074 100644 (file)
@@ -2256,6 +2256,52 @@ libvirt_virNodeGetCellsFreeMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *arg
     return(py_retval);
 }
 
+static PyObject *
+libvirt_virNodeGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args)
+{
+    PyObject *ret;
+    PyObject *pyobj_conn;
+    virConnectPtr conn;
+    unsigned int flags;
+    int cpuNum, c_retval, i;
+    int nparams = 0;
+    virNodeCPUStatsPtr stats = NULL;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oii:virNodeGetCPUStats", &pyobj_conn, &cpuNum, &flags))
+        return(NULL);
+    conn = (virConnectPtr)(PyvirConnect_Get(pyobj_conn));
+
+    LIBVIRT_BEGIN_ALLOW_THREADS;
+    c_retval = virNodeGetCPUStats(conn, cpuNum, NULL, &nparams, flags);
+    LIBVIRT_END_ALLOW_THREADS;
+    if (c_retval < 0)
+        return VIR_PY_NONE;
+
+    if (nparams) {
+        if (!(stats = malloc(sizeof(*stats) * nparams)))
+            return VIR_PY_NONE;
+
+        LIBVIRT_BEGIN_ALLOW_THREADS;
+        c_retval = virNodeGetCPUStats(conn, cpuNum, stats, &nparams, flags);
+        LIBVIRT_END_ALLOW_THREADS;
+        if (c_retval < 0) {
+            free(stats);
+            return VIR_PY_NONE;
+        }
+    }
+    if (!(ret = PyDict_New())) {
+        free(stats);
+        return VIR_PY_NONE;
+    }
+    for (i = 0; i < nparams; i++) {
+        PyDict_SetItem(ret,
+                       libvirt_constcharPtrWrap(stats[i].field),
+                       libvirt_ulonglongWrap(stats[i].value));
+    }
+
+    free(stats);
+    return ret;
+}
 
 static PyObject *
 libvirt_virConnectListStoragePools(PyObject *self ATTRIBUTE_UNUSED,
@@ -4949,6 +4995,7 @@ static PyMethodDef libvirtMethods[] = {
     {(char *) "virDomainGetControlInfo", libvirt_virDomainGetControlInfo, METH_VARARGS, NULL},
     {(char *) "virDomainGetBlockInfo", libvirt_virDomainGetBlockInfo, METH_VARARGS, NULL},
     {(char *) "virNodeGetInfo", libvirt_virNodeGetInfo, METH_VARARGS, NULL},
+    {(char *) "virNodeGetCPUStats", libvirt_virNodeGetCPUStats, METH_VARARGS, NULL},
     {(char *) "virDomainGetUUID", libvirt_virDomainGetUUID, METH_VARARGS, NULL},
     {(char *) "virDomainGetUUIDString", libvirt_virDomainGetUUIDString, METH_VARARGS, NULL},
     {(char *) "virDomainLookupByUUID", libvirt_virDomainLookupByUUID, METH_VARARGS, NULL},