#!/usr/bin/python3.13
r"""
Convert tinydns and dnscache logs to human-readable form
"""
# Avoid clobbering the top-level exit() built-in.
import sys

from signal import signal, SIGINT
from argparse import ArgumentParser, FileType
from djbdns.io import parse_logfile

# Create an argument parser using the file's docsctring as its
# description.
parser = ArgumentParser(description = __doc__)

# Parse zero or more positional arguments into a list of
# "logfiles". If none are given, read from stdin instead.
parser.add_argument("logfiles",
                    metavar="LOGFILE",
                    type=FileType("r"),
                    nargs="*",
                    default=[sys.stdin],
                    help="djbdns logfile to process (default: stdin)")

# Warning: argparse automatically opens its file arguments here,
# and they only get closed when the program terminates. There's no
# real benefit to closing them one-at-a-time after calling
# parse_logfile(), because the "scarce" resource of open file
# descriptors gets consumed immediately, before any processing has
# happened. In other words, if you're going to run out of file
# descriptors, it's going to happen right now.
#
# So anyway, don't run this on several million logfiles.
args = parser.parse_args()

# Install a SIGINT handler so thst we don't spit out a stack trace when
# the user accidentally starts the program with no arguments and then
# hits Ctrl-C to kill it.
signal(SIGINT, lambda s,f: sys.exit(0))

for f in args.logfiles:
    parse_logfile(f)
