#!/usr/bin/python

# dwhois - Distributed WHOIS
# Copyright (C) 2014  Henry Stern <henry@stern.ca>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

import sys
import time

from dwhois.whois import whois, WhoisError
from dwhois.timing import PoissonRateLimiter
from dwhois.worker import Worker, WorkerError
from dwhois.config import user, password, average_time, api_base_url, use_cache, cache_url, cache_db, cache_collection

worker = Worker(api_base_url, user, password)

if use_cache:
    from dwhois.cache import Cache
    cache = Cache(cache_url, cache_db, cache_collection)

for domain in worker.queue():
    print 'Processing %s' % domain
    sys.stdout.flush()

    with PoissonRateLimiter(average_time):
        try:
            whois_data = whois(domain)
            worker.push_results(domain, whois_data)
            if use_cache:
                cache.add({'domain_name':domain, 'submitted':time.time(),
                    'whois': whois_data})
        except WhoisError, e:
            print e.message
            sys.stdout.flush()
        except WorkerError, e:
            print e.message
            sys.stdout.flush()
