aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2013-04-16 06:27:56 -0400
committerEric S. Raymond <esr@thyrsus.com>2013-04-16 06:27:56 -0400
commite0dca73fa1cbd9263c2cfda5ddbd1b50f58ac695 (patch)
tree3ca0c9adb9f1384f53e71fdd9909f7cfdcde075e
parentExtract commit date for Mercurial (diff)
downloadirker-e0dca73fa1cbd9263c2cfda5ddbd1b50f58ac695.tar.xz
Added - option; irker ca now be used as a channel monitor.
-rw-r--r--NEWS3
-rwxr-xr-xirkerd18
-rw-r--r--irkerd.xml8
3 files changed, 25 insertions, 4 deletions
diff --git a/NEWS b/NEWS
index bd86244..8381509 100644
--- 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 8ef0b63..2b20d46 100755
--- 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)
diff --git a/irkerd.xml b/irkerd.xml
index 4c61139..795b367 100644
--- a/irkerd.xml
+++ b/irkerd.xml
@@ -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>