]>
gitweb.michael.orlitzky.com - djbdns-logparse.git/blob - djbdns/io.py
1 from subprocess
import Popen
, PIPE
2 from typing
import TextIO
3 from djbdns
.dnscache
import handle_dnscache_log
4 from djbdns
.tinydns
import handle_tinydns_log
6 def parse_logfile(file : TextIO
):
8 Process a single log ``file``.
14 An open log file, or stdin.
19 >>> line = "@4000000063227a320c4f3114 7f000001:9d61:be69 - 0001 www.example.com\n"
20 >>> from tempfile import NamedTemporaryFile
21 >>> with NamedTemporaryFile(mode="w", delete=False) as f:
23 >>> f = open(f.name, 'r')
25 2022-09-14 21:04:40.206516500 dropped query (no authority) from 127.0.0.1:40289 (id 48745): a www.example.com
27 >>> from os import remove
31 # Open a pipe to tai64nlocal. We'll write lines of our input file
32 # (the log file) to it, and read back the same lines but with
33 # friendly timestamps in them.
34 with Popen(["tai64nlocal"],
42 line
= tai
.stdout
.readline()
44 friendly_line
= handle_tinydns_log(line
)
46 friendly_line
= handle_dnscache_log(line
)
52 except BrokenPipeError
:
53 # If our stdout is being piped to another process and if
54 # that process closes the pipe, this error will be raised
55 # the next time we try to write to stdout.