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")