Beispiel #1
0
def main_loop(poller=None, conf=None, foreground=False):
    global shutting_down
    shutting_down = gevent.event.Event()
    gevent.monkey.patch_all(thread=False)

    # define custom signal handlers
    signal.signal(signal.SIGINT, shutdown_handler)
    signal.signal(signal.SIGTERM, shutdown_handler)
    # set up logging
    log_level_string = conf.get("PROVISION_LOG_LEVEL") or conf["LOG_LEVEL"]
    log_level = getattr(logging, log_level_string.upper(), logging.DEBUG)
    logging.getLogger().setLevel(log_level)
    if foreground:
        add_stderr_logger(logging.getLogger(), log_level=log_level)
    else:
        log_file = conf["PROVISION_LOG_FILE"]
        add_rotating_file_logger(logging.getLogger(), log_file,
                log_level=log_level, format=conf["VERBOSE_LOG_FORMAT"])

    logger.debug('Clearing old running commands')
    poller.clear_running_commands(u'Stale command cleared on startup')

    logger.debug('Entering main provision loop')
    while True:
        try:
            poller.poll()
        except:
            logger.exception('Failed to poll for queued commands')
        if shutting_down.wait(timeout=conf.get('SLEEP_TIME', 20)):
            gevent.hub.get_hub().join() # let running greenlets terminate
            break
    logger.debug('Exited main provision loop')
Beispiel #2
0
 def setUp(self):
     self.conf = get_conf()
     self.logger = logging.getLogger(self.__class__.__name__)
     self.logger.propagate = False
     self.logger.setLevel(logging.DEBUG)
     prefix = unique_name(u"watchdogtest%s")
     self.log_file = tempfile.NamedTemporaryFile(prefix=prefix)
     add_rotating_file_logger(
         self.logger,
         self.log_file.name,
         maxBytes=_log_maxbytes,
         backupCount=_log_backupcount,
         log_level=logging.DEBUG,
     )
Beispiel #3
0
def main_loop(transfer, conf=None, foreground=False):
    """infinite daemon loop"""

    # define custom signal handlers
    signal.signal(signal.SIGTERM, daemon_shutdown)

    # set up logging
    log_level_string = conf.get("TRANSFER_LOG_LEVEL") or conf["LOG_LEVEL"]
    log_level = getattr(logging, log_level_string.upper(), logging.DEBUG)
    logging.getLogger().setLevel(log_level)
    if foreground:
        add_stderr_logger(logging.getLogger(), log_level=log_level)
    else:
        log_file = conf["TRANSFER_LOG_FILE"]
        add_rotating_file_logger(logging.getLogger(), log_file,
                log_level=log_level, format=conf["VERBOSE_LOG_FORMAT"])

    while True:
        try:
            transfer.hub._login()
            # Look for logs to transfer if none transfered then sleep
            if not transfer.transfer_logs():
                logger.debug(80 * '-')
                transfer.sleep()

            # write to stdout / stderr
            sys.stdout.flush()
            sys.stderr.flush()

        except socket.sslerror:
            pass # will try again..

        except (ShutdownException, KeyboardInterrupt):
            # ignore keyboard interrupts and sigterm
            signal.signal(signal.SIGINT, signal.SIG_IGN)
            signal.signal(signal.SIGTERM, signal.SIG_IGN)

            logger.info('Exiting...')
            break

        except:
            # this is a little extreme: log the exception and continue
            traceback = Traceback()
            logger.error(traceback.get_traceback())
            transfer.sleep()
Beispiel #4
0
def main_loop(conf=None, foreground=False):
    """infinite daemon loop"""

    # define custom signal handlers
    signal.signal(signal.SIGTERM, daemon_shutdown)

    # set up logging
    log_level_string = conf.get("WATCHDOG_LOG_LEVEL") or conf["LOG_LEVEL"]
    log_level = getattr(logging, log_level_string.upper(), logging.DEBUG)
    logging.getLogger().setLevel(log_level)
    if foreground:
        add_stderr_logger(logging.getLogger(), log_level=log_level)
    else:
        log_file = conf["WATCHDOG_LOG_FILE"]
        add_rotating_file_logger(logging.getLogger(), log_file,
                log_level=log_level, format=conf["VERBOSE_LOG_FORMAT"])

    try:
        watchdog = Watchdog(conf=conf)
    except Exception, ex:
        sys.stderr.write("Error initializing Watchdog: %s\n" % ex)
        sys.exit(1)
Beispiel #5
0
def main_loop(proxy=None, conf=None, foreground=False):
    """infinite daemon loop"""
    global shutting_down
    shutting_down = gevent.event.Event()
    gevent.monkey.patch_all()

    # define custom signal handlers
    signal.signal(signal.SIGINT, daemon_shutdown)
    signal.signal(signal.SIGTERM, daemon_shutdown)

    # set up logging
    log_level_string = conf["LOG_LEVEL"]
    log_level = getattr(logging, log_level_string.upper(), logging.DEBUG)
    logging.getLogger().setLevel(log_level)
    if foreground:
        add_stderr_logger(logging.getLogger(), log_level=log_level)
    else:
        log_file = conf["LOG_FILE"]
        add_rotating_file_logger(logging.getLogger(), log_file,
                log_level=log_level, format=conf["VERBOSE_LOG_FORMAT"])

    login = RepeatTimer(conf['RENEW_SESSION_INTERVAL'], proxy.hub._login,
        stop_on_exception=False)
    login.daemon = True
    login.start()

    server = gevent.wsgi.WSGIServer(('', 8000), WSGIApplication(proxy),
            handler_class=WSGIHandler, spawn=gevent.pool.Pool())
    server.stop_timeout = None
    server.start()

    try:
        shutting_down.wait()
    finally:
        server.stop()
        login.stop()
Beispiel #6
0
import ConfigParser, os, socket
from time import sleep
from bkr.common.message_bus import BeakerBus
from bkr.labcontroller.proxy import Watchdog
from bkr.labcontroller.config import get_conf

import logging
log = logging.getLogger(__name__)
conf = get_conf()
log_level_string = conf.get("QPID_BUS_LOG_LEVEL") or conf["LOG_LEVEL"]
log_level = getattr(logging, log_level_string.upper(), logging.DEBUG)
log_file = conf["QPID_BUS_LOG_FILE"]

add_rotating_file_logger(log,
                        log_file,
                        log_level=log_level,
                        format=conf['VERBOSE_LOG_FORMAT'])

class LabBeakerBus(BeakerBus):

    lc = socket.gethostname()
    global conf
    __conf = conf
    topic_exchange = __conf.get('QPID_TOPIC_EXCHANGE')
    direct_exchange = __conf.get('QPID_DIRECT_EXCHANGE')
    service_queue_name = __conf.get('QPID_SERVICE_QUEUE')
    _broker = __conf.get('QPID_BROKER')
    krb_auth = __conf.get('QPID_KRB_AUTH')
    stopped = True
    _shared_state = {}