pvl.syslog.syslog: fix SyslogSource polling (--syslog-file -> poll=False, rename to select)
authorTero Marttila <terom@paivola.fi>
Sun, 13 Jan 2013 01:52:00 +0200
changeset 115 9772d43669fb
parent 114 2e88e1d8e604
child 116 89b7385d19ba
pvl.syslog.syslog: fix SyslogSource polling (--syslog-file -> poll=False, rename to select)
bin/pvl.irker-syslog
bin/pvl.verkko-dhcp
pvl/syslog/syslog.py
--- 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