|
@@ -15,10 +15,6 @@ |
|
|
*/ |
|
|
*/ |
|
|
package com.alibaba.csp.sentinel.adapter.gateway.common.command; |
|
|
package com.alibaba.csp.sentinel.adapter.gateway.common.command; |
|
|
|
|
|
|
|
|
import java.net.URLDecoder; |
|
|
|
|
|
import java.util.HashSet; |
|
|
|
|
|
import java.util.Set; |
|
|
|
|
|
|
|
|
|
|
|
import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition; |
|
|
import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition; |
|
|
import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiPathPredicateItem; |
|
|
import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiPathPredicateItem; |
|
|
import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiPredicateItem; |
|
|
import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiPredicateItem; |
|
@@ -27,12 +23,17 @@ import com.alibaba.csp.sentinel.command.CommandHandler; |
|
|
import com.alibaba.csp.sentinel.command.CommandRequest; |
|
|
import com.alibaba.csp.sentinel.command.CommandRequest; |
|
|
import com.alibaba.csp.sentinel.command.CommandResponse; |
|
|
import com.alibaba.csp.sentinel.command.CommandResponse; |
|
|
import com.alibaba.csp.sentinel.command.annotation.CommandMapping; |
|
|
import com.alibaba.csp.sentinel.command.annotation.CommandMapping; |
|
|
|
|
|
import com.alibaba.csp.sentinel.datasource.WritableDataSource; |
|
|
import com.alibaba.csp.sentinel.log.RecordLog; |
|
|
import com.alibaba.csp.sentinel.log.RecordLog; |
|
|
import com.alibaba.csp.sentinel.util.StringUtil; |
|
|
import com.alibaba.csp.sentinel.util.StringUtil; |
|
|
import com.alibaba.fastjson.JSON; |
|
|
import com.alibaba.fastjson.JSON; |
|
|
import com.alibaba.fastjson.JSONArray; |
|
|
import com.alibaba.fastjson.JSONArray; |
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
|
|
|
|
|
|
|
|
import java.net.URLDecoder; |
|
|
|
|
|
import java.util.HashSet; |
|
|
|
|
|
import java.util.Set; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* @author Eric Zhao |
|
|
* @author Eric Zhao |
|
|
* @since 1.6.0 |
|
|
* @since 1.6.0 |
|
@@ -40,6 +41,8 @@ import com.alibaba.fastjson.JSONObject; |
|
|
@CommandMapping(name = "gateway/updateApiDefinitions", desc = "") |
|
|
@CommandMapping(name = "gateway/updateApiDefinitions", desc = "") |
|
|
public class UpdateGatewayApiDefinitionGroupCommandHandler implements CommandHandler<String> { |
|
|
public class UpdateGatewayApiDefinitionGroupCommandHandler implements CommandHandler<String> { |
|
|
|
|
|
|
|
|
|
|
|
private static WritableDataSource<Set<ApiDefinition>> apiDefinitionWds = null; |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public CommandResponse<String> handle(CommandRequest request) { |
|
|
public CommandResponse<String> handle(CommandRequest request) { |
|
|
String data = request.getParam("data"); |
|
|
String data = request.getParam("data"); |
|
@@ -59,11 +62,14 @@ public class UpdateGatewayApiDefinitionGroupCommandHandler implements CommandHan |
|
|
|
|
|
|
|
|
Set<ApiDefinition> apiDefinitions = parseJson(data); |
|
|
Set<ApiDefinition> apiDefinitions = parseJson(data); |
|
|
GatewayApiDefinitionManager.loadApiDefinitions(apiDefinitions); |
|
|
GatewayApiDefinitionManager.loadApiDefinitions(apiDefinitions); |
|
|
|
|
|
|
|
|
|
|
|
if (!writeToDataSource(apiDefinitionWds, apiDefinitions)) { |
|
|
|
|
|
result = WRITE_DS_FAILURE_MSG; |
|
|
|
|
|
} |
|
|
return CommandResponse.ofSuccess(result); |
|
|
return CommandResponse.ofSuccess(result); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private static final String SUCCESS_MSG = "success"; |
|
|
private static final String SUCCESS_MSG = "success"; |
|
|
|
|
|
private static final String WRITE_DS_FAILURE_MSG = "partial success (write data source failed)"; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* Parse json data to set of {@link ApiDefinition}. |
|
|
* Parse json data to set of {@link ApiDefinition}. |
|
@@ -88,4 +94,32 @@ public class UpdateGatewayApiDefinitionGroupCommandHandler implements CommandHan |
|
|
|
|
|
|
|
|
return apiDefinitions; |
|
|
return apiDefinitions; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* Write target value to given data source. |
|
|
|
|
|
* |
|
|
|
|
|
* @param dataSource writable data source |
|
|
|
|
|
* @param value target value to save |
|
|
|
|
|
* @param <T> value type |
|
|
|
|
|
* @return true if write successful or data source is empty; false if error occurs |
|
|
|
|
|
*/ |
|
|
|
|
|
private <T> boolean writeToDataSource(WritableDataSource<T> dataSource, T value) { |
|
|
|
|
|
if (dataSource != null) { |
|
|
|
|
|
try { |
|
|
|
|
|
dataSource.write(value); |
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
RecordLog.warn("Write data source failed", e); |
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return true; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public synchronized static WritableDataSource<Set<ApiDefinition>> getWritableDataSource() { |
|
|
|
|
|
return apiDefinitionWds; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public synchronized static void setWritableDataSource(WritableDataSource<Set<ApiDefinition>> apiDefinitionWds) { |
|
|
|
|
|
UpdateGatewayApiDefinitionGroupCommandHandler.apiDefinitionWds = apiDefinitionWds; |
|
|
|
|
|
} |
|
|
} |
|
|
} |