]> git.neil.brown.name Git - plato.git/commitdiff
netman: display current usage for GSM connnection.
authorNeilBrown <neilb@suse.de>
Mon, 14 Jan 2013 20:21:30 +0000 (07:21 +1100)
committerNeilBrown <neilb@suse.de>
Mon, 14 Jan 2013 20:21:30 +0000 (07:21 +1100)
This is fairly hacky but does display the data...

netman/netman.py

index 5d9d3847b7584cdd354b4ef2af86719cd9142a9c..7240c26a45941fbfceab9ea969c179cbf2132a76 100644 (file)
@@ -122,6 +122,7 @@ class iface:
         self.hotspot_net = None
         self.hotspot = False
         self.addr = 'No Address'
+        self.default = None
         self.set_label()
 
     def make_button(self):
@@ -144,7 +145,8 @@ class iface:
         self.label = ('<span color="blue" size="30000">%s</span>\n<span size="12000">  %s%s\n%s</span>\n'
                       % (self.name, hs, self.state, config))
         if self.state == 'active' and not self.hotspot:
-            self.label = self.label + '<span size="12000">Gateway: %s</span>' % self.get_default()
+            self.default = self.get_default()
+            self.label = self.label + '<span size="12000">Gateway: %s</span>' % self.default
         self.button.child.set_markup(self.label)
 
         if (self.hotspot and
@@ -164,6 +166,9 @@ class iface:
                    self.hotspot_net,'-j','MASQUERADE']).wait()
             self.hotspot_net = None
 
+    def selected(self):
+        pass
+
     def get_config(self):
         self.config = '-'
 
@@ -264,6 +269,10 @@ class WLAN_iface(iface):
     def supplicant_up(self):
         if self.supplicant:
             return
+        try:
+            os.unlink('/run/wpa_supplicant/wlan0')
+        except:
+            pass
         self.supplicant = Popen(['wpa_supplicant','-i','wlan0',
                                  '-c','/etc/wpa_supplicant.conf','-W'],
                                 close_fds = True)
@@ -529,6 +538,36 @@ def recall(key, nofile = ""):
         l = nofile
     return l
 
+####
+# load current usage from log file.
+# This is currently completely unoptimised.
+def read_bytes(dev = 'hso0'):
+    f = file('/proc/net/dev')
+    rv = None
+    for l in f:
+        w = l.strip().split()
+        if w[0] == dev + ':':
+            rv = ( int(w[1]), int(w[9]) )
+            break
+    f.close()
+    return rv
+
+def get_usage():
+    SIM = recall('sim')
+    f = open("/var/log/gsm-data")
+    rcv = 0
+    snd = 0
+    for l in f:
+        w = l.strip().split()
+        if w[2] == SIM:
+            rcv += int(w[3])
+            snd += int(w[4])
+
+    base = recall('data-last-usage').strip().split()
+    current = read_bytes()
+    rcv += current[0] - int(base[0])
+    snd += current[1] - int(base[1])
+    return rcv + snd
 
 class WWAN_iface(iface):
     def __init__(self, parent):
@@ -583,6 +622,25 @@ class WWAN_iface(iface):
         record('data-APN','')
         self.rfkill('block')
 
+    def selected(self):
+        if self.state == 'disabled':
+            config = ''
+        else:
+            self.get_config()
+            config = ' (%s)' % self.config
+        if self.hotspot:
+            hs = 'hotspot '
+        else:
+            hs = ''
+        usage = get_usage()/1000000.0
+        self.label = ('<span color="blue" size="30000">%s</span>   %fMB\n<span size="12000">  %s%s\n%s</span>\n'
+                      % (self.name, usage, hs, self.state, config))
+        if self.state == 'active' and not self.hotspot:
+            self.default = self.get_default()
+            self.label = self.label + '<span size="12000">Gateway: %s</span>' % self.default
+        self.button.child.set_markup(self.label)
+
+
 class BT_iface(iface):
     def __init__(self, parent):
         self.name = 'BT'
@@ -690,6 +748,7 @@ class Netman(gtk.Window):
         self.hotspot_btn.set_inconsistent(not child.can_hotspot)
         self.hotspot_btn.set_active(child.hotspot)
         self.selected = child
+        child.selected()
 
     def add_button(self, bb, name, fd, toggle, func):
         if toggle: