[libvirt] [PATCH 2/2] python: Expose binding for virNodeGetMemoryStats()

Peter Krempa pkrempa at redhat.com
Mon Nov 28 17:19:28 UTC 2011


This patch adds binding for virNodeGetMemoryStats method of libvirtd.
Return value is represended as a python dictionary mapping fileld
names to values.
---
 include/libvirt/libvirt.h.in    |    6 +++-
 python/libvirt-override-api.xml |    7 +++++
 python/libvirt-override.c       |   48 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 59 insertions(+), 2 deletions(-)

diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index 1291c59..e3afeed 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -431,9 +431,11 @@ struct _virNodeCPUStats {
 /**
  * VIR_NODE_MEMORY_STATS_ALL_CELLS:
  *
- * Macro for the total memory of all cells.
+ * Value for specifying request for the total memory of all cells.
  */
-#define VIR_NODE_MEMORY_STATS_ALL_CELLS (-1)
+typedef enum {
+    VIR_NODE_MEMORY_STATS_ALL_CELLS = -1,
+} virNodeGetMemoryStatsAllCells;

 /**
  * VIR_NODE_MEMORY_STATS_TOTAL:
diff --git a/python/libvirt-override-api.xml b/python/libvirt-override-api.xml
index e6dc967..1aa689f 100644
--- a/python/libvirt-override-api.xml
+++ b/python/libvirt-override-api.xml
@@ -84,6 +84,13 @@
       <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='aditional flags'/>
     </function>
+    <function name='virNodeGetMemoryStats' file='python'>
+      <info>Extract node's memory statistics.</info>
+      <return type='virNodeMemoryStats' 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='cellNum' type='int' info='number of node cell. (VIR_NODE_MEMORY_STATS_ALL_CELLS means total cell statistics)'/>
+      <arg name='flags' type='unsigned int' info='aditional 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'/>
diff --git a/python/libvirt-override.c b/python/libvirt-override.c
index c2abc9c..7b554a5 100644
--- a/python/libvirt-override.c
+++ b/python/libvirt-override.c
@@ -2304,6 +2304,53 @@ libvirt_virNodeGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args)
 }

 static PyObject *
+libvirt_virNodeGetMemoryStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args)
+{
+    PyObject *ret;
+    PyObject *pyobj_conn;
+    virConnectPtr conn;
+    unsigned int flags;
+    int cellNum, c_retval, i;
+    int nparams = 0;
+    virNodeMemoryStatsPtr stats = NULL;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oii:virNodeGetMemoryStats", &pyobj_conn, &cellNum, &flags))
+        return(NULL);
+    conn = (virConnectPtr)(PyvirConnect_Get(pyobj_conn));
+
+    LIBVIRT_BEGIN_ALLOW_THREADS;
+    c_retval = virNodeGetMemoryStats(conn, cellNum, 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 = virNodeGetMemoryStats(conn, cellNum, 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,
                                    PyObject *args) {
     PyObject *py_retval;
@@ -4820,6 +4867,7 @@ static PyMethodDef libvirtMethods[] = {
     {(char *) "virDomainGetBlockInfo", libvirt_virDomainGetBlockInfo, METH_VARARGS, NULL},
     {(char *) "virNodeGetInfo", libvirt_virNodeGetInfo, METH_VARARGS, NULL},
     {(char *) "virNodeGetCPUStats", libvirt_virNodeGetCPUStats, METH_VARARGS, NULL},
+    {(char *) "virNodeGetMemoryStats", libvirt_virNodeGetMemoryStats, METH_VARARGS, NULL},
     {(char *) "virDomainGetUUID", libvirt_virDomainGetUUID, METH_VARARGS, NULL},
     {(char *) "virDomainGetUUIDString", libvirt_virDomainGetUUIDString, METH_VARARGS, NULL},
     {(char *) "virDomainLookupByUUID", libvirt_virDomainLookupByUUID, METH_VARARGS, NULL},
-- 
1.7.3.4




More information about the libvir-list mailing list