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>

Reply via email to