use of org.wso2.carbon.apimgt.throttle.policy.deployer.dto.GlobalPolicy in project carbon-apimgt by wso2.
the class GlobalThrottlePolicyMappingUtil method fromGlobalPolicyArrayToListDTO.
/**
* Converts an array of Global policy model objects into REST API DTO objects
*
* @param GlobalPolicies An array of Global Policy model objects
* @return A List DTO of Global Policy DTOs derived from the array of model objects
* @throws UnsupportedThrottleLimitTypeException
*/
public static CustomRuleListDTO fromGlobalPolicyArrayToListDTO(GlobalPolicy[] GlobalPolicies) throws UnsupportedThrottleLimitTypeException {
CustomRuleListDTO listDTO = new CustomRuleListDTO();
List<CustomRuleDTO> globalPolicyDTOList = new ArrayList<>();
if (GlobalPolicies != null) {
for (GlobalPolicy policy : GlobalPolicies) {
CustomRuleDTO dto = fromGlobalThrottlePolicyToDTO(policy);
globalPolicyDTOList.add(dto);
}
}
listDTO.setCount(globalPolicyDTOList.size());
listDTO.setList(globalPolicyDTOList);
return listDTO;
}
use of org.wso2.carbon.apimgt.throttle.policy.deployer.dto.GlobalPolicy in project carbon-apimgt by wso2.
the class APIProviderImpl method deletePolicy.
/**
* @param username username to recognize the tenant
* @param policyLevel policy level
* @param policyName name of the policy to be deleted
* @throws APIManagementException
*/
public void deletePolicy(String username, String policyLevel, String policyName) throws APIManagementException {
int tenantID = APIUtil.getTenantId(username);
if (PolicyConstants.POLICY_LEVEL_API.equals(policyLevel)) {
// need to load whole policy object to get the pipelines
APIPolicy policy = apiMgtDAO.getAPIPolicy(policyName, APIUtil.getTenantId(username));
List<Integer> deletedConditionGroupIds = new ArrayList<>();
for (Pipeline pipeline : policy.getPipelines()) {
deletedConditionGroupIds.add(pipeline.getId());
}
APIPolicyEvent apiPolicyEvent = new APIPolicyEvent(UUID.randomUUID().toString(), System.currentTimeMillis(), APIConstants.EventType.POLICY_DELETE.name(), tenantId, policy.getTenantDomain(), policy.getPolicyId(), policy.getPolicyName(), policy.getDefaultQuotaPolicy().getType(), null, deletedConditionGroupIds);
APIUtil.sendNotification(apiPolicyEvent, APIConstants.NotifierType.POLICY.name());
} else if (PolicyConstants.POLICY_LEVEL_APP.equals(policyLevel)) {
ApplicationPolicy appPolicy = apiMgtDAO.getApplicationPolicy(policyName, tenantID);
ApplicationPolicyEvent applicationPolicyEvent = new ApplicationPolicyEvent(UUID.randomUUID().toString(), System.currentTimeMillis(), APIConstants.EventType.POLICY_DELETE.name(), tenantId, appPolicy.getTenantDomain(), appPolicy.getPolicyId(), appPolicy.getPolicyName(), appPolicy.getDefaultQuotaPolicy().getType());
APIUtil.sendNotification(applicationPolicyEvent, APIConstants.NotifierType.POLICY.name());
} else if (PolicyConstants.POLICY_LEVEL_SUB.equals(policyLevel)) {
SubscriptionPolicy subscriptionPolicy = apiMgtDAO.getSubscriptionPolicy(policyName, tenantID);
// call the monetization extension point to delete plans if any
deleteMonetizationPlan(subscriptionPolicy);
SubscriptionPolicyEvent subscriptionPolicyEvent = new SubscriptionPolicyEvent(UUID.randomUUID().toString(), System.currentTimeMillis(), APIConstants.EventType.POLICY_DELETE.name(), tenantId, subscriptionPolicy.getTenantDomain(), subscriptionPolicy.getPolicyId(), subscriptionPolicy.getPolicyName(), subscriptionPolicy.getDefaultQuotaPolicy().getType(), subscriptionPolicy.getRateLimitCount(), subscriptionPolicy.getRateLimitTimeUnit(), subscriptionPolicy.isStopOnQuotaReach(), subscriptionPolicy.getGraphQLMaxDepth(), subscriptionPolicy.getGraphQLMaxComplexity(), subscriptionPolicy.getSubscriberCount());
APIUtil.sendNotification(subscriptionPolicyEvent, APIConstants.NotifierType.POLICY.name());
} else if (PolicyConstants.POLICY_LEVEL_GLOBAL.equals(policyLevel)) {
GlobalPolicy globalPolicy = apiMgtDAO.getGlobalPolicy(policyName);
GlobalPolicyEvent globalPolicyEvent = new GlobalPolicyEvent(UUID.randomUUID().toString(), System.currentTimeMillis(), APIConstants.EventType.POLICY_DELETE.name(), tenantId, globalPolicy.getTenantDomain(), globalPolicy.getPolicyId(), globalPolicy.getPolicyName());
APIUtil.sendNotification(globalPolicyEvent, APIConstants.NotifierType.POLICY.name());
}
GlobalPolicy globalPolicy = null;
if (PolicyConstants.POLICY_LEVEL_GLOBAL.equals(policyLevel)) {
globalPolicy = apiMgtDAO.getGlobalPolicy(policyName);
}
// remove from database
apiMgtDAO.removeThrottlePolicy(policyLevel, policyName, tenantID);
if (globalPolicy != null) {
publishKeyTemplateEvent(globalPolicy.getKeyTemplate(), "remove");
}
}
use of org.wso2.carbon.apimgt.throttle.policy.deployer.dto.GlobalPolicy in project carbon-apimgt by wso2.
the class ThrottlePolicyJMSMessageListener method handleNotificationMessage.
private void handleNotificationMessage(String eventType, String encodedEvent) {
byte[] eventDecoded = Base64.decodeBase64(encodedEvent);
String eventJson = new String(eventDecoded, StandardCharsets.UTF_8);
if (APIConstants.EventType.POLICY_CREATE.toString().equals(eventType) || APIConstants.EventType.POLICY_UPDATE.toString().equals(eventType) || APIConstants.EventType.POLICY_DELETE.toString().equals(eventType)) {
boolean updatePolicy = APIConstants.EventType.POLICY_CREATE.toString().equals(eventType) || APIConstants.EventType.POLICY_UPDATE.toString().equals(eventType);
boolean deletePolicy = APIConstants.EventType.POLICY_DELETE.toString().equals(eventType);
Runnable task = null;
PolicyEvent event = new Gson().fromJson(eventJson, PolicyEvent.class);
if (event.getPolicyType() == APIConstants.PolicyType.SUBSCRIPTION) {
// handle subscription policies
SubscriptionPolicyEvent policyEvent = new Gson().fromJson(eventJson, SubscriptionPolicyEvent.class);
if (!(APIConstants.UNLIMITED_TIER.equalsIgnoreCase(policyEvent.getPolicyName()) || APIConstants.DEFAULT_SUB_POLICY_ASYNC_UNLIMITED.equalsIgnoreCase(policyEvent.getPolicyName()) || APIConstants.DEFAULT_SUB_POLICY_ASYNC_WH_UNLIMITED.equalsIgnoreCase(policyEvent.getPolicyName()))) {
task = () -> {
try {
if (updatePolicy) {
SubscriptionPolicy subscriptionPolicy = policyRetriever.getSubscriptionPolicy(policyEvent.getPolicyName(), policyEvent.getTenantDomain());
PolicyUtil.deployPolicy(subscriptionPolicy, policyEvent);
} else if (deletePolicy) {
PolicyUtil.undeployPolicy(policyEvent);
}
} catch (ThrottlePolicyDeployerException e) {
log.error("Error in retrieving subscription policy metadata from the database", e);
}
};
}
} else if (event.getPolicyType() == APIConstants.PolicyType.APPLICATION) {
// handle application policies
ApplicationPolicyEvent policyEvent = new Gson().fromJson(eventJson, ApplicationPolicyEvent.class);
if (!APIConstants.UNLIMITED_TIER.equalsIgnoreCase(policyEvent.getPolicyName())) {
task = () -> {
try {
if (updatePolicy) {
ApplicationPolicy applicationPolicy = policyRetriever.getApplicationPolicy(policyEvent.getPolicyName(), policyEvent.getTenantDomain());
PolicyUtil.deployPolicy(applicationPolicy, policyEvent);
} else if (deletePolicy) {
PolicyUtil.undeployPolicy(policyEvent);
}
} catch (ThrottlePolicyDeployerException e) {
log.error("Error in retrieving application policy metadata from the database", e);
}
};
}
} else if (event.getPolicyType() == APIConstants.PolicyType.API) {
// handle API policies
APIPolicyEvent policyEvent = new Gson().fromJson(eventJson, APIPolicyEvent.class);
if (!APIConstants.UNLIMITED_TIER.equalsIgnoreCase(policyEvent.getPolicyName())) {
task = () -> {
try {
if (updatePolicy) {
ApiPolicy apiPolicy = policyRetriever.getApiPolicy(policyEvent.getPolicyName(), policyEvent.getTenantDomain());
PolicyUtil.deployPolicy(apiPolicy, policyEvent);
} else if (deletePolicy) {
PolicyUtil.undeployPolicy(policyEvent);
}
} catch (ThrottlePolicyDeployerException e) {
log.error("Error in retrieving API policy metadata from the database", e);
}
};
}
} else if (event.getPolicyType() == APIConstants.PolicyType.GLOBAL) {
// handle global policies
GlobalPolicyEvent policyEvent = new Gson().fromJson(eventJson, GlobalPolicyEvent.class);
task = () -> {
try {
if (updatePolicy) {
GlobalPolicy globalPolicy = policyRetriever.getGlobalPolicy(policyEvent.getPolicyName(), policyEvent.getTenantDomain());
PolicyUtil.deployPolicy(globalPolicy, policyEvent);
} else if (deletePolicy) {
PolicyUtil.undeployPolicy(policyEvent);
}
} catch (ThrottlePolicyDeployerException e) {
log.error("Error in retrieving Global policy metadata from the database", e);
}
};
}
if (task != null) {
policyRetrievalScheduler.schedule(task, 1, TimeUnit.MILLISECONDS);
}
}
}
use of org.wso2.carbon.apimgt.throttle.policy.deployer.dto.GlobalPolicy in project carbon-apimgt by wso2.
the class PolicyUtil method deployAllPolicies.
/**
* Deploy all the throttle policies retrieved from the database in the Traffic Manager.
*/
public static void deployAllPolicies() {
// Undeploy all existing policies
undeployAllPolicies();
PolicyRetriever policyRetriever = new PolicyRetriever();
try {
// Deploy all the policies retrieved from the database
SubscriptionPolicyList subscriptionPolicies = policyRetriever.getAllSubscriptionPolicies();
for (SubscriptionPolicy subscriptionPolicy : subscriptionPolicies.getList()) {
if (!(APIConstants.UNLIMITED_TIER.equalsIgnoreCase(subscriptionPolicy.getName()) || APIConstants.DEFAULT_SUB_POLICY_ASYNC_UNLIMITED.equalsIgnoreCase(subscriptionPolicy.getName()) || APIConstants.DEFAULT_SUB_POLICY_ASYNC_WH_UNLIMITED.equalsIgnoreCase(subscriptionPolicy.getName()))) {
deployPolicy(subscriptionPolicy, null);
}
}
ApplicationPolicyList applicationPolicies = policyRetriever.getAllApplicationPolicies();
for (ApplicationPolicy applicationPolicy : applicationPolicies.getList()) {
if (!APIConstants.UNLIMITED_TIER.equalsIgnoreCase(applicationPolicy.getName())) {
deployPolicy(applicationPolicy, null);
}
}
ApiPolicyList apiPolicies = policyRetriever.getAllApiPolicies();
for (ApiPolicy apiPolicy : apiPolicies.getList()) {
if (!APIConstants.UNLIMITED_TIER.equalsIgnoreCase(apiPolicy.getName())) {
deployPolicy(apiPolicy, null);
}
}
GlobalPolicyList globalPolicies = policyRetriever.getAllGlobalPolicies();
for (GlobalPolicy globalPolicy : globalPolicies.getList()) {
deployPolicy(globalPolicy, null);
}
} catch (ThrottlePolicyDeployerException e) {
log.error("Error in retrieving throttle policies", e);
}
}
use of org.wso2.carbon.apimgt.throttle.policy.deployer.dto.GlobalPolicy in project carbon-apimgt by wso2.
the class PolicyUtilTest method testAddPolicy_GlobalType.
@Test
public void testAddPolicy_GlobalType() throws ExecutionPlanConfigurationException, ExecutionPlanDependencyValidationException {
ExecutionPlanConfigurationException executionPlanConfigurationException = Mockito.mock(ExecutionPlanConfigurationException.class);
Mockito.when(eventProcessorService.getActiveExecutionPlan(Mockito.anyString())).thenThrow(executionPlanConfigurationException);
GlobalPolicy policy = TestUtil.getPolicyGlobalLevel();
GlobalPolicyEvent policyEvent = new GlobalPolicyEvent(UUID.randomUUID().toString(), System.currentTimeMillis(), APIConstants.EventType.POLICY_CREATE.name(), -1234, policy.getTenantDomain(), policy.getId(), policy.getName());
PolicyUtil.deployPolicy(policy, policyEvent);
Mockito.verify(eventProcessorService, Mockito.times(1)).deployExecutionPlan(Mockito.anyString());
}
Aggregations