コード例 #1
0
ファイル: random_test.py プロジェクト: alena-sheshko/algo
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()
コード例 #2
0
ファイル: find_ip.py プロジェクト: alena-sheshko/algo

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)


コード例 #3
0
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