Signed-off-by: Eric Zhao <sczyh16@gmail.com>master
@@ -26,6 +26,11 @@ | |||||
<groupId>com.alibaba.csp</groupId> | <groupId>com.alibaba.csp</groupId> | ||||
<artifactId>sentinel-parameter-flow-control</artifactId> | <artifactId>sentinel-parameter-flow-control</artifactId> | ||||
</dependency> | </dependency> | ||||
<dependency> | |||||
<groupId>com.alibaba.csp</groupId> | |||||
<artifactId>sentinel-transport-common</artifactId> | |||||
<scope>provided</scope> | |||||
</dependency> | |||||
<dependency> | <dependency> | ||||
<groupId>junit</groupId> | <groupId>junit</groupId> | ||||
@@ -19,6 +19,8 @@ import java.util.Objects; | |||||
import java.util.Set; | import java.util.Set; | ||||
/** | /** | ||||
* A group of HTTP API patterns. | |||||
* | |||||
* @author Eric Zhao | * @author Eric Zhao | ||||
* @since 1.6.0 | * @since 1.6.0 | ||||
*/ | */ | ||||
@@ -0,0 +1,36 @@ | |||||
/* | |||||
* Copyright 1999-2019 Alibaba Group Holding Ltd. | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* https://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package com.alibaba.csp.sentinel.adapter.gateway.common.command; | |||||
import com.alibaba.csp.sentinel.adapter.gateway.common.api.GatewayApiDefinitionManager; | |||||
import com.alibaba.csp.sentinel.command.CommandHandler; | |||||
import com.alibaba.csp.sentinel.command.CommandRequest; | |||||
import com.alibaba.csp.sentinel.command.CommandResponse; | |||||
import com.alibaba.csp.sentinel.command.annotation.CommandMapping; | |||||
import com.alibaba.fastjson.JSON; | |||||
/** | |||||
* @author Eric Zhao | |||||
* @since 1.6.0 | |||||
*/ | |||||
@CommandMapping(name = "gateway/getApiDefinitions", desc = "Fetch all customized gateway API groups") | |||||
public class GetGatewayApiDefinitionGroupCommandHandler implements CommandHandler<String> { | |||||
@Override | |||||
public CommandResponse<String> handle(CommandRequest request) { | |||||
return CommandResponse.ofSuccess(JSON.toJSONString(GatewayApiDefinitionManager.getApiDefinitions())); | |||||
} | |||||
} |
@@ -0,0 +1,36 @@ | |||||
/* | |||||
* Copyright 1999-2019 Alibaba Group Holding Ltd. | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* https://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package com.alibaba.csp.sentinel.adapter.gateway.common.command; | |||||
import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayRuleManager; | |||||
import com.alibaba.csp.sentinel.command.CommandHandler; | |||||
import com.alibaba.csp.sentinel.command.CommandRequest; | |||||
import com.alibaba.csp.sentinel.command.CommandResponse; | |||||
import com.alibaba.csp.sentinel.command.annotation.CommandMapping; | |||||
import com.alibaba.fastjson.JSON; | |||||
/** | |||||
* @author Eric Zhao | |||||
* @since 1.6.0 | |||||
*/ | |||||
@CommandMapping(name = "gateway/getRules", desc = "Fetch all gateway rules") | |||||
public class GetGatewayRuleCommandHandler implements CommandHandler<String> { | |||||
@Override | |||||
public CommandResponse<String> handle(CommandRequest request) { | |||||
return CommandResponse.ofSuccess(JSON.toJSONString(GatewayRuleManager.getRules())); | |||||
} | |||||
} |
@@ -0,0 +1,61 @@ | |||||
/* | |||||
* Copyright 1999-2019 Alibaba Group Holding Ltd. | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* https://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package com.alibaba.csp.sentinel.adapter.gateway.common.command; | |||||
import java.net.URLDecoder; | |||||
import java.util.HashSet; | |||||
import java.util.List; | |||||
import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition; | |||||
import com.alibaba.csp.sentinel.adapter.gateway.common.api.GatewayApiDefinitionManager; | |||||
import com.alibaba.csp.sentinel.command.CommandHandler; | |||||
import com.alibaba.csp.sentinel.command.CommandRequest; | |||||
import com.alibaba.csp.sentinel.command.CommandResponse; | |||||
import com.alibaba.csp.sentinel.command.annotation.CommandMapping; | |||||
import com.alibaba.csp.sentinel.log.RecordLog; | |||||
import com.alibaba.csp.sentinel.util.StringUtil; | |||||
import com.alibaba.fastjson.JSONArray; | |||||
/** | |||||
* @author Eric Zhao | |||||
* @since 1.6.0 | |||||
*/ | |||||
@CommandMapping(name = "gateway/updateApiDefinitions", desc = "") | |||||
public class UpdateGatewayApiDefinitionGroupCommandHandler implements CommandHandler<String> { | |||||
@Override | |||||
public CommandResponse<String> handle(CommandRequest request) { | |||||
String data = request.getParam("data"); | |||||
if (StringUtil.isBlank(data)) { | |||||
return CommandResponse.ofFailure(new IllegalArgumentException("Bad data")); | |||||
} | |||||
try { | |||||
data = URLDecoder.decode(data, "utf-8"); | |||||
} catch (Exception e) { | |||||
RecordLog.info("Decode gateway API definition data error", e); | |||||
return CommandResponse.ofFailure(e, "decode gateway API definition data error"); | |||||
} | |||||
RecordLog.info("[API Server] Receiving data change (type: gateway API definition): {0}", data); | |||||
String result = SUCCESS_MSG; | |||||
List<ApiDefinition> apiDefinitions = JSONArray.parseArray(data, ApiDefinition.class); | |||||
GatewayApiDefinitionManager.loadApiDefinitions(new HashSet<>(apiDefinitions)); | |||||
return CommandResponse.ofSuccess(result); | |||||
} | |||||
private static final String SUCCESS_MSG = "success"; | |||||
} |
@@ -0,0 +1,61 @@ | |||||
/* | |||||
* Copyright 1999-2019 Alibaba Group Holding Ltd. | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* https://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package com.alibaba.csp.sentinel.adapter.gateway.common.command; | |||||
import java.net.URLDecoder; | |||||
import java.util.HashSet; | |||||
import java.util.List; | |||||
import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayFlowRule; | |||||
import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayRuleManager; | |||||
import com.alibaba.csp.sentinel.command.CommandHandler; | |||||
import com.alibaba.csp.sentinel.command.CommandRequest; | |||||
import com.alibaba.csp.sentinel.command.CommandResponse; | |||||
import com.alibaba.csp.sentinel.command.annotation.CommandMapping; | |||||
import com.alibaba.csp.sentinel.log.RecordLog; | |||||
import com.alibaba.csp.sentinel.util.StringUtil; | |||||
import com.alibaba.fastjson.JSONArray; | |||||
/** | |||||
* @author Eric Zhao | |||||
* @since 1.6.0 | |||||
*/ | |||||
@CommandMapping(name = "gateway/updateRules", desc = "Update gateway rules") | |||||
public class UpdateGatewayRuleCommandHandler implements CommandHandler<String> { | |||||
@Override | |||||
public CommandResponse<String> handle(CommandRequest request) { | |||||
String data = request.getParam("data"); | |||||
if (StringUtil.isBlank(data)) { | |||||
return CommandResponse.ofFailure(new IllegalArgumentException("Bad data")); | |||||
} | |||||
try { | |||||
data = URLDecoder.decode(data, "utf-8"); | |||||
} catch (Exception e) { | |||||
RecordLog.info("Decode gateway rule data error", e); | |||||
return CommandResponse.ofFailure(e, "decode gateway rule data error"); | |||||
} | |||||
RecordLog.info(String.format("[API Server] Receiving rule change (type: gateway rule): %s", data)); | |||||
String result = SUCCESS_MSG; | |||||
List<GatewayFlowRule> flowRules = JSONArray.parseArray(data, GatewayFlowRule.class); | |||||
GatewayRuleManager.loadRules(new HashSet<>(flowRules)); | |||||
return CommandResponse.ofSuccess(result); | |||||
} | |||||
private static final String SUCCESS_MSG = "success"; | |||||
} |
@@ -0,0 +1,4 @@ | |||||
com.alibaba.csp.sentinel.adapter.gateway.common.command.UpdateGatewayApiDefinitionGroupCommandHandler | |||||
com.alibaba.csp.sentinel.adapter.gateway.common.command.UpdateGatewayRuleCommandHandler | |||||
com.alibaba.csp.sentinel.adapter.gateway.common.command.GetGatewayApiDefinitionGroupCommandHandler | |||||
com.alibaba.csp.sentinel.adapter.gateway.common.command.GetGatewayRuleCommandHandler |