]> gitweb.michael.orlitzky.com - djbdns-logparse.git/commitdiff
bin/djbdns-logparse.py: move regex handling down a level.
authorMichael Orlitzky <michael@orlitzky.com>
Thu, 15 Sep 2022 22:50:26 +0000 (18:50 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Thu, 15 Sep 2022 22:54:12 +0000 (18:54 -0400)
It was a bit awkward to match a line against a regex, and then to have
to immediately pass that match object into a function that knows what
to do with it (to avoid duplicating work). Now the handle_tinydns_log()
and handle_dnscache_log() functions create the match object themselves,
and signal success or failure by returning a boolean.

bin/djbdns-logparse.py

index 689e33bf221e703b47d26a19342c9406a0997b77..33fc69d391277a699132ca9b82bd4afba2aefb36 100755 (executable)
@@ -128,7 +128,11 @@ def decode_type(words, i):
     qt = words[i]
     words[i] = query_type.get(int(qt), qt)
 
-def handle_dnscache_log(line, match):
+def handle_dnscache_log(line) -> bool:
+    match = dnscache_log_re.match(line)
+    if not match:
+        return False
+
     (timestamp, event, data) = match.groups()
 
     words = data.split()
@@ -198,31 +202,37 @@ def handle_dnscache_log(line, match):
         decode_client(words, 0)
 
     print(timestamp, event, " ".join(words))
+    return True
 
 
-def handle_tinydns_log(line : str, match: re.Match):
+def handle_tinydns_log(line : str) -> bool:
     """
-    Handle a line that matched the ``tinydns_log_re`` regex.
+    Handle a single log line if it matches the ``tinydns_log_re`` regex.
 
     Parameters
     ----------
 
     line : string
-        The tinydns log line that matched ``tinydns_log_re``.
+        The log line that might match ``tinydns_log_re``.
+
+    Returns
+    -------
 
-    match : re.Match
-        The match object that was returned when ``line`` was
-        tested against ``tinydns_log_re``.
+    ``True`` if the log line was handled (that is, if it was really a
+    tinydns log line), and ``False`` otherwise.
 
     Examples
     --------
 
         >>> line = "2022-09-14 21:04:40.206516500 7f000001:9d61:be69 - 0001 www.example.com"
-        >>> match = tinydns_log_re.match(line)
-        >>> handle_tinydns_log(line, match)
+        >>> _ = handle_tinydns_log(line)
         2022-09-14 21:04:40.206516500 dropped query (no authority) from 127.0.0.1:40289 (id 48745): a www.example.com
 
     """
+    match = tinydns_log_re.match(line)
+    if not match:
+        return False
+
     (timestamp, ip, port, id, code, type, name) = match.groups()
     ip = convert_ip(ip)
     port = int(port, 16)
@@ -252,6 +262,7 @@ def handle_tinydns_log(line : str, match: re.Match):
                           id=id,
                           type=type,
                           name=name))
+    return True
 
 
 def parse_logfile(file : typing.TextIO):
@@ -288,17 +299,9 @@ def parse_logfile(file : typing.TextIO):
         tai.stdin.write(line)
         line = tai.stdout.readline()
 
-        match = tinydns_log_re.match(line)
-        if match:
-            handle_tinydns_log(line, match)
-            continue
-
-        match = dnscache_log_re.match(line)
-        if match:
-            handle_dnscache_log(line, match)
-            continue
-
-        print(line)
+        if not handle_tinydns_log(line):
+            if not handle_dnscache_log(line):
+                print(line, end='')
 
 def main():
     r"""