#!/usr/bin/env python3 import database import argparse import sys import logging import csv import json if __name__ == '__main__': # Parsing arguments log = logging.getLogger('feed_dns') parser = argparse.ArgumentParser( description="TODO") parser.add_argument( # '-i', '--input', type=argparse.FileType('rb'), default=sys.stdin.buffer, '-i', '--input', type=argparse.FileType('r'), default=sys.stdin, help="TODO") args = parser.parse_args() DB = database.Database(write=True) try: DB.enter_step('iowait') for row in csv.reader(args.input): # for line in args.input: DB.enter_step('feed_csv_parse') dtype, timestamp, name, value = row # DB.enter_step('feed_json_parse') # data = json.loads(line) # dtype = data['type'][0] # # timestamp = data['timestamp'] # name = data['name'] # value = data['value'] DB.enter_step('feed_switch') if dtype == 'a': for rule in DB.get_ip4(value): if not any(DB.get_domain_in_zone(name)): DB.set_hostname(name, source=rule, updated=int(timestamp)) # updated=int(data['timestamp'])) elif dtype == 'c': for rule in DB.get_domain(value): if not any(DB.get_domain_in_zone(name)): DB.set_hostname(name, source=rule, updated=int(timestamp)) # updated=int(data['timestamp'])) elif dtype == 'p': for rule in DB.get_domain(value): if not any(DB.get_ip4_in_network(name)): log.debug('%s matched by %d: add %s', value, rule, name) DB.set_ip4address(name, source=rule, updated=int(timestamp)) # updated=int(data['timestamp'])) else: raise NotImplementedError(f'Type: {dtype}') DB.enter_step('iowait') except KeyboardInterrupt: log.warning("Interupted.") pass DB.close()