示例#1
0
    def monitor(self):
        """
        Monitor whether a process is dead.

        raises: MessageFailure: when the message thread is dead or exited.
                RunPayloadFailure: when the payload process is dead or exited.
        """

        if self.__no_more_event_time and time.time() - self.__no_more_event_time > self.__waiting_time:
            self.__ret_code = -1
            raise Exception('Too long time (%s seconds) since "No more events" is injected' %
                            (time.time() - self.__no_more_event_time))

        if self.__monitor_log_time is None or self.__monitor_log_time < time.time() - 10 * 60:
            self.__monitor_log_time = time.time()
            logger.info('monitor is checking dead process.')

        if self.__message_thread is None:
            raise MessageFailure("Message thread has not started.")
        if not self.__message_thread.is_alive():
            raise MessageFailure("Message thread is not alive.")

        if self.__process is None:
            raise RunPayloadFailure("Payload process has not started.")
        if self.__process.poll() is not None:
            if self.is_no_more_events:
                logger.info("Payload finished with no more events")
            else:
                self.__ret_code = self.__process.poll()
                raise RunPayloadFailure("Payload process is not alive: %s" % self.__process.poll())

        if self.__stop.is_set() and time.time() > self.__stop_set_time + self.__stop_delay:
            logger.info("Stop has been set for %s seconds, which is more than the stop wait time. Will terminate" % self.__stop_delay)
            self.terminate()
示例#2
0
    def test_run_payload_failure(self):
        """
        Make sure that es message thread works as expected.
        """

        try:
            pass
            raise RunPayloadFailure(a='message a', b='message b')
        except PilotException as ex:
            self.assertIsInstance(ex, PilotException)
            self.assertEqual(ex.get_error_code(), 1305)
            logging.info(
                "\nException: error code: %s\n\nMain message: %s\n\nFullStack: %s"
                % (ex.get_error_code(), str(ex), ex.get_detail()))

        try:
            pass
            raise RunPayloadFailure("Test message")
        except PilotException as ex:
            self.assertIsInstance(ex, PilotException)
            self.assertEqual(ex.get_error_code(), 1305)
            logging.info(
                "\nException: error code: %s\n\nMain message: %s\n\nFullStack: %s"
                % (ex.get_error_code(), str(ex), ex.get_detail()))
示例#3
0
    def handle_out_message(self, message):
        """
        Handle output or error messages from payload.
        Messages from payload will be parsed and the handle_out_message hook is called.

        :param message: The message string received from payload.

        :raises: SetupFailure: when handle_out_message_hook is not set.
                 RunPayloadFailure: when failed to handle an output or error message.
        """

        logger.debug('handling out message: %s' % message)
        if not self.handle_out_message_hook:
            raise SetupFailure("handle_out_message_hook is not set")

        try:
            message_status = self.parse_out_message(message)
            logger.debug('parsed out message: %s' % message_status)
            logger.debug('calling handle_out_message hook(%s) to handle parsed message.' % self.handle_out_message_hook)
            self.handle_out_message_hook(message_status)
        except Exception as e:
            raise RunPayloadFailure("Failed to handle out message: %s" % e)