diff options
Diffstat (limited to 'services/console/lib')
-rw-r--r-- | services/console/lib/Makefile.am | 2 | ||||
-rw-r--r-- | services/console/lib/net/Makefile.am | 7 | ||||
-rw-r--r-- | services/console/lib/net/__init__.py | 0 | ||||
-rw-r--r-- | services/console/lib/net/device.py | 91 | ||||
-rw-r--r-- | services/console/lib/ui/Makefile.am | 5 | ||||
-rw-r--r-- | services/console/lib/ui/__init__.py | 0 | ||||
-rw-r--r-- | services/console/lib/ui/treeview.py | 73 |
7 files changed, 177 insertions, 1 deletions
diff --git a/services/console/lib/Makefile.am b/services/console/lib/Makefile.am index fba9382..0d4dcce 100644 --- a/services/console/lib/Makefile.am +++ b/services/console/lib/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = procmem graphics +SUBDIRS = procmem graphics net ui sugardir = $(pkgdatadir)/shell/console/lib sugar_PYTHON = diff --git a/services/console/lib/net/Makefile.am b/services/console/lib/net/Makefile.am new file mode 100644 index 0000000..c9d88ed --- /dev/null +++ b/services/console/lib/net/Makefile.am @@ -0,0 +1,7 @@ + +sugardir = $(pkgdatadir)/services/console/lib/net + +sugar_PYTHON = \ + __init__.py \ + device.py + diff --git a/services/console/lib/net/__init__.py b/services/console/lib/net/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/services/console/lib/net/__init__.py diff --git a/services/console/lib/net/device.py b/services/console/lib/net/device.py new file mode 100644 index 0000000..ad86c31 --- /dev/null +++ b/services/console/lib/net/device.py @@ -0,0 +1,91 @@ +# Copyright (C) 2007, Eduardo Silva <edsiper@gmail.com> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import socket +import fcntl +import struct +import string + +class Device: + def __init__(self): + self._dev = self.get_interfaces() + + def get_interfaces(self): + netdevfile = "/proc/net/dev" + dev = [] + + try: + infile = file(netdevfile, "r") + except: + print "Error trying " + netdevfile + + skip = 0 + for line in infile: + # Skip first two lines + skip += 1 + if skip <= 2: + continue + + iface = string.split(line, ":",1) + arr = string.split(iface[1]) + + info = {'interface': iface[0].strip(), \ + 'bytes_recv': arr[0],\ + 'bytes_sent': arr[8],\ + 'packets_recv': arr[1], + 'packets_sent': arr[9]} + + dev.append(info) + return dev + + def get_iface_info(self, ifname): + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + hwaddr = [] + try: + ip = socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0x8915, \ + struct.pack('256s', ifname[:15]))[20:24]) + except: + ip = None + + try: + netmask = socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0x891b, \ + struct.pack('256s', ifname[:15]))[20:24]) + except: + netmask = None + + try: + mac = [] + info = fcntl.ioctl(s.fileno(), 0x8927, \ + struct.pack('256s', ifname[:15])) + for char in info[18:24]: + hdigit = hex(ord(char))[2:] + if len(hdigit): + mac.append(hdigit) + except: + mac = None + + mac_string = self.mac_to_string(mac) + return [ip, netmask, mac_string] + + def mac_to_string(self, hexa): + string = '' + for value in hexa: + if len(string)==0: + string = value + else: + string += ':'+value + + return string diff --git a/services/console/lib/ui/Makefile.am b/services/console/lib/ui/Makefile.am new file mode 100644 index 0000000..a75f7a1 --- /dev/null +++ b/services/console/lib/ui/Makefile.am @@ -0,0 +1,5 @@ +sugardir = $(pkgdatadir)/services/console/lib/ui + +sugar_PYTHON = \ + __init__.py \ + treeview.py diff --git a/services/console/lib/ui/__init__.py b/services/console/lib/ui/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/services/console/lib/ui/__init__.py diff --git a/services/console/lib/ui/treeview.py b/services/console/lib/ui/treeview.py new file mode 100644 index 0000000..5f5dc96 --- /dev/null +++ b/services/console/lib/ui/treeview.py @@ -0,0 +1,73 @@ +# Copyright (C) 2007, Eduardo Silva <edsiper@gmail.com> +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +import gtk + +class TreeView(gtk.ScrolledWindow): + iters = [] # Iters index + + # Create a window with a treeview object + # + # cols = List of dicts, ex: + # + # cols = [] + # cols.append({'index': integer_index_position, 'name': string_col_name}) + def __init__(self, cols_def, cols_name): + gtk.ScrolledWindow.__init__(self) + + self._iters = [] + self._treeview = gtk.TreeView() + + # Creating column data types + self._store = gtk.TreeStore(*cols_def) + + # Columns definition + cell = gtk.CellRendererText() + tv_cols = [] + + i=0 + for col in cols_name: + col_tv = gtk.TreeViewColumn(col['name'], cell, text=i) + col_tv.set_reorderable(True) + col_tv.set_resizable(True) + tv_cols.append(col_tv) + i+=1 + + # Setting treeview properties + self._treeview.set_model(self._store) + self._treeview.set_enable_search(True) + self._treeview.set_rules_hint(True) + + for col in tv_cols: + self._treeview.append_column(col) + self.add(self._treeview) + + def add_row(self, cols_data): + iter = self._store.insert_after(None, None) + for col in cols_data: + print col['index'],col['info'] + self._store.set_value(iter, int(col['index']) , col['info']) + + self.iters.append(iter) + return iter + + def update_row(self, iter, cols_data): + for col in cols_data: + self._store.set_value(iter, int(col['index']) , str(col['info'])) + + def remove_row(self, iter): + self._store.remove(iter) |