Exemplo n.º 1
0
def controller():
    """
    Connect all the components together and press the big red button.
    """
    multilogging()
    config = DASAnalyticsConfig()
    config.configure()
    logconf = DASAnalyticsLogging(config)

    scheduler = TaskScheduler(config, cherrypy.engine)
    scheduler.subscribe()
    results = ResultManager(config)
    web = AnalyticsWeb(config, scheduler, results)
    logconf.logger.info("Analytics starting")
    logconf.add_handler(results)
    scheduler.add_callback(results.receive_task_result)

    if config.get_tasks():
        logconf.logger.info("Adding %d tasks", len(config.get_tasks()))
        for task in config.get_tasks():
            if config.no_start_offset:
                scheduler.add_task(task, offset=0)
            else:
                scheduler.add_task(task, offset=random.random() * task.interval)

    cherrypy.config["engine.autoreload_on"] = False
    cherrypy.config["server.socket_port"] = config.web_port

    cherrypy.tree.mount(web, config.web_base)

    pid = cherrypy.process.plugins.PIDFile(cherrypy.engine, config.pid)
    pid.subscribe()

    logconf.logger.info("Starting cherrypy")
    cherrypy.engine.start()
    cherrypy.engine.block()
    logconf.logger.info("Stopping cherrypy")