http://git-wip-us.apache.org/repos/asf/stratos/blob/b38e27c9/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/statistics/publisher/MemberInformationPublisher.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/statistics/publisher/MemberInformationPublisher.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/statistics/publisher/MemberInformationPublisher.java new file mode 100644 index 0000000..ffe0380 --- /dev/null +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/statistics/publisher/MemberInformationPublisher.java @@ -0,0 +1,38 @@ +/* + * 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.cloud.controller.statistics.publisher; + +import org.apache.stratos.cloud.controller.domain.InstanceMetadata; +import org.apache.stratos.common.statistics.publisher.StatisticsPublisher; + +/** + * Member Information Publisher interface. + */ +public interface MemberInformationPublisher extends StatisticsPublisher { + /** + * Publishing member information. + * + * @param memberId Member Id + * @param scalingDecisionId Scaling Decision Id + * @param metadata InstanceMetadata + */ + public void publish(String memberId, String scalingDecisionId, InstanceMetadata metadata); + +}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b38e27c9/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/statistics/publisher/MemberStatusPublisher.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/statistics/publisher/MemberStatusPublisher.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/statistics/publisher/MemberStatusPublisher.java new file mode 100644 index 0000000..fad1006 --- /dev/null +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/statistics/publisher/MemberStatusPublisher.java @@ -0,0 +1,45 @@ +/* + * 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.cloud.controller.statistics.publisher; + +import org.apache.stratos.common.statistics.publisher.StatisticsPublisher; + +/** + * Member Status Publisher Interface. + */ +public interface MemberStatusPublisher extends StatisticsPublisher { + /** + * Publishing member status. + * + * @param timestamp Status changed time + * @param applicationId Application Id + * @param clusterId Cluster Id + * @param clusterAlias Cluster Alias + * @param clusterInstanceId Cluster Instance Id + * @param serviceName Service Name + * @param networkPartitionId Network Partition Id + * @param partitionId Partition Id + * @param memberId Member Id + * @param status Member Status + */ + void publish(Long timestamp, String applicationId, String clusterId, + String clusterAlias, String clusterInstanceId, String serviceName, + String networkPartitionId, String partitionId, String memberId, String status); +} http://git-wip-us.apache.org/repos/asf/stratos/blob/b38e27c9/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java index a2f5bab..4d5c59f 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java @@ -132,6 +132,38 @@ public final class CloudControllerConstants { public static final String PROXY_PORT_LABEL = "proxyPort"; /** + * Thrift event stream attributes + */ + public static final String MEMBER_ID_COL = "member_id"; + public static final String SERVICE_NAME_COL = "service_name"; + public static final String INSTANCE_TYPE_COL = "instance_type"; + public static final String TENANT_ID_COL = "tenant_id"; + public static final String APPLICATION_ID_COL = "application_id"; + public static final String CLUSTER_ID_COL = "cluster_id"; + public static final String CLUSTER_ALIAS_COL = "cluster_alias"; + public static final String CLUSTER_INSTANCE_ID_COL = "cluster_instance_id"; + public static final String PARTITION_ID_COL = "partition_id"; + public static final String NETWORK_PARTITION_ID_COL = "network_partition_id"; + public static final String IS_MULTI_TENANT_COL = "is_multi_tenant"; + public static final String MEMBER_STATUS_COL = "member_status"; + public static final String HOST_NAME_COL = "host_name"; + public static final String HYPERVISOR_COL = "hypervisor"; + public static final String CPU_COL = "cpu"; + public static final String RAM_COL = "ram"; + public static final String IMAGE_ID_COL = "image_id"; + public static final String LOGIN_PORT_COL = "login_port"; + public static final String OS_NAME_COL = "os_name"; + public static final String OS_VERSION_COL = "os_version"; + public static final String OS_ARCH_COL = "os_architecture"; + public static final String OS_BIT_COL = "is_64bit_os"; + public static final String PRIV_IP_COL = "private_IP_addresses"; + public static final String PUB_IP_COL = "public_IP_addresses"; + public static final String ALLOCATED_IP_COL = "allocated_IP_addresses"; + public static final String TIMESTAMP_COL = "timestamp"; + public static final String SCALING_DECISION_ID_COL = "scaling_decision_id"; + + + /** * Properties */ public static final String REGION_PROPERTY = "region"; http://git-wip-us.apache.org/repos/asf/stratos/blob/b38e27c9/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java index f9b585e..6e527ae 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java @@ -264,7 +264,8 @@ public class CloudControllerUtil { return "[" + partitionStr + "]"; } - public static void validateKubernetesCluster(KubernetesCluster kubernetesCluster) throws InvalidKubernetesClusterException { + public static void validateKubernetesCluster(KubernetesCluster kubernetesCluster) + throws InvalidKubernetesClusterException { CloudControllerContext context = CloudControllerContext.getInstance(); if (kubernetesCluster == null) { @@ -306,7 +307,8 @@ public class CloudControllerUtil { for (KubernetesHost kubernetesHost : kubernetesCluster.getKubernetesHosts()) { if (hostIds.contains(kubernetesHost.getHostId())) { throw new InvalidKubernetesClusterException( - String.format("Kubernetes host [id] %s already defined in the request", kubernetesHost.getHostId())); + String.format("Kubernetes host [id] %s already defined in the request", + kubernetesHost.getHostId())); } hostIds.add(kubernetesHost.getHostId()); @@ -320,7 +322,8 @@ public class CloudControllerUtil { } } - private static void validateKubernetesHosts(KubernetesHost[] kubernetesHosts) throws InvalidKubernetesHostException { + private static void validateKubernetesHosts(KubernetesHost[] kubernetesHosts) + throws InvalidKubernetesHostException { if (kubernetesHosts == null || kubernetesHosts.length == 0) { return; } @@ -352,7 +355,8 @@ public class CloudControllerUtil { } } - public static void validateKubernetesMaster(KubernetesMaster kubernetesMaster) throws InvalidKubernetesMasterException { + public static void validateKubernetesMaster(KubernetesMaster kubernetesMaster) + throws InvalidKubernetesMasterException { try { validateKubernetesHost(kubernetesMaster); } catch (InvalidKubernetesHostException e) { @@ -376,4 +380,8 @@ public class CloudControllerUtil { return LoadBalancingIPType.Private; } } + + public static String getAliasFromClusterId(String clusterId) { + return StringUtils.substringBefore(StringUtils.substringAfter(clusterId, "."), "."); + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/b38e27c9/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java index fdbc54d..31d08e0 100644 --- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java +++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java @@ -46,8 +46,8 @@ public class AutoscalerServiceClient { StratosConstants.DEFAULT_CLIENT_SOCKET_TIMEOUT : System.getProperty(StratosConstants.AUTOSCALER_CLIENT_SOCKET_TIMEOUT); - String autosclaerConnectionTimeout = System.getProperty(StratosConstants.AUTOSCALER_CLIENT_CONNECTION_TIMEOUT) == null ? - StratosConstants.DEFAULT_CLIENT_CONNECTION_TIMEOUT : + String autosclaerConnectionTimeout = System.getProperty(StratosConstants.AUTOSCALER_CLIENT_CONNECTION_TIMEOUT) + == null ? StratosConstants.DEFAULT_CLIENT_CONNECTION_TIMEOUT : System.getProperty(StratosConstants.AUTOSCALER_CLIENT_CONNECTION_TIMEOUT); try { @@ -123,7 +123,8 @@ public class AutoscalerServiceClient { public void addApplicationPolicy(ApplicationPolicy applicationPolicy) throws RemoteException, - AutoscalerServiceRemoteExceptionException, AutoscalerServiceInvalidApplicationPolicyExceptionException, AutoscalerServiceApplicationPolicyAlreadyExistsExceptionException { + AutoscalerServiceRemoteExceptionException, AutoscalerServiceInvalidApplicationPolicyExceptionException, + AutoscalerServiceApplicationPolicyAlreadyExistsExceptionException { stub.addApplicationPolicy(applicationPolicy); } @@ -142,7 +143,8 @@ public class AutoscalerServiceClient { } public void removeApplicationPolicy(String applicationPolicyId) - throws RemoteException, AutoscalerServiceInvalidPolicyExceptionException, AutoscalerServiceUnremovablePolicyExceptionException { + throws RemoteException, AutoscalerServiceInvalidPolicyExceptionException, + AutoscalerServiceUnremovablePolicyExceptionException { stub.removeApplicationPolicy(applicationPolicyId); } @@ -191,8 +193,8 @@ public class AutoscalerServiceClient { stub.addServiceGroup(serviceGroup); } - public void updateServiceGroup(ServiceGroup serviceGroup) throws AutoscalerServiceInvalidServiceGroupExceptionException, - RemoteException { + public void updateServiceGroup(ServiceGroup serviceGroup) + throws AutoscalerServiceInvalidServiceGroupExceptionException, RemoteException { stub.updateServiceGroup(serviceGroup); } @@ -212,14 +214,16 @@ public class AutoscalerServiceClient { public void addDeploymentPolicy(DeploymentPolicy deploymentPolicy) throws RemoteException, AutoscalerServiceRemoteExceptionException, - AutoscalerServiceInvalidDeploymentPolicyExceptionException, AutoscalerServiceDeploymentPolicyAlreadyExistsExceptionException { + AutoscalerServiceInvalidDeploymentPolicyExceptionException, + AutoscalerServiceDeploymentPolicyAlreadyExistsExceptionException { stub.addDeployementPolicy(deploymentPolicy); } public void updateDeploymentPolicy(DeploymentPolicy deploymentPolicy) throws RemoteException, AutoscalerServiceDeploymentPolicyNotExistsExceptionException, AutoscalerServiceInvalidDeploymentPolicyExceptionException, AutoscalerServiceRemoteExceptionException, - AutoscalerServiceInvalidPolicyExceptionException, AutoscalerServiceCloudControllerConnectionExceptionException { + AutoscalerServiceInvalidPolicyExceptionException, + AutoscalerServiceCloudControllerConnectionExceptionException { stub.updateDeploymentPolicy(deploymentPolicy); } http://git-wip-us.apache.org/repos/asf/stratos/blob/b38e27c9/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java index ee0477c..143de54 100644 --- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java +++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java @@ -158,6 +158,7 @@ public class StratosConstants { public static final String MAX_CHECK_DROOL_FILE = "maxcheck.drl"; public static final String OBSOLETE_CHECK_DROOL_FILE = "obsoletecheck.drl"; public static final String MIN_COUNT = "MIN_COUNT"; + public static final String SCALING_DECISION_ID = "SCALING_DECISION_ID"; // Policy and definition related constants public static final int PUBLIC_DEFINITION = 0; http://git-wip-us.apache.org/repos/asf/stratos/blob/b38e27c9/products/stratos/modules/distribution/src/main/conf/drools/dependent-scaling.drl ---------------------------------------------------------------------- diff --git a/products/stratos/modules/distribution/src/main/conf/drools/dependent-scaling.drl b/products/stratos/modules/distribution/src/main/conf/drools/dependent-scaling.drl index 6e76706..c4a1141 100644 --- a/products/stratos/modules/distribution/src/main/conf/drools/dependent-scaling.drl +++ b/products/stratos/modules/distribution/src/main/conf/drools/dependent-scaling.drl @@ -27,6 +27,10 @@ import org.apache.stratos.autoscaler.pojo.policy.autoscale.RequestsInFlight; import org.apache.stratos.autoscaler.pojo.policy.autoscale.LoadThresholds; import org.apache.stratos.autoscaler.pojo.policy.autoscale.MemoryConsumption; import org.apache.stratos.autoscaler.pojo.policy.autoscale.LoadAverage; +import java.util.UUID; +import org.apache.stratos.autoscaler.statistics.publisher.ScalingDecisionPublisher; +import org.apache.stratos.autoscaler.statistics.publisher.AutoscalerPublisherFactory; +import org.apache.stratos.common.statistics.publisher.StatisticsPublisherType; global org.apache.stratos.autoscaler.rule.RuleLog log; global java.lang.String clusterId; @@ -75,6 +79,21 @@ dialect "mvel" " [cluster-instance] " + clusterInstanceContext.getId() + " max member count is: " + clusterMaxMembers + " current member count is: " + nonTerminatedMembers); + String scalingDecisionId = clusterId + "-" + UUID.randomUUID().toString(); + long scalingTime = System.currentTimeMillis(); + String scalingReason = "DEPENDENCY"; + ScalingDecisionPublisher scalingDecisionPublisher = AutoscalerPublisherFactory.createScalingDecisionPublisher(StatisticsPublisherType.WSO2DAS); + if (scalingDecisionPublisher.isEnabled()) { + log.debug("Publishing scaling decision to DAS"); + scalingDecisionPublisher.publish(scalingTime, scalingDecisionId, clusterId, + clusterInstanceContext.getMinInstanceCount(), clusterMaxMembers, + 0, 0, 0, 0, 0, 0,0, 0, 0, + additionalInstances + nonTerminatedMembers, + 0, additionalInstances, scalingReason); + } else { + log.warn("Scaling decision publisher is not enabled"); + } + while(count != additionalInstances && partitionsAvailable) { ClusterLevelPartitionContext partitionContext = (ClusterLevelPartitionContext)partitionAlgorithm.getNextScaleUpPartitionContext(clusterInstanceContext.getPartitionCtxtsAsAnArray()); @@ -82,7 +101,7 @@ dialect "mvel" log.info("[dependency-scale] [scale-up] Partition available, hence trying to spawn an instance to scale up!" ); log.debug("[dependency-scale] [scale-up] " + " [partition] " + partitionContext.getPartitionId() + " [cluster] " + clusterId ); - delegator.delegateSpawn(partitionContext, clusterId, clusterInstanceContext.getId()); + delegator.delegateSpawn(partitionContext, clusterId, clusterInstanceContext.getId(), scalingDecisionId); count++; } else { partitionsAvailable = false; http://git-wip-us.apache.org/repos/asf/stratos/blob/b38e27c9/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl ---------------------------------------------------------------------- diff --git a/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl b/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl index 1254c7c..5ce6d21 100755 --- a/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl +++ b/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl @@ -37,6 +37,10 @@ import org.apache.commons.logging.Log; import org.apache.stratos.cloud.controller.stub.domain.Partition; import org.apache.stratos.cloud.controller.stub.domain.MemberContext; import org.apache.stratos.autoscaler.context.cluster.ClusterInstanceContext; +import java.util.UUID; +import org.apache.stratos.autoscaler.statistics.publisher.ScalingDecisionPublisher; +import org.apache.stratos.autoscaler.statistics.publisher.AutoscalerPublisherFactory; +import org.apache.stratos.common.statistics.publisher.StatisticsPublisherType; global org.apache.stratos.autoscaler.rule.RuleLog log; global org.apache.stratos.autoscaler.pojo.policy.PolicyManager manager; @@ -67,6 +71,21 @@ dialect "mvel" int count = 0; boolean partitionsAvailable = true; + String scalingDecisionId = clusterId + "-" + UUID.randomUUID().toString(); + long scalingTime = System.currentTimeMillis(); + String scalingReason = "MIN"; + ScalingDecisionPublisher scalingDecisionPublisher = AutoscalerPublisherFactory.createScalingDecisionPublisher(StatisticsPublisherType.WSO2DAS); + if (scalingDecisionPublisher.isEnabled()) { + log.debug("Publishing scaling decision to DAS"); + scalingDecisionPublisher.publish(scalingTime, scalingDecisionId, clusterId, + clusterInstanceContext.getMinInstanceCount(), + clusterInstanceContext.getMaxInstanceCount(), + 0, 0, 0, 0, 0, 0,0, 0, 0, + clusterInstanceContext.getMinInstanceCount(), 0, + additionalInstances, scalingReason); + } else { + log.warn("Scaling decision publisher is not enabled"); + } while(count != additionalInstances && partitionsAvailable){ ClusterLevelPartitionContext partitionContext = (ClusterLevelPartitionContext)partitionAlgorithm.getNextScaleUpPartitionContext(clusterInstanceContext.getPartitionCtxtsAsAnArray()); @@ -75,8 +94,7 @@ dialect "mvel" log.info("[min-check] Partition available, hence trying to spawn an instance to fulfil minimum count!" + " [cluster] " + clusterId); log.debug("[min-check] " + " [partition] " + partitionContext.getPartitionId() + " [cluster] " + clusterId); - delegator.delegateSpawn(partitionContext, clusterId, clusterInstanceContext.getId()); - + delegator.delegateSpawn(partitionContext, clusterId, clusterInstanceContext.getId(), scalingDecisionId); count++; } else { log.warn("[min-check] Partition is not available to fulfil minimum count!" + " [cluster] " + clusterId); http://git-wip-us.apache.org/repos/asf/stratos/blob/b38e27c9/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl ---------------------------------------------------------------------- diff --git a/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl b/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl index 61ed1a3..912685c 100644 --- a/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl +++ b/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl @@ -39,7 +39,10 @@ import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator; import org.apache.stratos.cloud.controller.stub.domain.Partition; import org.apache.stratos.cloud.controller.stub.domain.MemberContext; import org.apache.stratos.autoscaler.context.cluster.ClusterInstanceContext; - +import java.util.UUID; +import org.apache.stratos.autoscaler.statistics.publisher.ScalingDecisionPublisher; +import org.apache.stratos.autoscaler.statistics.publisher.AutoscalerPublisherFactory; +import org.apache.stratos.common.statistics.publisher.StatisticsPublisherType; import org.apache.stratos.autoscaler.pojo.policy.autoscale.LoadAverage import org.apache.stratos.autoscaler.pojo.policy.autoscale.MemoryConsumption @@ -161,6 +164,23 @@ dialect "mvel" boolean partitionsAvailable = true; int count = 0; + String scalingReason = (numberOfRequiredInstances == numberOfInstancesReuquiredBasedOnRif)?"RIF":(numberOfRequiredInstances== numberOfInstancesReuquiredBasedOnMemoryConsumption)?"MC":"LA"; + + String scalingDecisionId = clusterId + "-" + UUID.randomUUID().toString(); + long scalingTime = System.currentTimeMillis(); + ScalingDecisionPublisher scalingDecisionPublisher = AutoscalerPublisherFactory.createScalingDecisionPublisher(StatisticsPublisherType.WSO2DAS); + if (scalingDecisionPublisher.isEnabled()) { + log.debug("Publishing scaling decision to DAS"); + scalingDecisionPublisher.publish(scalingTime, scalingDecisionId, clusterId, + minInstancesCount, maxInstancesCount, + rifPredictedValue, rifThreshold, numberOfInstancesReuquiredBasedOnRif, + mcPredictedValue, mcThreshold, numberOfInstancesReuquiredBasedOnMemoryConsumption, + laPredictedValue, laThreshold, numberOfInstancesReuquiredBasedOnLoadAverage, + numberOfRequiredInstances, activeInstancesCount, + additionalInstances, scalingReason); + } else { + log.warn("Scaling decision publisher is not enabled"); + } while(count != additionalInstances && partitionsAvailable){ @@ -180,7 +200,7 @@ dialect "mvel" " [laPredictedValue] " + laPredictedValue + " [laThreshold] " + laThreshold); log.debug("[scale-up] " + " [partition] " + partitionContext.getPartitionId() + " [cluster] " + clusterId ); - delegator.delegateSpawn(partitionContext, clusterId, clusterInstanceContext.getId()); + delegator.delegateSpawn(partitionContext, clusterId, clusterInstanceContext.getId(), scalingDecisionId); count++; } else { http://git-wip-us.apache.org/repos/asf/stratos/blob/b38e27c9/products/stratos/modules/integration/test-integration/src/test/resources/common/scaling.drl ---------------------------------------------------------------------- diff --git a/products/stratos/modules/integration/test-integration/src/test/resources/common/scaling.drl b/products/stratos/modules/integration/test-integration/src/test/resources/common/scaling.drl index 69d9111..4fc73fd 100644 --- a/products/stratos/modules/integration/test-integration/src/test/resources/common/scaling.drl +++ b/products/stratos/modules/integration/test-integration/src/test/resources/common/scaling.drl @@ -39,7 +39,10 @@ import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator; import org.apache.stratos.cloud.controller.stub.domain.Partition; import org.apache.stratos.cloud.controller.stub.domain.MemberContext; import org.apache.stratos.autoscaler.context.cluster.ClusterInstanceContext; - +import java.util.UUID; +import org.apache.stratos.autoscaler.statistics.publisher.ScalingDecisionPublisher; +import org.apache.stratos.autoscaler.statistics.publisher.AutoscalerPublisherFactory; +import org.apache.stratos.common.statistics.publisher.StatisticsPublisherType; import org.apache.stratos.autoscaler.pojo.policy.autoscale.LoadAverage import org.apache.stratos.autoscaler.pojo.policy.autoscale.MemoryConsumption @@ -162,6 +165,24 @@ dialect "mvel" boolean partitionsAvailable = true; int count = 0; + String scalingReason = (numberOfRequiredInstances == numberOfInstancesReuquiredBasedOnRif)?"RIF":(numberOfRequiredInstances== numberOfInstancesReuquiredBasedOnMemoryConsumption)?"MC":"LA"; + + String scalingDecisionId = clusterId + "-" + UUID.randomUUID().toString(); + long scalingTime = System.currentTimeMillis(); + ScalingDecisionPublisher scalingDecisionPublisher = AutoscalerPublisherFactory.createScalingDecisionPublisher(StatisticsPublisherType.WSO2DAS); + if (scalingDecisionPublisher.isEnabled()) { + log.debug("Publishing scaling decision to DAS"); + scalingDecisionPublisher.publish(scalingTime, scalingDecisionId, clusterId, + minInstancesCount, maxInstancesCount, + rifPredictedValue, rifThreshold, numberOfInstancesReuquiredBasedOnRif, + mcPredictedValue, mcThreshold, numberOfInstancesReuquiredBasedOnMemoryConsumption, + laPredictedValue, laThreshold, numberOfInstancesReuquiredBasedOnLoadAverage, + numberOfRequiredInstances, activeInstancesCount, + additionalInstances, scalingReason); + } else { + log.warn("Scaling decision publisher is not enabled"); + } + while(count != additionalInstances && partitionsAvailable){ ClusterLevelPartitionContext partitionContext = (ClusterLevelPartitionContext) partitionAlgorithm.getNextScaleUpPartitionContext(clusterInstanceContext.getPartitionCtxtsAsAnArray()); @@ -180,7 +201,7 @@ dialect "mvel" " [laPredictedValue] " + laPredictedValue + " [laThreshold] " + laThreshold); log.debug("[scale-up] " + " [partition] " + partitionContext.getPartitionId() + " [cluster] " + clusterId ); - delegator.delegateSpawn(partitionContext, clusterId, clusterInstanceContext.getId()); + delegator.delegateSpawn(partitionContext, clusterId, clusterInstanceContext.getId(), scalingDecisionId); count++; } else { http://git-wip-us.apache.org/repos/asf/stratos/blob/b38e27c9/products/stratos/modules/integration/test-integration/src/test/resources/common/thrift-client-config.xml ---------------------------------------------------------------------- diff --git a/products/stratos/modules/integration/test-integration/src/test/resources/common/thrift-client-config.xml b/products/stratos/modules/integration/test-integration/src/test/resources/common/thrift-client-config.xml index f89e2c2..3038688 100644 --- a/products/stratos/modules/integration/test-integration/src/test/resources/common/thrift-client-config.xml +++ b/products/stratos/modules/integration/test-integration/src/test/resources/common/thrift-client-config.xml @@ -18,10 +18,22 @@ ~ under the License. --> -<!-- Apache thrift client configuration for publishing statistics to WSO2 CEP --> +<!-- Apache thrift client configuration for publishing statistics to WSO2 CEP and WSO2 DAS --> <thriftClientConfiguration> - <username>admin</username> - <password>admin</password> - <ip>localhost</ip> - <port>THRIFT_DYNAMIC_PORT</port> + <config> + <name>cep</name> + <statsPublisherEnabled>true</statsPublisherEnabled> + <username>admin</username> + <password>admin</password> + <ip>localhost</ip> + <port>THRIFT_DYNAMIC_PORT</port> + </config> + <config> + <name>das</name> + <statsPublisherEnabled>false</statsPublisherEnabled> + <username>admin</username> + <password>admin</password> + <ip>localhost</ip> + <port>7612</port> + </config> </thriftClientConfiguration>
