def post_server_config(self, server_id): """ 处理HTTP URL,参见start_bottle方法的注释。 本方法将处理Forwarder发来的请求(HTTP POST),要求更新Server的当前配置。 方法将试图解析POST正文中的新配置,并试图给Server自身应用这个配置。 如果中途出现错误,将返回HTTP 500错误,并在响应正文中附上错误的信息和产生的异常。 如果没有出现错误,将返回HTTP 200正常响应,并在响应正文中附上更新后的配置,以供检查。 :param basestring server_id: URL中的<server_id>部分。 """ # 检查URL中的server_id是否和自身的ID相符 if server_id != self.config.server_id: return generate_500("Cannot find node with server_id='%s'" % server_id) # 尝试解析POST正文中的ServerConfig try: new_config = parse_server_config_from_string(request.body.read()) except ValueError as e: return generate_500("Error on parsing new config.", e) # 尝试应用新的配置 try: self.apply_config(new_config) except Exception as e: return generate_500("CAUTION: Error on applying new config.", e) # 返回更新后的配置 return self.config.get_json_string()
def post_unreg_server(self): """ 处理HTTP URL,参见start_bottle方法的注释。 本方法处理由Server发送的解除注册请求(HTTP POST)。 请求的正文包含Server的配置(ServerConfig)。 收到请求后,本Forwarder在已知的Server列表中删除这个Server。 """ # 从请求的POST正文中解析Server的配置(ServerConfig) body = request.body.read() try: server_config = parse_server_config_from_string(body) except ValueError as e: return generate_500("Error on parsing server config.", e) # 从已知Server列表中删除这个Server server_id = server_config.server_id self.remove_known_server(server_id) return
def post_reg_server(self): """ 处理HTTP URL,参见start_bottle方法的注释。 本方法处理由Server发送的注册请求(HTTP POST)。 请求的正文包含Server的配置(ServerConfig)。 收到请求后,本Forwarder在已知的Server列表中添加这个Server。 """ # 从请求的POST正文中解析Server的配置(ServerConfig) body = request.body.read() try: server_config = parse_server_config_from_string(body) except ValueError as e: return generate_500("Error on parsing server config.", e) # 添加Server server_addr = request.environ.get("REMOTE_ADDR") server_port = server_config.server_port server_id = server_config.server_id server_desc = server_config.server_desc self.add_known_server(server_addr, server_port, server_id, server_desc, server_config) return