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()
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)
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()