From f5485b4dff1f51f6ccc4dfb13ac85ed2662135c8 Mon Sep 17 00:00:00 2001 From: Martin Vidner Date: Sun, 15 Mar 2009 09:46:44 +0100 Subject: [PATCH] Improved Monitor (-m). - beautify interesting signals - ignore uninteresting signals - fixed abbreviation collision detection, was backwards - factored out base class --- cnetworkmanager | 108 ++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 90 insertions(+), 18 deletions(-) diff --git a/cnetworkmanager b/cnetworkmanager index d40b757..b9bc6bd 100755 --- a/cnetworkmanager +++ b/cnetworkmanager @@ -1150,24 +1150,34 @@ class ConfigParserKNM: else: return "" -def abbr_signal_handler(*args, **kwargs): - ifc = kwargs["interface"] - sig = kwargs["member"] - opath = kwargs["path"] - line = "SIG %s: %s.%s%s" % (abbrev(opath,"/"), abbrev(ifc,"."), sig, args) - print line - -class Monitor: +class MonitorBase: def __init__(self): self.amap = {} - bus.add_signal_receiver(self.abbr_signal_handler, + self.specific = {} + bus.add_signal_receiver(self.abbr_h, path_keyword="path", interface_keyword="interface", member_keyword="member") - def abbr_signal_handler(self, *args, **kwargs): + def ignore(self, dbus_interface, signal_name): + self.watch(self.null_h, dbus_interface, signal_name) + + def null_h(self, *args, **kwargs): + pass + + def watch(self, handler, dbus_interface, signal_name): + self.specific[dbus_interface +"."+ signal_name] = True + bus.add_signal_receiver(handler, + dbus_interface=dbus_interface, + signal_name=signal_name, + path_keyword="path") + + def abbr_h(self, *args, **kwargs): ifc = kwargs["interface"] sig = kwargs["member"] + if self.specific.has_key(ifc +"."+ sig): + return + opath = kwargs["path"] line = "SIG %s: %s.%s%s" % (self.abbrev(opath,"/"), self.abbrev(ifc,"."), @@ -1178,19 +1188,81 @@ class Monitor: words = s.split(sep) words = map (self.a1, words) result = sep.join(words) - if not self.amap.has_key(s): - print "ABBR %s is %s" % (result, s) - self.amap[s] = result + if self.amap.has_key(result): + if self.amap[result] != s: + print "ABBR COLLISION %s was %s now %s" % (result, self.amap[result], s) else: - if self.amap[s] != result: - print "ABBR COLLISION %s was %s now %s" % (s, self.amap[s], result) + print "ABBR %s is %s" % (result, s) + self.amap[result] = s return result def a1(self, s): - try: - return s[0] - except: + if s == "": return "" + #print "#A", s + # first char, delete lowercase and _ from the rest + return s[0] + s[1:].translate(string.maketrans("", ""), + string.lowercase + "_") + +class Monitor(MonitorBase): + def __init__(self): + MonitorBase.__init__(self) + + self.watch( + self.propc_h, + dbus_interface="org.freedesktop.NetworkManager.Device.Wireless", + signal_name="PropertiesChanged") + self.watch( + self.propc_h, + dbus_interface="org.freedesktop.NetworkManager.AccessPoint", + signal_name="PropertiesChanged") + + self.ignore("org.freedesktop.Hal.Device", "PropertyModified") + self.ignore("fi.epitest.hostap.WPASupplicant.Interface", "ScanResultsAvailable") + self.ignore("com.redhat.PrinterSpooler", "QueueChanged") + self.ignore("org.freedesktop.NetworkManager", "StateChange") # deprecated + self.watch(self.nm_sc_h, "org.freedesktop.NetworkManager", "StateChanged") + self.watch(self.wpas_isc_h, "fi.epitest.hostap.WPASupplicant.Interface", "StateChange") + self.watch(self.nmd_sc_h, "org.freedesktop.NetworkManager.Device", "StateChanged") + self.watch(self.bus_noc_h, "org.freedesktop.DBus", "NameOwnerChanged") + + def bus_noc_h(self, *args, **kwargs): + (name, old, new) = args + if new == "": + new = "gone" + else: + new = "at " + new + print "\tBUS NOC\t%s %s" % (name, new) + + def wpas_isc_h(self, *args, **kwargs): + opath = kwargs["path"] + (new, old) = args + print "\tWPAS %s\t(%s, was %s)" % (new, opath, old.lower()) + + def nmd_sc_h(self, *args, **kwargs): + opath = kwargs["path"] + (new, old, reason) = args + news = cDevice_07.NM_DEVICE_STATE[new] + olds = cDevice_07.NM_DEVICE_STATE[old] + reasons = "" + if reason != 0: + reasons = "reason %d" % reason + print "\tDevice State %s\t(%s, was %s%s)" % (news, opath, olds.lower(), reasons) + + def nm_sc_h(self, *args, **kwargs): + s = args[0] + ss = cNM.NM_STATE[s] + print "\tNM State:", ss + + def propc_h(self, *args, **kwargs): + opath = kwargs["path"] + props = args[0] + for k, v in props.iteritems(): + if k == "Strength": + v = "%u" % v + line = "\tPROP\t%s\t%s\t(%s)" % (k, v, opath) + print line + # main -- 2.11.4.GIT