[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[Libvir] [PATCH]: Add virNodeGetInfo to ruby bindings



All,
     Attached is a patch to add the virNodeGetInfo() call to the Libvirt Ruby
bindings.  Although it is not technically a virConn* function, it acts like one
since it uses the virConnectPtr structure, so I put it with those functions.
Let me know if I am doing anything completely crazy in here; this is my first
stab at Ruby binding code.

It works like so:

require 'libvirt'

conn = Libvirt::open("qemu:///system")
ni = c.nodeGetInfo
print ni

Signed-off-by: Chris Lalancette <clalance redhat com>
diff -r 2ce533de9e27 ext/libvirt/_libvirt.c
--- a/ext/libvirt/_libvirt.c	Mon Nov 12 15:09:56 2007 -0800
+++ b/ext/libvirt/_libvirt.c	Mon Nov 19 16:16:52 2007 -0500
@@ -29,6 +29,7 @@ static VALUE c_domain_info;
 static VALUE c_domain_info;
 static VALUE c_network;
 static VALUE c_libvirt_version;
+static VALUE c_node_info;
 
 /*
  * Internal helpers
@@ -318,6 +319,33 @@ VALUE libvirt_conn_max_vcpus(VALUE s, VA
 }
 
 /*
+ * Call +virNodeInfo+[http://www.libvirt.org/html/libvirt-libvirt.html#virNodeGetInfo]
+ */
+VALUE libvirt_conn_node_get_info(VALUE s){
+    int r;
+    virConnectPtr conn = connect_get(s);
+    virNodeInfo nodeinfo;
+    VALUE result;
+    VALUE modelstr;
+
+    r = virNodeGetInfo(conn, &nodeinfo);
+    _E(r == -1, conn, "virNodeGetInfo");
+
+    modelstr = rb_str_new2(nodeinfo.model);
+
+    result = rb_class_new_instance(0, NULL, c_node_info);
+    rb_iv_set(result, "@model", modelstr);
+    rb_iv_set(result, "@memory", ULONG2NUM(nodeinfo.memory));
+    rb_iv_set(result, "@cpus", UINT2NUM(nodeinfo.cpus));
+    rb_iv_set(result, "@mhz", UINT2NUM(nodeinfo.mhz));
+    rb_iv_set(result, "@nodes", UINT2NUM(nodeinfo.nodes));
+    rb_iv_set(result, "@sockets", UINT2NUM(nodeinfo.sockets));
+    rb_iv_set(result, "@cores", UINT2NUM(nodeinfo.cores));
+    rb_iv_set(result, "@threads", UINT2NUM(nodeinfo.threads));
+    return result;
+}
+
+/*
  * Call +virConnectGetCapabilities+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectGetCapabilities]
  */
 VALUE libvirt_conn_capabilities(VALUE s) {
@@ -1054,7 +1082,7 @@ void Init__libvirt() {
     rb_define_method(c_connect, "hostname", libvirt_conn_hostname, 0);
     rb_define_method(c_connect, "uri", libvirt_conn_uri, 0);
     rb_define_method(c_connect, "maxVcpus", libvirt_conn_max_vcpus, 1);
-    // TODO: virNodeGetInfo
+    rb_define_method(c_connect, "nodeGetInfo", libvirt_conn_node_get_info, 0);
     rb_define_method(c_connect, "capabilities", libvirt_conn_capabilities, 0);
     rb_define_method(c_connect, "numOfDomains", libvirt_conn_num_of_domains, 0);
     rb_define_method(c_connect, "listDomains", libvirt_conn_list_domains, 0);
@@ -1090,6 +1118,19 @@ void Init__libvirt() {
     rb_define_method(c_connect, "defineNetworkXML",
                      libvirt_conn_define_network_xml, 1);
     
+    /*
+     * Class Libvirt::Connect::Nodeinfo
+     */
+    c_node_info = rb_define_class_under(c_connect, "Nodeinfo", rb_cObject);
+    rb_define_attr(c_node_info, "model", 1, 0);
+    rb_define_attr(c_node_info, "memory", 1, 0);
+    rb_define_attr(c_node_info, "cpus", 1, 0);
+    rb_define_attr(c_node_info, "mhz", 1, 0);
+    rb_define_attr(c_node_info, "nodes", 1, 0);
+    rb_define_attr(c_node_info, "sockets", 1, 0);
+    rb_define_attr(c_node_info, "cores", 1, 0);
+    rb_define_attr(c_node_info, "threads", 1, 0);
+
     /* 
      * Class Libvirt::Domain 
      */

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]