Esempio n. 1
0
    def on_message(self, bot: Bot, message: bytes):
        """When server receives message from bot."""
        message = super().on_message(bot, message)
        if message is None:
            return

        event_type = message.get("event_type")
        if event_type == "log":
            self.log.emit(
                bot,
                Log(bot.id(), message.get("thread_name"), message.get("name"),
                    message.get("level"), message.get("msg")))

        elif event_type == "task":
            state = message.get("state")
            task_id = message.get("task_id")
            task = bot.get_task_by_id(task_id)
            if task:
                if state == "queued":
                    task.set_queued(datetime.datetime.now())
                elif state == "started":
                    task.set_running(datetime.datetime.now())
                elif state == "finished":
                    task.set_finished(datetime.datetime.now(),
                                      message.get("result"),
                                      message.get("exit_code"))
                else:
                    self.logger.error(
                        "Unknown task state for message {}".format(message))
                    return
                self.task.emit(task)
            else:
                self.logger.error(
                    "Could not find task with ID {} for bot {}".format(
                        task_id, bot.id()))

        elif event_type == "info":
            event = Info(bot.id(), message.get("info"), message.get("results"))
            bot.on_info_received(event)
            self.info.emit(event)

        elif event_type == "shell":
            event = message.get("event")
            if event == "error":
                self.shell_error.emit(bot, message.get("error"))
            elif event == "output":
                self.shell_output.emit(bot, str(message.get("output")))

        else:
            self.logger.error(
                "BOT-{}: Failed to find matching event type for {}".format(
                    bot.id(), message))
        self.message.emit(bot, message)
Esempio n. 2
0
 def send_info(self, bot: Bot, info_list: list):
     """Send info request."""
     info = Info(bot.id(), info_list)
     bot.on_info_received(info)
     bot.write(info.create())