Updated Branches: refs/heads/master 56878f061 -> 19217e3c4
Added new test case to validate drools files packaged with autoscaler product and corrected syntax errors Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/19217e3c Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/19217e3c Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/19217e3c Branch: refs/heads/master Commit: 19217e3c4d2bdef40aa99a985fc7ff7933f74fda Parents: 56878f0 Author: Imesh Gunaratne <[email protected]> Authored: Fri Dec 27 11:02:02 2013 +0530 Committer: Imesh Gunaratne <[email protected]> Committed: Fri Dec 27 11:02:02 2013 +0530 ---------------------------------------------------------------------- .../stratos/autoscaler/TestRulesPackaged.java | 66 ++++++++++++++++++++ .../distribution/src/main/conf/scaling.drl | 30 ++++----- 2 files changed, 81 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/19217e3c/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestRulesPackaged.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestRulesPackaged.java b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestRulesPackaged.java new file mode 100644 index 0000000..1e09cc1 --- /dev/null +++ b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestRulesPackaged.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 + * + * http://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 org.apache.stratos.autoscaler; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.drools.KnowledgeBase; +import org.drools.builder.*; +import org.drools.io.Resource; +import org.drools.io.ResourceFactory; +import org.drools.runtime.StatefulKnowledgeSession; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class TestRulesPackaged { + private static final Log log = LogFactory.getLog(TestRulesPackaged.class); + private String minCheckDrlFilePath = "../../products/autoscaler/modules/distribution/src/main/conf/mincheck.drl"; + private String scalingDrlFilePath = "../../products/autoscaler/modules/distribution/src/main/conf/scaling.drl"; + private KnowledgeBase kbase; + private StatefulKnowledgeSession ksession; + + @Test + public void testMinCheckDroolsFile() { + parseDroolsFile(minCheckDrlFilePath); + } + + @Test + public void testScalingDroolsFile() { + parseDroolsFile(scalingDrlFilePath); + } + + private void parseDroolsFile(String droolsFilePath) { + KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); + Resource resource = ResourceFactory.newFileResource(droolsFilePath); + kbuilder.add(resource, ResourceType.DRL); + KnowledgeBuilderErrors errors = kbuilder.getErrors(); + if (errors.size() > 0) { + StringBuilder sb = new StringBuilder(); + for (KnowledgeBuilderError error : errors) { + sb.append(error.getMessage()); + } + if(sb.length() > 0) { + log.error(sb.toString()); + } + throw new IllegalArgumentException(String.format("Could not parse drools file: %s", droolsFilePath)); + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/19217e3c/products/autoscaler/modules/distribution/src/main/conf/scaling.drl ---------------------------------------------------------------------- diff --git a/products/autoscaler/modules/distribution/src/main/conf/scaling.drl b/products/autoscaler/modules/distribution/src/main/conf/scaling.drl index eaf225a..5d3b6c9 100644 --- a/products/autoscaler/modules/distribution/src/main/conf/scaling.drl +++ b/products/autoscaler/modules/distribution/src/main/conf/scaling.drl @@ -80,7 +80,7 @@ dialect "mvel" eval(scaleUpAction) then - log.debug(log.debug("[scale-up] [network-partition] " + $networkPartitionContext.getId() + " [partition]" + partition.getId() + " [cluster] " + cluster + " Scaling up cluster"); + log.debug("[scale-up] [network-partition] " + $networkPartitionContext.getId() + " [partition]" + partition.getId() + " [cluster] " + clusterId + " Scaling up cluster"); $delegator.delegateSpawn($networkPartitionContext.getPartitionCtxt(partition.getId()), clusterId, lbRef); end @@ -119,24 +119,24 @@ dialect "mvel" for(MemberStatsContext memberStatsContext: partitionContext.getMemberStatsContexts().values()){ LoadAverage loadAverage = memberStatsContext.getLoadAverage(); - log.debug("[scale-down] [network-partition] " + $networkPartitionContext.getId() + " [partition]" + partition.getId() + " [cluster] " + clusterId - + " [member] " + memberStatsContext.getMemberId() + " Load average: " + loadAverage.toString()); + log.debug("[scale-down] [network-partition] " + $networkPartitionContext.getId() + " [partition]" + partition.getId() + " [cluster] " + + clusterId + " [member] " + memberStatsContext.getMemberId() + " Load average: " + loadAverage.toString()); MemoryConsumption memoryConsumption = memberStatsContext.getMemoryConsumption(); - log.debug(log.debug("[scale-down] [network-partition] " + $networkPartitionContext.getId() + " [partition]" + partition.getId() + " [cluster] " + clusterId - + " [member] " + memberStatsContext.getMemberId() + " Memory consumption: " + memoryConsumption.toString())); + log.debug("[scale-down] [network-partition] " + $networkPartitionContext.getId() + " [partition]" + partition.getId() + " [cluster] " + + clusterId + " [member] " + memberStatsContext.getMemberId() + " Memory consumption: " + memoryConsumption.toString()); double predictedCpu = $delegator.getPredictedValueForNextMinute(loadAverage.getAverage(),loadAverage.getGradient(),loadAverage.getSecondDerivative(), 1); - log.debug("[scale-down] [network-partition] " + $networkPartitionContext.getId() + " [partition]" + partition.getId() + " [cluster] " + clusterId - + " [member] " + memberStatsContext.getMemberId() + " Predicted CPU: " + predictedCpu); + log.debug("[scale-down] [network-partition] " + $networkPartitionContext.getId() + " [partition]" + partition.getId() + " [cluster] " + + clusterId + " [member] " + memberStatsContext.getMemberId() + " Predicted CPU: " + predictedCpu); double predictedMemoryConsumption = $delegator.getPredictedValueForNextMinute(memoryConsumption.getAverage(),memoryConsumption.getGradient(),memoryConsumption.getSecondDerivative(), 1); - log.debug("[scale-down] [network-partition] " + $networkPartitionContext.getId() + " [partition]" + partition.getId() + " [cluster] " + clusterId - + " [member] " + memberStatsContext.getMemberId() + " Predicted memory consumption: " + predictedMemoryConsumption); + log.debug("[scale-down] [network-partition] " + $networkPartitionContext.getId() + " [partition]" + partition.getId() + " [cluster] " + + clusterId + " [member] " + memberStatsContext.getMemberId() + " Predicted memory consumption: " + predictedMemoryConsumption); double overallLoad = (predictedCpu + predictedMemoryConsumption) / 2; - log.debug("[scale-down] [network-partition] " + $networkPartitionContext.getId() + " [partition]" + partition.getId() + " [cluster] " + clusterId - + " [member] " + memberStatsContext.getMemberId() + " Overall load: " + overallLoad); + log.debug("[scale-down] [network-partition] " + $networkPartitionContext.getId() + " [partition]" + partition.getId() + " [cluster] " + + clusterId + " [member] " + memberStatsContext.getMemberId() + " Overall load: " + overallLoad); if(!foundAValue){ foundAValue = true; @@ -148,14 +148,14 @@ dialect "mvel" } if(selectedMemberStatsContext != null) { - log.debug("[scale-down] [network-partition] " + $networkPartitionContext.getId() + " [partition]" + partition.getId() + " [cluster] " + clusterId + - + " Member with lowest overall load: " + memberStatsContext.getMemberId()); + log.debug("[scale-down] [network-partition] " + $networkPartitionContext.getId() + " [partition]" + partition.getId() + " [cluster] " + + clusterId + " Member with lowest overall load: " + memberStatsContext.getMemberId()); } } } if(selectedMemberStatsContext != null) { - log.debug("[scale-down] [network-partition] " + $networkPartitionContext.getId() + " [partition]" + partition.getId() + " [cluster] " + clusterId + - + " Terminating member: " + memberStatsContext.getMemberId()); + log.debug("[scale-down] [network-partition] " + $networkPartitionContext.getId() + " [partition]" + partition.getId() + " [cluster] " + clusterId + + " Terminating member: " + selectedMemberStatsContext.getMemberId()); $delegator.delegateTerminate(selectedMemberStatsContext.getMemberId()); } end
