use of org.wso2.carbon.metrics.manager.Timer in project siddhi by wso2.
the class Scheduler method sendTimerEvents.
/**
* Go through the timestamps stored in the {@link #toNotifyQueue} and send the TIMER events for the expired events.
*/
protected void sendTimerEvents() {
Long toNotifyTime = toNotifyQueue.peek();
long currentTime = siddhiAppContext.getTimestampGenerator().currentTime();
while (toNotifyTime != null && toNotifyTime - currentTime <= 0) {
toNotifyQueue.poll();
StreamEvent timerEvent = streamEventPool.borrowEvent();
timerEvent.setType(StreamEvent.Type.TIMER);
timerEvent.setTimestamp(toNotifyTime);
streamEventChunk.add(timerEvent);
if (lockWrapper != null) {
lockWrapper.lock();
}
threadBarrier.pass();
try {
if (siddhiAppContext.isStatsEnabled() && latencyTracker != null) {
try {
latencyTracker.markIn();
singleThreadEntryValve.process(streamEventChunk);
} finally {
latencyTracker.markOut();
}
} else {
singleThreadEntryValve.process(streamEventChunk);
}
} finally {
if (lockWrapper != null) {
lockWrapper.unlock();
}
}
streamEventChunk.clear();
toNotifyTime = toNotifyQueue.peek();
currentTime = siddhiAppContext.getTimestampGenerator().currentTime();
}
}
use of org.wso2.carbon.metrics.manager.Timer in project carbon-apimgt by wso2.
the class ThrottleHandlerTest method testMsgThrottleOutWhenAPILevelIsThrottled.
@Test
public void testMsgThrottleOutWhenAPILevelIsThrottled() {
ThrottleDataHolder throttleDataHolder = new ThrottleDataHolder();
ThrottleHandler throttleHandler = new ThrottlingHandlerWrapper(timer, throttleDataHolder, throttleEvaluator);
MessageContext messageContext = TestUtils.getMessageContextWithAuthContext(apiContext, apiVersion);
// Set conditional group
verbInfo.setConditionGroups(conditionGroupDTOs);
messageContext.setProperty(VERB_INFO_DTO, verbInfoDTO);
((Axis2MessageContext) messageContext).getAxis2MessageContext().getProperty(org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS);
AuthenticationContext authenticationContext = (AuthenticationContext) messageContext.getProperty(API_AUTH_CONTEXT);
authenticationContext.setApiTier(throttlingTier);
messageContext.setProperty(API_AUTH_CONTEXT, authenticationContext);
ArrayList<ConditionGroupDTO> matchingConditions = new ArrayList<>();
matchingConditions.add(conditionGroupDTO);
String combinedResourceLevelThrottleKey = apiLevelThrottleKey + conditionGroupDTO.getConditionGroupId();
throttleDataHolder.addThrottledAPIKey(apiLevelThrottleKey, System.currentTimeMillis() + 10000);
throttleDataHolder.addThrottleData(combinedResourceLevelThrottleKey, System.currentTimeMillis() + 10000);
Mockito.when(throttleEvaluator.getApplicableConditions(messageContext, authenticationContext, conditionGroupDTOs)).thenReturn(matchingConditions);
// Should throttle out and discontinue message flow, when api level is throttled out
Assert.assertFalse(throttleHandler.handleRequest(messageContext));
}
use of org.wso2.carbon.metrics.manager.Timer in project carbon-apimgt by wso2.
the class ThrottleHandlerTest method testMsgThrottleOutWhenApplicationLevelIsThrottled.
@Test
public void testMsgThrottleOutWhenApplicationLevelIsThrottled() {
ThrottleDataHolder throttleDataHolder = new ThrottleDataHolder();
ThrottleHandler throttleHandler = new ThrottlingHandlerWrapper(timer, throttleDataHolder, throttleEvaluator);
MessageContext messageContext = TestUtils.getMessageContextWithAuthContext(apiContext, apiVersion);
messageContext.setProperty(VERB_INFO_DTO, verbInfoDTO);
((Axis2MessageContext) messageContext).getAxis2MessageContext().getProperty(org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS);
AuthenticationContext authenticationContext = (AuthenticationContext) messageContext.getProperty(API_AUTH_CONTEXT);
authenticationContext.setApiTier(throttlingTier);
messageContext.setProperty(API_AUTH_CONTEXT, authenticationContext);
verbInfo.setConditionGroups(conditionGroupDTOs);
ArrayList<ConditionGroupDTO> matchingConditions = new ArrayList<>();
matchingConditions.add(conditionGroupDTO);
String applicationLevelThrottleKey = authenticationContext.getApplicationId() + ":" + authenticationContext.getUsername() + "@" + throttleHandler.getTenantDomain();
// Set application level throttled out
throttleDataHolder.addThrottleData(applicationLevelThrottleKey, System.currentTimeMillis() + 10000);
// Should discontinue message flow, when application level is throttled
Assert.assertFalse(throttleHandler.handleRequest(messageContext));
}
use of org.wso2.carbon.metrics.manager.Timer in project carbon-apimgt by wso2.
the class ThrottleHandlerTest method testMsgThrottleOutWithUserBlockingConditions.
@Test
public void testMsgThrottleOutWithUserBlockingConditions() {
ThrottleDataHolder throttleDataHolder = new ThrottleDataHolder();
ThrottleHandler throttleHandler = new ThrottlingHandlerWrapper(timer, throttleDataHolder, throttleEvaluator);
MessageContext messageContext = TestUtils.getMessageContextWithAuthContext(apiContext, apiVersion);
messageContext.setProperty(VERB_INFO_DTO, verbInfoDTO);
((Axis2MessageContext) messageContext).getAxis2MessageContext().getProperty(org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS);
AuthenticationContext authenticationContext = (AuthenticationContext) messageContext.getProperty(API_AUTH_CONTEXT);
verbInfo.setConditionGroups(conditionGroupDTOs);
ArrayList<ConditionGroupDTO> matchingConditions = new ArrayList<>();
// Adding a user blocking condition
throttleDataHolder.addUserBlockingCondition(blockedUserWithTenantDomain, blockedUserWithTenantDomain);
matchingConditions.add(conditionGroupDTO);
authenticationContext.setApiTier("Unlimited");
// When a blocked user is invoking
authenticationContext.setUsername(blockedUserWithTenantDomain);
messageContext.setProperty(API_AUTH_CONTEXT, authenticationContext);
throttleDataHolder.addThrottledAPIKey(resourceLevelThrottleKey, System.currentTimeMillis() + 10000);
Assert.assertFalse(throttleHandler.handleRequest(messageContext));
// When an unblocked user is invoking
authenticationContext.setUsername(userWithTenantDomain);
messageContext.setProperty(API_AUTH_CONTEXT, authenticationContext);
throttleDataHolder.addThrottledAPIKey(resourceLevelThrottleKey, System.currentTimeMillis() + 10000);
Assert.assertTrue(throttleHandler.handleRequest(messageContext));
// When a blocked user without tenant domain in the username is invoking
authenticationContext.setUsername(blockedUserWithOutTenantDomain);
messageContext.setProperty(API_AUTH_CONTEXT, authenticationContext);
throttleDataHolder.addThrottledAPIKey(resourceLevelThrottleKey, System.currentTimeMillis() + 10000);
Assert.assertFalse(throttleHandler.handleRequest(messageContext));
// Remove the user block condition and use blocked user to invoke
throttleDataHolder.removeUserBlockingCondition(blockedUserWithTenantDomain);
authenticationContext.setUsername(blockedUserWithTenantDomain);
messageContext.setProperty(API_AUTH_CONTEXT, authenticationContext);
throttleDataHolder.addThrottledAPIKey(resourceLevelThrottleKey, System.currentTimeMillis() + 10000);
Assert.assertTrue(throttleHandler.handleRequest(messageContext));
}
use of org.wso2.carbon.metrics.manager.Timer in project carbon-apimgt by wso2.
the class ThrottleHandlerTest method testMsgThrottleOutWhenSubscriptionLevelIsThrottledAndStopOnQuotaReachIsEnabled.
@Test
public void testMsgThrottleOutWhenSubscriptionLevelIsThrottledAndStopOnQuotaReachIsEnabled() {
ThrottleDataHolder throttleDataHolder = new ThrottleDataHolder();
ThrottleHandler throttleHandler = new ThrottlingHandlerWrapper(timer, throttleDataHolder, throttleEvaluator);
MessageContext messageContext = TestUtils.getMessageContextWithAuthContext(apiContext, apiVersion);
messageContext.setProperty(VERB_INFO_DTO, verbInfoDTO);
((Axis2MessageContext) messageContext).getAxis2MessageContext().getProperty(org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS);
AuthenticationContext authenticationContext = (AuthenticationContext) messageContext.getProperty(API_AUTH_CONTEXT);
authenticationContext.setApiTier(throttlingTier);
authenticationContext.setStopOnQuotaReach(true);
messageContext.setProperty(API_AUTH_CONTEXT, authenticationContext);
verbInfo.setConditionGroups(conditionGroupDTOs);
ArrayList<ConditionGroupDTO> matchingConditions = new ArrayList<>();
matchingConditions.add(conditionGroupDTO);
String subscriptionLevelThrottleKey = authenticationContext.getApplicationId() + ":" + apiContext + ":" + apiVersion + ":" + authenticationContext.getTier();
throttleDataHolder.addThrottleData(subscriptionLevelThrottleKey, System.currentTimeMillis() + 10000);
// Should throttle out and discontinue message flow, when subscription level is throttled out
// and stop on quota reach is enabled
Assert.assertFalse(throttleHandler.handleRequest(messageContext));
}
Aggregations