[Ocfs2-tools-commits] manish commits r718 - trunk/ocfs2console/ocfs2interface

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Mon Mar 21 04:17:22 CST 2005


Author: manish
Date: 2005-03-21 04:17:20 -0600 (Mon, 21 Mar 2005)
New Revision: 718

Modified:
   trunk/ocfs2console/ocfs2interface/clconfig.py
   trunk/ocfs2console/ocfs2interface/console.py
   trunk/ocfs2console/ocfs2interface/general.py
   trunk/ocfs2console/ocfs2interface/ocfs2module.c
   trunk/ocfs2console/ocfs2interface/partitionview.py
Log:
Add total and free space display to general tab


Modified: trunk/ocfs2console/ocfs2interface/clconfig.py
===================================================================
--- trunk/ocfs2console/ocfs2interface/clconfig.py	2005-03-21 08:59:28 UTC (rev 717)
+++ trunk/ocfs2console/ocfs2interface/clconfig.py	2005-03-21 10:17:20 UTC (rev 718)
@@ -19,6 +19,13 @@
 
 from guiutil import set_props, error_box
 
+COLUMN_NAME, COLUMN_NODE_NUM, COLUMN_IP_ADDR, COLUMN_IP_PORT = range(4)
+
+def cluster_store():
+    store = gtk.ListStore(str, int, str, int)
+
+    store.set_sort_column_id(COLUMN_NODE_NUM, gtk.SORT_ASCENDING)
+
 def cluster_configurator(parent):
     dialog = gtk.Dialog(parent=parent, title='Cluster Configurator',
                         buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
@@ -28,8 +35,23 @@
     hbox.set_border_width(4)
     dialog.vbox.add(hbox)
 
+    store = cluster_store()
+
     tv = gtk.TreeView()
 
+    tv.insert_column_with_attributes(-1, 'Node Name',
+                                     gtk.CellRendererText(),
+                                     text=COLUMN_NAME)
+    tv.insert_column_with_attributes(-1, 'Node Number',
+                                     gtk.CellRendererText(),
+                                     text=COLUMN_NODE_NUM)
+    tv.insert_column_with_attributes(-1, 'IP Address',
+                                     gtk.CellRendererText(),
+                                     text=COLUMN_IP_ADDR)
+    tv.insert_column_with_attributes(-1, 'IP Port',
+                                     gtk.CellRendererText(),
+                                     text=COLUMN_IP_PORT)
+
     scrl_win = gtk.ScrolledWindow()     
     set_props(scrl_win, hscrollbar_policy=gtk.POLICY_AUTOMATIC,
                         vscrollbar_policy=gtk.POLICY_AUTOMATIC,
@@ -37,15 +59,12 @@
 
     scrl_win.add(tv)
 
-    frame = gtk.Frame()
-    frame.set_shadow_type(gtk.SHADOW_IN)
-    hbox.pack_end(frame, expand=False, fill=False)
-
     vbbox = gtk.VButtonBox()
     set_props(vbbox, layout_style=gtk.BUTTONBOX_START,
                      spacing=5,
                      border_width=5,
                      parent=frame)
+    hbox.pack_end(vbbox, expand=False, fill=False)
 
     button = gtk.Button(stock=gtk.STOCK_ADD)
     vbbox.add(button)

Modified: trunk/ocfs2console/ocfs2interface/console.py
===================================================================
--- trunk/ocfs2console/ocfs2interface/console.py	2005-03-21 08:59:28 UTC (rev 717)
+++ trunk/ocfs2console/ocfs2interface/console.py	2005-03-21 10:17:20 UTC (rev 718)
@@ -35,7 +35,7 @@
 info_items = (
     ('General',          General),
     ('File Listing',     Browser),
-    ('Configured Nodes', NodeMap),
+#    ('Configured Nodes', NodeMap),
 )
 
 class Console(gtk.Window):

Modified: trunk/ocfs2console/ocfs2interface/general.py
===================================================================
--- trunk/ocfs2console/ocfs2interface/general.py	2005-03-21 08:59:28 UTC (rev 717)
+++ trunk/ocfs2console/ocfs2interface/general.py	2005-03-21 10:17:20 UTC (rev 718)
@@ -27,7 +27,9 @@
     ('UUID', 's_uuid'),
     ('Maximum Nodes', 's_max_nodes'),
     ('Cluster Size', 's_clustersize_bits'),
-    ('Block Size', 's_blocksize_bits')
+    ('Block Size', 's_blocksize_bits'),
+    ('Free Space', 'freebits'),
+    ('Total Space', 'numbits'),
 )
 
 class General:
@@ -39,10 +41,15 @@
                                border_width=4)
 
         super = None
+        numbits = 0
 
         if device:
             try:
                 super = ocfs2.get_super(device)
+                numbits, freebits = ocfs2.get_space_usage(device)
+
+                clustersize = 1L << super.s_clustersize_bits
+                blocksize = 1L << super.s_blocksize_bits
             except ocfs2.error:
                 pass
 
@@ -56,6 +63,13 @@
                     val = super.s_label
                     if not val:
                         val = 'N/A'
+                elif member == 'numbits' or member == 'freebits':
+                    if numbits:
+                        blocks = (vars()[member] * 
+                                  (clustersize >> super.s_blocksize_bits))
+                        val = format_bytes(blocks * blocksize)
+                    else:
+                        val = 'N/A'
                 else:
                     val = getattr(super, member)
 

Modified: trunk/ocfs2console/ocfs2interface/ocfs2module.c
===================================================================
--- trunk/ocfs2console/ocfs2interface/ocfs2module.c	2005-03-21 08:59:28 UTC (rev 717)
+++ trunk/ocfs2console/ocfs2interface/ocfs2module.c	2005-03-21 10:17:20 UTC (rev 718)
@@ -231,9 +231,62 @@
   return v;
 }
 
+static PyObject *
+get_space_usage (PyObject *self,
+		 PyObject *args)
+{
+  gchar              *device;
+  errcode_t           ret;
+  PyObject           *v = NULL;
+  ocfs2_filesys      *fs = NULL;
+  uint64_t            blkno;
+  ocfs2_cached_inode *cinode = NULL;
+  ocfs2_dinode       *bm;
+  uint32_t            numbits, freebits;
+
+  if (!PyArg_ParseTuple (args, "s:get_super", &device))
+    return NULL;
+
+#define CHECK_ERROR(call)			G_STMT_START {	\
+  ret = call;							\
+  if (ret)							\
+    {								\
+      PyErr_SetString (ocfs2_error, error_message (ret));	\
+      goto bail;						\
+    }								\
+} G_STMT_END
+  
+  CHECK_ERROR (ocfs2_open (device, OCFS2_FLAG_RO, 0, 0, &fs));
+  CHECK_ERROR (ocfs2_lookup_system_inode(fs, GLOBAL_BITMAP_SYSTEM_INODE, -1,
+					 &blkno));
+  CHECK_ERROR (ocfs2_read_cached_inode(fs, blkno, &cinode));
+
+#undef CHECK_ERROR
+
+  bm = cinode->ci_inode;
+
+  numbits = le32_to_cpu (bm->id1.bitmap1.i_total);
+  freebits = numbits - le32_to_cpu (bm->id1.bitmap1.i_used);
+
+  v = PyTuple_New (2);
+
+  PyTuple_SetItem(v, 0, PyInt_FromLong (numbits));
+  PyTuple_SetItem(v, 1, PyInt_FromLong (freebits));
+
+bail:
+  if (cinode)
+    ocfs2_free_cached_inode(fs, cinode);
+
+  if (fs)
+    ocfs2_close (fs);
+
+  return v;
+}
+
 static PyMethodDef ocfs2_methods[] = {
   {"partition_list", (PyCFunction)partition_list, METH_VARARGS | METH_KEYWORDS},
   {"get_super", (PyCFunction)get_super, METH_VARARGS},
+  {"get_space_usage", (PyCFunction)get_space_usage, METH_VARARGS},
   {NULL,       NULL}    /* sentinel */
 };
 

Modified: trunk/ocfs2console/ocfs2interface/partitionview.py
===================================================================
--- trunk/ocfs2console/ocfs2interface/partitionview.py	2005-03-21 08:59:28 UTC (rev 717)
+++ trunk/ocfs2console/ocfs2interface/partitionview.py	2005-03-21 10:17:20 UTC (rev 718)
@@ -19,8 +19,7 @@
 
 import ocfs2
 
-COLUMN_DEVICE = 0
-COLUMN_MOUNTPOINT = 1
+COLUMN_DEVICE, COLUMN_MOUNTPOINT = range(2)
 
 class PartitionView(gtk.TreeView):
     def __init__(self, info_frames=()):
@@ -170,6 +169,7 @@
     window.connect('delete_event', dummy)
 
     scrl_win = gtk.ScrolledWindow()
+    scrl_win.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
     window.add(scrl_win)
 
     pv = PartitionView()



More information about the Ocfs2-tools-commits mailing list