pvl.syslog.source: fix iteration over filter/parser/source
authorTero Marttila <terom@fixme.fi>
Fri, 04 Jan 2013 21:27:17 +0200
changeset 60 9326ed989645
parent 59 caed0ed82709
child 61 cd33c2b53d69
pvl.syslog.source: fix iteration over filter/parser/source
bin/pvl.verkko-syslog
pvl/syslog/args.py
pvl/syslog/syslog.py
--- a/bin/pvl.verkko-syslog	Fri Jan 04 21:26:39 2013 +0200
+++ b/bin/pvl.verkko-syslog	Fri Jan 04 21:27:17 2013 +0200
@@ -67,7 +67,7 @@
 
   
     log.info("Process syslog messages...")
-    for item in syslog :
+    for item in syslog.main() :
         item = rules.apply(item)
 
         if not item :
--- a/pvl/syslog/args.py	Fri Jan 04 21:26:39 2013 +0200
+++ b/pvl/syslog/args.py	Fri Jan 04 21:27:17 2013 +0200
@@ -48,12 +48,12 @@
 
     elif options.syslog_tail :
         # tail file
-        source = tail.TailFile(options.syslog_file)
+        source = tail.TailFile(options.syslog_file, skip=True)
         poll = options.syslog_tail # select(float)
 
     elif options.syslog_file :
         # read file
-        source = tail.Tail(open(options.syslog_file))
+        source = tail.Tail(open(options.syslog_file), skip=True)
         poll = False # do not loop, just read up to EOF
 
     elif optional :
@@ -77,8 +77,5 @@
         prog    = options.syslog_prog,
     )
 
-    # chain iterables
-    syslog = filter(parser(source))
-
     # polling
-    return SyslogSource(syslog, source, poll)
+    return SyslogSource(source, parser, filter, poll)
--- a/pvl/syslog/syslog.py	Fri Jan 04 21:26:39 2013 +0200
+++ b/pvl/syslog/syslog.py	Fri Jan 04 21:27:17 2013 +0200
@@ -14,19 +14,27 @@
         select():able source.
     """
     
-    def __init__ (self, syslog, source, poll=None) :
+    def __init__ (self, source, parser, filter, poll=None) :
         """
             Using given underlying line source.
                 
-                syslog      - iterable
                 source      - source to select() if poll=True
                 poll        - polling behaviour
         """
         
-        self.syslog = syslog
         self.source = source
+        self.parser = parser
+        self.filter = filter
+
         self._poll = poll
 
+    def syslog (self) :
+        """
+            Yield available input.
+        """
+
+        return self.filter(self.parser(self.source))
+
     def poll (self, poll=None) :
         """
             Poll our source for input, with given polling behaviour:
@@ -81,7 +89,7 @@
         # mainloop
         while True :
             # pull in messages
-            for item in self.syslog :
+            for item in self.syslog() :
                 log.debug("%s", item)
                 yield item
             
@@ -95,4 +103,3 @@
 
         log.debug("exit")
 
-    __iter__ = main