Exemplo n.º 1
0
    def run(self):
        while True:
            msg = yield self.ws.read_message()
            if msg is None:
                logger.info("bcs client connection closed, %s",
                            self.msg_handler.user_pod_name)
                message = str(_("BCS Console 服务端连接断开,请重新登录"))
                self.msg_handler.close(reason=message)
                break

            if self.msg_handler.stream.closed():
                logger.info("msg_handler connection closed, %s",
                            self.msg_handler.user_pod_name)
                self.ws.close()
                break

            try:
                self.last_output_ts = IOLoop.current().time()

                # 不同类型, 子类继承处理 message
                raw_msg = self.handle_message(msg)
                if not raw_msg:
                    continue

                try:
                    msg = smart_str(raw_msg)
                except Exception:
                    msg = smart_str(raw_msg, "latin1")

                self.output_buffer += msg

                if constants.OUTPUT_LINE_BREAKER in self.output_buffer:
                    line_msg = self.output_buffer.split(
                        constants.OUTPUT_LINE_BREAKER)
                    for i in line_msg[:-1]:
                        record = "%s: %s" % (arrow.now().strftime(
                            "%Y-%m-%d %H:%M:%S.%f"), clean_bash_escape(i))
                        self.output_record.append(record)
                    # 前面多行已经赋值到record, 最后一行可能剩余未换行的数据
                    self.output_buffer = line_msg[-1]

                # 前端对\r不会换行处理,在后台替换,规则是前后没有\n的\r字符,都会添加\n
                # msg = re.sub(r'(?<!\n)\r(?!\n)', '\r\n', msg)

                # 删除异常回车键
                # msg = re.sub(r'[\b]+$', '\b', msg)

                self.msg_handler.write_message(
                    self.encode_console_msg(raw_msg))
            except Exception as e:
                logger.exception(e)
                self.ws.close()
Exemplo n.º 2
0
    def send_message(self, message):
        if not self.bcs_client.ws or self.bcs_client.ws.stream.closed():
            logger.info("session %s, close, message just ignore", self)
            return

        self.input_buffer += message

        if self.input_buffer.endswith(constants.INPUT_LINE_BREAKER):
            # line_msg = ['command', '']
            line_msg = self.input_buffer.split(constants.INPUT_LINE_BREAKER)
            for i in line_msg[:-1]:
                record = "%s: %s" % (arrow.now().strftime("%Y-%m-%d %H:%M:%S.%f"), clean_bash_escape(i))
                logger.debug(record)
                self.input_record.append(record)
            # empty input_buffer
            self.input_buffer = line_msg[-1]

        try:
            self.bcs_client.write_message(message)
        except Exception as e:
            logger.exception(e)
Exemplo n.º 3
0
    def run(self):
        while True:
            msg = yield self.ws.read_message()
            if msg is None:
                logger.info("mesos client connection closed")
                self.msg_handler.close()
                break

            if self.msg_handler.stream.closed():
                logger.info("mesos msg_handler connection closed")
                self.ws.close()
                break

            try:
                self.last_output_ts = IOLoop.current().time()

                try:
                    msg = smart_text(msg)
                except Exception:
                    msg = smart_text(msg, 'latin1')

                self.output_buffer += msg

                if constants.OUTPUT_LINE_BREAKER in self.output_buffer:
                    line_msg = self.output_buffer.split(
                        constants.OUTPUT_LINE_BREAKER)
                    for i in line_msg[:-1]:
                        record = '%s: %s' % (
                            arrow.now().strftime("%Y-%m-%d %H:%M:%S.%f"),
                            utils.clean_bash_escape(i))
                        self.output_record.append(record)
                    # 前面多行已经赋值到record, 最后一行可能剩余未换行的数据
                    self.output_buffer = line_msg[-1]

                self.msg_handler.write_message({'data': msg})
            except Exception as e:
                logger.exception(e)
                self.ws.close()