]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
python: Expose binding for virNodeGetMemoryStats()
authorPeter Krempa <pkrempa@redhat.com>
Mon, 28 Nov 2011 17:19:28 +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 virNodeGetMemoryStats 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 b0fbf947b2b3466ee67436833f187f07e246b3e7..0a560940dec7141b790750d9af45f8aa190c0711 100644 (file)
@@ -445,9 +445,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:
index 9cc7840bd9b6e7dfd78ee7d60c9b1f76ec98c1ab..7c1876348da9b4af52a6143cdfb7360e07754ba0 100644 (file)
       <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='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='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 5d80e646260fb555ef4e15bfa740a3a73c657074..9e98918ee82c8b4ee314ce8071abe1f23e077971 100644 (file)
@@ -2303,6 +2303,53 @@ libvirt_virNodeGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args)
     return ret;
 }
 
+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) {
@@ -4996,6 +5043,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},