| #!/usr/bin/python | |
| import sys | |
| import gobject | |
| import dbus | |
| import dbus.service | |
| import dbus.mainloop.glib | |
| def make_bytes_readable(bytes): | |
| SUFFIXES = [ 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB' ] | |
| size = 1024 | |
| if bytes < size: | |
| return '' | |
| for suffix in SUFFIXES: | |
| if bytes > size * 1024: | |
| size = size * 1024 | |
| continue | |
| return '%.1f %s' % (bytes / float(size), suffix) | |
| return '' | |
| def print_stats(stats): | |
| keys = stats.keys() | |
| keys.sort() | |
| for key in keys: | |
| val = int(stats[key]) | |
| str = " %s = %s" % (key, val) | |
| if key in ["RX.Bytes", "TX.Bytes"]: | |
| hstr = make_bytes_readable(val) | |
| if hstr: | |
| str = "%s (%s)" % (str, hstr) | |
| print str | |
| class Counter(dbus.service.Object): | |
| @dbus.service.method("net.connman.Counter", | |
| in_signature='', out_signature='') | |
| def Release(self): | |
| print("Release") | |
| mainloop.quit() | |
| @dbus.service.method("net.connman.Counter", | |
| in_signature='oa{sv}a{sv}', out_signature='') | |
| def Usage(self, path, home, roaming): | |
| print "%s" % (path) | |
| if len(home) > 0: | |
| print " Home" | |
| print_stats(home) | |
| if len(roaming) > 0: | |
| print " Roaming" | |
| print_stats(roaming) | |
| if __name__ == '__main__': | |
| dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) | |
| bus = dbus.SystemBus() | |
| manager = dbus.Interface(bus.get_object('net.connman', "/"), | |
| 'net.connman.Manager') | |
| period = 2 | |
| if len(sys.argv) > 1: | |
| period = sys.argv[1] | |
| path = "/test/counter%s" % period | |
| object = Counter(bus, path) | |
| manager.RegisterCounter(path, dbus.UInt32(10), dbus.UInt32(period)) | |
| mainloop = gobject.MainLoop() | |
| mainloop.run() | |
| #manager.UnregisterCounter(path) |