Skip to content

Instantly share code, notes, and snippets.

@lawesson
Last active September 11, 2016 19:43
Show Gist options
  • Save lawesson/0973842d7607ed3e6ee089e7257aca8d to your computer and use it in GitHub Desktop.
Save lawesson/0973842d7607ed3e6ee089e7257aca8d to your computer and use it in GitHub Desktop.
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