pvl.syslog.syslog: fix SyslogSource polling (--syslog-file -> poll=False, rename to select)
--- a/bin/pvl.irker-syslog Sun Jan 13 01:50:25 2013 +0200
+++ b/bin/pvl.irker-syslog Sun Jan 13 01:52:00 2013 +0200
@@ -76,25 +76,7 @@
# customized mainloop that supports irker.irk
while True :
- if irker.irk.recv :
- reading = (irker.irk, )
- else :
- reading = ()
-
- poll = syslog.poll(reading=reading) or () # timeout -> ()
-
- if irker.irk in poll :
- # irk
- try :
- for msg in irker.irk :
- log.info("irk: %s", msg)
-
- except EOFError :
- # exit
- log.error("irk: EOF")
- return 1
-
- # syslogs, even on timeout
+ # syslogs
for item in syslog :
match, rulepath, apply = rules.apply(item)
@@ -115,7 +97,34 @@
irker[target]('[' + tag + '] ' + text)
else :
print tag, text
-
+
+ # only poll if we have something to poll
+ if syslog.poll :
+ # can we poll irk?
+ if irker.irk.recv :
+ reading = (irker.irk, )
+ else :
+ reading = ()
+
+ poll = syslog.select(syslog.poll, reading=reading) or () # timeout -> ()
+
+ if irker.irk in poll :
+ # irk
+ try :
+ for msg in irker.irk :
+ log.info("irk: %s", msg)
+
+ except EOFError :
+ # exit
+ log.error("irk: EOF")
+ return 1
+
+ # keep going
+ continue
+
+ else :
+ break
+
# done
log.info("Exiting...")
return 0
--- a/bin/pvl.verkko-dhcp Sun Jan 13 01:50:25 2013 +0200
+++ b/bin/pvl.verkko-dhcp Sun Jan 13 01:52:00 2013 +0200
@@ -376,7 +376,7 @@
elif self.syslog :
# wait
- self.syslog.poll(poll)
+ self.syslog.select(poll)
else :
# XXX: for --leases-tail
@@ -400,7 +400,7 @@
syslog = pvl.syslog.args.apply(options, optional=True)
if syslog :
- poll = syslog._poll
+ poll = syslog.poll
else :
log.warning("No syslog source given")
poll = None
--- a/pvl/syslog/syslog.py Sun Jan 13 01:50:25 2013 +0200
+++ b/pvl/syslog/syslog.py Sun Jan 13 01:52:00 2013 +0200
@@ -1,5 +1,7 @@
"""
Syslog handling.
+
+ XXX: this belongs in pvl.syslog.source (apart from __iter__?)
"""
import select
@@ -19,14 +21,14 @@
Using given underlying line source.
source - source to select() if poll=True
- poll - polling behaviour
+ poll - polling behaviour for source
"""
self.source = source
self.parser = parser
self.filter = filter
- self._poll = poll
+ self.poll = poll
def __iter__ (self) :
"""
@@ -38,7 +40,7 @@
def fileno (self) :
return self.source.fileno()
- def poll (self, poll=None, reading=(), writing=()) :
+ def select (self, poll=None, reading=(), writing=()) :
"""
Poll our source for input, with given polling behaviour:
True - select() on source
@@ -48,10 +50,6 @@
Returns None on unknown, empty sequence on timeout, list of readables on select.
"""
- # from __init__
- if poll is None :
- poll = self._poll
-
if poll is True :
timeout = None # block
reading += (self, ) # source.fileno()
@@ -91,6 +89,11 @@
TODO: SIGINT -> finish iteration and return?
"""
+ # from __init__
+ # note that we must interpret poll here, since False -> never poll
+ if poll is None :
+ poll = self.poll
+
# mainloop
while True :
# pull in messages
@@ -101,7 +104,8 @@
# poll
if poll :
# wait
- self.poll(poll)
+ self.select(poll)
+
else :
# done
break