#!/usr/bin/env python
# -*- coding: utf-8 -*-
# vim: ai ts=4 sts=4 et sw=4 nu
"""
(c) 2014 Ronan Delacroix
Job Manager Utility - Main File
:author: Ronan Delacroix
"""
import os
import sys
import time
import argparse
import jobmanager
import jobmanager.client
import mongoengine
import tbx
import tbx.service
import tbx.settings
import tbx.log
import logging

settings = tbx.settings.from_file('client', application_name='jobmanager')
tbx.log.configure_logging("jobmanager-client", application_name='jobmanager', settings=settings.LOG)


def import_from_name(module_name):
    globals()[module_name] = __import__(module_name)


def main():
    while True:
        try:
            mongoengine.connect(host=settings.DATABASE.HOST, port=settings.DATABASE.PORT, db=settings.DATABASE.NAME)

            for mod in settings.JOBS.MODULES:
                try:
                    import_from_name(mod)
                except ImportError:
                    logging.error("Can't import Job module '%s' as defined in settings. Exiting." % mod)
                    exit(1)

            result = tbx.service.launch_service(service=jobmanager.client.JobManagerClientService)

            #everything went normal
            exit(result)
        except mongoengine.ConnectionError:
            logging.exception("Database connection error to %s. Waiting 10 seconds for retry..." % settings.DATABASE.HOST)
            time.sleep(10)
        except Exception as e:
            logging.exception("Unknown Error (%s). Waiting 10 seconds for retry..." % str(e))
            time.sleep(10)

    exit(0)

if __name__ == "__main__":
    main()