http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/api/ApiResponseHelper.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiResponseHelper.java 
b/server/src/com/cloud/api/ApiResponseHelper.java
index 433d263..4e5ee43 100755
--- a/server/src/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/com/cloud/api/ApiResponseHelper.java
@@ -39,11 +39,16 @@ import com.cloud.api.commands.QueryAsyncJobResultCmd;
 import com.cloud.api.response.AccountResponse;
 import com.cloud.api.response.ApiResponseSerializer;
 import com.cloud.api.response.AsyncJobResponse;
+import com.cloud.api.response.AutoScalePolicyResponse;
+import com.cloud.api.response.AutoScaleVmGroupResponse;
+import com.cloud.api.response.AutoScaleVmProfileResponse;
 import com.cloud.api.response.CapabilityResponse;
 import com.cloud.api.response.CapacityResponse;
 import com.cloud.api.response.ClusterResponse;
+import com.cloud.api.response.ConditionResponse;
 import com.cloud.api.response.ConfigurationResponse;
 import com.cloud.api.response.ControlledEntityResponse;
+import com.cloud.api.response.CounterResponse;
 import com.cloud.api.response.CreateCmdResponse;
 import com.cloud.api.response.DiskOfferingResponse;
 import com.cloud.api.response.DomainResponse;
@@ -137,6 +142,12 @@ import com.cloud.network.PhysicalNetworkTrafficType;
 import com.cloud.network.RemoteAccessVpn;
 import com.cloud.network.VirtualRouterProvider;
 import com.cloud.network.VpnUser;
+import com.cloud.network.as.AutoScalePolicy;
+import com.cloud.network.as.AutoScaleVmGroup;
+import com.cloud.network.as.AutoScaleVmProfile;
+import com.cloud.network.as.Condition;
+import com.cloud.network.as.ConditionVO;
+import com.cloud.network.as.Counter;
 import com.cloud.network.router.VirtualRouter;
 import com.cloud.network.rules.FirewallRule;
 import com.cloud.network.rules.LoadBalancer;
@@ -344,7 +355,7 @@ public class ApiResponseHelper implements ResponseGenerator 
{
         accountResponse.setVmStopped(vmStopped);
         accountResponse.setVmRunning(vmRunning);
         accountResponse.setObjectName("account");
-        
+
         //get resource limits for projects
         Long projectLimit = 
ApiDBUtils.findCorrectResourceLimit(ResourceType.project, account.getId());
         String projectLimitDisplay = (accountIsAdmin || projectLimit == -1) ? 
"Unlimited" : String.valueOf(projectLimit);
@@ -353,7 +364,7 @@ public class ApiResponseHelper implements ResponseGenerator 
{
         accountResponse.setProjectLimit(projectLimitDisplay);
         accountResponse.setProjectTotal(projectTotal);
         accountResponse.setProjectAvailable(projectAvail);
-        
+
         //get resource limits for networks
         Long networkLimit = 
ApiDBUtils.findCorrectResourceLimit(ResourceType.network, account.getId());
         String networkLimitDisplay = (accountIsAdmin || networkLimit == -1) ? 
"Unlimited" : String.valueOf(networkLimit);
@@ -362,7 +373,7 @@ public class ApiResponseHelper implements ResponseGenerator 
{
         accountResponse.setNetworkLimit(networkLimitDisplay);
         accountResponse.setNetworkTotal(networkTotal);
         accountResponse.setNetworkAvailable(networkAvail);
-      
+
         // adding all the users for an account as part of the response obj
         List<UserVO> usersForAccount = 
ApiDBUtils.listUsersByAccount(account.getAccountId());
         List<UserResponse> userResponseList = new ArrayList<UserResponse>();
@@ -407,7 +418,7 @@ public class ApiResponseHelper implements ResponseGenerator 
{
         domainResponse.setLevel(domain.getLevel());
         domainResponse.setNetworkDomain(domain.getNetworkDomain());
         domainResponse.setParentDomainId(domain.getParent());
-        StringBuilder domainPath = new StringBuilder("ROOT");  
+        StringBuilder domainPath = new StringBuilder("ROOT");
         (domainPath.append(domain.getPath())).deleteCharAt(domainPath.length() 
- 1);
         domainResponse.setPath(domainPath.toString());
         if (domain.getParent() != null) {
@@ -534,7 +545,7 @@ public class ApiResponseHelper implements ResponseGenerator 
{
         snapshotResponse.setName(snapshot.getName());
         
snapshotResponse.setIntervalType(ApiDBUtils.getSnapshotIntervalTypes(snapshot.getId()));
         snapshotResponse.setState(snapshot.getStatus());
-        
+
         //set tag information
         List<? extends ResourceTag> tags = 
ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.Snapshot, 
snapshot.getId());
         List<ResourceTagResponse> tagResponses = new 
ArrayList<ResourceTagResponse>();
@@ -543,7 +554,7 @@ public class ApiResponseHelper implements ResponseGenerator 
{
             tagResponses.add(tagResponse);
         }
         snapshotResponse.setTags(tagResponses);
-        
+
         snapshotResponse.setObjectName("snapshot");
         return snapshotResponse;
     }
@@ -624,7 +635,7 @@ public class ApiResponseHelper implements ResponseGenerator 
{
                 hostResponse.setMemoryTotal(host.getTotalMemory());
                 String hostTags = ApiDBUtils.getHostTags(host.getId());
                 hostResponse.setHostTags(hostTags);
-                
+
                 String haTag = ApiDBUtils.getHaTag();
                 if (haTag != null && !haTag.isEmpty() && hostTags != null && 
!hostTags.isEmpty()) {
                     if (haTag.equalsIgnoreCase(hostTags)) {
@@ -635,7 +646,7 @@ public class ApiResponseHelper implements ResponseGenerator 
{
                 } else {
                     hostResponse.setHaHost(false);
                 }
-                
+
                 hostResponse.setHypervisorVersion(host.getHypervisorVersion());
 
                 String cpuAlloc = decimalFormat.format(((float) cpu / (float) 
(host.getCpus() * host.getSpeed())) * 100f) + "%";
@@ -807,7 +818,7 @@ public class ApiResponseHelper implements ResponseGenerator 
{
             ipResponse.setVlanId(ipAddress.getVlanId());
             
ipResponse.setVlanName(ApiDBUtils.findVlanById(ipAddress.getVlanId()).getVlanTag());
         }
-        
+
         if (ipAddress.getSystem()) {
             if (ipAddress.isOneToOneNat()) {
                 ipResponse.setPurpose(IpAddress.Purpose.StaticNat.toString());
@@ -815,7 +826,7 @@ public class ApiResponseHelper implements ResponseGenerator 
{
                 ipResponse.setPurpose(IpAddress.Purpose.Lb.toString());
             }
         }
-        
+
         //set tag information
         List<? extends ResourceTag> tags = 
ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.PublicIpAddress, 
ipAddress.getId());
         List<ResourceTagResponse> tagResponses = new 
ArrayList<ResourceTagResponse>();
@@ -824,7 +835,7 @@ public class ApiResponseHelper implements ResponseGenerator 
{
             tagResponses.add(tagResponse);
         }
         ipResponse.setTags(tagResponses);
-        
+
         ipResponse.setObjectName("ipaddress");
         return ipResponse;
     }
@@ -852,7 +863,7 @@ public class ApiResponseHelper implements ResponseGenerator 
{
         lbResponse.setState(stateToSet);
         populateOwner(lbResponse, loadBalancer);
         lbResponse.setZoneId(publicIp.getDataCenterId());
-        
+
         //set tag information
         List<? extends ResourceTag> tags = 
ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.UserVm, 
loadBalancer.getId());
         List<ResourceTagResponse> tagResponses = new 
ArrayList<ResourceTagResponse>();
@@ -1063,7 +1074,7 @@ public class ApiResponseHelper implements 
ResponseGenerator {
             volResponse.setCreated(volumeHostRef.getCreated());
             Account caller = UserContext.current().getCaller();
             if (caller.getType() == Account.ACCOUNT_TYPE_ADMIN || 
caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN)
-            
volResponse.setHypervisor(ApiDBUtils.getHypervisorTypeFromFormat(volumeHostRef.getFormat()).toString());
+                
volResponse.setHypervisor(ApiDBUtils.getHypervisorTypeFromFormat(volumeHostRef.getFormat()).toString());
             if (volumeHostRef.getDownloadState() != Status.DOWNLOADED) {
                 String volumeStatus = "Processing";
                 if (volumeHostRef.getDownloadState() == 
VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) {
@@ -1087,9 +1098,9 @@ public class ApiResponseHelper implements 
ResponseGenerator {
                 volResponse.setState("Uploaded");
             } else {
                 volResponse.setStatus("Successfully Installed");
-            }            
+            }
         }
-        
+
         populateOwner(volResponse, volume);
 
         String storageType;
@@ -1135,20 +1146,20 @@ public class ApiResponseHelper implements 
ResponseGenerator {
 
         // return hypervisor for ROOT and Resource domain only
         Account caller = UserContext.current().getCaller();
-        if ((caller.getType() == Account.ACCOUNT_TYPE_ADMIN || 
caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) && 
volume.getState() != Volume.State.UploadOp) {            
-            
volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString());
            
+        if ((caller.getType() == Account.ACCOUNT_TYPE_ADMIN || 
caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN) && 
volume.getState() != Volume.State.UploadOp) {
+            
volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString());
         }
 
         volResponse.setAttached(volume.getAttached());
-        volResponse.setDestroyed(volume.getState() == Volume.State.Destroy);   
     
+        volResponse.setDestroyed(volume.getState() == Volume.State.Destroy);
         boolean isExtractable = true;
         if (volume.getVolumeType() != Volume.Type.DATADISK) { // Datadisk dont 
have any template dependence.
             VMTemplateVO template = 
ApiDBUtils.findTemplateById(volume.getTemplateId());
             if (template != null) { // For ISO based volumes template = null 
and we allow extraction of all ISO based volumes
-                isExtractable = template.isExtractable() && 
template.getTemplateType() != Storage.TemplateType.SYSTEM;                
+                isExtractable = template.isExtractable() && 
template.getTemplateType() != Storage.TemplateType.SYSTEM;
             }
         }
-        
+
         //set tag information
         List<? extends ResourceTag> tags = 
ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.Volume, volume.getId());
         List<ResourceTagResponse> tagResponses = new 
ArrayList<ResourceTagResponse>();
@@ -1157,7 +1168,7 @@ public class ApiResponseHelper implements 
ResponseGenerator {
             tagResponses.add(tagResponse);
         }
         volResponse.setTags(tagResponses);
-        
+
         volResponse.setExtractable(isExtractable);
         volResponse.setObjectName("volume");
         return volResponse;
@@ -1292,7 +1303,7 @@ public class ApiResponseHelper implements 
ResponseGenerator {
             if (vm != null) {
                 response.setVirtualMachineId(vm.getId());
                 response.setVirtualMachineName(vm.getHostName());
-                
+
                 if (vm.getDisplayName() != null) {
                     response.setVirtualMachineDisplayName(vm.getDisplayName());
                 } else {
@@ -1305,7 +1316,7 @@ public class ApiResponseHelper implements 
ResponseGenerator {
         if (state.equals(FirewallRule.State.Revoke)) {
             stateToSet = "Deleting";
         }
-        
+
         //set tag information
         List<? extends ResourceTag> tags = 
ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.PortForwardingRule, 
fwRule.getId());
         List<ResourceTagResponse> tagResponses = new 
ArrayList<ResourceTagResponse>();
@@ -1314,7 +1325,7 @@ public class ApiResponseHelper implements 
ResponseGenerator {
             tagResponses.add(tagResponse);
         }
         response.setTags(tagResponses);
-        
+
         response.setState(stateToSet);
         response.setObjectName("portforwardingrule");
         return response;
@@ -1387,12 +1398,12 @@ public class ApiResponseHelper implements 
ResponseGenerator {
             } else {
                 userVmResponse.setDisplayName(userVm.getHostName());
             }
-            
+
             if (caller.getType() == Account.ACCOUNT_TYPE_ADMIN) {
                 userVmResponse.setInstanceName(userVm.getInstanceName());
             }
-            
- 
+
+
             if (userVm.getPassword() != null) {
                 userVmResponse.setPassword(userVm.getPassword());
             }
@@ -1450,7 +1461,7 @@ public class ApiResponseHelper implements 
ResponseGenerator {
             if (userVm.getHypervisorType() != null) {
                 
userVmResponse.setHypervisor(userVm.getHypervisorType().toString());
             }
-            
+
             if (details.contains(VMDetails.all) || 
details.contains(VMDetails.tmpl)) {
                 // Template Info
                 VMTemplateVO template = templates.get(userVm.getTemplateId());
@@ -1590,7 +1601,7 @@ public class ApiResponseHelper implements 
ResponseGenerator {
                 }
                 userVmResponse.setNics(nicResponses);
             }
-            
+
             //set tag information
             List<? extends ResourceTag> tags = 
ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.UserVm, userVm.getId());
             List<ResourceTagResponse> tagResponses = new 
ArrayList<ResourceTagResponse>();
@@ -1599,7 +1610,7 @@ public class ApiResponseHelper implements 
ResponseGenerator {
                 tagResponses.add(tagResponse);
             }
             userVmResponse.setTags(tagResponses);
-            
+
             IpAddress ip = ApiDBUtils.findIpByAssociatedVmId(userVm.getId());
             if (ip != null) {
                 userVmResponse.setPublicIpId(ip.getId());
@@ -1875,7 +1886,7 @@ public class ApiResponseHelper implements 
ResponseGenerator {
         Account owner = ApiDBUtils.findAccountById(result.getAccountId());
         populateAccount(response, owner.getId());
         populateDomain(response, owner.getDomainId());
-        
+
         //set tag information
         List<? extends ResourceTag> tags = null;
         if (result.getFormat() == ImageFormat.ISO) {
@@ -1883,7 +1894,7 @@ public class ApiResponseHelper implements 
ResponseGenerator {
         } else {
             tags = 
ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.Template, result.getId());
         }
-        
+
         List<ResourceTagResponse> tagResponses = new 
ArrayList<ResourceTagResponse>();
         for (ResourceTag tag : tags) {
             ResourceTagResponse tagResponse = createResourceTagResponse(tag, 
true);
@@ -2076,7 +2087,7 @@ public class ApiResponseHelper implements 
ResponseGenerator {
         templateResponse.setChecksum(template.getChecksum());
 
         templateResponse.setTemplateTag(template.getTemplateTag());
-        
+
         //set tag information
         List<? extends ResourceTag> tags = null;
         if (template.getFormat() == ImageFormat.ISO) {
@@ -2122,7 +2133,7 @@ public class ApiResponseHelper implements 
ResponseGenerator {
             Account owner = ApiDBUtils.findAccountById(iso.getAccountId());
             populateAccount(isoResponse, owner.getId());
             populateDomain(isoResponse, owner.getDomainId());
-            
+
             //set tag information
             List<? extends ResourceTag> tags =  
ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.ISO, iso.getId());
             List<ResourceTagResponse> tagResponses = new 
ArrayList<ResourceTagResponse>();
@@ -2279,10 +2290,10 @@ public class ApiResponseHelper implements 
ResponseGenerator {
         if (isoSize > 0) {
             isoResponse.setSize(isoSize);
         }
-        
+
         //set tag information
         List<? extends ResourceTag> tags =  
ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.ISO, iso.getId());
-        
+
         List<ResourceTagResponse> tagResponses = new 
ArrayList<ResourceTagResponse>();
         for (ResourceTag tag : tags) {
             ResourceTagResponse tagResponse = createResourceTagResponse(tag, 
true);
@@ -2299,7 +2310,7 @@ public class ApiResponseHelper implements 
ResponseGenerator {
     public ListResponse<SecurityGroupResponse> createSecurityGroupResponses(
             List<? extends SecurityGroupRules> networkGroups) {
         List<SecurityGroupResultObject> groupResultObjs = 
SecurityGroupResultObject
-                .transposeNetworkGroups(networkGroups);
+        .transposeNetworkGroups(networkGroups);
 
         ListResponse<SecurityGroupResponse> response = new 
ListResponse<SecurityGroupResponse>();
         List<SecurityGroupResponse> netGrpResponses = new 
ArrayList<SecurityGroupResponse>();
@@ -2312,7 +2323,7 @@ public class ApiResponseHelper implements 
ResponseGenerator {
             populateOwner(netGrpResponse, networkGroup);
 
             List<SecurityGroupRuleResultObject> securityGroupRules = 
networkGroup
-                    .getSecurityGroupRules();
+            .getSecurityGroupRules();
             if ((securityGroupRules != null) && !securityGroupRules.isEmpty()) 
{
                 List<SecurityGroupRuleResponse> ingressRulesResponse = new 
ArrayList<SecurityGroupRuleResponse>();
                 List<SecurityGroupRuleResponse> egressRulesResponse = new 
ArrayList<SecurityGroupRuleResponse>();
@@ -2355,15 +2366,15 @@ public class ApiResponseHelper implements 
ResponseGenerator {
                     tagResponses.add(tagResponse);
                 }
                 netGrpResponse.setTags(tagResponses);
-                
+
                 netGrpResponse
-                        .setSecurityGroupIngressRules(ingressRulesResponse);
+                .setSecurityGroupIngressRules(ingressRulesResponse);
                 
netGrpResponse.setSecurityGroupEgressRules(egressRulesResponse);
             }
             netGrpResponse.setObjectName("securitygroup");
             netGrpResponses.add(netGrpResponse);
         }
-        
+
         response.setResponses(netGrpResponses);
         return response;
     }
@@ -2427,11 +2438,11 @@ public class ApiResponseHelper implements 
ResponseGenerator {
 
         boolean savedValue = 
SerializationContext.current().getUuidTranslation();
         SerializationContext.current().setUuidTranslation(false);
-        
+
         Object resultObject = 
ApiSerializerHelper.fromSerializedString(job.getResult());
         jobResponse.setJobResult((ResponseObject) resultObject);
         SerializationContext.current().setUuidTranslation(savedValue);
-        
+
         if (resultObject != null) {
             Class<?> clz = resultObject.getClass();
             if (clz.isPrimitive() || clz.getSuperclass() == Number.class || 
clz == String.class || clz == Date.class) {
@@ -2552,17 +2563,17 @@ public class ApiResponseHelper implements 
ResponseGenerator {
             }
 
             if (capacityType == Capacity.CAPACITY_TYPE_CPU || capacityType == 
Capacity.CAPACITY_TYPE_MEMORY) { // Reserved
-                                                                               
                                // Capacity
-                                                                               
                                // accounts
-// for
+                // Capacity
+                // accounts
+                // for
                 // stopped
-// vms
+                // vms
                 // that
-// have been
+                // have been
                 // stopped
-// within
+                // within
                 // an
-// interval
+                // interval
                 usedCapacity += capacity.getReservedCapacity();
             }
 
@@ -2591,17 +2602,17 @@ public class ApiResponseHelper implements 
ResponseGenerator {
                 }
 
                 if (capacityType == Capacity.CAPACITY_TYPE_CPU || capacityType 
== Capacity.CAPACITY_TYPE_MEMORY) { // Reserved
-                                                                               
                                    // Capacity
-                                                                               
                                    // accounts
-                                                                               
                                    // for
-                                                                               
                                    // stopped
-                                                                               
                                    // vms
-// that
+                    // Capacity
+                    // accounts
+                    // for
+                    // stopped
+                    // vms
+                    // that
                     // have
-// been
+                    // been
                     // stopped
                     // within
-// an
+                    // an
                     // interval
                     usedCapacity += capacity.getReservedCapacity();
                 }
@@ -2633,7 +2644,7 @@ public class ApiResponseHelper implements 
ResponseGenerator {
     @Override
     public List<CapacityResponse> createCapacityResponse(List<? extends 
Capacity> result, DecimalFormat format) {
         List<CapacityResponse> capacityResponses = new 
ArrayList<CapacityResponse>();
-        
+
         for (Capacity summedCapacity : result) {
             CapacityResponse capacityResponse = new CapacityResponse();
             
capacityResponse.setCapacityTotal(summedCapacity.getTotalCapacity());
@@ -3079,7 +3090,7 @@ public class ApiResponseHelper implements 
ResponseGenerator {
 
         response.setIcmpCode(fwRule.getIcmpCode());
         response.setIcmpType(fwRule.getIcmpType());
-        
+
         //set tag information
         List<? extends ResourceTag> tags = 
ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.FirewallRule, 
fwRule.getId());
         List<ResourceTagResponse> tagResponses = new 
ArrayList<ResourceTagResponse>();
@@ -3110,7 +3121,7 @@ public class ApiResponseHelper implements 
ResponseGenerator {
             userVmData.setDisplayName(userVm.getHostName());
         }
         userVmData.setInstanceName(userVm.getInstanceName());
-        
+
         userVmData.setDomainId(userVm.getDomainId());
 
         if (userVm.getHypervisorType() != null) {
@@ -3210,7 +3221,7 @@ public class ApiResponseHelper implements 
ResponseGenerator {
         userVmResponse.setNics(new ArrayList<NicResponse>(nicResponses));
         userVmResponse.setPublicIpId(userVmData.getPublicIpId());
         userVmResponse.setPublicIp(userVmData.getPublicIp());
-        
+
         //set tag information
         List<? extends ResourceTag> tags = 
ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.UserVm, 
userVmData.getId());
         List<ResourceTagResponse> tagResponses = new 
ArrayList<ResourceTagResponse>();
@@ -3544,20 +3555,20 @@ public class ApiResponseHelper implements 
ResponseGenerator {
         response.setObjectName("storagenetworkiprange");
         return response;
     }
-    
+
     @Override
     public Long getIdentiyId(String tableName, String token) {
         return ApiDispatcher.getIdentiyId(tableName, token);
     }
-    
+
     @Override
     public ResourceTagResponse createResourceTagResponse(ResourceTag 
resourceTag, boolean keyValueOnly) {
         ResourceTagResponse response = new ResourceTagResponse();
         response.setKey(resourceTag.getKey());
         response.setValue(resourceTag.getValue());
-        
+
         if (!keyValueOnly) {
-            
response.setResourceType(resourceTag.getResourceType().toString());        
+            response.setResourceType(resourceTag.getResourceType().toString());
             
response.setId(ApiDBUtils.getUuid(String.valueOf(resourceTag.getResourceId()),resourceTag.getResourceType()));
             Long accountId = resourceTag.getAccountId();
             Long domainId = resourceTag.getDomainId();
@@ -3573,19 +3584,114 @@ public class ApiResponseHelper implements 
ResponseGenerator {
                     response.setAccountName(account.getAccountName());
                 }
             }
-            
+
             if (domainId != null) {
                 response.setDomainId(domainId);
                 
response.setDomainName(ApiDBUtils.findDomainById(domainId).getName());
             }
-            
+
             response.setCustomer(resourceTag.getCustomer());
         }
-        
+
         response.setObjectName("tag");
-  
+
+        return response;
+    }
+
+    @Override
+    public CounterResponse createCounterResponse(Counter counter) {
+        CounterResponse response = new CounterResponse();
+        response.setId(counter.getId());
+        response.setSource(counter.getSource().toString());
+        response.setName(counter.getName());
+        response.setValue(counter.getValue());
+        response.setObjectName("counter");
+        return response;
+    }
+
+    @Override
+    public ConditionResponse createConditionResponse(Condition condition) {
+        ConditionResponse response = new ConditionResponse();
+        response.setId(condition.getId());
+        CounterResponse counter;
+        counter = 
createCounterResponse(ApiDBUtils.getCounter(condition.getCounterid()));
+        response.setCounter(counter);
+        
response.setRelationalOperator(condition.getRelationalOperator().toString());
+        response.setThreshold(condition.getThreshold());
+        response.setObjectName("condition");
+        populateOwner(response, condition);
+        return response;
+    }
+
+    @Override
+    public AutoScaleVmProfileResponse 
createAutoScaleVmProfileResponse(AutoScaleVmProfile profile) {
+        AutoScaleVmProfileResponse response = new AutoScaleVmProfileResponse();
+        response.setId(profile.getId());
+        response.setZoneId(profile.getZoneId());
+        response.setServiceOfferingId(profile.getServiceOfferingId());
+        response.setTemplateId(profile.getTemplateId());
+        response.setOtherDeployParams(profile.getOtherDeployParams());
+        response.setSnmpCommunity(profile.getSnmpCommunity());
+        response.setSnmpPort(profile.getSnmpPort());
+        response.setDestroyVmGraceperiod(profile.getDestroyVmGraceperiod());
+        response.setAutoscaleUserId(profile.getAutoScaleUserId());
+        response.setObjectName("autoscalevmprofile");
+
+        // Populates the account information in the response
+        populateOwner(response, profile);
+        return response;
+    }
+
+    @Override
+    public AutoScalePolicyResponse 
createAutoScalePolicyResponse(AutoScalePolicy policy) {
+        AutoScalePolicyResponse response = new AutoScalePolicyResponse();
+        response.setId(policy.getId());
+        response.setDuration(policy.getDuration());
+        response.setQuietTime(policy.getQuietTime());
+        response.setAction(policy.getAction());
+        List<ConditionVO> vos = 
ApiDBUtils.getAutoScalePolicyConditions(policy.getId());
+        ArrayList<ConditionResponse> conditions = new 
ArrayList<ConditionResponse>(vos.size());
+        for (ConditionVO vo : vos) {
+            conditions.add(createConditionResponse(vo));
+        }
+        response.setConditions(conditions);
+        response.setObjectName("autoscalepolicy");
+
+        // Populates the account information in the response
+        populateOwner(response, policy);
+
+        return response;
+    }
+
+    @Override
+    public AutoScaleVmGroupResponse 
createAutoScaleVmGroupResponse(AutoScaleVmGroup vmGroup) {
+        AutoScaleVmGroupResponse response = new AutoScaleVmGroupResponse();
+        response.setId(vmGroup.getId());
+        response.setMinMembers(vmGroup.getMinMembers());
+        response.setMaxMembers(vmGroup.getMaxMembers());
+        response.setState(vmGroup.getState());
+        response.setInterval(vmGroup.getInterval());
+        response.setProfileId(vmGroup.getProfileId());
+        response.setLoadBalancerId(vmGroup.getProfileId());
+
+        List<AutoScalePolicyResponse> scaleUpPoliciesResponse = new 
ArrayList<AutoScalePolicyResponse>();
+        List<AutoScalePolicyResponse> scaleDownPoliciesResponse = new 
ArrayList<AutoScalePolicyResponse>();
+        response.setScaleUpPolicies(scaleUpPoliciesResponse);
+        response.setScaleDownPolicies(scaleDownPoliciesResponse);
+        response.setObjectName("autoscalevmgroup");
+
+        // Fetch policies for vmgroup
+        List<AutoScalePolicy> scaleUpPolicies = new 
ArrayList<AutoScalePolicy>();
+        List<AutoScalePolicy> scaleDownPolicies = new 
ArrayList<AutoScalePolicy>();
+        ApiDBUtils.getAutoScaleVmGroupPolicies(vmGroup.getId(), 
scaleUpPolicies, scaleDownPolicies);
+        // populate policies
+        for (AutoScalePolicy autoScalePolicy : scaleUpPolicies) {
+            
scaleUpPoliciesResponse.add(createAutoScalePolicyResponse(autoScalePolicy));
+        }
+        for (AutoScalePolicy autoScalePolicy : scaleDownPolicies) {
+            
scaleDownPoliciesResponse.add(createAutoScalePolicyResponse(autoScalePolicy));
+        }
+
         return response;
     }
-    
-    
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/configuration/DefaultComponentLibrary.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java 
b/server/src/com/cloud/configuration/DefaultComponentLibrary.java
index f6db30b..8b124df 100755
--- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java
+++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java
@@ -75,6 +75,14 @@ import com.cloud.maint.dao.AgentUpgradeDaoImpl;
 import com.cloud.network.ExternalLoadBalancerUsageManagerImpl;
 import com.cloud.network.NetworkManagerImpl;
 import com.cloud.network.StorageNetworkManagerImpl;
+import com.cloud.network.as.AutoScaleManagerImpl;
+import com.cloud.network.as.dao.AutoScalePolicyConditionMapDaoImpl;
+import com.cloud.network.as.dao.AutoScalePolicyDaoImpl;
+import com.cloud.network.as.dao.AutoScaleVmGroupDaoImpl;
+import com.cloud.network.as.dao.AutoScaleVmGroupPolicyMapDaoImpl;
+import com.cloud.network.as.dao.AutoScaleVmProfileDaoImpl;
+import com.cloud.network.as.dao.ConditionDaoImpl;
+import com.cloud.network.as.dao.CounterDaoImpl;
 import com.cloud.network.dao.ExternalFirewallDeviceDaoImpl;
 import com.cloud.network.dao.ExternalLoadBalancerDeviceDaoImpl;
 import com.cloud.network.dao.FirewallRulesCidrsDaoImpl;
@@ -226,6 +234,13 @@ public class DefaultComponentLibrary extends 
ComponentLibraryBase implements Com
         addDao("NetworkRuleConfigDao", NetworkRuleConfigDaoImpl.class);
         addDao("LoadBalancerVMMapDao", LoadBalancerVMMapDaoImpl.class);
         addDao("LBStickinessPolicyDao", LBStickinessPolicyDaoImpl.class);
+        addDao("CounterDao", CounterDaoImpl.class);
+        addDao("ConditionDao", ConditionDaoImpl.class);
+        addDao("AutoScalePolicyDao", AutoScalePolicyDaoImpl.class);
+        addDao("AutoScalePolicyConditionMapDao", 
AutoScalePolicyConditionMapDaoImpl.class);
+        addDao("AutoScaleVmProfileDao", AutoScaleVmProfileDaoImpl.class);
+        addDao("AutoScaleVmGroupDao", AutoScaleVmGroupDaoImpl.class);
+        addDao("AutoScaleVmGroupPolicyMapDao", 
AutoScaleVmGroupPolicyMapDaoImpl.class);
         addDao("DataCenterIpAddressDao", DataCenterIpAddressDaoImpl.class);
         addDao("SecurityGroupDao", SecurityGroupDaoImpl.class);
         addDao("SecurityGroupRuleDao", SecurityGroupRuleDaoImpl.class);
@@ -354,6 +369,7 @@ public class DefaultComponentLibrary extends 
ComponentLibraryBase implements Com
         addManager("DomainRouterManager", 
VirtualNetworkApplianceManagerImpl.class);
         addManager("EntityManager", EntityManagerImpl.class);
         addManager("LoadBalancingRulesManager", 
LoadBalancingRulesManagerImpl.class);
+        addManager("AutoScaleManager", AutoScaleManagerImpl.class);
         addManager("RulesManager", RulesManagerImpl.class);
         addManager("RemoteAccessVpnManager", RemoteAccessVpnManagerImpl.class);
         addManager("Capacity Manager", CapacityManagerImpl.class);

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java 
b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
index 79e6e7d..ba3d689 100644
--- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
+++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java
@@ -187,7 +187,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl 
extends AdapterBase
 
         if ((ntwkDevice == null) || (url == null) || (username == null) || 
(resource == null) || (password == null)) {
             throw new InvalidParameterValueException("Atleast one of the 
required parameters (url, username, password," +
-                    " server resource, zone id/physical network id) is not 
specified or a valid parameter.");
+            " server resource, zone id/physical network id) is not specified 
or a valid parameter.");
         }
 
         pNetwork = _physicalNetworkDao.findById(physicalNetworkId);
@@ -239,7 +239,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl 
extends AdapterBase
 
                 boolean dedicatedUse = 
(configParams.get(ApiConstants.LOAD_BALANCER_DEVICE_DEDICATED) != null) ? 
Boolean.parseBoolean(configParams.get(ApiConstants.LOAD_BALANCER_DEVICE_DEDICATED))
 : false;
                 boolean inline = (configParams.get(ApiConstants.INLINE) != 
null) ? Boolean.parseBoolean(configParams.get(ApiConstants.INLINE)) : false;
-                long capacity = NumbersUtil.parseLong((String) 
configParams.get(ApiConstants.LOAD_BALANCER_DEVICE_CAPACITY), 0);
+                long capacity = 
NumbersUtil.parseLong(configParams.get(ApiConstants.LOAD_BALANCER_DEVICE_CAPACITY),
 0);
                 if (capacity == 0) {
                     capacity = _defaultLbCapacity;
                 }
@@ -384,7 +384,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl 
extends AdapterBase
                 if (deviceMapLock.lock(120)) {
                     try {
                         boolean dedicatedLB = offering.getDedicatedLB(); // 
does network offering supports a dedicated
-// load balancer?
+                        // load balancer?
                         long lbDeviceId;
 
                         txn.start();
@@ -398,7 +398,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl 
extends AdapterBase
 
                             // persist the load balancer device id that will 
be used for this network. Once a network
                             // is implemented on a LB device then later on all 
rules will be programmed on to same
-// device
+                            // device
                             NetworkExternalLoadBalancerVO networkLB = new 
NetworkExternalLoadBalancerVO(guestConfig.getId(), lbDeviceId);
                             _networkExternalLBDao.persist(networkLB);
 
@@ -416,12 +416,12 @@ public abstract class 
ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
                             if (tryLbProvisioning) {
                                 retry = false;
                                 // TODO: throwing warning instead of error for 
now as its possible another provider can
-// service this network
+                                // service this network
                                 s_logger.warn("There are no load balancer 
device with the capacity for implementing this network");
                                 throw exception;
                             } else {
                                 tryLbProvisioning = true; // if possible 
provision a LB appliance in to the physical
-// network
+                                // network
                             }
                         }
                     } finally {
@@ -436,7 +436,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl 
extends AdapterBase
             }
 
             // there are no LB devices or there is no free capacity on the 
devices in the physical network so provision
-// a new LB appliance
+            // a new LB appliance
             if (tryLbProvisioning) {
                 // check if LB appliance can be dynamically provisioned
                 List<ExternalLoadBalancerDeviceVO> providerLbDevices = 
_externalLoadBalancerDeviceDao.listByProviderAndDeviceAllocationState(physicalNetworkId,
 provider, LBDeviceAllocationState.Provider);
@@ -444,7 +444,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl 
extends AdapterBase
                     for (ExternalLoadBalancerDeviceVO lbProviderDevice : 
providerLbDevices) {
                         if (lbProviderDevice.getState() == 
LBDeviceState.Enabled) {
                             // acquire a private IP from the data center which 
will be used as management IP of
-// provisioned LB appliance,
+                            // provisioned LB appliance,
                             DataCenterIpAddressVO dcPrivateIp = 
_dcDao.allocatePrivateIpAddress(guestConfig.getDataCenterId(), 
lbProviderDevice.getUuid());
                             if (dcPrivateIp == null) {
                                 throw new 
InsufficientNetworkCapacityException("failed to acquire a priavate IP in the 
zone " + guestConfig.getDataCenterId() +
@@ -475,12 +475,12 @@ public abstract class 
ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
                             String privateIf = 
createLbAnswer.getPrivateInterface();
 
                             // we have provisioned load balancer so add the 
appliance as cloudstack provisioned external
-// load balancer
+                            // load balancer
                             String dedicatedLb = offering.getDedicatedLB() ? 
"true" : "false";
                             String capacity = 
Long.toString(lbProviderDevice.getCapacity());
 
                             // acquire a public IP to associate with lb 
appliance (used as subnet IP to make the
-// appliance part of private network)
+                            // appliance part of private network)
                             PublicIp publicIp = 
_networkMgr.assignPublicIpAddress(guestConfig.getDataCenterId(), null, 
_accountMgr.getSystemAccount(), VlanType.VirtualNetwork, null, null, false);
                             String publicIPNetmask = publicIp.getVlanNetmask();
                             String publicIPgateway = publicIp.getVlanGateway();
@@ -488,8 +488,8 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl 
extends AdapterBase
                             String publicIP = publicIp.getAddress().toString();
 
                             String url = "https://"; + lbIP + 
"?publicinterface=" + publicIf + "&privateinterface=" + privateIf + 
"&lbdevicededicated=" + dedicatedLb +
-                                    "&cloudmanaged=true" + "&publicip=" + 
publicIP + "&publicipnetmask=" + publicIPNetmask + "&lbdevicecapacity=" + 
capacity +
-                                    "&publicipvlan=" + publicIPVlanTag + 
"&publicipgateway=" + publicIPgateway;
+                            "&cloudmanaged=true" + "&publicip=" + publicIP + 
"&publicipnetmask=" + publicIPNetmask + "&lbdevicecapacity=" + capacity +
+                            "&publicipvlan=" + publicIPVlanTag + 
"&publicipgateway=" + publicIPgateway;
                             ExternalLoadBalancerDeviceVO lbAppliance = null;
                             try {
                                 lbAppliance = 
addExternalLoadBalancer(physicalNetworkId, url, username, password, 
createLbAnswer.getDeviceName(), createLbAnswer.getServerResource());
@@ -499,7 +499,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl 
extends AdapterBase
 
                             if (lbAppliance != null) {
                                 // mark the load balancer as cloudstack 
managed and set parent host id on which lb
-// appliance is provisioned
+                                // appliance is provisioned
                                 ExternalLoadBalancerDeviceVO managedLb = 
_externalLoadBalancerDeviceDao.findById(lbAppliance.getId());
                                 managedLb.setIsManagedDevice(true);
                                 
managedLb.setParentHostId(lbProviderDevice.getHostId());
@@ -514,7 +514,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl 
extends AdapterBase
                                         s_logger.warn("Failed to destroy load 
balancer appliance created");
                                     } else {
                                         // release the public & private IP 
back to dc pool, as the load balancer
-// appliance is now destroyed
+                                        // appliance is now destroyed
                                         _dcDao.releasePrivateIpAddress(lbIP, 
guestConfig.getDataCenterId(), null);
                                         
_networkMgr.releasePublicIpAddress(publicIp.getId(), 
_accountMgr.getSystemUser().getId(), _accountMgr.getSystemAccount());
                                     }
@@ -594,7 +594,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl 
extends AdapterBase
             }
 
             // if we are here then there are no existing LB devices in shared 
use or the devices in shared use has no
-// free capacity left
+            // free capacity left
             // so allocate a new load balancer configured for shared use from 
the pool of free LB devices
             lbDevices = 
_externalLoadBalancerDeviceDao.listByProviderAndDeviceAllocationState(physicalNetworkId,
 provider, LBDeviceAllocationState.Free);
             if (lbDevices != null && !lbDevices.isEmpty()) {
@@ -631,7 +631,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl 
extends AdapterBase
 
                 if (!lbInUse && !lbCloudManaged) {
                     // this is the last network mapped to the load balancer 
device so set device allocation state to be
-// free
+                    // free
                     lbDevice.setAllocationState(LBDeviceAllocationState.Free);
                     _externalLoadBalancerDeviceDao.update(lbDevice.getId(), 
lbDevice);
                 }
@@ -797,6 +797,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl 
extends AdapterBase
             LoadBalancingRule rule = loadBalancingRules.get(i);
 
             boolean revoked = 
(rule.getState().equals(FirewallRule.State.Revoke));
+            Long lbId = rule.getId();
             String protocol = rule.getProtocol();
             String algorithm = rule.getAlgorithm();
             String srcIp = 
_networkMgr.getIp(rule.getSourceIpAddressId()).getAddress().addr();
@@ -835,7 +836,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl 
extends AdapterBase
                         _inlineLoadBalancerNicMapDao.persist(mapping);
 
                         // On the firewall provider for the network, create a 
static NAT rule between the source IP
-// address and the load balancing IP address
+                        // address and the load balancing IP address
                         applyStaticNatRuleForInlineLBRule(zone, network, 
firewallProviderHost, revoked, srcIp, loadBalancingIpNic.getIp4Address());
                     } else {
                         loadBalancingIpNic = 
_nicDao.findById(mapping.getNicId());
@@ -846,7 +847,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl 
extends AdapterBase
                         loadBalancingIpNic = 
_nicDao.findById(mapping.getNicId());
 
                         // On the firewall provider for the network, delete 
the static NAT rule between the source IP
-// address and the load balancing IP address
+                        // address and the load balancing IP address
                         applyStaticNatRuleForInlineLBRule(zone, network, 
firewallProviderHost, revoked, srcIp, loadBalancingIpNic.getIp4Address());
 
                         // Delete the mapping between the source IP address 
and the load balancing IP address
@@ -864,8 +865,11 @@ public abstract class 
ExternalLoadBalancerDeviceManagerImpl extends AdapterBase
                 srcIp = loadBalancingIpNic.getIp4Address();
             }
 
-            if (destinations != null && !destinations.isEmpty()) {
-                LoadBalancerTO loadBalancer = new LoadBalancerTO(srcIp, 
srcPort, protocol, algorithm, revoked, false, destinations, 
rule.getStickinessPolicies());
+            if ((destinations != null && !destinations.isEmpty()) || 
rule.isAutoScaleConfig()) {
+                LoadBalancerTO loadBalancer = new LoadBalancerTO(lbId, srcIp, 
srcPort, protocol, algorithm, revoked, false, destinations, 
rule.getStickinessPolicies());
+                if(rule.isAutoScaleConfig()) {
+                    
loadBalancer.setAutoScaleVmGroup(rule.getAutoScaleVmGroup());
+                }
                 loadBalancersToApply.add(loadBalancer);
             }
         }
@@ -913,7 +917,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl 
extends AdapterBase
             ExternalLoadBalancerDeviceVO lbDeviceVO = 
getExternalLoadBalancerForNetwork(guestConfig);
             if (lbDeviceVO == null) {
                 s_logger.warn("Network shutdwon requested on external load 
balancer element, which did not implement the network." +
-                        " Either network implement failed half way through or 
already network shutdown is completed. So just returning.");
+                " Either network implement failed half way through or already 
network shutdown is completed. So just returning.");
                 return true;
             }
 
@@ -940,7 +944,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl 
extends AdapterBase
             NicVO selfipNic = getPlaceholderNic(guestConfig);
             if (selfipNic == null) {
                 s_logger.warn("Network shutdwon requested on external load 
balancer element, which did not implement the network." +
-                        " Either network implement failed half way through or 
already network shutdown is completed. So just returning.");
+                " Either network implement failed half way through or already 
network shutdown is completed. So just returning.");
                 return true;
             }
             selfIp = selfipNic.getIp4Address();

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/e245efed/server/src/com/cloud/network/as/AutoScaleManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/as/AutoScaleManager.java 
b/server/src/com/cloud/network/as/AutoScaleManager.java
new file mode 100644
index 0000000..7ea7807
--- /dev/null
+++ b/server/src/com/cloud/network/as/AutoScaleManager.java
@@ -0,0 +1,20 @@
+// 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 com.cloud.network.as;
+
+public interface AutoScaleManager extends AutoScaleService {
+}

Reply via email to