#!/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)