Added - option; irker ca now be used as a channel monitor.
authorEric S. Raymond <esr@thyrsus.com>
Tue, 16 Apr 2013 10:27:56 +0000 (06:27 -0400)
committerEric S. Raymond <esr@thyrsus.com>
Tue, 16 Apr 2013 10:27:56 +0000 (06:27 -0400)
NEWS
irkerd
irkerd.xml

diff --git a/NEWS b/NEWS
index bd86244c573b7b1f8e93e94a0786591485849d72..83815097d94ea0cd0d670ff0de667b50f4fe9b9c 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,8 @@
                        irker history 
 
+1.18
+  Added -l option; irker can now be used as a channel monitor.
+
 1.17 @ 2013-02-03
   Various minor fixes and bulletproofing.
 
diff --git a/irkerd b/irkerd
index 8ef0b63ed266c68c08cfc6dbc11f52d1b95ef282..2b20d4622fa7d6218db4a1b2205969e2139fd542 100755 (executable)
--- a/irkerd
+++ b/irkerd
@@ -391,6 +391,7 @@ class Irker:
         self.irc.add_global_handler("featurelist", self._handle_features)
         self.irc.add_global_handler("disconnect", self._handle_disconnect)
         self.irc.add_global_handler("kick", self._handle_kick)
+        self.irc.add_global_handler("all_raw_messages", self._handle_all_raw_messages)
         thread = threading.Thread(target=self.irc.process_forever)
         thread.setDaemon(True)
         self.irc._thread = thread
@@ -425,7 +426,8 @@ class Irker:
                 arguments = arguments()
             for lump in arguments:
                 if lump.startswith("DEAF="):
-                    connection.mode(cxt.nickname(), "+"+lump[5:])
+                    if not logfile:
+                        connection.mode(cxt.nickname(), "+"+lump[5:])
                 elif lump.startswith("MAXCHANNELS="):
                     m = int(lump[12:])
                     for pref in "#&+":
@@ -453,13 +455,18 @@ class Irker:
     def _handle_kick(self, connection, event):
         "Server hung up the connection."
         target = event.target
-        # irclib 5.0 compatibility, because the maintainer continues to be a
-        # fool.
+        # irclib 5.0 compatibility, because the maintainer continues
+        # to be a fool.
         if callable(target):
             target = target()
         self.debug(1, "irker has been kicked from %s on %s" % (target, connection.server))
         if connection.context:
             connection.context.handle_kick(target)
+    def _handle_all_raw_messages(self, connection, event):
+        "Log all messages when in watcher mode."
+        with open(logfile, "w") as logfp:
+            logfp.write("%03f|%s|%s\n" % \
+                             (time.time(), event.source, event.arguments[0]))
     def handle(self, line):
         "Perform a JSON relay request."
         try:
@@ -531,12 +538,15 @@ class IrkerUDPHandler(SocketServer.BaseRequestHandler):
 
 if __name__ == '__main__':
     debuglvl = 0
-    (options, arguments) = getopt.getopt(sys.argv[1:], "d:V")
+    logfile = None
+    (options, arguments) = getopt.getopt(sys.argv[1:], "d:V:l:")
     for (opt, val) in options:
         if opt == '-d':                # Enable debug/progress messages
             debuglvl = int(val)
             if debuglvl > 1:
                 logging.basicConfig(level=logging.DEBUG)
+        elif opt == '-l':      # Logfile mode - report traffic read in
+            logfile = val
         elif opt == '-V':      # Emit version and exit
             sys.stdout.write("irkerd version %s\n" % version)
             sys.exit(0)
index 4c611393bf11ca481a776dc848f82e715957f562..795b36795d3620d7117e143c133ed71574a50165 100644 (file)
@@ -19,6 +19,7 @@
 <cmdsynopsis>
   <command>irkerd</command>
      <arg>-d <replaceable>debuglevel</replaceable></arg>
+     <arg>-l <replaceable>logfile</replaceable></arg>
      <arg>-V</arg>
 </cmdsynopsis>
 </refsynopsisdiv>
@@ -72,6 +73,13 @@ it. This option will generally only be of interest to developers;
 consult the source code for details.</para></listitem>
 </varlistentry>
 <varlistentry>
+<term>-l</term>
+<listitem><para>Takes a following filename, logs traffic to that file.
+Each log line consists of three |-separated fields; a numeric
+timestamp in Unix time, the fqdn of the sending server, and the
+message data.</para></listitem>
+</varlistentry>
+<varlistentry>
 <term>-V</term>
 <listitem><para>Write the program version to stdout and
 terminate.</para></listitem>