#!/usr/bin/env python
"""
Run a toiler process.
"""
import importlib
import argparse
import logging

from pymongo import MongoClient

from genisys.toiler import base, stats


def main():
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('package', default='genisys.toiler', nargs='?')
    parser.add_argument('--debug', '-d', action='store_true',
                        help='use debug logging level')
    args = parser.parse_args()
    if args.debug:
        logging.basicConfig(
            level=logging.DEBUG,
            format='%(asctime)-15s %(name)s %(levelname)s %(message)s'
        )
    else:
        logging.basicConfig(level=logging.INFO,
                            format='%(name)s %(levelname)s %(message)s')

    try:
        registry = importlib.import_module(args.package + '.registry')
        config = importlib.import_module(args.package + '.config')
    except ImportError as exc:
        parser.error(str(exc))

    mongo_client = MongoClient(config.MONGODB_URI)
    db = mongo_client[config.MONGODB_DB_NAME]

    reg = registry.get_registry()
    if config.PROCESS_ONLY_VTYPES:
        reg = {key: reg[key] for key in config.PROCESS_ONLY_VTYPES}

    toiler_stats = stats.ToilerStats(config.STATSD_HOST, config.STATSD_PORT)

    toiler = base.Toiler(
        db, reg, is_eager=config.EAGER, stats=toiler_stats,
        forced_update_from_mtime=config.FORCED_UPDATE_FROM_MTIME
    )
    try:
        toiler.run()
    except KeyboardInterrupt:
        pass


if __name__ == '__main__':
    main()
