Last active
September 11, 2016 19:43
-
-
Save lawesson/0973842d7607ed3e6ee089e7257aca8d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
from pidus import constants | |
from pidus.devices.manager import DevicesManager | |
from pidus.dispatch.serializer import JobSerializer | |
from pidus.dispatch.pid import PIDHandler | |
from pidus.dispatch.timerpool import TimerPool | |
from pidus.logger.logger import LoggerManager, Severity, StreamLogger, AppendingFileLogger, LoggerBuffer | |
from http.manager import HttpManager | |
from transitions.manager import RuleManager | |
from config.config import Config | |
import signal | |
import traceback | |
class Main: | |
def __init__(self): | |
try: | |
config = Config() | |
except: | |
print "Failure reading config file, perhaps JSON syntax error?" | |
raise | |
self.logger = LoggerManager() | |
self.logger.add_listener(LoggerBuffer(StreamLogger()), Severity.DEBUG) | |
if config.logfile: | |
self.logger.add_listener(LoggerBuffer(AppendingFileLogger(config.logfile)), Severity.DEBUG) | |
self.logger.log("Started with parameters " + repr(sys.argv[1:])) | |
self.pid_handler = PIDHandler(constants.PID_FILE, self.logger) | |
def exception_handler(e): | |
import traceback | |
self.logger.warn(traceback.format_exc()) | |
self.timer_pool = TimerPool(exception_handler) | |
self.timer_pool.start() | |
self.serializer = JobSerializer(self.pid_handler.touch) | |
signal.signal(signal.SIGINT, self._signal_handler) | |
signal.signal(signal.SIGHUP, self._signal_handler) | |
self.devices_manager = DevicesManager(config, self.serializer, self.logger, self.timer_pool) | |
self.devices_manager.start() | |
self.rule_manager = RuleManager(self, config, self.serializer, self.logger) | |
self.http = HttpManager(self.devices_manager, self.rule_manager, self.logger) | |
self.http.start() | |
self.rule_manager.start() | |
def run(self): | |
try: | |
self.serializer.serve() | |
except: | |
self.logger.error("Main failure" + traceback.format_exc()) | |
finally: | |
self.logger.debug("Cleaning up dispatch") | |
self.cleanup() | |
def _signal_handler(self, signal, *_): | |
self.logger.debug("Main dispatch caught signal %d" % signal) | |
self.serializer.stop() | |
def cleanup(self): | |
self.rule_manager.stop() | |
self.devices_manager.dispose() | |
self.http.dispose() | |
self.pid_handler.dispose() | |
self.logger.flush() | |
self.timer_pool.stop() | |
def run(): | |
Main().run() | |
if __name__ == '__main__': | |
print "foo!?" | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment