def test_random(range_num): print('test_random(%d)' % range_num) users = list(gen_users(1000, min_ip, max_ip)) ranges = [Segment(*r) for r in gen_ranges(range_num, min_ip, max_ip)] tree = IntervalTree.build_tree(ranges) if not tree and range_num == 0: return for user, ip in users: res1 = [s.name for s in tree.find(ip)] res2 = find_user_ranges_lazy(ip, ranges) if sorted(res1) != sorted(res2): print('Error: [%s] != [%s]' % (','.join(res1), ','.join(res2))) print('User: %d\t%s\n' % (user, ip_address(ip))) with open('test\\failed_ranges.tsv', 'w+') as f: for s in ranges: f.write('%s-%s\t%s\n' % (ip_address(s.left), ip_address(s.right), s.name)) with open('test\\failed_transactions.tsv', 'w+') as f: f.write('%d\t%s\n' % (user, ip_address(ip))) exit()
def parse_range_file(filename): segments = [] with open(filename) as f: for l in f: segments.append(parse_range(*l.rstrip().split('\t'))) return segments if __name__ == '__main__': parser = argparse.ArgumentParser(description='Find user networks.') parser.add_argument('range_file') parser.add_argument('user_file') parser.add_argument('output_file') args = parser.parse_args() tree = IntervalTree.build_tree(parse_range_file(args.range_file)) if not tree: print('Range file is empty!') exit() with open(args.output_file, 'w+') as output: for user, ip in parse_user_file(args.user_file): res = tree.find(ip) if res: output.write('%s\t%s\n' % (user, ','.join(map(lambda x: x.name, res)))) else: output.write('%s\tnot found\n' % user)
import time from ranges_gen import gen_ranges from users_gen import gen_users from find_ip import parse_ip from interval_tree import IntervalTree, Segment if __name__ == '__main__': min_ip = parse_ip('5.0.0.0') max_ip = parse_ip('10.0.0.0') users = list(gen_users(1000, min_ip, max_ip)) num = 256 print(' %s | %s | %s' % ('ranges', 'build tree', 'find 1000 users')) for i in range(14): ranges = [Segment(*r) for r in gen_ranges(num, min_ip, max_ip)] start = time.time() tree = IntervalTree.build_tree(ranges) build_time = time.time() - start start = time.time() for user, ip in users: tree.find(ip) print('%10d | %10fs | %10fs' % (num, build_time, time.time() - start)) num *= 2