#!/usr/bin/env python

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import sys
import time
from random import sample, choice, randint
from string import lowercase

import avro.datafile
import avro.schema
import avro.io


types = ["A", "CNAME"]

def rand_name():
    return ''.join(sample(lowercase, 15))

def rand_ip():
    return "%s.%s.%s.%s" %(randint(0,255), randint(0,255), randint(0,255), randint(0,255))

def write(n):
    schema_s="""
    { "type": "record",
      "name": "Query",
    "fields" : [
        {"name": "query", "type": "string"},
        {"name": "response", "type": "string"},
        {"name": "type", "type": "string", "default": "A"}
    ]}"""
    out = open("datafile.avr",'w')

    schema = avro.schema.parse(schema_s)
    writer = avro.io.DatumWriter(schema)
    dw = avro.datafile.DataFileWriter(out, writer, schema) #,codec='deflate')
    for _ in xrange(n):
        response = rand_ip()
        query = rand_name()
        type = choice(types)
        dw.append({'query': query, 'response': response, 'type': type})

    dw.close()

def read():
    f = open("datafile.avr")
    reader = avro.io.DatumReader()
    af=avro.datafile.DataFileReader(f,reader)

    x=0
    for _ in af:
        pass

def t(f, *args):
    s = time.time()
    f(*args)
    e = time.time()
    return e-s

if __name__ == "__main__":
    n = int(sys.argv[1])
    print "Write %0.4f" % t(write, n)
    print "Read %0.4f" % t(read)
