2020-08-29 06:13:59 -07:00
|
|
|
def ui(program, args):
|
|
|
|
from .db import RespoDB
|
|
|
|
from .dns import main
|
2020-09-03 03:41:47 -07:00
|
|
|
from .ip_info import IpInfoByIpApi
|
2020-08-29 06:13:59 -07:00
|
|
|
from .structs import Options
|
|
|
|
from argparse import ArgumentParser
|
|
|
|
from asyncio import run
|
|
|
|
import respodns.checks as chk
|
|
|
|
|
|
|
|
name = "respodns6"
|
2020-08-29 06:34:46 -07:00
|
|
|
desc = name + ": test and log DNS records"
|
|
|
|
parser = ArgumentParser(name, description=desc)
|
2020-08-29 06:13:59 -07:00
|
|
|
|
2020-08-29 06:34:46 -07:00
|
|
|
desc = "a path to a file containing IPv4 addresses which host DNS servers"
|
2020-09-04 04:09:49 -07:00
|
|
|
parser.add_argument("path", metavar="file-path", nargs="+", help=desc)
|
2020-08-29 06:13:59 -07:00
|
|
|
|
2020-08-29 06:34:46 -07:00
|
|
|
parser.add_argument("--database", help="specify database for logging")
|
2020-08-29 06:13:59 -07:00
|
|
|
|
2020-09-04 04:09:49 -07:00
|
|
|
desc = "enable pretty-printing progress to stderr"
|
|
|
|
parser.add_argument("--progress", action="store_true", help=desc)
|
|
|
|
|
2020-08-29 06:13:59 -07:00
|
|
|
a = parser.parse_args(args)
|
|
|
|
|
2020-09-04 07:06:37 -07:00
|
|
|
checks = chk.first + chk.likely
|
2020-08-29 06:13:59 -07:00
|
|
|
|
|
|
|
opts = Options()
|
|
|
|
opts.dry = a.database is None
|
|
|
|
opts.early_stopping = opts.dry
|
2020-09-04 04:09:49 -07:00
|
|
|
opts.progress = a.progress
|
2020-08-29 06:13:59 -07:00
|
|
|
|
2020-09-03 03:41:47 -07:00
|
|
|
opts.ipinfo = IpInfoByIpApi("ipinfo_cache.csv")
|
|
|
|
|
2020-08-29 06:13:59 -07:00
|
|
|
if a.database is not None:
|
|
|
|
if a.database.startswith("sqlite:"):
|
|
|
|
uri = a.database
|
|
|
|
else:
|
|
|
|
uri = "sqlite:///" + a.database
|
|
|
|
|
|
|
|
def runwrap(db, debug=False):
|
|
|
|
if debug:
|
|
|
|
import logging
|
|
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
|
|
run(main(db, a.path, checks, opts), debug=True)
|
|
|
|
else:
|
|
|
|
run(main(db, a.path, checks, opts))
|
|
|
|
|
|
|
|
if opts.dry:
|
|
|
|
runwrap(None)
|
|
|
|
else:
|
|
|
|
# log to a database.
|
|
|
|
db = RespoDB(uri, create=True)
|
|
|
|
with db: # TODO: .open and .close methods for manual invocation.
|
|
|
|
with db.execution as execution: # TODO: clean up this interface.
|
|
|
|
opts.execution = execution
|
|
|
|
runwrap(db)
|