Пример #1
0
    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()
Пример #2
0
    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
Пример #3
0
    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