示例#1
0
 def new_session(self):
     if hasattr(self, 'session') and self.session:
         self.session.close()
         self.Session.close_all()
     self.session = self.Session()
     ActivityLog.attach_to(self.session)
     return self.session
示例#2
0
def setup(env):
    settings = env['request'].registry.settings
    env['models'] = aybu.manager.models
    env['engine'] = engine_from_config(settings, 'sqlalchemy.')
    env['request'].set_db_engine = env['engine']
    aybu.manager.models.Base.metadata.bind = env['engine']
    aybu.manager.models.Environment.initialize(settings)
    env['session'] = env['request'].db_session
    ActivityLog.attach_to(env['session'])
示例#3
0
    def run(self):

        self.log.debug("Worker starting ... ")
        self.socket = self.context.socket(zmq.SUB)
        self.socket.setsockopt(zmq.SUBSCRIBE, "")  # subscribe to all
        self.socket.connect('inproc://tasks')
        log = logging.getLogger('aybu')

        while True:
            task = Task(uuid=self.socket.recv(),
                        redis_client=self.redis,
                        started=datetime.datetime.now())
            session = self.Session()
            if not hasattr(session, 'activity_log'):
                ActivityLog.attach_to(session)

            level = int(task.get('log_level', logging.DEBUG))
            handler = RedisPUBHandler(self.config, self.pub_socket,
                                      self.context, level=level)
            handler.set_task(task)
            log.addHandler(handler)
            log.setLevel(level)
            result = None

            try:
                module_name = 'aybu.manager.daemon.commands.{}'\
                        .format(task.command_module)
                module = __import__(module_name,
                                    fromlist=[task.command_name])
                function = getattr(module, task.command_name)
                log.debug('Task received: %s: %s', task, task.command_args)
                result = function(session, task, **task.command_args)
                session.commit()

            except ImportError:
                session.rollback()
                task.status = taskstatus.FAILED
                task.result = "Cannot find resource {}"\
                        .format(task.command_module)
                log.exception(task.result)

            except AttributeError:
                session.rollback()
                task.status = taskstatus.FAILED
                task.result = "Cannot find action {} on {}"\
                        .format(task.command_name, task.command_module)
                log.critical(task.result)

            except Exception:
                session.rollback()
                log.exception('Error while executing task')
                task.status = taskstatus.FAILED
                task.result = str('Error')

            else:
                task.status = taskstatus.FINISHED
                log.info("Task completed successfully")

            finally:
                task['finished'] = datetime.datetime.now()
                task.result = result or ''
                self.pub_socket.send_multipart(["{}.finished".format(task.uuid),
                                                "task endend"])
                session.close()
                log.removeHandler(handler)
                del handler

        self.socket.close()