mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	AutoScaling without NetScaler
This commit is contained in:
		
							parent
							
								
									bd238ce24e
								
							
						
					
					
						commit
						dc151115be
					
				| @ -27,6 +27,8 @@ public class AutoScaleCounter { | ||||
| 
 | ||||
|         public static final AutoScaleCounterType Snmp = new AutoScaleCounterType("snmp"); | ||||
|         public static final AutoScaleCounterType Netscaler = new AutoScaleCounterType("netscaler"); | ||||
|         public static final AutoScaleCounterType Cpu = new AutoScaleCounterType("cpu"); | ||||
|         public static final AutoScaleCounterType Memory = new AutoScaleCounterType("memory"); | ||||
| 
 | ||||
|         public AutoScaleCounterType(String name) { | ||||
|             _name = name; | ||||
|  | ||||
| @ -17,6 +17,8 @@ | ||||
| 
 | ||||
| package com.cloud.network.as; | ||||
| 
 | ||||
| import java.util.Date; | ||||
| 
 | ||||
| import org.apache.cloudstack.acl.ControlledEntity; | ||||
| import org.apache.cloudstack.api.InternalIdentity; | ||||
| 
 | ||||
| @ -30,6 +32,8 @@ public interface AutoScalePolicy extends ControlledEntity, InternalIdentity { | ||||
|     public int getDuration(); | ||||
| 
 | ||||
|     public int getQuietTime(); | ||||
|      | ||||
| 	public Date getLastQuiteTime(); | ||||
| 
 | ||||
|     public String getAction(); | ||||
| 
 | ||||
|  | ||||
| @ -17,6 +17,8 @@ | ||||
| 
 | ||||
| package com.cloud.network.as; | ||||
| 
 | ||||
| import java.util.Date; | ||||
| 
 | ||||
| import org.apache.cloudstack.acl.ControlledEntity; | ||||
| import org.apache.cloudstack.api.InternalIdentity; | ||||
| 
 | ||||
| @ -45,6 +47,8 @@ public interface AutoScaleVmGroup extends ControlledEntity, InternalIdentity { | ||||
| 
 | ||||
|     int getInterval(); | ||||
| 
 | ||||
| 	Date getLastInterval(); | ||||
| 
 | ||||
|     String getState(); | ||||
| 
 | ||||
|     String getUuid(); | ||||
|  | ||||
| @ -23,7 +23,10 @@ import org.apache.cloudstack.api.InternalIdentity; | ||||
| public interface Counter extends InternalIdentity, Identity { | ||||
| 
 | ||||
|     public static enum Source { | ||||
|         netscaler, snmp | ||||
|         netscaler, | ||||
|         snmp, | ||||
|         cpu, | ||||
|         memory | ||||
|     } | ||||
| 
 | ||||
|     String getName(); | ||||
| @ -31,4 +34,5 @@ public interface Counter extends InternalIdentity, Identity { | ||||
|     String getValue(); | ||||
| 
 | ||||
|     Source getSource(); | ||||
|      | ||||
| } | ||||
|  | ||||
							
								
								
									
										956
									
								
								client/tomcatconf/applicationContext.xml.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										956
									
								
								client/tomcatconf/applicationContext.xml.in
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,956 @@ | ||||
| <!-- | ||||
|   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. | ||||
| --> | ||||
| <beans xmlns="http://www.springframework.org/schema/beans" | ||||
|        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|        xmlns:context="http://www.springframework.org/schema/context" | ||||
|        xsi:schemaLocation="http://www.springframework.org/schema/beans | ||||
|                       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|                       http://www.springframework.org/schema/context | ||||
|                       http://www.springframework.org/schema/context/spring-context-3.0.xsd">                      | ||||
| 
 | ||||
|   <context:annotation-config /> | ||||
| 
 | ||||
| <!--=====================================================================================================--> | ||||
| <!--                                                                                                     --> | ||||
| <!--                           core OSS/non-OSS Common components                                        -->   | ||||
| <!--                                                                                                     --> | ||||
| <!--=====================================================================================================--> | ||||
| 
 | ||||
|   <!-- | ||||
|     @DB support | ||||
|   --> | ||||
|   <bean id="componentContext" class="com.cloud.utils.component.ComponentContext" /> | ||||
|   <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" /> | ||||
|   <bean id="actionEventInterceptor" class="com.cloud.event.ActionEventInterceptor" /> | ||||
| 
 | ||||
|   <bean id="instantiatePostProcessor" class="com.cloud.utils.component.ComponentInstantiationPostProcessor"> | ||||
|     <property name="Interceptors"> | ||||
|         <list> | ||||
|             <ref bean="transactionContextBuilder" /> | ||||
|             <ref bean="actionEventInterceptor" /> | ||||
|         </list> | ||||
|     </property> | ||||
|   </bean> | ||||
| 
 | ||||
|   <!-- | ||||
|     Managed Context | ||||
|   --> | ||||
|   <bean id="ManagedContext" class="org.apache.cloudstack.managed.context.impl.DefaultManagedContext" > | ||||
|     <property name="listeners"> | ||||
|         <list> | ||||
|             <bean class="org.apache.cloudstack.context.CallContextListener" /> | ||||
|         </list> | ||||
|     </property> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean class="org.apache.cloudstack.managed.context.ManagedContextRunnable" factory-method="initializeGlobalContext"  | ||||
|     autowire-candidate="false" > | ||||
|     <constructor-arg><ref bean="ManagedContext"/></constructor-arg> | ||||
|   </bean> | ||||
| 
 | ||||
|   <!-- | ||||
|     RPC/Async/EventBus | ||||
|   --> | ||||
| 
 | ||||
|   <bean id="onwireRegistry" class="org.apache.cloudstack.framework.serializer.OnwireClassRegistry" | ||||
|     init-method="scan" > | ||||
|     <property name="packages"> | ||||
|       <list> | ||||
|         <value>org.apache.cloudstack.framework</value> | ||||
|       </list> | ||||
|     </property> | ||||
|   </bean> | ||||
|    | ||||
|   <bean id="messageSerializer" class="org.apache.cloudstack.framework.serializer.JsonMessageSerializer"> | ||||
|     <property name="onwireClassRegistry" ref="onwireRegistry" /> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="transportProvider" class="org.apache.cloudstack.framework.server.ServerTransportProvider"  init-method="initialize"> | ||||
|     <property name="workerPoolSize" value="5" /> | ||||
|     <property name="nodeId" value="Node1" /> | ||||
|     <property name="messageSerializer" ref="messageSerializer" /> | ||||
|   </bean> | ||||
|    | ||||
|   <bean id="rpcProvider" class="org.apache.cloudstack.framework.rpc.RpcProviderImpl" init-method="initialize"> | ||||
|     <constructor-arg ref="transportProvider" /> | ||||
|     <property name="messageSerializer" ref="messageSerializer" /> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="messageBus" class = "org.apache.cloudstack.framework.messagebus.MessageBusBase" /> | ||||
|   <bean id="configDepot" class = "org.apache.cloudstack.framework.config.impl.ConfigDepotImpl" /> | ||||
| 
 | ||||
|   <!-- | ||||
|     DAO with customized configuration | ||||
|   --> | ||||
|   <bean id="serviceOfferingDaoImpl" class="com.cloud.service.dao.ServiceOfferingDaoImpl"> | ||||
|     <property name="configParams"> | ||||
|       <map> | ||||
|         <entry key="cache.size" value="50" /> | ||||
|         <entry key="cache.time.to.live" value="600" /> | ||||
|       </map> | ||||
|     </property>   | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="diskOfferingDaoImpl" class="com.cloud.storage.dao.DiskOfferingDaoImpl"> | ||||
|     <property name="configParams"> | ||||
|       <map> | ||||
|         <entry key="cache.size" value="50" /> | ||||
|         <entry key="cache.time.to.live" value="600" /> | ||||
|       </map> | ||||
|     </property>   | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="dataCenterDaoImpl" class="com.cloud.dc.dao.DataCenterDaoImpl"> | ||||
|     <property name="configParams"> | ||||
|       <map> | ||||
|         <entry key="cache.size" value="50" /> | ||||
|         <entry key="cache.time.to.live" value="600" /> | ||||
|       </map> | ||||
|     </property>   | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="hostPodDaoImpl" class="com.cloud.dc.dao.HostPodDaoImpl"> | ||||
|     <property name="configParams"> | ||||
|       <map> | ||||
|         <entry key="cache.size" value="50" /> | ||||
|         <entry key="cache.time.to.live" value="600" /> | ||||
|       </map> | ||||
|     </property>   | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="vlanDaoImpl" class="com.cloud.dc.dao.VlanDaoImpl"> | ||||
|     <property name="configParams"> | ||||
|       <map> | ||||
|         <entry key="cache.size" value="30" /> | ||||
|         <entry key="cache.time.to.live" value="3600" /> | ||||
|       </map> | ||||
|     </property>   | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="userDaoImpl" class="com.cloud.user.dao.UserDaoImpl"> | ||||
|     <property name="configParams"> | ||||
|       <map> | ||||
|         <entry key="cache.size" value="5000" /> | ||||
|         <entry key="cache.time.to.live" value="300" /> | ||||
|       </map> | ||||
|     </property>   | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="VMTemplateDaoImpl" class="com.cloud.storage.dao.VMTemplateDaoImpl"> | ||||
|     <property name="configParams"> | ||||
|       <map> | ||||
|         <entry key="cache.size" value="100" /> | ||||
|         <entry key="cache.time.to.live" value="600" /> | ||||
|       </map> | ||||
|     </property>   | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="hypervisorCapabilitiesDaoImpl" class="com.cloud.hypervisor.dao.HypervisorCapabilitiesDaoImpl"> | ||||
|     <property name="configParams"> | ||||
|       <map> | ||||
|         <entry key="cache.size" value="100" /> | ||||
|         <entry key="cache.time.to.live" value="600" /> | ||||
|       </map> | ||||
|     </property>   | ||||
|   </bean> | ||||
|   <bean id="dedicatedResourceDaoImpl" class="com.cloud.dc.dao.DedicatedResourceDaoImpl"> | ||||
|     <property name="configParams"> | ||||
|       <map> | ||||
|         <entry key="cache.size" value="30" /> | ||||
|         <entry key="cache.time.to.live" value="3600" /> | ||||
|       </map> | ||||
|     </property> | ||||
|   </bean> | ||||
|    | ||||
|   <!-- | ||||
|     DAOs with default configuration | ||||
|   --> | ||||
|   <bean id="accountDaoImpl" class="com.cloud.user.dao.AccountDaoImpl" /> | ||||
|   <bean id="accountDetailsDaoImpl" class="com.cloud.user.AccountDetailsDaoImpl" /> | ||||
|   <bean id="accountJoinDaoImpl" class="com.cloud.api.query.dao.AccountJoinDaoImpl" /> | ||||
|   <bean id="accountGuestVlanMapDaoImpl" class="com.cloud.network.dao.AccountGuestVlanMapDaoImpl" /> | ||||
|   <bean id="accountVlanMapDaoImpl" class="com.cloud.dc.dao.AccountVlanMapDaoImpl" /> | ||||
|   <bean id="alertDaoImpl" class="com.cloud.alert.dao.AlertDaoImpl" /> | ||||
|   <bean id="asyncJobJoinDaoImpl" class="com.cloud.api.query.dao.AsyncJobJoinDaoImpl" /> | ||||
|   <bean id="autoScalePolicyConditionMapDaoImpl" class="com.cloud.network.as.dao.AutoScalePolicyConditionMapDaoImpl" /> | ||||
|   <bean id="autoScalePolicyDaoImpl" class="com.cloud.network.as.dao.AutoScalePolicyDaoImpl" /> | ||||
|   <bean id="autoScaleVmGroupDaoImpl" class="com.cloud.network.as.dao.AutoScaleVmGroupDaoImpl" /> | ||||
|   <bean id="autoScaleVmGroupPolicyMapDaoImpl" class="com.cloud.network.as.dao.AutoScaleVmGroupPolicyMapDaoImpl" /> | ||||
|   <bean id="autoScaleVmProfileDaoImpl" class="com.cloud.network.as.dao.AutoScaleVmProfileDaoImpl" /> | ||||
|   <bean id="autoScaleVmGroupVmMapDaoImpl" class="com.cloud.network.as.dao.AutoScaleVmGroupVmMapDaoImpl" /> | ||||
|   <bean id="capacityDaoImpl" class="com.cloud.capacity.dao.CapacityDaoImpl" /> | ||||
|   <bean id="certificateDaoImpl" class="com.cloud.certificate.dao.CertificateDaoImpl" /> | ||||
|   <bean id="clusterDaoImpl" class="com.cloud.dc.dao.ClusterDaoImpl" /> | ||||
|   <bean id="clusterDetailsDaoImpl" class="com.cloud.dc.ClusterDetailsDaoImpl" /> | ||||
|   <bean id="clusterVSMMapDaoImpl" class="com.cloud.dc.dao.ClusterVSMMapDaoImpl" /> | ||||
|   <bean id="commandExecLogDaoImpl" class="com.cloud.secstorage.CommandExecLogDaoImpl" /> | ||||
|   <bean id="conditionDaoImpl" class="com.cloud.network.as.dao.ConditionDaoImpl" /> | ||||
|   <bean id="consoleProxyDaoImpl" class="com.cloud.vm.dao.ConsoleProxyDaoImpl" /> | ||||
|   <bean id="counterDaoImpl" class="com.cloud.network.as.dao.CounterDaoImpl" /> | ||||
|   <bean id="dataCenterIpAddressDaoImpl" class="com.cloud.dc.dao.DataCenterIpAddressDaoImpl" /> | ||||
|   <bean id="dataCenterJoinDaoImpl" class="com.cloud.api.query.dao.DataCenterJoinDaoImpl" /> | ||||
|   <bean id="dataCenterLinkLocalIpAddressDaoImpl" class="com.cloud.dc.dao.DataCenterLinkLocalIpAddressDaoImpl" /> | ||||
|   <bean id="dataCenterVnetDaoImpl" class="com.cloud.dc.dao.DataCenterVnetDaoImpl" /> | ||||
|   <bean id="dcDetailsDaoImpl" class="com.cloud.dc.dao.DcDetailsDaoImpl" /> | ||||
|   <bean id="engineDcDetailsDaoImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.db.dao.DcDetailsDaoImpl" /> | ||||
|   <bean id="diskOfferingJoinDaoImpl" class="com.cloud.api.query.dao.DiskOfferingJoinDaoImpl" /> | ||||
|   <bean id="domainDaoImpl" class="com.cloud.domain.dao.DomainDaoImpl" /> | ||||
|   <bean id="domainRouterDaoImpl" class="com.cloud.vm.dao.DomainRouterDaoImpl" /> | ||||
|   <bean id="domainRouterJoinDaoImpl" class="com.cloud.api.query.dao.DomainRouterJoinDaoImpl" /> | ||||
|   <bean id="elasticLbVmMapDaoImpl" class="com.cloud.network.lb.dao.ElasticLbVmMapDaoImpl" /> | ||||
|   <bean id="engineClusterDaoImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.db.dao.EngineClusterDaoImpl" /> | ||||
|   <bean id="engineDataCenterDaoImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.db.dao.EngineDataCenterDaoImpl" /> | ||||
|   <bean id="engineHostDaoImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.db.dao.EngineHostDaoImpl" /> | ||||
|   <bean id="engineHostPodDaoImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.db.dao.EngineHostPodDaoImpl" /> | ||||
|   <bean id="eventDaoImpl" class="com.cloud.event.dao.EventDaoImpl" /> | ||||
|   <bean id="eventJoinDaoImpl" class="com.cloud.event.dao.EventJoinDaoImpl" /> | ||||
|   <bean id="externalFirewallDeviceDaoImpl" class="com.cloud.network.dao.ExternalFirewallDeviceDaoImpl" /> | ||||
|   <bean id="externalLoadBalancerDeviceDaoImpl" class="com.cloud.network.dao.ExternalLoadBalancerDeviceDaoImpl" /> | ||||
|   <bean id="externalPublicIpStatisticsDaoImpl" class="com.cloud.usage.dao.ExternalPublicIpStatisticsDaoImpl" /> | ||||
|   <bean id="firewallRulesCidrsDaoImpl" class="com.cloud.network.dao.FirewallRulesCidrsDaoImpl" /> | ||||
|   <bean id="firewallRulesDaoImpl" class="com.cloud.network.dao.FirewallRulesDaoImpl" /> | ||||
|   <bean id="globalLoadBalancerDaoImpl" class="org.apache.cloudstack.region.gslb.GlobalLoadBalancerDaoImpl" /> | ||||
|   <bean id="globalLoadBalancerLbRuleMapDaoImpl" class="org.apache.cloudstack.region.gslb.GlobalLoadBalancerLbRuleMapDaoImpl" /> | ||||
|   <bean id="guestOSCategoryDaoImpl" class="com.cloud.storage.dao.GuestOSCategoryDaoImpl" /> | ||||
|   <bean id="guestOSDaoImpl" class="com.cloud.storage.dao.GuestOSDaoImpl" /> | ||||
|   <bean id="guestOSHypervisorDaoImpl" class="com.cloud.storage.dao.GuestOSHypervisorDaoImpl" /> | ||||
|   <bean id="highAvailabilityDaoImpl" class="com.cloud.ha.dao.HighAvailabilityDaoImpl" /> | ||||
|   <bean id="hostDaoImpl" class="com.cloud.host.dao.HostDaoImpl" /> | ||||
|   <bean id="engineHostDetailsDaoImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.db.dao.HostDetailsDaoImpl" /> | ||||
|   <bean id="hostDetailsDaoImpl" class="com.cloud.host.dao.HostDetailsDaoImpl" /> | ||||
|   <bean id="hostJoinDaoImpl" class="com.cloud.api.query.dao.HostJoinDaoImpl" /> | ||||
|   <bean id="engineHostTagsDaoImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.db.dao.HostTagsDaoImpl" /> | ||||
|   <bean id="hostTagsDaoImpl" class="com.cloud.host.dao.HostTagsDaoImpl" /> | ||||
|   <bean id="hostTransferMapDaoImpl" class="com.cloud.cluster.agentlb.dao.HostTransferMapDaoImpl" /> | ||||
|   <bean id="iPAddressDaoImpl" class="com.cloud.network.dao.IPAddressDaoImpl" /> | ||||
|   <bean id="identityDaoImpl" class="com.cloud.uuididentity.dao.IdentityDaoImpl" /> | ||||
|   <bean id="imageStoreDaoImpl" class="org.apache.cloudstack.storage.image.db.ImageStoreDaoImpl" /> | ||||
|   <bean id="imageStoreDetailsDaoImpl" class="org.apache.cloudstack.storage.image.db.ImageStoreDetailsDaoImpl" />  | ||||
|   <bean id="imageStoreJoinDaoImpl" class="com.cloud.api.query.dao.ImageStoreJoinDaoImpl" />    | ||||
|   <bean id="snapshotDataStoreDaoImpl" class="org.apache.cloudstack.storage.image.db.SnapshotDataStoreDaoImpl" />  | ||||
|   <bean id="templateDataStoreDaoImpl" class="org.apache.cloudstack.storage.image.db.TemplateDataStoreDaoImpl" />  | ||||
|   <bean id="templateJoinDaoImpl" class="com.cloud.api.query.dao.TemplateJoinDaoImpl" /> | ||||
|   <bean id="volumeDataStoreDaoImpl" class="org.apache.cloudstack.storage.image.db.VolumeDataStoreDaoImpl" />    | ||||
|   <bean id="inlineLoadBalancerNicMapDaoImpl" class="com.cloud.network.dao.InlineLoadBalancerNicMapDaoImpl" /> | ||||
|   <bean id="instanceGroupDaoImpl" class="com.cloud.vm.dao.InstanceGroupDaoImpl" /> | ||||
|   <bean id="instanceGroupJoinDaoImpl" class="com.cloud.api.query.dao.InstanceGroupJoinDaoImpl" /> | ||||
|   <bean id="instanceGroupVMMapDaoImpl" class="com.cloud.vm.dao.InstanceGroupVMMapDaoImpl" /> | ||||
|   <bean id="itWorkDaoImpl" class="com.cloud.vm.ItWorkDaoImpl" /> | ||||
|   <bean id="keystoreDaoImpl" class="com.cloud.keystore.KeystoreDaoImpl" /> | ||||
|   <bean id="lBHealthCheckPolicyDaoImpl" class="com.cloud.network.dao.LBHealthCheckPolicyDaoImpl" /> | ||||
|   <bean id="lBStickinessPolicyDaoImpl" class="com.cloud.network.dao.LBStickinessPolicyDaoImpl" /> | ||||
|   <bean id="launchPermissionDaoImpl" class="com.cloud.storage.dao.LaunchPermissionDaoImpl" /> | ||||
|   <bean id="loadBalancerDaoImpl" class="com.cloud.network.dao.LoadBalancerDaoImpl" /> | ||||
|   <bean id="loadBalancerVMMapDaoImpl" class="com.cloud.network.dao.LoadBalancerVMMapDaoImpl" /> | ||||
|   <bean id="managementServerHostDaoImpl" class="com.cloud.cluster.dao.ManagementServerHostDaoImpl" /> | ||||
|   <bean id="managementServerHostPeerDaoImpl" class="com.cloud.cluster.dao.ManagementServerHostPeerDaoImpl" /> | ||||
|   <bean id="networkAccountDaoImpl" class="com.cloud.network.dao.NetworkAccountDaoImpl" /> | ||||
|   <bean id="networkACLDaoImpl" class="com.cloud.network.vpc.dao.NetworkACLDaoImpl" /> | ||||
|   <bean id="networkACLItemDaoImpl" class="com.cloud.network.vpc.dao.NetworkACLItemDaoImpl" /> | ||||
|   <bean id="networkDaoImpl" class="com.cloud.network.dao.NetworkDaoImpl" /> | ||||
|   <bean id="networkDomainDaoImpl" class="com.cloud.network.dao.NetworkDomainDaoImpl" /> | ||||
|   <bean id="networkExternalFirewallDaoImpl" class="com.cloud.network.dao.NetworkExternalFirewallDaoImpl" /> | ||||
|   <bean id="networkExternalLoadBalancerDaoImpl" class="com.cloud.network.dao.NetworkExternalLoadBalancerDaoImpl" /> | ||||
|   <bean id="networkOfferingDaoImpl" class="com.cloud.offerings.dao.NetworkOfferingDaoImpl" /> | ||||
|   <bean id="networkOfferingServiceMapDaoImpl" class="com.cloud.offerings.dao.NetworkOfferingServiceMapDaoImpl" /> | ||||
|   <bean id="networkOpDaoImpl" class="com.cloud.network.dao.NetworkOpDaoImpl" /> | ||||
|   <bean id="networkRuleConfigDaoImpl" class="com.cloud.network.dao.NetworkRuleConfigDaoImpl" /> | ||||
|   <bean id="networkServiceMapDaoImpl" class="com.cloud.network.dao.NetworkServiceMapDaoImpl" /> | ||||
|   <bean id="nicDaoImpl" class="com.cloud.vm.dao.NicDaoImpl" /> | ||||
|   <bean id="nicDetailDaoImpl" class="com.cloud.vm.dao.NicDetailDaoImpl" /> | ||||
|   <bean id="nicSecondaryIpDaoImpl" class="com.cloud.vm.dao.NicSecondaryIpDaoImpl" /> | ||||
|   <bean id="nicIpAliasDaoImpl" class="com.cloud.vm.dao.NicIpAliasDaoImpl" /> | ||||
|   <bean id="objectInDataStoreDaoImpl" class="org.apache.cloudstack.storage.db.ObjectInDataStoreDaoImpl" /> | ||||
|   <bean id="ovsTunnelInterfaceDaoImpl" class="com.cloud.network.ovs.dao.OvsTunnelInterfaceDaoImpl" /> | ||||
|   <bean id="ovsTunnelNetworkDaoImpl" class="com.cloud.network.ovs.dao.OvsTunnelNetworkDaoImpl" /> | ||||
|   <bean id="physicalNetworkDaoImpl" class="com.cloud.network.dao.PhysicalNetworkDaoImpl" /> | ||||
|   <bean id="physicalNetworkIsolationMethodDaoImpl" class="com.cloud.network.dao.PhysicalNetworkIsolationMethodDaoImpl" /> | ||||
|   <bean id="physicalNetworkServiceProviderDaoImpl" class="com.cloud.network.dao.PhysicalNetworkServiceProviderDaoImpl" /> | ||||
|   <bean id="physicalNetworkTagDaoImpl" class="com.cloud.network.dao.PhysicalNetworkTagDaoImpl" /> | ||||
|   <bean id="physicalNetworkTrafficTypeDaoImpl" class="com.cloud.network.dao.PhysicalNetworkTrafficTypeDaoImpl" /> | ||||
|   <bean id="podVlanDaoImpl" class="com.cloud.dc.dao.PodVlanDaoImpl" /> | ||||
|   <bean id="podVlanMapDaoImpl" class="com.cloud.dc.dao.PodVlanMapDaoImpl" /> | ||||
|   <bean id="PortableIpDaoImpl" class="org.apache.cloudstack.region.PortableIpDaoImpl" /> | ||||
|   <bean id="PortableIpRangeDaoImpl" class="org.apache.cloudstack.region.PortableIpRangeDaoImpl" /> | ||||
|   <bean id="portForwardingRulesDaoImpl" class="com.cloud.network.rules.dao.PortForwardingRulesDaoImpl" /> | ||||
|   <bean id="portProfileDaoImpl" class="com.cloud.network.dao.PortProfileDaoImpl" /> | ||||
|   <bean id="primaryDataStoreDaoImpl" class="org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDaoImpl" /> | ||||
|   <bean id="primaryDataStoreDetailsDaoImpl" class="org.apache.cloudstack.storage.volume.db.PrimaryDataStoreDetailsDaoImpl" /> | ||||
|   <bean id="privateIpDaoImpl" class="com.cloud.network.vpc.dao.PrivateIpDaoImpl" /> | ||||
|   <bean id="projectAccountDaoImpl" class="com.cloud.projects.dao.ProjectAccountDaoImpl" /> | ||||
|   <bean id="projectAccountJoinDaoImpl" class="com.cloud.api.query.dao.ProjectAccountJoinDaoImpl" /> | ||||
|   <bean id="projectDaoImpl" class="com.cloud.projects.dao.ProjectDaoImpl" /> | ||||
|   <bean id="projectInvitationDaoImpl" class="com.cloud.projects.dao.ProjectInvitationDaoImpl" /> | ||||
|   <bean id="projectInvitationJoinDaoImpl" class="com.cloud.api.query.dao.ProjectInvitationJoinDaoImpl" /> | ||||
|   <bean id="projectJoinDaoImpl" class="com.cloud.api.query.dao.ProjectJoinDaoImpl" /> | ||||
|   <bean id="regionDaoImpl" class="org.apache.cloudstack.region.dao.RegionDaoImpl" /> | ||||
|   <bean id="remoteAccessVpnDaoImpl" class="com.cloud.network.dao.RemoteAccessVpnDaoImpl" /> | ||||
|   <bean id="resourceCountDaoImpl" class="com.cloud.configuration.dao.ResourceCountDaoImpl" /> | ||||
|   <bean id="resourceLimitDaoImpl" class="com.cloud.configuration.dao.ResourceLimitDaoImpl" /> | ||||
|   <bean id="resourceTagJoinDaoImpl" class="com.cloud.api.query.dao.ResourceTagJoinDaoImpl" /> | ||||
|   <bean id="resourceTagsDaoImpl" class="com.cloud.tags.dao.ResourceTagsDaoImpl" /> | ||||
|   <bean id="routerNetworkDaoImpl" class="com.cloud.network.dao.RouterNetworkDaoImpl" /> | ||||
|   <bean id="sSHKeyPairDaoImpl" class="com.cloud.user.dao.SSHKeyPairDaoImpl" /> | ||||
|   <bean id="secondaryStorageVmDaoImpl" class="com.cloud.vm.dao.SecondaryStorageVmDaoImpl" /> | ||||
|   <bean id="securityGroupDaoImpl" class="com.cloud.network.security.dao.SecurityGroupDaoImpl" /> | ||||
|   <bean id="securityGroupJoinDaoImpl" class="com.cloud.api.query.dao.SecurityGroupJoinDaoImpl" /> | ||||
|   <bean id="securityGroupRuleDaoImpl" class="com.cloud.network.security.dao.SecurityGroupRuleDaoImpl" /> | ||||
|   <bean id="securityGroupRulesDaoImpl" class="com.cloud.network.security.dao.SecurityGroupRulesDaoImpl" /> | ||||
|   <bean id="securityGroupVMMapDaoImpl" class="com.cloud.network.security.dao.SecurityGroupVMMapDaoImpl" /> | ||||
|   <bean id="securityGroupWorkDaoImpl" class="com.cloud.network.security.dao.SecurityGroupWorkDaoImpl" /> | ||||
|   <bean id="serviceOfferingJoinDaoImpl" class="com.cloud.api.query.dao.ServiceOfferingJoinDaoImpl" /> | ||||
|   <bean id="site2SiteCustomerGatewayDaoImpl" class="com.cloud.network.dao.Site2SiteCustomerGatewayDaoImpl" /> | ||||
|   <bean id="site2SiteVpnConnectionDaoImpl" class="com.cloud.network.dao.Site2SiteVpnConnectionDaoImpl" /> | ||||
|   <bean id="site2SiteVpnGatewayDaoImpl" class="com.cloud.network.dao.Site2SiteVpnGatewayDaoImpl" /> | ||||
|   <bean id="snapshotDaoImpl" class="com.cloud.storage.dao.SnapshotDaoImpl" /> | ||||
|   <bean id="snapshotPolicyDaoImpl" class="com.cloud.storage.dao.SnapshotPolicyDaoImpl" /> | ||||
|   <bean id="snapshotScheduleDaoImpl" class="com.cloud.storage.dao.SnapshotScheduleDaoImpl" /> | ||||
|   <bean id="staticRouteDaoImpl" class="com.cloud.network.vpc.dao.StaticRouteDaoImpl" /> | ||||
|   <bean id="storageNetworkIpAddressDaoImpl" class="com.cloud.dc.dao.StorageNetworkIpAddressDaoImpl" /> | ||||
|   <bean id="storageNetworkIpRangeDaoImpl" class="com.cloud.dc.dao.StorageNetworkIpRangeDaoImpl" /> | ||||
|   <bean id="storagePoolDetailsDaoImpl" class="com.cloud.storage.dao.StoragePoolDetailsDaoImpl" /> | ||||
|   <bean id="storagePoolHostDaoImpl" class="com.cloud.storage.dao.StoragePoolHostDaoImpl" /> | ||||
|   <bean id="storagePoolJoinDaoImpl" class="com.cloud.api.query.dao.StoragePoolJoinDaoImpl" /> | ||||
|   <bean id="storagePoolWorkDaoImpl" class="com.cloud.storage.dao.StoragePoolWorkDaoImpl" /> | ||||
|   <bean id="templatePrimaryDataStoreDaoImpl" class="org.apache.cloudstack.storage.volume.db.TemplatePrimaryDataStoreDaoImpl" /> | ||||
|   <bean id="uploadDaoImpl" class="com.cloud.storage.dao.UploadDaoImpl" /> | ||||
|   <bean id="usageDaoImpl" class="com.cloud.usage.dao.UsageDaoImpl" /> | ||||
|   <bean id="usageEventDaoImpl" class="com.cloud.event.dao.UsageEventDaoImpl" /> | ||||
|   <bean id="usageIPAddressDaoImpl" class="com.cloud.usage.dao.UsageIPAddressDaoImpl" /> | ||||
|   <bean id="usageJobDaoImpl" class="com.cloud.usage.dao.UsageJobDaoImpl" /> | ||||
|   <bean id="usageLoadBalancerPolicyDaoImpl" class="com.cloud.usage.dao.UsageLoadBalancerPolicyDaoImpl" /> | ||||
|   <bean id="usageNetworkDaoImpl" class="com.cloud.usage.dao.UsageNetworkDaoImpl" /> | ||||
|   <bean id="usageNetworkOfferingDaoImpl" class="com.cloud.usage.dao.UsageNetworkOfferingDaoImpl" /> | ||||
|   <bean id="usagePortForwardingRuleDaoImpl" class="com.cloud.usage.dao.UsagePortForwardingRuleDaoImpl" /> | ||||
|   <bean id="usageSecurityGroupDaoImpl" class="com.cloud.usage.dao.UsageSecurityGroupDaoImpl" /> | ||||
|   <bean id="usageStorageDaoImpl" class="com.cloud.usage.dao.UsageStorageDaoImpl" /> | ||||
|   <bean id="usageVMInstanceDaoImpl" class="com.cloud.usage.dao.UsageVMInstanceDaoImpl" /> | ||||
|   <bean id="usageVPNUserDaoImpl" class="com.cloud.usage.dao.UsageVPNUserDaoImpl" /> | ||||
|   <bean id="usageVolumeDaoImpl" class="com.cloud.usage.dao.UsageVolumeDaoImpl" /> | ||||
|   <bean id="usageVmDiskDaoImpl" class="com.cloud.usage.dao.UsageVmDiskDaoImpl" /> | ||||
|   <bean id="userAccountDaoImpl" class="com.cloud.user.dao.UserAccountDaoImpl" /> | ||||
|   <bean id="userAccountJoinDaoImpl" class="com.cloud.api.query.dao.UserAccountJoinDaoImpl" /> | ||||
|   <bean id="userIpv6AddressDaoImpl" class="com.cloud.network.dao.UserIpv6AddressDaoImpl" /> | ||||
|   <bean id="userStatisticsDaoImpl" class="com.cloud.user.dao.UserStatisticsDaoImpl" /> | ||||
|   <bean id="userStatsLogDaoImpl" class="com.cloud.user.dao.UserStatsLogDaoImpl" /> | ||||
|   <bean id="userVmDiskStatsDaoImpl" class="com.cloud.user.dao.VmDiskStatisticsDaoImpl" /> | ||||
|   <bean id="userVmCloneSettingDaoImpl" class="com.cloud.vm.dao.UserVmCloneSettingDaoImpl" /> | ||||
|   <bean id="userVmDaoImpl" class="com.cloud.vm.dao.UserVmDaoImpl" /> | ||||
|   <bean id="userVmDetailsDaoImpl" class="com.cloud.vm.dao.UserVmDetailsDaoImpl" /> | ||||
|   <bean id="userVmJoinDaoImpl" class="com.cloud.api.query.dao.UserVmJoinDaoImpl" /> | ||||
|   <bean id="vMComputeTagDaoImpl" class="org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMComputeTagDaoImpl" /> | ||||
|   <bean id="vMEntityDaoImpl" class="org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMEntityDaoImpl" /> | ||||
|   <bean id="vMInstanceDaoImpl" class="com.cloud.vm.dao.VMInstanceDaoImpl" /> | ||||
|   <bean id="vMNetworkMapDaoImpl" class="org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMNetworkMapDaoImpl" /> | ||||
|   <bean id="vMReservationDaoImpl" class="org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMReservationDaoImpl" /> | ||||
|   <bean id="vMRootDiskTagDaoImpl" class="org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMRootDiskTagDaoImpl" /> | ||||
|   <bean id="vMSnapshotDaoImpl" class="com.cloud.vm.snapshot.dao.VMSnapshotDaoImpl" /> | ||||
|   <bean id="vMTemplateDetailsDaoImpl" class="com.cloud.storage.dao.VMTemplateDetailsDaoImpl" /> | ||||
|   <bean id="vMTemplateHostDaoImpl" class="com.cloud.storage.dao.VMTemplateHostDaoImpl" /> | ||||
|   <bean id="vMTemplatePoolDaoImpl" class="com.cloud.storage.dao.VMTemplatePoolDaoImpl" /> | ||||
|   <bean id="vMTemplateZoneDaoImpl" class="com.cloud.storage.dao.VMTemplateZoneDaoImpl" /> | ||||
|   <bean id="versionDaoImpl" class="com.cloud.upgrade.dao.VersionDaoImpl" /> | ||||
|   <bean id="virtualRouterProviderDaoImpl" class="com.cloud.network.dao.VirtualRouterProviderDaoImpl" /> | ||||
|   <bean id="vmRulesetLogDaoImpl" class="com.cloud.network.security.dao.VmRulesetLogDaoImpl" /> | ||||
|   <bean id="volumeDaoImpl" class="com.cloud.storage.dao.VolumeDaoImpl" /> | ||||
|   <bean id="volumeDetailsDaoImpl" class="com.cloud.storage.dao.VolumeDetailsDaoImpl" /> | ||||
|   <bean id="volumeHostDaoImpl" class="com.cloud.storage.dao.VolumeHostDaoImpl" /> | ||||
|   <bean id="volumeJoinDaoImpl" class="com.cloud.api.query.dao.VolumeJoinDaoImpl" /> | ||||
|   <bean id="volumeReservationDaoImpl" class="org.apache.cloudstack.engine.cloud.entity.api.db.dao.VolumeReservationDaoImpl" /> | ||||
|   <bean id="vpcDaoImpl" class="com.cloud.network.vpc.dao.VpcDaoImpl" /> | ||||
|   <bean id="vpcGatewayDaoImpl" class="com.cloud.network.vpc.dao.VpcGatewayDaoImpl" /> | ||||
|   <bean id="vpcOfferingDaoImpl" class="com.cloud.network.vpc.dao.VpcOfferingDaoImpl" /> | ||||
|   <bean id="vpcOfferingServiceMapDaoImpl" class="com.cloud.network.vpc.dao.VpcOfferingServiceMapDaoImpl" /> | ||||
|   <bean id="vpcServiceMapDaoImpl" class="com.cloud.network.vpc.dao.VpcServiceMapDaoImpl" /> | ||||
|   <bean id="vpnUserDaoImpl" class="com.cloud.network.dao.VpnUserDaoImpl" /> | ||||
|   <bean id="applicationLbRuleDaoImpl" class="org.apache.cloudstack.lb.dao.ApplicationLoadBalancerRuleDaoImpl" /> | ||||
|   <bean id="networkOfferingDetailsDaoImpl" class="com.cloud.offerings.dao.NetworkOfferingDetailsDaoImpl" /> | ||||
|   <bean id="serviceOfferingDetailsDaoImpl" class="com.cloud.service.dao.ServiceOfferingDetailsDaoImpl"/> | ||||
| 
 | ||||
|   <!-- | ||||
|     Checkers | ||||
|   --> | ||||
|   <bean id="encryptionSecretKeyChecker" class="com.cloud.utils.crypt.EncryptionSecretKeyChecker" /> | ||||
|   <bean id="StaticRoleBasedAPIAccessChecker" class="org.apache.cloudstack.acl.StaticRoleBasedAPIAccessChecker"/> | ||||
|   <bean id="databaseIntegrityChecker" class="com.cloud.upgrade.DatabaseIntegrityChecker" /> | ||||
|   <bean id="domainChecker" class="com.cloud.acl.DomainChecker" /> | ||||
|   <bean id="affinityGroupAccessChecker" class="com.cloud.acl.AffinityGroupAccessChecker" /> | ||||
|    | ||||
|   <!-- | ||||
|     Authenticators | ||||
|   -->  | ||||
|   <bean id="basicAgentAuthManager" class="com.cloud.agent.manager.authn.impl.BasicAgentAuthManager"> | ||||
|     <property name="name" value="BASIC"/> | ||||
|   </bean> | ||||
|   <bean id="MD5UserAuthenticator" class="com.cloud.server.auth.MD5UserAuthenticator"> | ||||
|     <property name="name" value="MD5"/> | ||||
|   </bean> | ||||
|   <bean id="LdapAuthenticator" class="org.apache.cloudstack.ldap.LdapAuthenticator"> | ||||
|     <property name="name" value="LDAP"/> | ||||
|   </bean> | ||||
|   <bean id="SHA256SaltedUserAuthenticator" class="com.cloud.server.auth.SHA256SaltedUserAuthenticator"> | ||||
|     <property name="name" value="SHA256SALT"/> | ||||
|   </bean> | ||||
|   <bean id="PlainTextUserAuthenticator" class="com.cloud.server.auth.PlainTextUserAuthenticator"> | ||||
|     <property name="name" value="PLAINTEXT"/> | ||||
|   </bean> | ||||
|   <bean id="LdapManager" class="org.apache.cloudstack.ldap.LdapManagerImpl" /> | ||||
|   <bean id="LdapUserManager" class="org.apache.cloudstack.ldap.LdapUserManager" /> | ||||
|   <bean id="LdapContextFactory" class="org.apache.cloudstack.ldap.LdapContextFactory" /> | ||||
|   <bean id="LdapConfigurationDao" class="org.apache.cloudstack.ldap.dao.LdapConfigurationDaoImpl" /> | ||||
|   <bean id="LdapConfiguration" class="org.apache.cloudstack.ldap.LdapConfiguration" /> | ||||
| 
 | ||||
|   <!-- | ||||
|       Network Elements | ||||
|   --> | ||||
|   <bean id="Ovs" class="com.cloud.network.element.OvsElement"> | ||||
|     <property name="name" value="Ovs"/> | ||||
|   </bean> | ||||
|   <bean id="SecurityGroupProvider" class="com.cloud.network.element.SecurityGroupElement"> | ||||
|     <property name="name" value="SecurityGroupProvider"/> | ||||
|   </bean> | ||||
|   <bean id="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement"> | ||||
|     <property name="name" value="VirtualRouter"/> | ||||
|   </bean> | ||||
|   <bean id="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement"> | ||||
|     <property name="name" value="VpcVirtualRouter"/> | ||||
|   </bean> | ||||
|   <bean id="elasticLoadBalancerElement" class="com.cloud.network.element.ElasticLoadBalancerElement"> | ||||
|     <property name="name" value="ElasticLoadBalancerElement"/> | ||||
|   </bean> | ||||
|   <bean id="InternalLbVm" class="org.apache.cloudstack.network.element.InternalLoadBalancerElement"> | ||||
|     <property name="name" value="InternalLbVm"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <!--  | ||||
|     General allocators | ||||
|   -->              | ||||
|   <bean id="firstFitAllocator" class="com.cloud.agent.manager.allocator.impl.FirstFitAllocator" /> | ||||
|   <bean id="randomAllocator" class="com.cloud.agent.manager.allocator.impl.RandomAllocator" /> | ||||
| 
 | ||||
|   <!-- | ||||
|      Host Allocators | ||||
|   --> | ||||
|   <bean id="FirstFitRouting" class="com.cloud.agent.manager.allocator.impl.FirstFitRoutingAllocator"> | ||||
|     <property name="name" value="FirstFitRouting"/> | ||||
|   </bean> | ||||
|    | ||||
|   <!-- | ||||
|     Storage pool allocators | ||||
|   --> | ||||
|   <bean id="LocalStoragePoolAllocator" class="org.apache.cloudstack.storage.allocator.LocalStoragePoolAllocator"> | ||||
|     <property name="name" value="LocalStorage"/> | ||||
|   </bean> | ||||
|   <bean id="clusterScopeStoragePoolAllocator" class="org.apache.cloudstack.storage.allocator.ClusterScopeStoragePoolAllocator" /> | ||||
|   <bean id="zoneWideStoragePoolAllocator" class="org.apache.cloudstack.storage.allocator.ZoneWideStoragePoolAllocator" /> | ||||
|   <bean id="garbageCollectingStoragePoolAllocator" class="org.apache.cloudstack.storage.allocator.GarbageCollectingStoragePoolAllocator"> | ||||
|     <property name="name" value="GCStorage"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="UserConcentratedAllocator" class="com.cloud.agent.manager.allocator.impl.UserConcentratedAllocator"> | ||||
|     <property name="name" value="UserFirst"/> | ||||
|   </bean> | ||||
|    | ||||
|    | ||||
|   <bean id="recreatableFencer" class="com.cloud.ha.RecreatableFencer" /> | ||||
|   <bean id="recreateHostAllocator" class="com.cloud.agent.manager.allocator.impl.RecreateHostAllocator" /> | ||||
|   <bean id="secondaryStorageVmDefaultAllocator" class="com.cloud.storage.secondary.SecondaryStorageVmDefaultAllocator" /> | ||||
| 
 | ||||
| 
 | ||||
|   <!-- | ||||
|     Misc allocator & Adapters | ||||
|   --> | ||||
|   <bean id="ConsoleProxyAllocator" class="com.cloud.consoleproxy.ConsoleProxyBalanceAllocator"> | ||||
|     <property name="name" value="Balance"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="ExternalIpAddressAllocator" class="com.cloud.network.ExternalIpAddressAllocator"> | ||||
|     <property name="name" value="Basic"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="hypervisorTemplateAdapter" class="com.cloud.template.HypervisorTemplateAdapter" /> | ||||
|   <bean id="clusterAlertAdapter" class="com.cloud.alert.ClusterAlertAdapter" /> | ||||
|   <bean id="consoleProxyAlertAdapter" class="com.cloud.alert.ConsoleProxyAlertAdapter" /> | ||||
|   <bean id="secondaryStorageVmAlertAdapter" class="com.cloud.alert.SecondaryStorageVmAlertAdapter" /> | ||||
|   <bean id="clusterServiceServletAdapter" class="com.cloud.cluster.ClusterServiceServletAdapter" /> | ||||
| 
 | ||||
|   <!-- | ||||
|     Investigators | ||||
|   --> | ||||
|   <bean id="CheckOnAgentInvestigator" class="com.cloud.ha.CheckOnAgentInvestigator"> | ||||
|     <property name="name" value="SimpleInvestigator"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="XenServerInvestigator" class="com.cloud.ha.XenServerInvestigator"> | ||||
|     <property name="name" value="XenServerInvestigator"/> | ||||
|   </bean> | ||||
|    | ||||
|   <bean id="KVMInvestigator" class="com.cloud.ha.KVMInvestigator"> | ||||
|     <property name="name" value="KVMInvestigator"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="UserVmDomRInvestigator" class="com.cloud.ha.UserVmDomRInvestigator"> | ||||
|     <property name="name" value="PingInvestigator"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="ManagementIPSystemVMInvestigator" class="com.cloud.ha.ManagementIPSystemVMInvestigator"> | ||||
|     <property name="name" value="ManagementIPSysVMInvestigator"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <!-- | ||||
|     Fencers | ||||
|   --> | ||||
|   <bean id="XenServerFencer" class="com.cloud.ha.XenServerFencer"> | ||||
|     <property name="name" value="XenServerFenceBuilder"/> | ||||
|   </bean> | ||||
|   <bean id="KVMFencer" class="com.cloud.ha.KVMFencer"> | ||||
|     <property name="name" value="KVMFenceBuilder"/> | ||||
|   </bean> | ||||
|   <bean id="OvmFencer" class="com.cloud.ovm.hypervisor.OvmFencer"> | ||||
|     <property name="name" value="OvmFenceBuilder"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <!-- | ||||
|     Discovers | ||||
|   --> | ||||
|   <bean id="XcpServerDiscoverer" class="com.cloud.hypervisor.xen.discoverer.XcpServerDiscoverer"> | ||||
|     <property name="name" value="XCP Agent"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="SecondaryStorageDiscoverer" class="org.apache.cloudstack.storage.resource.SecondaryStorageDiscoverer"> | ||||
|     <property name="name" value="SecondaryStorage"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="KvmServerDiscoverer" class="com.cloud.hypervisor.kvm.discoverer.KvmServerDiscoverer"> | ||||
|     <property name="name" value="KVM Agent"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="LxcServerDiscoverer" class="com.cloud.hypervisor.kvm.discoverer.LxcServerDiscoverer"> | ||||
|     <property name="name" value="Lxc Discover"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="OvmDiscoverer" class="com.cloud.ovm.hypervisor.OvmDiscoverer"> | ||||
|     <property name="name" value="Ovm Discover"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="dummyHostDiscoverer" class="com.cloud.resource.DummyHostDiscoverer"> | ||||
|     <property name="name" value="dummyHostDiscoverer" /> | ||||
|   </bean> | ||||
| 
 | ||||
|   <!-- | ||||
|     Deployment planners | ||||
|   --> | ||||
|   <bean id="UserDispersingPlanner" class="com.cloud.deploy.UserDispersingPlanner"> | ||||
|     <property name="name" value="UserDispersingPlanner"/> | ||||
|   </bean> | ||||
|    | ||||
|   <bean id="UserConcentratedPodPlanner" class="com.cloud.deploy.UserConcentratedPodPlanner"> | ||||
|     <property name="name" value="UserConcentratedPodPlanner"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="ImplicitDedicationPlanner" class="com.cloud.deploy.ImplicitDedicationPlanner"> | ||||
|     <property name="name" value="ImplicitDedicationPlanner"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="clusterBasedAgentLoadBalancerPlanner" class="com.cloud.cluster.agentlb.ClusterBasedAgentLoadBalancerPlanner"> | ||||
|     <property name="name" value="ClusterBasedAgentLoadBalancerPlanner"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <!-- | ||||
|     Network Gurus | ||||
|   --> | ||||
|   <bean id="StorageNetworkGuru" class="com.cloud.network.guru.StorageNetworkGuru"> | ||||
|     <property name="name" value="StorageNetworkGuru"/> | ||||
|   </bean> | ||||
|   <bean id="ExternalGuestNetworkGuru" class="com.cloud.network.guru.ExternalGuestNetworkGuru"> | ||||
|     <property name="name" value="ExternalGuestNetworkGuru"/> | ||||
|   </bean> | ||||
|   <bean id="PublicNetworkGuru" class="com.cloud.network.guru.PublicNetworkGuru"> | ||||
|     <property name="name" value="PublicNetworkGuru"/> | ||||
|   </bean> | ||||
|   <bean id="PodBasedNetworkGuru" class="com.cloud.network.guru.PodBasedNetworkGuru"> | ||||
|     <property name="name" value="PodBasedNetworkGuru"/> | ||||
|   </bean> | ||||
|   <bean id="ControlNetworkGuru" class="com.cloud.network.guru.ControlNetworkGuru"> | ||||
|     <property name="name" value="ControlNetworkGuru"/> | ||||
|   </bean> | ||||
|   <bean id="DirectNetworkGuru" class="com.cloud.network.guru.DirectNetworkGuru"> | ||||
|     <property name="name" value="DirectNetworkGuru"/> | ||||
|   </bean> | ||||
|   <bean id="DirectPodBasedNetworkGuru" class="com.cloud.network.guru.DirectPodBasedNetworkGuru"> | ||||
|     <property name="name" value="DirectPodBasedNetworkGuru"/> | ||||
|   </bean> | ||||
|   <bean id="OvsGuestNetworkGuru" class="com.cloud.network.guru.OvsGuestNetworkGuru"> | ||||
|     <property name="name" value="OvsGuestNetworkGuru"/> | ||||
|   </bean> | ||||
|   <bean id="PrivateNetworkGuru" class="com.cloud.network.guru.PrivateNetworkGuru"> | ||||
|     <property name="name" value="PrivateNetworkGuru"/> | ||||
|   </bean> | ||||
|   | ||||
|   <!-- | ||||
|    Hypervisor Gurus | ||||
|   --> | ||||
|   <bean id="XenServerGuru" class="com.cloud.hypervisor.XenServerGuru"> | ||||
|     <property name="name" value="XenServerGuru"/> | ||||
|   </bean> | ||||
|    | ||||
|   <bean id="KVMGuru" class="com.cloud.hypervisor.KVMGuru"> | ||||
|     <property name="name" value="KVMGuru"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="LXCGuru" class="com.cloud.hypervisor.LXCGuru"> | ||||
|     <property name="name" value="LXCGuru"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="OvmGuru" class="com.cloud.ovm.hypervisor.OvmGuru"> | ||||
|     <property name="name" value="OvmGuru"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <!--=====================================================================================================--> | ||||
|   <!--                                                                                                     --> | ||||
|   <!--                           Storage Subsystem Components and Helpers                                  --> | ||||
|   <!--                                                                                                     --> | ||||
|   <!--=====================================================================================================--> | ||||
| 
 | ||||
|   <!--Filesystem types--> | ||||
|   <bean id="iSCSI" class="org.apache.cloudstack.storage.datastore.type.ISCSI" /> | ||||
|   <bean id="networkFileSystem" class="org.apache.cloudstack.storage.datastore.type.NetworkFileSystem" /> | ||||
| 
 | ||||
|   <!--Image formats--> | ||||
|   <bean id="ISO" class="org.apache.cloudstack.storage.image.format.ISO" /> | ||||
|   <bean id="OVA" class="org.apache.cloudstack.storage.image.format.OVA" /> | ||||
|   <bean id="QCOW2" class="org.apache.cloudstack.storage.image.format.QCOW2" /> | ||||
|   <bean id="VHD" class="org.apache.cloudstack.storage.image.format.VHD" /> | ||||
|   <bean id="VHDX" class="org.apache.cloudstack.storage.image.format.VHDX" /> | ||||
|   <bean id="unknown" class="org.apache.cloudstack.storage.image.format.Unknown" /> | ||||
| 
 | ||||
|   <!--Data Store Services --> | ||||
|   <bean id="snapshotServiceImpl" class="org.apache.cloudstack.storage.snapshot.SnapshotServiceImpl" | ||||
|         depends-on="snapshotStateMachineManagerImpl, snapshotDataFactoryImpl, dataStoreManagerImpl, dataMotionServiceImpl, objectInDataStoreManagerImpl"/> | ||||
|   <bean id="templateServiceImpl" class="org.apache.cloudstack.storage.image.TemplateServiceImpl" | ||||
|         depends-on="dataObjectManagerImpl, dataStoreManagerImpl, dataMotionServiceImpl, objectInDataStoreManagerImpl, defaultEndPointSelector, templateDataFactoryImpl"/> | ||||
|   <bean id="volumeServiceImpl" class="org.apache.cloudstack.storage.volume.VolumeServiceImpl" | ||||
|         depends-on="snapshotManagerImpl, dataMotionServiceImpl"/> | ||||
| 
 | ||||
|   <bean id="xenserverSnapshotStrategy" class="org.apache.cloudstack.storage.snapshot.XenserverSnapshotStrategy" /> | ||||
| 
 | ||||
|   <!--Data Store Factory--> | ||||
|   <bean id="templateDataFactoryImpl" class="org.apache.cloudstack.storage.image.TemplateDataFactoryImpl" /> | ||||
|   <bean id="snapshotDataFactoryImpl" class="org.apache.cloudstack.storage.snapshot.SnapshotDataFactoryImpl" | ||||
|         depends-on="dataStoreManagerImpl, snapshotDataStoreDaoImpl, volumeDataFactoryImpl"/> | ||||
|   <bean id="volumeDataFactoryImpl" class="org.apache.cloudstack.storage.volume.VolumeDataFactoryImpl" /> | ||||
| 
 | ||||
|   <bean id="objectInDataStoreManagerImpl" class="org.apache.cloudstack.storage.datastore.ObjectInDataStoreManagerImpl" /> | ||||
|   <bean id="dataObjectManagerImpl" class="org.apache.cloudstack.storage.datastore.DataObjectManagerImpl" /> | ||||
| 
 | ||||
|   <!--Data Store Helpers--> | ||||
|   <bean id="primaryDataStoreHelper" class="org.apache.cloudstack.storage.volume.datastore.PrimaryDataStoreHelper" /> | ||||
|   <bean id="imageStoreHelper" class="org.apache.cloudstack.storage.image.datastore.ImageStoreHelper" /> | ||||
|   <bean id="imageFormatHelper" class="org.apache.cloudstack.storage.image.format.ImageFormatHelper" /> | ||||
| 
 | ||||
|   <bean id="storageCacheRandomAllocator" class="org.apache.cloudstack.storage.cache.allocator.StorageCacheRandomAllocator" /> | ||||
|   <bean id="storageCacheManagerImpl" class="org.apache.cloudstack.storage.cache.manager.StorageCacheManagerImpl"  /> | ||||
|   <bean id="StorageCacheReplacementAlgorithm" class="org.apache.cloudstack.storage.cache.manager.StorageCacheReplacementAlgorithmLRU" /> | ||||
| 
 | ||||
|   <bean id="snapshotStateMachineManagerImpl" class="org.apache.cloudstack.storage.snapshot.SnapshotStateMachineManagerImpl" /> | ||||
|   <bean id="defaultEndPointSelector" class="org.apache.cloudstack.storage.endpoint.DefaultEndPointSelector" /> | ||||
| 
 | ||||
| 
 | ||||
|   <bean id="ancientDataMotionStrategy" class="org.apache.cloudstack.storage.motion.AncientDataMotionStrategy" /> | ||||
|   <bean id="xenserverStorageMotionStrategy" class="org.apache.cloudstack.storage.motion.XenServerStorageMotionStrategy" /> | ||||
| 
 | ||||
|   <!--Data Motion Services--> | ||||
|   <bean id="dataMotionServiceImpl" class="org.apache.cloudstack.storage.motion.DataMotionServiceImpl"> | ||||
|     <property name="strategies"> | ||||
|       <list> | ||||
|         <ref local="ancientDataMotionStrategy"/> | ||||
|         <ref local="xenserverStorageMotionStrategy"/> | ||||
|       </list> | ||||
|     </property> | ||||
|   </bean> | ||||
| 
 | ||||
|   <!-- | ||||
|     Data Store Provider Manager | ||||
|   --> | ||||
|   <bean id="primaryDataStoreProviderMgr" | ||||
|         class="org.apache.cloudstack.storage.datastore.manager.PrimaryDataStoreProviderManagerImpl"/> | ||||
|   <bean id="imageStoreProviderMgr" class="org.apache.cloudstack.storage.image.manager.ImageStoreProviderManagerImpl"/> | ||||
| 
 | ||||
|   <bean id="dataStoreManagerImpl" class="org.apache.cloudstack.storage.datastore.DataStoreManagerImpl" | ||||
|         depends-on="dataStoreProviderManager"> | ||||
|     <property name="primaryStoreMgr" ref="primaryDataStoreProviderMgr"/> | ||||
|     <property name="imageDataStoreMgr" ref="imageStoreProviderMgr"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="cloudStackPrimaryDataStoreProviderImpl" | ||||
|         class="org.apache.cloudstack.storage.datastore.provider.CloudStackPrimaryDataStoreProviderImpl"/> | ||||
| 
 | ||||
|   <bean id="dataStoreProviderManager" | ||||
|         class="org.apache.cloudstack.storage.datastore.provider.DataStoreProviderManagerImpl"> | ||||
|     <property name="providers"> | ||||
|       <list> | ||||
|         <!--Data Store Providers--> | ||||
|         <ref bean="cloudStackPrimaryDataStoreProviderImpl"/> | ||||
|       </list> | ||||
|     </property> | ||||
|   </bean> | ||||
| 
 | ||||
|   <!-- | ||||
|     Managers | ||||
|   --> | ||||
|   <bean id="accountManagerImpl" class="com.cloud.user.AccountManagerImpl" > | ||||
|     <property name="UserAuthenticators" value="#{userAuthenticators.Adapters}" /> | ||||
|     <property name="UserPasswordEncoders" value="#{userPasswordEncoders.Adapters}" /> | ||||
|     <property name="SecurityCheckers" value="#{securityCheckers.Adapters}" /> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="managementServerImpl" class ="com.cloud.server.ManagementServerImpl"> | ||||
|     <property name="UserAuthenticators" value="#{userAuthenticators.Adapters}" /> | ||||
|     <property name="UserPasswordEncoders" value="#{userPasswordEncoders.Adapters}" /> | ||||
|     <property name="HostAllocators" value="#{hostAllocators.Adapters}" /> | ||||
|     <property name="AffinityGroupProcessors" value="#{affinityProcessors.Adapters}" /> | ||||
|     <property name="Planners" value="#{deploymentPlanners.Adapters}" /> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="storageManagerImpl" class="com.cloud.storage.StorageManagerImpl"/> | ||||
|    | ||||
|   <bean id="volumeOrchestrator" class="org.apache.cloudstack.engine.orchestration.VolumeOrchestrator"> | ||||
|     <property name="PodAllocators" value="#{podAllocators.Adapters}" /> | ||||
|     <property name="StoragePoolAllocators" value="#{storagePoolAllocators.Adapters}" /> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="FirstFitPlanner" class="com.cloud.deploy.FirstFitPlanner"> | ||||
|     <property name="name" value="FirstFitPlanner"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="resourceManagerImpl" class="com.cloud.resource.ResourceManagerImpl" > | ||||
|     <property name="Discoverers" value="#{resourceDiscoverers.Adapters}" /> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="highAvailabilityManagerExtImpl" class="com.cloud.ha.HighAvailabilityManagerExtImpl" > | ||||
|     <property name="Investigators" value="#{haInvestigators.Adapters}" /> | ||||
|     <property name="FenceBuilders" value="#{haFenceBuilders.Adapters}" /> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="clusteredVirtualMachineManagerImpl" class="com.cloud.vm.ClusteredVirtualMachineManagerImpl" > | ||||
|     <property name="HostAllocators" value="#{hostAllocators.Adapters}" /> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="networkOrchestrator" class="org.apache.cloudstack.engine.orchestration.NetworkOrchestrator" > | ||||
|     <property name="NetworkGurus" value="#{networkGurus.Adapters}" /> | ||||
|     <property name="NetworkElements" value="#{networkElements.Adapters}" /> | ||||
|     <property name="IpDeployers" value="#{ipDeployers.Adapters}" /> | ||||
|     <property name="DhcpProviders" value="#{dhcpProviders.Adapters}" /> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="ipAddressManagerImpl" class="com.cloud.network.IpAddressManagerImpl" > | ||||
|   </bean> | ||||
|   <bean id="networkModelImpl" class="com.cloud.network.NetworkModelImpl"> | ||||
|     <property name="NetworkElements" value="#{networkElements.Adapters}" /> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="configurationServerImpl" class="com.cloud.server.ConfigurationServerImpl" /> | ||||
| 
 | ||||
|   <bean id="clusterManagerImpl" class="com.cloud.cluster.ClusterManagerImpl" /> | ||||
|   <bean id="clusteredAgentManagerImpl" class="com.cloud.agent.manager.ClusteredAgentManagerImpl" /> | ||||
| 
 | ||||
|   <bean id="userVmManagerImpl" class="com.cloud.vm.UserVmManagerImpl" /> | ||||
|   <bean id="consoleProxyManagerImpl" class="com.cloud.consoleproxy.ConsoleProxyManagerImpl" /> | ||||
|   <bean id="securityGroupManagerImpl2" class="com.cloud.network.security.SecurityGroupManagerImpl2" /> | ||||
|   <bean id="premiumSecondaryStorageManagerImpl" class="com.cloud.secstorage.PremiumSecondaryStorageManagerImpl" /> | ||||
| 
 | ||||
|   <bean id="ipv6AddressManagerImpl" class="com.cloud.network.Ipv6AddressManagerImpl" /> | ||||
| 
 | ||||
|   <bean id="apiRateLimitServiceImpl" class="org.apache.cloudstack.ratelimit.ApiRateLimitServiceImpl"/> | ||||
|   <bean id="alertManagerImpl" class="com.cloud.alert.AlertManagerImpl" /> | ||||
|   <bean id="autoScaleManagerImpl" class="com.cloud.network.as.AutoScaleManagerImpl" /> | ||||
|   <bean id="capacityManagerImpl" class="com.cloud.capacity.CapacityManagerImpl" /> | ||||
|   <bean id="clusterFenceManagerImpl" class="com.cloud.cluster.ClusterFenceManagerImpl" /> | ||||
|   <bean id="configurationManagerImpl" class="com.cloud.configuration.ConfigurationManagerImpl" /> | ||||
| 
 | ||||
|   <bean id="elasticLoadBalancerManagerImpl" class="com.cloud.network.lb.ElasticLoadBalancerManagerImpl" /> | ||||
|   <bean id="entityManagerImpl" class="com.cloud.dao.EntityManagerImpl" /> | ||||
|   <bean id="externalDeviceUsageManagerImpl" class="com.cloud.network.ExternalDeviceUsageManagerImpl" /> | ||||
|   <bean id="externalNetworkDeviceManagerImpl" class="com.cloud.network.ExternalNetworkDeviceManagerImpl" /> | ||||
|   <bean id="firewallManagerImpl" class="com.cloud.network.firewall.FirewallManagerImpl" /> | ||||
|   <bean id="hypervisorGuruManagerImpl" class="com.cloud.hypervisor.HypervisorGuruManagerImpl" /> | ||||
|   <bean id="identityServiceImpl" class="com.cloud.uuididentity.IdentityServiceImpl" /> | ||||
|   <bean id="keystoreManagerImpl" class="com.cloud.keystore.KeystoreManagerImpl" /> | ||||
|   <bean id="loadBalancingRulesManagerImpl" class="com.cloud.network.lb.LoadBalancingRulesManagerImpl" /> | ||||
|   <bean id="networkACLManagerImpl" class="com.cloud.network.vpc.NetworkACLManagerImpl" /> | ||||
|   <bean id="networkACLServiceImpl" class="com.cloud.network.vpc.NetworkACLServiceImpl" /> | ||||
|   <bean id="networkServiceImpl" class="com.cloud.network.NetworkServiceImpl" /> | ||||
|   <bean id="networkUsageManagerImpl" class="com.cloud.network.NetworkUsageManagerImpl" /> | ||||
|   <bean id="oCFS2ManagerImpl" class="com.cloud.storage.OCFS2ManagerImpl" /> | ||||
|   <bean id="ovsTunnelManagerImpl" class="com.cloud.network.ovs.OvsTunnelManagerImpl" /> | ||||
|   <bean id="projectManagerImpl" class="com.cloud.projects.ProjectManagerImpl" /> | ||||
|   <bean id="queryManagerImpl" class="com.cloud.api.query.QueryManagerImpl" /> | ||||
|   <bean id="regionManagerImpl" class="org.apache.cloudstack.region.RegionManagerImpl" /> | ||||
|   <bean id="regionServiceImpl" class="org.apache.cloudstack.region.RegionServiceImpl" /> | ||||
|   <bean id="remoteAccessVpnManagerImpl" class="com.cloud.network.vpn.RemoteAccessVpnManagerImpl" /> | ||||
|   <bean id="resourceLimitManagerImpl" class="com.cloud.resourcelimit.ResourceLimitManagerImpl" /> | ||||
|   <bean id="rulesManagerImpl" class="com.cloud.network.rules.RulesManagerImpl" /> | ||||
|     <bean id="site2SiteVpnManagerImpl" class="com.cloud.network.vpn.Site2SiteVpnManagerImpl" /> | ||||
|   <bean id="snapshotManagerImpl" class="com.cloud.storage.snapshot.SnapshotManagerImpl" /> | ||||
|   <bean id="snapshotSchedulerImpl" class="com.cloud.storage.snapshot.SnapshotSchedulerImpl" /> | ||||
|   <bean id="storageNetworkManagerImpl" class="com.cloud.network.StorageNetworkManagerImpl" /> | ||||
|   <bean id="taggedResourceManagerImpl" class="com.cloud.tags.TaggedResourceManagerImpl" /> | ||||
|   <bean id="resourceMetaDataManagerImpl" class="com.cloud.metadata.ResourceMetaDataManagerImpl" /> | ||||
|   <bean id="templateManagerImpl" class="com.cloud.template.TemplateManagerImpl" /> | ||||
|   <bean id="uploadMonitorImpl" class="com.cloud.storage.upload.UploadMonitorImpl" /> | ||||
|   <bean id="usageServiceImpl" class="com.cloud.usage.UsageServiceImpl" /> | ||||
|   <bean id="virtualNetworkApplianceManagerImpl" class="com.cloud.network.router.VirtualNetworkApplianceManagerImpl" /> | ||||
|   <bean id="vpcManagerImpl" class="com.cloud.network.vpc.VpcManagerImpl" /> | ||||
|   <bean id="vpcVirtualNetworkApplianceManagerImpl" class="com.cloud.network.router.VpcVirtualNetworkApplianceManagerImpl" /> | ||||
| 
 | ||||
|   <!-- Async management --> | ||||
|   <bean id="asyncJobDaoImpl" class="org.apache.cloudstack.framework.jobs.dao.AsyncJobDaoImpl" /> | ||||
|   <bean id="asyncJobJournalDaoImpl" class="org.apache.cloudstack.framework.jobs.dao.AsyncJobJournalDaoImpl" /> | ||||
|   <bean id="asyncJobJoinMapDaoImpl" class="org.apache.cloudstack.framework.jobs.dao.AsyncJobJoinMapDaoImpl" /> | ||||
|   <bean id="asyncJobManagerImpl" class="org.apache.cloudstack.framework.jobs.impl.AsyncJobManagerImpl"/> | ||||
|   <bean id="asyncJobMonitor" class="org.apache.cloudstack.framework.jobs.impl.AsyncJobMonitor"/> | ||||
|   <bean id="syncQueueDaoImpl" class="org.apache.cloudstack.framework.jobs.dao.SyncQueueDaoImpl" /> | ||||
|   <bean id="syncQueueItemDaoImpl" class="org.apache.cloudstack.framework.jobs.dao.SyncQueueItemDaoImpl" /> | ||||
|   <bean id="syncQueueManagerImpl" class="org.apache.cloudstack.framework.jobs.impl.SyncQueueManagerImpl" /> | ||||
| 
 | ||||
|   <bean id="ApiAsyncJobDispatcher" class="com.cloud.api.ApiAsyncJobDispatcher"> | ||||
|     <property name="name" value="ApiAsyncJobDispatcher" /> | ||||
|   </bean> | ||||
| 
 | ||||
| 
 | ||||
|   <!-- | ||||
|     Misc components | ||||
|   --> | ||||
|   <bean id="actionEventUtils" class="com.cloud.event.ActionEventUtils" /> | ||||
|   <bean id="alertGenerator" class="com.cloud.event.AlertGenerator" /> | ||||
|   <bean id="apiDBUtils" class="com.cloud.api.ApiDBUtils" /> | ||||
|   <bean id="apiDiscoveryServiceImpl" class="org.apache.cloudstack.discovery.ApiDiscoveryServiceImpl" /> | ||||
|   <bean id="apiDispatcher" class="com.cloud.api.ApiDispatcher" /> | ||||
|   <bean id="apiResponseHelper" class="com.cloud.api.ApiResponseHelper" /> | ||||
|   <bean id="apiServer" class="com.cloud.api.ApiServer" /> | ||||
|   <bean id="apiServlet" class="com.cloud.api.ApiServlet" /> | ||||
|   <bean id="bAREMETAL" class="org.apache.cloudstack.storage.image.format.BAREMETAL" /> | ||||
|   <bean id="cloudOrchestrator" class="org.apache.cloudstack.engine.orchestration.CloudOrchestrator" /> | ||||
|   <bean id="clusterRestService" class="org.apache.cloudstack.engine.rest.service.api.ClusterRestService" /> | ||||
|   <bean id="consoleProxyServlet" class="com.cloud.servlet.ConsoleProxyServlet" /> | ||||
|   <bean id="dataCenterResourceManagerImpl" class="org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceManagerImpl" /> | ||||
|   <bean id="dataDisk" class="org.apache.cloudstack.engine.subsystem.api.storage.type.DataDisk" /> | ||||
| 
 | ||||
| 
 | ||||
|   <bean id="podRestService" class="org.apache.cloudstack.engine.rest.service.api.PodRestService" /> | ||||
|   <bean id="iso" class="org.apache.cloudstack.engine.subsystem.api.storage.type.Iso" /> | ||||
|   <bean id="networkRestService" class="org.apache.cloudstack.engine.rest.service.api.NetworkRestService" /> | ||||
|   <bean id="provisioningServiceImpl" class="org.apache.cloudstack.engine.service.api.ProvisioningServiceImpl" /> | ||||
|   <bean id="rootDisk" class="org.apache.cloudstack.engine.subsystem.api.storage.type.RootDisk" /> | ||||
|   <bean id="registerCompleteServlet" class="com.cloud.servlet.RegisterCompleteServlet" /> | ||||
|   <bean id="statsCollector" class="com.cloud.server.StatsCollector" /> | ||||
|   <bean id="storagePoolAutomationImpl" class="com.cloud.storage.StoragePoolAutomationImpl" /> | ||||
|   <bean id="usageEventUtils" class="com.cloud.event.UsageEventUtils" /> | ||||
|   <bean id="vMEntityManagerImpl" class="org.apache.cloudstack.engine.cloud.entity.api.VMEntityManagerImpl" /> | ||||
|   <bean id="virtualMachineEntityImpl" class="org.apache.cloudstack.engine.cloud.entity.api.VirtualMachineEntityImpl" /> | ||||
|   <bean id="virtualMachineRestService" class="org.apache.cloudstack.engine.rest.service.api.VirtualMachineRestService" /> | ||||
|   <bean id="volumeRestService" class="org.apache.cloudstack.engine.rest.service.api.VolumeRestService" /> | ||||
|   <bean id="volumeTypeHelper" class="org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeTypeHelper" /> | ||||
|   <bean id="zoneRestService" class="org.apache.cloudstack.engine.rest.service.api.ZoneRestService" /> | ||||
|   <bean id="cloudZonesStartupProcessor" class="com.cloud.hypervisor.CloudZonesStartupProcessor" /> | ||||
|   <bean id="managementServerNode" class="org.apache.cloudstack.utils.identity.ManagementServerNode" /> | ||||
|   <bean id="testingAllocator" class="com.cloud.agent.manager.allocator.impl.TestingAllocator" /> | ||||
|   <bean id="domainManagerImpl" class="com.cloud.user.DomainManagerImpl" /> | ||||
|   <bean id="downloadMonitorImpl" class="com.cloud.storage.download.DownloadMonitorImpl" /> | ||||
|   <bean id="lBHealthCheckManagerImpl" class="com.cloud.network.lb.LBHealthCheckManagerImpl" /> | ||||
|   <bean id="volumeApiServiceImpl" class="com.cloud.storage.VolumeApiServiceImpl"/> | ||||
|   <bean id="ApplicationLoadBalancerService" class="org.apache.cloudstack.network.lb.ApplicationLoadBalancerManagerImpl" /> | ||||
|   <bean id="InternalLoadBalancerVMManager" class="org.apache.cloudstack.network.lb.InternalLoadBalancerVMManagerImpl" /> | ||||
| 
 | ||||
|   <bean id="vMSnapshotManagerImpl" class="com.cloud.vm.snapshot.VMSnapshotManagerImpl" /> | ||||
| 
 | ||||
| 
 | ||||
| <!--=======================================================================================================--> | ||||
| <!--                                                                                                       --> | ||||
| <!--                           Module-basis OSS/non-OSS Common components                                  --> | ||||
| <!--                                                                                                       --> | ||||
| <!--=======================================================================================================--> | ||||
| 
 | ||||
|   <!-- | ||||
|     Baremetal components | ||||
|   --> | ||||
|    | ||||
|   <bean id="BareMetalDhcp" class="com.cloud.baremetal.networkservice.BaremetalDhcpElement"> | ||||
|     <property name="name" value="BareMetalDhcp"/> | ||||
|   </bean> | ||||
|   <bean id="BareMetalPxe" class="com.cloud.baremetal.networkservice.BaremetalPxeElement"> | ||||
|     <property name="name" value="BareMetalPxe"/> | ||||
|   </bean> | ||||
|   <bean id="BareMetalUserdata" class="com.cloud.baremetal.networkservice.BaremetalUserdataElement"> | ||||
|       <property name="name" value="BareMetalUserdata"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="BareMetalTemplateAdapter" class="com.cloud.baremetal.manager.BareMetalTemplateAdapter" /> | ||||
| 
 | ||||
|   <bean id="BareMetalDiscoverer" class="com.cloud.baremetal.manager.BareMetalDiscoverer"> | ||||
|     <property name="name" value="Bare Metal Agent"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="BareMetalPlanner" class="com.cloud.baremetal.manager.BareMetalPlanner"> | ||||
|     <property name="name" value="BareMetalPlanner"/> | ||||
|   </bean> | ||||
|    | ||||
|   <bean id="BaremetalGuru" class="com.cloud.baremetal.manager.BareMetalGuru"> | ||||
|     <property name="name" value="BaremetalGuru"/> | ||||
|   </bean> | ||||
| 
 | ||||
|   <bean id="BaremetalManager" class="com.cloud.baremetal.manager.BaremetalManagerImpl"/> | ||||
|   <bean id="BaremetalDhcpManager" class="com.cloud.baremetal.networkservice.BaremetalDhcpManagerImpl"/> | ||||
|   <bean id="BaremetalKickStartPxeService" class="com.cloud.baremetal.networkservice.BaremetalKickStartServiceImpl"/> | ||||
|   <bean id="BaremetalPingPxeService" class="com.cloud.baremetal.networkservice.BareMetalPingServiceImpl" /> | ||||
|   <bean id="BaremetalPxeManager" class="com.cloud.baremetal.networkservice.BaremetalPxeManagerImpl" />  | ||||
|      | ||||
|   <bean id="BAREMETAL" class="org.apache.cloudstack.storage.image.format.BAREMETAL" /> | ||||
|   <bean id="baremetalDhcpDaoImpl" class="com.cloud.baremetal.database.BaremetalDhcpDaoImpl" /> | ||||
|   <bean id="baremetalPxeDaoImpl" class="com.cloud.baremetal.database.BaremetalPxeDaoImpl" /> | ||||
| 
 | ||||
|   <bean id="UcsManager" class="com.cloud.ucs.manager.UcsManagerImpl" /> | ||||
| 
 | ||||
|   <bean id="AffinityGroupServiceImpl" class="org.apache.cloudstack.affinity.AffinityGroupServiceImpl"> | ||||
|   	<property name="AffinityGroupProcessors" value="#{affinityProcessors.Adapters}" /> | ||||
|   </bean> | ||||
|   <bean id="DeploymentPlanningManager" class="com.cloud.deploy.DeploymentPlanningManagerImpl"> | ||||
|     <property name="Planners" value="#{deploymentPlanners.Adapters}" /> | ||||
| 	<property name="AffinityGroupProcessors" value="#{affinityProcessors.Adapters}" /> | ||||
|     <property name="StoragePoolAllocators" value="#{storagePoolAllocators.Adapters}" /> | ||||
|     <property name="HostAllocators" value="#{hostAllocators.Adapters}" /> | ||||
|   </bean> | ||||
|    | ||||
|   <bean id="AffinityGroupJoinDaoImpl" class="com.cloud.api.query.dao.AffinityGroupJoinDaoImpl"> | ||||
|   </bean> | ||||
|   <bean id="AffinityGroupDaoImpl" class="org.apache.cloudstack.affinity.dao.AffinityGroupDaoImpl"> | ||||
|   </bean> | ||||
|   <bean id="AffinityGroupVMMapDaoImpl" class="org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDaoImpl"> | ||||
|   </bean> | ||||
|   <bean id="AffinityGroupDomainMapDaoImpl" class="org.apache.cloudstack.affinity.dao.AffinityGroupDomainMapDaoImpl"> | ||||
|   </bean> | ||||
|    | ||||
|   <bean id="PlannerHostReservationDaoImpl" class="com.cloud.deploy.dao.PlannerHostReservationDaoImpl"> | ||||
|   </bean> | ||||
|    | ||||
| </beans> | ||||
							
								
								
									
										11
									
								
								core/src/com/cloud/agent/api/PerformanceMonitorAnswer.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								core/src/com/cloud/agent/api/PerformanceMonitorAnswer.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | ||||
| package com.cloud.agent.api; | ||||
| 
 | ||||
| public class PerformanceMonitorAnswer extends Answer { | ||||
| 	public PerformanceMonitorAnswer() { | ||||
| 	} | ||||
| 
 | ||||
| 	public PerformanceMonitorAnswer(PerformanceMonitorCommand cmd, | ||||
| 			boolean result, String details) { | ||||
| 		super(cmd, result, details); | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										30
									
								
								core/src/com/cloud/agent/api/PerformanceMonitorCommand.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								core/src/com/cloud/agent/api/PerformanceMonitorCommand.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | ||||
| package com.cloud.agent.api; | ||||
| 
 | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
| 
 | ||||
| public class PerformanceMonitorCommand extends Command { | ||||
| 
 | ||||
| 	Map<String, String> params = new HashMap<String, String>(); | ||||
| 
 | ||||
| 	public PerformanceMonitorCommand() { | ||||
| 	} | ||||
| 
 | ||||
| 	public PerformanceMonitorCommand(Map<String, String> params, int wait) { | ||||
| 		setWait(wait); | ||||
| 		this.params = params; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean executeInSequence() { | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	public Map<String, String> getParams() { | ||||
| 		return params; | ||||
| 	} | ||||
| 
 | ||||
| 	public void setParams(Map<String, String> params) { | ||||
| 		this.params = params; | ||||
| 	} | ||||
| } | ||||
| @ -27,6 +27,8 @@ import javax.persistence.Id; | ||||
| import javax.persistence.Inheritance; | ||||
| import javax.persistence.InheritanceType; | ||||
| import javax.persistence.Table; | ||||
| import javax.persistence.Temporal; | ||||
| import javax.persistence.TemporalType; | ||||
| 
 | ||||
| import org.apache.cloudstack.api.InternalIdentity; | ||||
| 
 | ||||
| @ -57,6 +59,10 @@ public class AutoScalePolicyVO implements AutoScalePolicy, InternalIdentity { | ||||
|     @Column(name = "quiet_time", updatable = true, nullable = false) | ||||
|     private int quietTime; | ||||
| 
 | ||||
| 	@Column(name = "last_quiet_time", updatable = true) | ||||
| 	@Temporal(value = TemporalType.TIMESTAMP) | ||||
| 	private Date lastQuiteTime; | ||||
| 
 | ||||
|     @Column(name = "action", updatable = false, nullable = false) | ||||
|     private String action; | ||||
| 
 | ||||
| @ -69,12 +75,14 @@ public class AutoScalePolicyVO implements AutoScalePolicy, InternalIdentity { | ||||
|     public AutoScalePolicyVO() { | ||||
|     } | ||||
| 
 | ||||
|     public AutoScalePolicyVO(long domainId, long accountId, int duration, int quietTime, String action) { | ||||
| 	public AutoScalePolicyVO(long domainId, long accountId, int duration, | ||||
| 			int quietTime, Date lastQuiteTime, String action) { | ||||
|         this.uuid = UUID.randomUUID().toString(); | ||||
|         this.domainId = domainId; | ||||
|         this.accountId = accountId; | ||||
|         this.duration = duration; | ||||
|         this.quietTime = quietTime; | ||||
| 		this.lastQuiteTime = lastQuiteTime; | ||||
|         this.action = action; | ||||
|     } | ||||
| 
 | ||||
| @ -113,6 +121,11 @@ public class AutoScalePolicyVO implements AutoScalePolicy, InternalIdentity { | ||||
|         return quietTime; | ||||
|     } | ||||
| 
 | ||||
| 	@Override | ||||
| 	public Date getLastQuiteTime() { | ||||
| 		return lastQuiteTime; | ||||
| 	} | ||||
| 
 | ||||
|     @Override | ||||
|     public String getAction() { | ||||
|         return action; | ||||
| @ -133,4 +146,8 @@ public class AutoScalePolicyVO implements AutoScalePolicy, InternalIdentity { | ||||
|     public void setQuietTime(Integer quietTime) { | ||||
|         this.quietTime = quietTime; | ||||
|     } | ||||
| 
 | ||||
| 	public void setLastQuiteTime(Date lastQuiteTime) { | ||||
| 		this.lastQuiteTime = lastQuiteTime; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -27,6 +27,8 @@ import javax.persistence.Id; | ||||
| import javax.persistence.Inheritance; | ||||
| import javax.persistence.InheritanceType; | ||||
| import javax.persistence.Table; | ||||
| import javax.persistence.Temporal; | ||||
| import javax.persistence.TemporalType; | ||||
| 
 | ||||
| import org.apache.cloudstack.api.InternalIdentity; | ||||
| 
 | ||||
| @ -69,6 +71,10 @@ public class AutoScaleVmGroupVO implements AutoScaleVmGroup, InternalIdentity { | ||||
|     @Column(name = "interval") | ||||
|     private int interval; | ||||
| 
 | ||||
| 	@Column(name = "last_interval", updatable = true) | ||||
| 	@Temporal(value = TemporalType.TIMESTAMP) | ||||
| 	private Date lastInterval; | ||||
| 
 | ||||
|     @Column(name = "profile_id") | ||||
|     private long profileId; | ||||
| 
 | ||||
| @ -84,8 +90,10 @@ public class AutoScaleVmGroupVO implements AutoScaleVmGroup, InternalIdentity { | ||||
|     public AutoScaleVmGroupVO() { | ||||
|     } | ||||
| 
 | ||||
|     public AutoScaleVmGroupVO(long lbRuleId, long zoneId, long domainId, long accountId, int minMembers, int maxMembers, int memberPort, int interval, long profileId, | ||||
|             String state) { | ||||
| 	public AutoScaleVmGroupVO(long lbRuleId, long zoneId, long domainId, | ||||
| 			long accountId, int minMembers, int maxMembers, int memberPort, | ||||
| 			int interval, Date lastInterval, long profileId, String state) { | ||||
| 
 | ||||
|         this.uuid = UUID.randomUUID().toString(); | ||||
|         this.loadBalancerId = lbRuleId; | ||||
|         this.minMembers = minMembers; | ||||
| @ -97,6 +105,7 @@ public class AutoScaleVmGroupVO implements AutoScaleVmGroup, InternalIdentity { | ||||
|         this.zoneId = zoneId; | ||||
|         this.state = state; | ||||
|         this.interval = interval; | ||||
| 		this.lastInterval = lastInterval; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
| @ -148,6 +157,11 @@ public class AutoScaleVmGroupVO implements AutoScaleVmGroup, InternalIdentity { | ||||
|         return interval; | ||||
|     } | ||||
| 
 | ||||
| 	@Override | ||||
| 	public Date getLastInterval() { | ||||
| 		return lastInterval; | ||||
| 	} | ||||
| 
 | ||||
|     @Override | ||||
|     public long getProfileId() { | ||||
|         return profileId; | ||||
| @ -182,6 +196,10 @@ public class AutoScaleVmGroupVO implements AutoScaleVmGroup, InternalIdentity { | ||||
|         this.interval = interval; | ||||
|     } | ||||
| 
 | ||||
| 	public void setLastInterval(Date lastInterval) { | ||||
| 		this.lastInterval = lastInterval; | ||||
| 	} | ||||
| 
 | ||||
|     public void setLoadBalancerId(Long loadBalancerId) { | ||||
|         this.loadBalancerId = loadBalancerId; | ||||
|     } | ||||
|  | ||||
| @ -0,0 +1,46 @@ | ||||
| package com.cloud.network.as; | ||||
| 
 | ||||
| import javax.persistence.Column; | ||||
| import javax.persistence.Entity; | ||||
| import javax.persistence.GeneratedValue; | ||||
| import javax.persistence.GenerationType; | ||||
| import javax.persistence.Id; | ||||
| import javax.persistence.Table; | ||||
| 
 | ||||
| import org.apache.cloudstack.api.InternalIdentity; | ||||
| 
 | ||||
| @Entity | ||||
| @Table(name = ("autoscale_vmgroup_vm_map")) | ||||
| public class AutoScaleVmGroupVmMapVO implements InternalIdentity { | ||||
| 	@Id | ||||
| 	@GeneratedValue(strategy = GenerationType.IDENTITY) | ||||
| 	@Column(name = "id") | ||||
| 	private long id; | ||||
| 
 | ||||
| 	@Column(name = "vmgroup_id") | ||||
| 	private long vmGroupId; | ||||
| 
 | ||||
| 	@Column(name = "instance_id") | ||||
| 	private long instanceId; | ||||
| 
 | ||||
| 	public AutoScaleVmGroupVmMapVO() { | ||||
| 	} | ||||
| 
 | ||||
| 	public AutoScaleVmGroupVmMapVO(long vmGroupId, long instanceId) { | ||||
| 		this.vmGroupId = vmGroupId; | ||||
| 		this.instanceId = instanceId; | ||||
| 	} | ||||
| 
 | ||||
| 	public long getId() { | ||||
| 		return id; | ||||
| 	} | ||||
| 
 | ||||
| 	public long getVmGroupId() { | ||||
| 		return vmGroupId; | ||||
| 	} | ||||
| 
 | ||||
| 	public long getInstanceId() { | ||||
| 		return instanceId; | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| @ -26,5 +26,7 @@ public interface AutoScalePolicyConditionMapDao extends GenericDao<AutoScalePoli | ||||
| 
 | ||||
|     public boolean isConditionInUse(Long conditionId); | ||||
| 
 | ||||
|     boolean removeByAutoScalePolicyId(long id); | ||||
| 	boolean removeByAutoScalePolicyId(long id); | ||||
| 
 | ||||
| 	List<AutoScalePolicyConditionMapVO> findByPolicyId(long id); | ||||
| } | ||||
|  | ||||
| @ -56,6 +56,14 @@ public class AutoScalePolicyConditionMapDaoImpl extends GenericDaoBase<AutoScale | ||||
|     public boolean removeByAutoScalePolicyId(long policyId) { | ||||
|         SearchCriteria<AutoScalePolicyConditionMapVO> sc = createSearchCriteria(); | ||||
|         sc.addAnd("policyId", SearchCriteria.Op.EQ, policyId); | ||||
|         return expunge(sc) > 0; | ||||
|     } | ||||
| 		return expunge(sc) > 0; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public List<AutoScalePolicyConditionMapVO> findByPolicyId(long policyId) { | ||||
| 		SearchCriteria<AutoScalePolicyConditionMapVO> sc = createSearchCriteria(); | ||||
| 		sc.addAnd("policyId", SearchCriteria.Op.EQ, policyId); | ||||
| 
 | ||||
| 		return listBy(sc); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -0,0 +1,15 @@ | ||||
| package com.cloud.network.as.dao; | ||||
| 
 | ||||
| import java.util.List; | ||||
| 
 | ||||
| import com.cloud.network.as.AutoScaleVmGroupVmMapVO; | ||||
| import com.cloud.utils.db.GenericDao; | ||||
| 
 | ||||
| public interface AutoScaleVmGroupVmMapDao extends GenericDao<AutoScaleVmGroupVmMapVO, Long> { | ||||
| 	public Integer countByGroup(long vmGroupId); | ||||
| 
 | ||||
| 	public List<AutoScaleVmGroupVmMapVO> listByGroup(long vmGroupId); | ||||
| 
 | ||||
| 	public int remove(long vmGroupId, long vmId); | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,40 @@ | ||||
| package com.cloud.network.as.dao; | ||||
| 
 | ||||
| import java.util.List; | ||||
| 
 | ||||
| import javax.ejb.Local; | ||||
| 
 | ||||
| import org.springframework.stereotype.Component; | ||||
| 
 | ||||
| import com.cloud.network.as.AutoScaleVmGroupVmMapVO; | ||||
| import com.cloud.utils.db.GenericDaoBase; | ||||
| import com.cloud.utils.db.SearchCriteria; | ||||
| 
 | ||||
| @Component | ||||
| @Local(value={AutoScaleVmGroupVmMapDao.class}) | ||||
| public class AutoScaleVmGroupVmMapDaoImpl extends GenericDaoBase<AutoScaleVmGroupVmMapVO, Long> implements AutoScaleVmGroupVmMapDao { | ||||
| 
 | ||||
| 	@Override | ||||
| 	public Integer countByGroup(long vmGroupId) { | ||||
| 
 | ||||
| 		SearchCriteria<AutoScaleVmGroupVmMapVO> sc = createSearchCriteria(); | ||||
| 		sc.addAnd("vmGroupId", SearchCriteria.Op.EQ, vmGroupId); | ||||
| 		return getCount(sc); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public List<AutoScaleVmGroupVmMapVO> listByGroup(long vmGroupId) { | ||||
| 		SearchCriteria<AutoScaleVmGroupVmMapVO> sc = createSearchCriteria(); | ||||
| 		sc.addAnd("vmGroupId", SearchCriteria.Op.EQ, vmGroupId); | ||||
| 		return listBy(sc); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public int remove(long vmGroupId, long vmId) { | ||||
| 		SearchCriteria<AutoScaleVmGroupVmMapVO> sc = createSearchCriteria(); | ||||
| 		sc.addAnd("vmGroupId", SearchCriteria.Op.EQ, vmGroupId); | ||||
| 		sc.addAnd("vmId", SearchCriteria.Op.EQ, vmId); | ||||
| 		return remove(sc); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| @ -168,6 +168,9 @@ import com.cloud.agent.api.OvsSetTagAndFlowAnswer; | ||||
| import com.cloud.agent.api.OvsFetchInterfaceAnswer; | ||||
| import com.cloud.agent.api.OvsSetTagAndFlowCommand; | ||||
| import com.cloud.agent.api.OvsFetchInterfaceCommand; | ||||
| import com.cloud.agent.api.PerformanceMonitorAnswer; | ||||
| import com.cloud.agent.api.PerformanceMonitorCommand; | ||||
| 
 | ||||
| import com.cloud.agent.api.PingCommand; | ||||
| import com.cloud.agent.api.PingRoutingCommand; | ||||
| import com.cloud.agent.api.PingRoutingWithNwGroupsCommand; | ||||
| @ -304,7 +307,6 @@ import com.cloud.vm.snapshot.VMSnapshot; | ||||
| 
 | ||||
| import com.cloud.utils.ssh.SSHCmdHelper; | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * CitrixResourceBase encapsulates the calls to the XenServer Xapi process | ||||
|  * to perform the required functionalities for CloudStack. | ||||
| @ -657,11 +659,88 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe | ||||
|             return execute((PvlanSetupCommand)cmd); | ||||
|         } else if (clazz == SetMonitorServiceCommand.class) { | ||||
|             return execute((SetMonitorServiceCommand)cmd); | ||||
| 		} else if (clazz == PerformanceMonitorCommand.class) { | ||||
| 			return execute((PerformanceMonitorCommand) cmd); | ||||
|         } else { | ||||
|             return Answer.createUnsupportedCommandAnswer(cmd); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| 	private Answer execute(PerformanceMonitorCommand cmd) { | ||||
| 		Connection conn = getConnection(); | ||||
| 		String perfMon = getPerfMon(conn, cmd.getParams(), cmd.getWait()); | ||||
| 		if (perfMon == null) { | ||||
| 			return new PerformanceMonitorAnswer(cmd, false, perfMon); | ||||
| 		} else | ||||
| 			return new PerformanceMonitorAnswer(cmd, true, perfMon); | ||||
| 	} | ||||
| 
 | ||||
| 	private String getPerfMon(Connection conn, Map<String, String> params, | ||||
| 			int wait) { | ||||
| 		String result = null; | ||||
| 		try { | ||||
| 			result = callHostPluginAsync(conn, "vmopspremium", "asmonitor", 60, | ||||
| 					params); | ||||
| 			if (result != null) | ||||
| 				return result; | ||||
| 		} catch (Exception e) { | ||||
| 			s_logger.error("Can not get performance monitor for AS due to ", e); | ||||
| 		} | ||||
| 		return null; | ||||
| 	} | ||||
| 
 | ||||
| 	protected String callHostPluginAsync(Connection conn, String plugin, | ||||
| 			String cmd, int wait, Map<String, String> params) { | ||||
| 		int timeout = wait * 1000; | ||||
| 		Map<String, String> args = new HashMap<String, String>(); | ||||
| 		Task task = null; | ||||
| 		try { | ||||
| 			for (String key : params.keySet()) { | ||||
| 				args.put(key, params.get(key)); | ||||
| 			} | ||||
| 			if (s_logger.isTraceEnabled()) { | ||||
| 				s_logger.trace("callHostPlugin executing for command " + cmd | ||||
| 						+ " with " + getArgsString(args)); | ||||
| 			} | ||||
| 			Host host = Host.getByUuid(conn, _host.uuid); | ||||
| 			task = host.callPluginAsync(conn, plugin, cmd, args); | ||||
| 			// poll every 1 seconds | ||||
| 			waitForTask(conn, task, 1000, timeout); | ||||
| 			checkForSuccess(conn, task); | ||||
| 			String result = task.getResult(conn); | ||||
| 			if (s_logger.isTraceEnabled()) { | ||||
| 				s_logger.trace("callHostPlugin Result: " + result); | ||||
| 			} | ||||
| 			return result.replace("<value>", "").replace("</value>", "") | ||||
| 					.replace("\n", ""); | ||||
| 		} catch (Types.HandleInvalid e) { | ||||
| 			s_logger.warn("callHostPlugin failed for cmd: " + cmd | ||||
| 					+ " with args " + getArgsString(args) | ||||
| 					+ " due to HandleInvalid clazz:" + e.clazz + ", handle:" | ||||
| 					+ e.handle); | ||||
| 		} catch (XenAPIException e) { | ||||
| 			s_logger.warn( | ||||
| 					"callHostPlugin failed for cmd: " + cmd + " with args " | ||||
| 							+ getArgsString(args) + " due to " + e.toString(), | ||||
| 					e); | ||||
| 		} catch (XmlRpcException e) { | ||||
| 			s_logger.warn( | ||||
| 					"callHostPlugin failed for cmd: " + cmd + " with args " | ||||
| 							+ getArgsString(args) + " due to " + e.getMessage(), | ||||
| 					e); | ||||
| 		} finally { | ||||
| 			if (task != null) { | ||||
| 				try { | ||||
| 					task.destroy(conn); | ||||
| 				} catch (Exception e1) { | ||||
| 					s_logger.warn("unable to destroy task(" + task.toString() | ||||
| 							+ ") on host(" + _host.uuid + ") due to ", e1); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		return null; | ||||
| 	} | ||||
| 
 | ||||
|     protected void scaleVM(Connection conn, VM vm, VirtualMachineTO vmSpec, Host host) throws XenAPIException, XmlRpcException { | ||||
| 
 | ||||
|         Long staticMemoryMax = vm.getMemoryStaticMax(conn); | ||||
|  | ||||
							
								
								
									
										245
									
								
								scripts/vm/hypervisor/xenserver/perfmon.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										245
									
								
								scripts/vm/hypervisor/xenserver/perfmon.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,245 @@ | ||||
| #!/usr/bin/python | ||||
| 
 | ||||
| import pprint | ||||
| import XenAPI | ||||
| import urllib | ||||
| from xml.dom import minidom | ||||
| import time | ||||
| 
 | ||||
| 
 | ||||
| # Per VM dictionary (used by RRDUpdates to look up column numbers by variable names) | ||||
| class VMReport(dict): | ||||
|     """Used internally by RRDUpdates""" | ||||
|     def __init__(self, uuid): | ||||
|         self.uuid = uuid | ||||
|         super(dict, self).__init__() | ||||
| 
 | ||||
| 
 | ||||
| # Per Host dictionary (used by RRDUpdates to look up column numbers by variable names) | ||||
| class HostReport(dict): | ||||
|     """Used internally by RRDUpdates""" | ||||
|     def __init__(self, uuid): | ||||
|         self.uuid = uuid | ||||
|         super(dict, self).__init__() | ||||
| 
 | ||||
| 
 | ||||
| class PerfMonException(Exception): | ||||
|     pass | ||||
| 
 | ||||
| 
 | ||||
| class XmlConfigException(PerfMonException): | ||||
|     pass | ||||
| 
 | ||||
| 
 | ||||
| class UsageException(Exception): | ||||
|     pass | ||||
| 
 | ||||
| 
 | ||||
| class RRDUpdates: | ||||
|     """ Object used to get and parse the output the http://localhost/rrd_udpates?... | ||||
|     """ | ||||
|     def __init__(self): | ||||
|         # params are what get passed to the CGI executable in the URL | ||||
|         self.params = dict() | ||||
|         self.params['start'] = int(time.time()) - 1000  # For demo purposes! | ||||
|         self.params['host'] = 'false'   # include data for host (as well as for VMs) | ||||
|         self.params['cf'] = 'AVERAGE'  # consolidation function, each sample averages 12 from the 5 second RRD | ||||
|         self.params['interval'] = '60' | ||||
| 
 | ||||
|     def get_nrows(self): | ||||
|         return self.rows | ||||
| 
 | ||||
|     def get_vm_list(self): | ||||
|         return self.vm_reports.keys() | ||||
| 
 | ||||
|     def get_vm_param_list(self, uuid): | ||||
|         report = self.vm_reports[uuid] | ||||
|         if not report: | ||||
|             return [] | ||||
|         return report.keys() | ||||
| 
 | ||||
|     def get_total_cpu_core(self, uuid): | ||||
| 	report = self.vm_reports[uuid] | ||||
|         if not report: | ||||
|             return 0 | ||||
|         else: | ||||
|             param_keys = report.keys() | ||||
|             result = 0 | ||||
|             for param in param_keys: | ||||
|                 if "cpu" in param: | ||||
|                     result += 1 | ||||
|             return result | ||||
| 
 | ||||
|     def get_vm_data(self, uuid, param, row): | ||||
| 	#pp = pprint.PrettyPrinter(indent=4)  | ||||
| 	#pp.pprint(self.vm_reports) | ||||
|         report = self.vm_reports[uuid] | ||||
|         col = report[param] | ||||
|         return self.__lookup_data(col, row) | ||||
| 
 | ||||
|     def get_host_uuid(self): | ||||
|         report = self.host_report | ||||
|         if not report: | ||||
|             return None | ||||
|         return report.uuid | ||||
| 
 | ||||
|     def get_host_param_list(self): | ||||
|         report = self.host_report | ||||
|         if not report: | ||||
|             return [] | ||||
|         return report.keys() | ||||
| 
 | ||||
|     def get_host_data(self, param, row): | ||||
|         report = self.host_report | ||||
|         col = report[param] | ||||
|         return self.__lookup_data(col, row) | ||||
| 
 | ||||
|     def get_row_time(self, row): | ||||
|         return self.__lookup_timestamp(row) | ||||
| 
 | ||||
|     # extract float from value (<v>) node by col,row | ||||
|     def __lookup_data(self, col, row): | ||||
|         # Note: the <rows> nodes are in reverse chronological order, and comprise | ||||
|         # a timestamp <t> node, followed by self.columns data <v> nodes | ||||
|         node = self.data_node.childNodes[self.rows - 1 - row].childNodes[col + 1] | ||||
|         return float(node.firstChild.toxml())  # node.firstChild should have nodeType TEXT_NODE | ||||
| 
 | ||||
|     # extract int from value (<t>) node by row | ||||
|     def __lookup_timestamp(self, row): | ||||
|         # Note: the <rows> nodes are in reverse chronological order, and comprise | ||||
|         # a timestamp <t> node, followed by self.columns data <v> nodes | ||||
|         node = self.data_node.childNodes[self.rows - 1 - row].childNodes[0] | ||||
|         return int(node.firstChild.toxml())  # node.firstChild should have nodeType TEXT_NODE | ||||
| 
 | ||||
|     def refresh(self, login, starttime, session, override_params): | ||||
|         self.params['start'] = starttime | ||||
|         params = override_params | ||||
|         params['session_id'] = session | ||||
|         params.update(self.params) | ||||
|         paramstr = "&".join(["%s=%s" % (k, params[k]) for k in params]) | ||||
|         # this is better than urllib.urlopen() as it raises an Exception on http 401 'Unauthorised' error | ||||
|         # rather than drop into interactive mode | ||||
| 	for host in login.host.get_all(): | ||||
| 		#print "http://" + str(login.host.get_address(host)) + "/rrd_updates?%s" % paramstr | ||||
|         	sock = urllib.URLopener().open("http://" + str(login.host.get_address(host)) + "/rrd_updates?%s" % paramstr) | ||||
| 	        xmlsource = sock.read() | ||||
|         	sock.close() | ||||
|         	xmldoc = minidom.parseString(xmlsource) | ||||
|         	self.__parse_xmldoc(xmldoc) | ||||
|         	# Update the time used on the next run | ||||
|         	self.params['start'] = self.end_time + 1  # avoid retrieving same data twice | ||||
| 
 | ||||
|     def __parse_xmldoc(self, xmldoc): | ||||
|         # The 1st node contains meta data (description of the data) | ||||
|         # The 2nd node contains the data | ||||
|         self.meta_node = xmldoc.firstChild.childNodes[0] | ||||
|         self.data_node = xmldoc.firstChild.childNodes[1] | ||||
| 
 | ||||
|         def lookup_metadata_bytag(name): | ||||
|             return int(self.meta_node.getElementsByTagName(name)[0].firstChild.toxml()) | ||||
|             # rows = number of samples per variable | ||||
|         # columns = number of variables | ||||
|         self.rows = lookup_metadata_bytag('rows') | ||||
|         self.columns = lookup_metadata_bytag('columns') | ||||
|         # These indicate the period covered by the data | ||||
|         self.start_time = lookup_metadata_bytag('start') | ||||
|         self.step_time = lookup_metadata_bytag('step') | ||||
|         self.end_time = lookup_metadata_bytag('end') | ||||
|         # the <legend> Node describes the variables | ||||
|         self.legend = self.meta_node.getElementsByTagName('legend')[0] | ||||
|         # vm_reports matches uuid to per VM report | ||||
|         if not hasattr(self,'vm_reports'): | ||||
| 		self.vm_reports = {} | ||||
|         # There is just one host_report and its uuid should not change! | ||||
|         self.host_report = None | ||||
|         # Handle each column.  (I.e. each variable) | ||||
|         for col in range(self.columns): | ||||
|             self.__handle_col(col) | ||||
| 
 | ||||
|     def __handle_col(self, col): | ||||
|         # work out how to interpret col from the legend | ||||
|         col_meta_data = self.legend.childNodes[col].firstChild.toxml() | ||||
|         # vm_or_host will be 'vm' or 'host'.  Note that the Control domain counts as a VM! | ||||
|         (cf, vm_or_host, uuid, param) = col_meta_data.split(':') | ||||
|         if vm_or_host == 'vm': | ||||
|             # Create a report for this VM if it doesn't exist | ||||
|             if not uuid in self.vm_reports: | ||||
|                 self.vm_reports[uuid] = VMReport(uuid) | ||||
|                 # Update the VMReport with the col data and meta data | ||||
|             vm_report = self.vm_reports[uuid] | ||||
|             vm_report[param] = col | ||||
|         elif vm_or_host == 'host': | ||||
|             # Create a report for the host if it doesn't exist | ||||
|             if not self.host_report: | ||||
|                 self.host_report = HostReport(uuid) | ||||
|             elif self.host_report.uuid != uuid: | ||||
|                 raise PerfMonException("Host UUID changed: (was %s, is %s)" % (self.host_report.uuid, uuid)) | ||||
|                 # Update the HostReport with the col data and meta data | ||||
|             self.host_report[param] = col | ||||
|         else: | ||||
|             raise PerfMonException("Invalid string in <legend>: %s" % col_meta_data) | ||||
| 
 | ||||
| 
 | ||||
| def get_vm_group_perfmon(args={}): | ||||
|     #Release code | ||||
|     login = XenAPI.xapi_local() | ||||
|     login.login_with_password("","") | ||||
|     average_cpu = 0 | ||||
|     average_memory = 0 | ||||
|     result = "" | ||||
| 
 | ||||
|     #test code | ||||
|     #login = XenAPI.Session(url) | ||||
|     #login.login_with_password(username, password) | ||||
|     total_vm = int(args['total_vm']) | ||||
|     total_counter = int(args['total_counter']) | ||||
|     now = int(time.time()) / 60 | ||||
| 
 | ||||
|     # Get pool's info of this host | ||||
|     #pool = login.xenapi.pool.get_all()[0] | ||||
|     # Get master node's address of pool | ||||
|     #master = login.xenapi.pool.get_master(pool) | ||||
|     #master_address = login.xenapi.host.get_address(master) | ||||
|     session = login._session | ||||
| 
 | ||||
|     max_duration = 0 | ||||
|     for counter_count in xrange(1, total_counter + 1): | ||||
|         duration = int(args['duration' + str(counter_count)]) | ||||
|         if duration > max_duration: | ||||
|             max_duration = duration | ||||
| 
 | ||||
|     rrd_updates = RRDUpdates() | ||||
|     rrd_updates.refresh(login.xenapi, now * 60 - max_duration, session, {}) | ||||
| 
 | ||||
|     #for uuid in rrd_updates.get_vm_list(): | ||||
|     for vm_count in xrange(1, total_vm + 1): | ||||
|         vm_uuid = args['vmuuid' + str(vm_count)] | ||||
|         #print "Got values for VM: " + str(vm_count) + " " + vm_uuid | ||||
|         for counter_count in xrange(1, total_counter + 1): | ||||
|             counter = args['counter' + str(counter_count)] | ||||
|             total_row = rrd_updates.get_nrows() | ||||
|             duration = int(args['duration' + str(counter_count)]) / 60 | ||||
|             duration_diff = total_row - duration | ||||
|             #print "param: " + counter | ||||
|             if counter == "cpu": | ||||
| 		total_cpu = rrd_updates.get_total_cpu_core(vm_uuid) | ||||
|                 for row in xrange(duration_diff, total_row): | ||||
|                     for cpu in xrange(0, total_cpu): | ||||
|                         average_cpu += rrd_updates.get_vm_data(vm_uuid, "cpu" + str(cpu), row) | ||||
|                 average_cpu /= (duration * total_cpu) | ||||
|                 #print "Average CPU: " + str(average_cpu) | ||||
|                 if result == "": | ||||
|                     result += str(vm_count) + '.' +  str(counter_count) + ':' + str(average_cpu) | ||||
|                 else: | ||||
|                     result += ',' + str(vm_count) +  '.' + str(counter_count) + ':' + str(average_cpu) | ||||
|             elif counter == "memory": | ||||
|                 for row in xrange(duration_diff, total_row): | ||||
|                     average_memory += rrd_updates.get_vm_data(vm_uuid, "memory_target", row) / 1048576 - rrd_updates.get_vm_data(vm_uuid, "memory_internal_free", row) / 1024 | ||||
|                 average_memory /= duration | ||||
|                 #print "Average Memory: " + str(average_memory) | ||||
|                 if result == "": | ||||
|                     result += str(vm_count) +  '.' +  str(counter_count) + ':' + str(average_memory) | ||||
|                 else: | ||||
|                     result += ',' + str(vm_count) +  '.' +  str(counter_count) + ':' + str(average_memory) | ||||
|     return result | ||||
| 
 | ||||
| @ -28,6 +28,7 @@ if os.path.exists("/usr/lib/xcp/sm"): | ||||
|     sys.path.extend(["/usr/lib/xcp/sm/", "/usr/local/sbin/", "/sbin/"]) | ||||
| import util | ||||
| import socket | ||||
| import perfmon | ||||
| 
 | ||||
| def echo(fn): | ||||
|     def wrapped(*v, **k): | ||||
| @ -142,6 +143,11 @@ def heartbeat(session, args): | ||||
|        txt='fail' | ||||
|     return txt | ||||
| 
 | ||||
| if __name__ == "__main__": | ||||
|     XenAPIPlugin.dispatch({"forceShutdownVM":forceShutdownVM, "upgrade_snapshot":upgrade_snapshot, "create_privatetemplate_from_snapshot":create_privatetemplate_from_snapshot, "copy_vhd_to_secondarystorage":copy_vhd_to_secondarystorage, "copy_vhd_from_secondarystorage":copy_vhd_from_secondarystorage, "setup_heartbeat_sr":setup_heartbeat_sr, "setup_heartbeat_file":setup_heartbeat_file, "check_heartbeat":check_heartbeat, "heartbeat": heartbeat}) | ||||
| @echo | ||||
| def asmonitor(session, args): | ||||
| 	result = perfmon.get_vm_group_perfmon(args) | ||||
| 	return result | ||||
| 
 | ||||
| if __name__ == "__main__": | ||||
|     XenAPIPlugin.dispatch({"forceShutdownVM":forceShutdownVM, "upgrade_snapshot":upgrade_snapshot, "create_privatetemplate_from_snapshot":create_privatetemplate_from_snapshot, "copy_vhd_to_secondarystorage":copy_vhd_to_secondarystorage, "copy_vhd_from_secondarystorage":copy_vhd_from_secondarystorage, "setup_heartbeat_sr":setup_heartbeat_sr, "setup_heartbeat_file":setup_heartbeat_file, "check_heartbeat":check_heartbeat, "heartbeat": heartbeat, "asmonitor": asmonitor}) | ||||
| 
 | ||||
|  | ||||
| @ -19,4 +19,8 @@ package com.cloud.network.as; | ||||
| public interface AutoScaleManager extends AutoScaleService { | ||||
| 
 | ||||
|     void cleanUpAutoScaleResources(Long accountId); | ||||
| 
 | ||||
| 	void doScaleUp(long groupId, Integer numVm); | ||||
| 
 | ||||
| 	void doScaleDown(long groupId); | ||||
| } | ||||
|  | ||||
| @ -17,22 +17,24 @@ | ||||
| package com.cloud.network.as; | ||||
| 
 | ||||
| import java.security.InvalidParameterException; | ||||
| import java.text.SimpleDateFormat; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Date; | ||||
| import java.util.HashMap; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.concurrent.ScheduledExecutorService; | ||||
| import java.util.concurrent.TimeUnit; | ||||
| 
 | ||||
| import javax.ejb.Local; | ||||
| import javax.inject.Inject; | ||||
| 
 | ||||
| import org.apache.log4j.Logger; | ||||
| 
 | ||||
| import com.google.gson.Gson; | ||||
| import com.google.gson.reflect.TypeToken; | ||||
| 
 | ||||
| import org.apache.cloudstack.acl.ControlledEntity; | ||||
| import org.apache.cloudstack.api.ApiConstants; | ||||
| import org.apache.cloudstack.api.ApiErrorCode; | ||||
| import org.apache.cloudstack.api.BaseCmd.HTTPMethod; | ||||
| import org.apache.cloudstack.api.BaseListAccountResourcesCmd; | ||||
| import org.apache.cloudstack.api.ServerApiException; | ||||
| import org.apache.cloudstack.api.command.admin.autoscale.CreateCounterCmd; | ||||
| import org.apache.cloudstack.api.command.user.autoscale.CreateAutoScalePolicyCmd; | ||||
| import org.apache.cloudstack.api.command.user.autoscale.CreateAutoScaleVmGroupCmd; | ||||
| @ -49,42 +51,55 @@ import org.apache.cloudstack.api.command.user.autoscale.UpdateAutoScaleVmProfile | ||||
| import org.apache.cloudstack.api.command.user.vm.DeployVMCmd; | ||||
| import org.apache.cloudstack.context.CallContext; | ||||
| import org.apache.cloudstack.framework.config.dao.ConfigurationDao; | ||||
| import org.apache.log4j.Logger; | ||||
| 
 | ||||
| import com.cloud.api.ApiDBUtils; | ||||
| import com.cloud.api.ApiDispatcher; | ||||
| import com.cloud.configuration.Config; | ||||
| import com.cloud.configuration.ConfigurationManager; | ||||
| import com.cloud.dc.DataCenter; | ||||
| import com.cloud.dc.DataCenter.NetworkType; | ||||
| import com.cloud.dc.dao.DataCenterDao; | ||||
| import com.cloud.event.ActionEvent; | ||||
| import com.cloud.event.EventTypes; | ||||
| import com.cloud.exception.ConcurrentOperationException; | ||||
| import com.cloud.exception.InsufficientCapacityException; | ||||
| import com.cloud.exception.InsufficientServerCapacityException; | ||||
| import com.cloud.exception.InvalidParameterValueException; | ||||
| import com.cloud.exception.ResourceAllocationException; | ||||
| import com.cloud.exception.ResourceInUseException; | ||||
| import com.cloud.exception.ResourceUnavailableException; | ||||
| import com.cloud.hypervisor.Hypervisor.HypervisorType; | ||||
| import com.cloud.network.Network.Capability; | ||||
| import com.cloud.network.Network.IpAddresses; | ||||
| import com.cloud.network.as.AutoScaleCounter.AutoScaleCounterParam; | ||||
| import com.cloud.network.as.dao.AutoScalePolicyConditionMapDao; | ||||
| import com.cloud.network.as.dao.AutoScalePolicyDao; | ||||
| import com.cloud.network.as.dao.AutoScaleVmGroupDao; | ||||
| import com.cloud.network.as.dao.AutoScaleVmGroupPolicyMapDao; | ||||
| import com.cloud.network.as.dao.AutoScaleVmGroupVmMapDao; | ||||
| import com.cloud.network.as.dao.AutoScaleVmProfileDao; | ||||
| import com.cloud.network.as.dao.ConditionDao; | ||||
| import com.cloud.network.as.dao.CounterDao; | ||||
| import com.cloud.network.dao.IPAddressDao; | ||||
| import com.cloud.network.dao.LoadBalancerDao; | ||||
| import com.cloud.network.dao.LoadBalancerVMMapDao; | ||||
| import com.cloud.network.dao.LoadBalancerVMMapVO; | ||||
| import com.cloud.network.dao.LoadBalancerVO; | ||||
| import com.cloud.network.dao.NetworkDao; | ||||
| import com.cloud.network.lb.LoadBalancingRulesManager; | ||||
| import com.cloud.network.lb.LoadBalancingRulesService; | ||||
| import com.cloud.offering.ServiceOffering; | ||||
| import com.cloud.projects.Project.ListProjectResourcesCriteria; | ||||
| import com.cloud.template.TemplateManager; | ||||
| import com.cloud.template.VirtualMachineTemplate; | ||||
| import com.cloud.user.Account; | ||||
| import com.cloud.user.AccountManager; | ||||
| import com.cloud.user.AccountService; | ||||
| import com.cloud.user.User; | ||||
| import com.cloud.user.dao.AccountDao; | ||||
| import com.cloud.user.dao.UserDao; | ||||
| import com.cloud.uservm.UserVm; | ||||
| import com.cloud.utils.Pair; | ||||
| import com.cloud.utils.Ternary; | ||||
| import com.cloud.utils.component.ManagerBase; | ||||
| @ -100,10 +115,15 @@ import com.cloud.utils.db.Transaction; | ||||
| import com.cloud.utils.db.TransactionCallback; | ||||
| import com.cloud.utils.db.TransactionStatus; | ||||
| import com.cloud.utils.net.NetUtils; | ||||
| import com.cloud.vm.UserVmManager; | ||||
| import com.cloud.vm.UserVmService; | ||||
| import com.google.gson.Gson; | ||||
| import com.google.gson.reflect.TypeToken; | ||||
| 
 | ||||
| @Local(value = {AutoScaleService.class, AutoScaleManager.class}) | ||||
| public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScaleManager, AutoScaleService { | ||||
|     private static final Logger s_logger = Logger.getLogger(AutoScaleManagerImpl.class); | ||||
|     private ScheduledExecutorService _executor = null; | ||||
| 
 | ||||
|     @Inject | ||||
|     EntityManager _entityMgr; | ||||
| @ -138,6 +158,8 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale | ||||
|     @Inject | ||||
|     AutoScaleVmGroupPolicyMapDao _autoScaleVmGroupPolicyMapDao; | ||||
|     @Inject | ||||
|     AutoScaleVmGroupVmMapDao _autoScaleVmGroupVmMapDao; | ||||
|     @Inject | ||||
|     DataCenterDao _dcDao = null; | ||||
|     @Inject | ||||
|     UserDao _userDao; | ||||
| @ -145,6 +167,16 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale | ||||
|     ConfigurationDao _configDao; | ||||
|     @Inject | ||||
|     IPAddressDao _ipAddressDao; | ||||
|     @Inject | ||||
|     AccountService _accountService; | ||||
|     @Inject | ||||
|     UserVmService _userVmService; | ||||
|     @Inject | ||||
|     UserVmManager _userVmManager; | ||||
|     @Inject  | ||||
|     LoadBalancerVMMapDao _LbVmMapDao; | ||||
|     @Inject  | ||||
| 	LoadBalancingRulesService _LoadBalancingRulesService; | ||||
| 
 | ||||
|     public List<AutoScaleCounter> getSupportedAutoScaleCounters(long networkid) { | ||||
|         String capability = _lbRulesMgr.getLBCapability(networkid, Capability.AutoScaleCounters.getName()); | ||||
| @ -501,7 +533,7 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale | ||||
|             throw new InvalidParameterValueException("action is invalid, only 'scaleup' and 'scaledown' is supported"); | ||||
|         } | ||||
| 
 | ||||
|         AutoScalePolicyVO policyVO = new AutoScalePolicyVO(cmd.getDomainId(), cmd.getAccountId(), duration, quietTime, action); | ||||
|         AutoScalePolicyVO policyVO = new AutoScalePolicyVO(cmd.getDomainId(), cmd.getAccountId(), duration, quietTime, null, action); | ||||
| 
 | ||||
|         policyVO = checkValidityAndPersist(policyVO, cmd.getConditionIds()); | ||||
|         s_logger.info("Successfully created AutoScale Policy with Id: " + policyVO.getId()); | ||||
| @ -705,9 +737,8 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale | ||||
|                 "there are Vms already bound to the specified LoadBalancing Rule. User bound Vms and AutoScaled Vm Group cannot co-exist on a Load Balancing Rule"); | ||||
|         } | ||||
| 
 | ||||
|         AutoScaleVmGroupVO vmGroupVO = | ||||
|             new AutoScaleVmGroupVO(cmd.getLbRuleId(), zoneId, loadBalancer.getDomainId(), loadBalancer.getAccountId(), minMembers, maxMembers, | ||||
|                 loadBalancer.getDefaultPortStart(), interval, cmd.getProfileId(), AutoScaleVmGroup.State_New); | ||||
|         AutoScaleVmGroupVO vmGroupVO = new AutoScaleVmGroupVO(cmd.getLbRuleId(), zoneId, loadBalancer.getDomainId(), loadBalancer.getAccountId(), minMembers, maxMembers, | ||||
|                 loadBalancer.getDefaultPortStart(), interval, null, cmd.getProfileId(), AutoScaleVmGroup.State_New); | ||||
| 
 | ||||
|         vmGroupVO = checkValidityAndPersist(vmGroupVO, cmd.getScaleUpPolicyIds(), cmd.getScaleDownPolicyIds()); | ||||
|         s_logger.info("Successfully created Autoscale Vm Group with Id: " + vmGroupVO.getId()); | ||||
| @ -1169,4 +1200,264 @@ public class AutoScaleManagerImpl<Type> extends ManagerBase implements AutoScale | ||||
|             s_logger.debug("Deleted " + count + " Conditions for account Id: " + accountId); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| 	private boolean checkConditionUp(AutoScaleVmGroupVO asGroup, Integer numVm) { | ||||
|     	// check maximum | ||||
| 		Integer currentVM = _autoScaleVmGroupVmMapDao.countByGroup(asGroup.getId()); | ||||
| 		Integer maxVm = asGroup.getMaxMembers(); | ||||
| 		if (currentVM + numVm > maxVm) { | ||||
| 			s_logger.warn("number of VM will greater than the maximum in this group if scaling up, so do nothing more"); | ||||
| 			return false; | ||||
| 		} | ||||
| 		return true; | ||||
|     } | ||||
| 	 | ||||
| 	private boolean checkConditionDown(AutoScaleVmGroupVO asGroup) { | ||||
| 		Integer currentVM = _autoScaleVmGroupVmMapDao.countByGroup(asGroup.getId()); | ||||
| 		Integer minVm = asGroup.getMinMembers(); | ||||
| 		if (currentVM - 1 < minVm) { | ||||
| 			s_logger.warn("number of VM will less than the minimum in this group if scaling down, so do nothing more"); | ||||
| 			return false; | ||||
| 		} | ||||
| 		return true; | ||||
| 	} | ||||
| 	 | ||||
| 	private long createNewVM(AutoScaleVmGroupVO asGroup) { | ||||
| 		AutoScaleVmProfileVO profileVo = _autoScaleVmProfileDao.findById(asGroup.getProfileId()); | ||||
| 		long templateId = profileVo.getTemplateId(); | ||||
| 		long serviceOfferingId = profileVo.getServiceOfferingId(); | ||||
| 		if (templateId == -1) { | ||||
| 			return -1; | ||||
| 		} | ||||
| 		// create new VM into DB | ||||
| 		try { | ||||
|             //Verify that all objects exist before passing them to the service | ||||
|             Account owner = _accountService.getActiveAccountById(profileVo.getAccountId()); | ||||
| 
 | ||||
|             DataCenter zone = _entityMgr.findById(DataCenter.class, profileVo.getZoneId()); | ||||
|             if (zone == null) { | ||||
|                 throw new InvalidParameterValueException("Unable to find zone by id=" + profileVo.getZoneId()); | ||||
|             } | ||||
| 
 | ||||
|             ServiceOffering serviceOffering = _entityMgr.findById(ServiceOffering.class, serviceOfferingId); | ||||
|             if (serviceOffering == null) { | ||||
|                 throw new InvalidParameterValueException("Unable to find service offering: " + serviceOfferingId); | ||||
|             } | ||||
| 
 | ||||
|             VirtualMachineTemplate template = _entityMgr.findById(VirtualMachineTemplate.class, templateId); | ||||
|             // Make sure a valid template ID was specified | ||||
|             if (template == null) { | ||||
|                 throw new InvalidParameterValueException("Unable to use template " + templateId); | ||||
|             } | ||||
| 
 | ||||
|             if (!zone.isLocalStorageEnabled()) { | ||||
|                 if (serviceOffering.getUseLocalStorage()) { | ||||
|                     throw new InvalidParameterValueException("Zone is not configured to use local storage but service offering " + serviceOffering.getName() + " uses it"); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             UserVm vm = null; | ||||
| 			IpAddresses addrs = new IpAddresses(null, null); | ||||
| 			if (zone.getNetworkType() == NetworkType.Basic) { | ||||
|                 vm = _userVmService.createBasicSecurityGroupVirtualMachine(zone, serviceOffering, template, null, owner, "autoScaleVm-" + asGroup.getId() + "-" + getCurrentTimeStampString(), | ||||
|                 		"autoScaleVm-" + asGroup.getId() + "-" + getCurrentTimeStampString(), null, null, null, HypervisorType.XenServer, HTTPMethod.GET, null, null, null, null, true, null, null); | ||||
|             } else { | ||||
|                 if (zone.isSecurityGroupEnabled())  { | ||||
|                     vm = _userVmService.createAdvancedSecurityGroupVirtualMachine(zone, serviceOffering, template, null, null, | ||||
|                             owner, "autoScaleVm-" + asGroup.getId() + "-" + getCurrentTimeStampString(), "autoScaleVm-" + asGroup.getId() + "-" + getCurrentTimeStampString(), null, null, null, HypervisorType.XenServer, HTTPMethod.GET, null, null, null, null, true, null, null); | ||||
| 
 | ||||
|                 } else { | ||||
|                     vm = _userVmService.createAdvancedVirtualMachine(zone, serviceOffering, template, null, owner, "autoScaleVm-" + asGroup.getId() + "-" + getCurrentTimeStampString(), "autoScaleVm-" + asGroup.getId() + "-" + getCurrentTimeStampString(), | ||||
|                             null, null, null, HypervisorType.XenServer, HTTPMethod.GET, null, null, null, addrs, true, null, null); | ||||
| 
 | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             if (vm != null) { | ||||
| 				return vm.getId(); | ||||
|             } else { | ||||
| 				return -1; | ||||
|             } | ||||
|         } catch (InsufficientCapacityException ex) { | ||||
|             s_logger.info(ex); | ||||
|             s_logger.trace(ex.getMessage(), ex); | ||||
|             throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); | ||||
|         } catch (ResourceUnavailableException ex) { | ||||
|             s_logger.warn("Exception: ", ex); | ||||
|             throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); | ||||
|         }  catch (ConcurrentOperationException ex) { | ||||
|             s_logger.warn("Exception: ", ex); | ||||
|             throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); | ||||
|         } catch (ResourceAllocationException ex) { | ||||
|             s_logger.warn("Exception: ", ex); | ||||
|             throw new ServerApiException(ApiErrorCode.RESOURCE_ALLOCATION_ERROR, ex.getMessage()); | ||||
|         } | ||||
| 	} | ||||
| 	 | ||||
| 	private String getCurrentTimeStampString(){ | ||||
| 		Date current = new Date(); | ||||
| 		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); | ||||
| 		 | ||||
| 		return sdf.format(current); | ||||
| 	} | ||||
| 
 | ||||
| 	private boolean startNewVM(long vmId) { | ||||
| 		try { | ||||
|             CallContext.current().setEventDetails("Vm Id: "+vmId); | ||||
| 			_userVmManager.startVirtualMachine(vmId, null, null); | ||||
|         } catch (ResourceUnavailableException ex) { | ||||
|             s_logger.warn("Exception: ", ex); | ||||
|             throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); | ||||
|         } catch (ConcurrentOperationException ex) { | ||||
|             s_logger.warn("Exception: ", ex); | ||||
|             throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); | ||||
|         } catch (InsufficientCapacityException ex) { | ||||
|             StringBuilder message = new StringBuilder(ex.getMessage()); | ||||
|             if (ex instanceof InsufficientServerCapacityException) { | ||||
|                 if(((InsufficientServerCapacityException)ex).isAffinityApplied()){ | ||||
|                     message.append(", Please check the affinity groups provided, there may not be sufficient capacity to follow them"); | ||||
|                 } | ||||
|             } | ||||
|             s_logger.info(ex); | ||||
|             s_logger.info(message.toString(), ex); | ||||
|             throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, message.toString()); | ||||
|         } | ||||
| 		return true; | ||||
| 	} | ||||
| 	 | ||||
| 	private boolean assignLBruleToNewVm(long vmId, AutoScaleVmGroupVO asGroup) { | ||||
| 		List<Long> lstVmId = new ArrayList<Long>(); | ||||
|     	long lbId = asGroup.getLoadBalancerId(); | ||||
|     	 | ||||
|     	List<LoadBalancerVMMapVO>  LbVmMapVos = _LbVmMapDao.listByLoadBalancerId(lbId); | ||||
| 		if ((LbVmMapVos != null) && (LbVmMapVos.size() > 0)) { | ||||
| 			for (LoadBalancerVMMapVO LbVmMapVo : LbVmMapVos) { | ||||
| 				long instanceId = LbVmMapVo.getInstanceId(); | ||||
| 				if (instanceId == vmId) { | ||||
| 					s_logger.warn("the new VM is already mapped to LB rule. What's wrong?"); | ||||
| 					return true; | ||||
| 				} | ||||
| 			} | ||||
|     	} | ||||
| 		lstVmId.add(new Long(vmId)); | ||||
| 		return _LoadBalancingRulesService.assignToLoadBalancer(lbId, lstVmId); | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	private long removeLBrule(AutoScaleVmGroupVO asGroup) { | ||||
|     	long lbId = asGroup.getLoadBalancerId(); | ||||
| 		long instanceId = -1; | ||||
|     	List<LoadBalancerVMMapVO>  LbVmMapVos = _LbVmMapDao.listByLoadBalancerId(lbId); | ||||
| 		if ((LbVmMapVos != null) && (LbVmMapVos.size() > 0)) { | ||||
| 			for (LoadBalancerVMMapVO LbVmMapVo : LbVmMapVos) { | ||||
| 				instanceId = LbVmMapVo.getInstanceId(); | ||||
| 			} | ||||
|     	} | ||||
| 		// take last VM out of the list | ||||
| 		List<Long> lstVmId = new ArrayList<Long>(); | ||||
| 		if (instanceId != -1) | ||||
| 			lstVmId.add(instanceId); | ||||
| 		if (_LoadBalancingRulesService.removeFromLoadBalancer(lbId, lstVmId)) | ||||
| 			return instanceId; | ||||
| 		else | ||||
| 			return -1; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void doScaleUp(long groupId, Integer numVm) { | ||||
| 		AutoScaleVmGroupVO asGroup = _autoScaleVmGroupDao.findById(groupId); | ||||
| 		if (asGroup == null) { | ||||
| 			s_logger.error("Can not find the groupid " + groupId + " for scaling up"); | ||||
| 			return; | ||||
| 		} | ||||
| 		if (!checkConditionUp(asGroup, numVm)) { | ||||
| 			return; | ||||
| 		} | ||||
| 		for (int i = 0; i < numVm; i++) { | ||||
| 			long vmId = createNewVM(asGroup); | ||||
| 			if (vmId == -1) { | ||||
| 				s_logger.error("Can not deploy new VM for scaling up in the group " | ||||
| 						+ asGroup.getId() + ". Waiting for next round"); | ||||
| 				break; | ||||
| 			} | ||||
| 			if (startNewVM(vmId)) { | ||||
| 				if (assignLBruleToNewVm(vmId, asGroup)) { | ||||
| 					// persist to DB | ||||
| 					AutoScaleVmGroupVmMapVO GroupVmVO = new AutoScaleVmGroupVmMapVO( | ||||
| 							asGroup.getId(), vmId); | ||||
| 					_autoScaleVmGroupVmMapDao.persist(GroupVmVO); | ||||
| 					// update last_quiettime | ||||
| 					List<AutoScaleVmGroupPolicyMapVO> GroupPolicyVOs = _autoScaleVmGroupPolicyMapDao | ||||
| 							.listByVmGroupId(groupId); | ||||
| 					for (AutoScaleVmGroupPolicyMapVO GroupPolicyVO : GroupPolicyVOs) { | ||||
| 						AutoScalePolicyVO vo = _autoScalePolicyDao | ||||
| 								.findById(GroupPolicyVO.getPolicyId()); | ||||
| 						if (vo.getAction().equals("scaleup")) { | ||||
| 							vo.setLastQuiteTime(new Date()); | ||||
| 							_autoScalePolicyDao.persist(vo); | ||||
| 							break; | ||||
| 						} | ||||
| 					} | ||||
| 				} else { | ||||
| 					s_logger.error("Can not assign LB rule for this new VM"); | ||||
| 					break; | ||||
| 				} | ||||
| 			} else { | ||||
| 				s_logger.error("Can not deploy new VM for scaling up in the group " | ||||
| 						+ asGroup.getId() + ". Waiting for next round"); | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void doScaleDown(final long groupId) { | ||||
| 		AutoScaleVmGroupVO asGroup = _autoScaleVmGroupDao.findById(groupId); | ||||
| 		if (asGroup == null) { | ||||
| 			s_logger.error("Can not find the groupid " + groupId + " for scaling up"); | ||||
| 			return; | ||||
| 		} | ||||
| 		if (!checkConditionDown(asGroup)) { | ||||
| 			return; | ||||
| 		} | ||||
| 		final long vmId = removeLBrule(asGroup); | ||||
| 		if (vmId != -1) { | ||||
| 			long profileId = asGroup.getProfileId(); | ||||
| 			// get destroyvmgrace param | ||||
| 			AutoScaleVmProfileVO asProfile = _autoScaleVmProfileDao.findById(profileId); | ||||
| 			Integer destroyVmGracePeriod = asProfile.getDestroyVmGraceperiod(); | ||||
| 			if (destroyVmGracePeriod >= 0) { | ||||
| 				_executor.schedule(new Runnable() { | ||||
| 					@Override | ||||
| 					public void run() { | ||||
| 						try { | ||||
| 							// destroy vm | ||||
| 							_userVmManager.destroyVm(vmId); | ||||
| 							// update group-vm mapping | ||||
| 							_autoScaleVmGroupVmMapDao.remove(groupId, vmId); | ||||
| 							// update last_quiettime | ||||
| 							List<AutoScaleVmGroupPolicyMapVO> GroupPolicyVOs = _autoScaleVmGroupPolicyMapDao | ||||
| 									.listByVmGroupId(groupId); | ||||
| 							for (AutoScaleVmGroupPolicyMapVO GroupPolicyVO : GroupPolicyVOs) { | ||||
| 								AutoScalePolicyVO vo = _autoScalePolicyDao | ||||
| 										.findById(GroupPolicyVO.getPolicyId()); | ||||
| 								if (vo.getAction().equals("scaledown")) { | ||||
| 									vo.setLastQuiteTime(new Date()); | ||||
| 									break; | ||||
| 								} | ||||
| 							}	 | ||||
| 						} catch (ResourceUnavailableException e) { | ||||
| 							e.printStackTrace(); | ||||
| 						} catch (ConcurrentOperationException e) { | ||||
| 							e.printStackTrace(); | ||||
| 						} | ||||
| 					} | ||||
| 				}, destroyVmGracePeriod, TimeUnit.SECONDS); | ||||
| 			} | ||||
| 		} else { | ||||
| 			s_logger.error("Can not remove LB rule for the VM being destroyed. Do nothing more."); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| } | ||||
|  | ||||
| @ -30,11 +30,13 @@ import org.apache.log4j.Logger; | ||||
| import com.google.gson.Gson; | ||||
| 
 | ||||
| import org.apache.cloudstack.api.command.admin.router.ConfigureOvsElementCmd; | ||||
| 
 | ||||
| import org.apache.cloudstack.api.command.admin.router.ConfigureVirtualRouterElementCmd; | ||||
| import org.apache.cloudstack.api.command.admin.router.CreateVirtualRouterElementCmd; | ||||
| import org.apache.cloudstack.api.command.admin.router.ListOvsElementsCmd; | ||||
| import org.apache.cloudstack.api.command.admin.router.ListVirtualRouterElementsCmd; | ||||
| import org.apache.cloudstack.framework.config.dao.ConfigurationDao; | ||||
| import org.apache.log4j.Logger; | ||||
| 
 | ||||
| import com.cloud.agent.api.to.LoadBalancerTO; | ||||
| import com.cloud.configuration.ConfigurationManager; | ||||
| @ -62,6 +64,8 @@ import com.cloud.network.RemoteAccessVpn; | ||||
| import com.cloud.network.VirtualRouterProvider; | ||||
| import com.cloud.network.VirtualRouterProvider.Type; | ||||
| import com.cloud.network.VpnUser; | ||||
| import com.cloud.network.as.AutoScaleCounter; | ||||
| import com.cloud.network.as.AutoScaleCounter.AutoScaleCounterType; | ||||
| import com.cloud.network.dao.IPAddressDao; | ||||
| import com.cloud.network.dao.LoadBalancerDao; | ||||
| import com.cloud.network.dao.NetworkDao; | ||||
| @ -99,6 +103,7 @@ import com.cloud.vm.VirtualMachine.State; | ||||
| import com.cloud.vm.VirtualMachineProfile; | ||||
| import com.cloud.vm.dao.DomainRouterDao; | ||||
| import com.cloud.vm.dao.UserVmDao; | ||||
| import com.google.gson.Gson; | ||||
| 
 | ||||
| import com.google.gson.Gson; | ||||
| 
 | ||||
| @ -112,8 +117,9 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl | ||||
|         LoadBalancingServiceProvider, PortForwardingServiceProvider, RemoteAccessVPNServiceProvider, IpDeployer, | ||||
|         NetworkMigrationResponder { | ||||
|     private static final Logger s_logger = Logger.getLogger(VirtualRouterElement.class); | ||||
| 
 | ||||
|     protected static final Map<Service, Map<Capability, String>> capabilities = setCapabilities(); | ||||
| 	public static final AutoScaleCounterType AutoScaleCounterCpu = new AutoScaleCounterType("cpu"); | ||||
| 	public static final AutoScaleCounterType AutoScaleCounterMemory = new AutoScaleCounterType("memory"); | ||||
| 	protected static final Map<Service, Map<Capability, String>> capabilities = setCapabilities(); | ||||
| 
 | ||||
|     @Inject | ||||
|     NetworkDao _networksDao; | ||||
| @ -555,7 +561,17 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl | ||||
|         lbCapabilities.put(Capability.SupportedProtocols, "tcp, udp"); | ||||
|         lbCapabilities.put(Capability.SupportedStickinessMethods, getHAProxyStickinessCapability()); | ||||
|         lbCapabilities.put(Capability.LbSchemes, LoadBalancerContainer.Scheme.Public.toString()); | ||||
| 
 | ||||
|          | ||||
|         //specifies that LB rules can support autoscaling and the list of counters it supports | ||||
|         AutoScaleCounter counter; | ||||
|         List<AutoScaleCounter> counterList = new ArrayList<AutoScaleCounter>(); | ||||
| 		counter = new AutoScaleCounter(AutoScaleCounterCpu); | ||||
|         counterList.add(counter); | ||||
| 		counter = new AutoScaleCounter(AutoScaleCounterMemory); | ||||
|         counterList.add(counter); | ||||
|         Gson gson = new Gson(); | ||||
|         String autoScaleCounterList = gson.toJson(counterList); | ||||
|         lbCapabilities.put(Capability.AutoScaleCounters, autoScaleCounterList); | ||||
|         capabilities.put(Service.Lb, lbCapabilities); | ||||
| 
 | ||||
|         // Set capabilities for Firewall service | ||||
|  | ||||
| @ -915,7 +915,8 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements | ||||
|         if (provider == null || provider.size() == 0) { | ||||
|             return false; | ||||
|         } | ||||
|         if (provider.get(0) == Provider.Netscaler || provider.get(0) == Provider.F5BigIp) { | ||||
|         if (provider.get(0) == Provider.Netscaler || provider.get(0) == Provider.F5BigIp ||  | ||||
|         		provider.get(0) == Provider.VirtualRouter || provider.get(0) == Provider.VPCVirtualRouter) { | ||||
|             return true; | ||||
|         } | ||||
|         return false; | ||||
|  | ||||
| @ -48,6 +48,7 @@ import com.cloud.agent.AgentManager; | ||||
| import com.cloud.agent.api.Answer; | ||||
| import com.cloud.agent.api.GetStorageStatsCommand; | ||||
| import com.cloud.agent.api.HostStatsEntry; | ||||
| import com.cloud.agent.api.PerformanceMonitorCommand; | ||||
| import com.cloud.agent.api.VmDiskStatsEntry; | ||||
| import com.cloud.agent.api.VmStatsEntry; | ||||
| import com.cloud.cluster.ManagementServerHostVO; | ||||
| @ -59,8 +60,29 @@ import com.cloud.host.HostVO; | ||||
| import com.cloud.host.Status; | ||||
| import com.cloud.host.dao.HostDao; | ||||
| import com.cloud.hypervisor.Hypervisor.HypervisorType; | ||||
| import com.cloud.network.as.AutoScaleManager; | ||||
| import com.cloud.network.as.AutoScalePolicyConditionMapVO; | ||||
| import com.cloud.network.as.AutoScalePolicyVO; | ||||
| import com.cloud.network.as.AutoScaleVmGroupPolicyMapVO; | ||||
| import com.cloud.network.as.AutoScaleVmGroupVO; | ||||
| import com.cloud.network.as.AutoScaleVmGroupVmMapVO; | ||||
| import com.cloud.network.as.AutoScaleVmProfileVO; | ||||
| import com.cloud.network.as.Condition.Operator; | ||||
| import com.cloud.network.as.ConditionVO; | ||||
| import com.cloud.network.as.Counter; | ||||
| import com.cloud.network.as.CounterVO; | ||||
| import com.cloud.network.as.dao.AutoScalePolicyConditionMapDao; | ||||
| import com.cloud.network.as.dao.AutoScalePolicyDao; | ||||
| import com.cloud.network.as.dao.AutoScaleVmGroupDao; | ||||
| import com.cloud.network.as.dao.AutoScaleVmGroupPolicyMapDao; | ||||
| import com.cloud.network.as.dao.AutoScaleVmGroupVmMapDao; | ||||
| import com.cloud.network.as.dao.AutoScaleVmProfileDao; | ||||
| import com.cloud.network.as.dao.ConditionDao; | ||||
| import com.cloud.network.as.dao.CounterDao; | ||||
| import com.cloud.resource.ResourceManager; | ||||
| import com.cloud.resource.ResourceState; | ||||
| import com.cloud.service.ServiceOfferingVO; | ||||
| import com.cloud.service.dao.ServiceOfferingDao; | ||||
| import com.cloud.storage.StorageManager; | ||||
| import com.cloud.storage.StorageStats; | ||||
| import com.cloud.storage.VolumeStats; | ||||
| @ -70,6 +92,7 @@ import com.cloud.storage.dao.VolumeDao; | ||||
| import com.cloud.user.VmDiskStatisticsVO; | ||||
| import com.cloud.user.dao.VmDiskStatisticsDao; | ||||
| import com.cloud.utils.NumbersUtil; | ||||
| import com.cloud.utils.Pair; | ||||
| import com.cloud.utils.component.ComponentMethodInterceptable; | ||||
| import com.cloud.utils.component.ManagerBase; | ||||
| import com.cloud.utils.concurrency.NamedThreadFactory; | ||||
| @ -82,9 +105,11 @@ import com.cloud.utils.db.TransactionStatus; | ||||
| import com.cloud.utils.net.MacAddress; | ||||
| import com.cloud.vm.UserVmManager; | ||||
| import com.cloud.vm.UserVmVO; | ||||
| import com.cloud.vm.VMInstanceVO; | ||||
| import com.cloud.vm.VirtualMachine; | ||||
| import com.cloud.vm.VmStats; | ||||
| import com.cloud.vm.dao.UserVmDao; | ||||
| import com.cloud.vm.dao.VMInstanceDao; | ||||
| 
 | ||||
| /** | ||||
|  * Provides real time stats for various agent resources up to x seconds | ||||
| @ -92,55 +117,53 @@ import com.cloud.vm.dao.UserVmDao; | ||||
|  */ | ||||
| @Component | ||||
| public class StatsCollector extends ManagerBase implements ComponentMethodInterceptable { | ||||
|     public static final Logger s_logger = Logger.getLogger(StatsCollector.class.getName()); | ||||
| 
 | ||||
|     private static StatsCollector s_instance = null; | ||||
| 	public static final Logger s_logger = Logger.getLogger(StatsCollector.class.getName()); | ||||
| 
 | ||||
|     private ScheduledExecutorService _executor = null; | ||||
|     @Inject | ||||
|     private AgentManager _agentMgr; | ||||
|     @Inject | ||||
|     private UserVmManager _userVmMgr; | ||||
|     @Inject | ||||
|     private HostDao _hostDao; | ||||
|     @Inject | ||||
|     private UserVmDao _userVmDao; | ||||
|     @Inject | ||||
|     private VolumeDao _volsDao; | ||||
|     @Inject | ||||
|     private PrimaryDataStoreDao _storagePoolDao; | ||||
|     @Inject | ||||
|     private ImageStoreDao _imageStoreDao; | ||||
|     @Inject | ||||
|     private StorageManager _storageManager; | ||||
|     @Inject | ||||
|     private StoragePoolHostDao _storagePoolHostDao; | ||||
|     @Inject | ||||
|     private DataStoreManager _dataStoreMgr; | ||||
|     @Inject | ||||
|     private ResourceManager _resourceMgr; | ||||
|     @Inject | ||||
|     private ConfigurationDao _configDao; | ||||
|     @Inject | ||||
|     private EndPointSelector _epSelector; | ||||
|     @Inject | ||||
|     private VmDiskStatisticsDao _vmDiskStatsDao; | ||||
|     @Inject | ||||
|     private ManagementServerHostDao _msHostDao; | ||||
| 	private static StatsCollector s_instance = null; | ||||
| 
 | ||||
|     private ConcurrentHashMap<Long, HostStats> _hostStats = new ConcurrentHashMap<Long, HostStats>(); | ||||
|     private final ConcurrentHashMap<Long, VmStats> _VmStats = new ConcurrentHashMap<Long, VmStats>(); | ||||
|     private ConcurrentHashMap<Long, VolumeStats> _volumeStats = new ConcurrentHashMap<Long, VolumeStats>(); | ||||
|     private ConcurrentHashMap<Long, StorageStats> _storageStats = new ConcurrentHashMap<Long, StorageStats>(); | ||||
|     private ConcurrentHashMap<Long, StorageStats> _storagePoolStats = new ConcurrentHashMap<Long, StorageStats>(); | ||||
| 	private ScheduledExecutorService _executor = null; | ||||
| 	@Inject private AgentManager _agentMgr; | ||||
| 	@Inject private UserVmManager _userVmMgr; | ||||
| 	@Inject private HostDao _hostDao; | ||||
| 	@Inject private UserVmDao _userVmDao; | ||||
| 	@Inject private VolumeDao _volsDao; | ||||
| 	@Inject private PrimaryDataStoreDao _storagePoolDao; | ||||
| 	@Inject private ImageStoreDao _imageStoreDao; | ||||
| 	@Inject private StorageManager _storageManager; | ||||
| 	@Inject private StoragePoolHostDao _storagePoolHostDao; | ||||
| 	@Inject private DataStoreManager _dataStoreMgr; | ||||
| 	@Inject private ResourceManager _resourceMgr; | ||||
|     @Inject private ConfigurationDao _configDao; | ||||
|     @Inject private EndPointSelector _epSelector; | ||||
|     @Inject private VmDiskStatisticsDao _vmDiskStatsDao; | ||||
|     @Inject private ManagementServerHostDao _msHostDao; | ||||
| 	@Inject	private AutoScaleVmGroupDao _asGroupDao; | ||||
| 	@Inject private AutoScaleVmGroupVmMapDao _asGroupVmDao; | ||||
| 	@Inject private AutoScaleManager _asManager; | ||||
| 	@Inject private VMInstanceDao _vmInstance; | ||||
| 	@Inject private AutoScaleVmGroupPolicyMapDao _asGroupPolicyDao; | ||||
| 	@Inject private AutoScalePolicyDao _asPolicyDao; | ||||
| 	@Inject private AutoScalePolicyConditionMapDao _asConditionMapDao;  | ||||
| 	@Inject private ConditionDao _asConditionDao; | ||||
| 	@Inject private CounterDao _asCounterDao; | ||||
| 	@Inject private AutoScaleVmProfileDao _asProfileDao; | ||||
| 	@Inject private ServiceOfferingDao _serviceOfferingDao; | ||||
| 
 | ||||
|     long hostStatsInterval = -1L; | ||||
|     long hostAndVmStatsInterval = -1L; | ||||
|     long storageStatsInterval = -1L; | ||||
|     long volumeStatsInterval = -1L; | ||||
|     int vmDiskStatsInterval = 0; | ||||
| 	private ConcurrentHashMap<Long, HostStats> _hostStats = new ConcurrentHashMap<Long, HostStats>(); | ||||
| 	private final ConcurrentHashMap<Long, VmStats> _VmStats = new ConcurrentHashMap<Long, VmStats>(); | ||||
| 	private ConcurrentHashMap<Long, VolumeStats> _volumeStats = new ConcurrentHashMap<Long, VolumeStats>(); | ||||
| 	private ConcurrentHashMap<Long, StorageStats> _storageStats = new ConcurrentHashMap<Long, StorageStats>(); | ||||
| 	private ConcurrentHashMap<Long, StorageStats> _storagePoolStats = new ConcurrentHashMap<Long, StorageStats>(); | ||||
| 
 | ||||
|     private ScheduledExecutorService _diskStatsUpdateExecutor; | ||||
| 	long hostStatsInterval = -1L; | ||||
| 	long hostAndVmStatsInterval = -1L; | ||||
| 	long storageStatsInterval = -1L; | ||||
| 	long volumeStatsInterval = -1L; | ||||
| 	long autoScaleStatsInterval = -1L; | ||||
| 	int vmDiskStatsInterval = 0; | ||||
| 
 | ||||
| 	private ScheduledExecutorService _diskStatsUpdateExecutor; | ||||
|     private int _usageAggregationRange = 1440; | ||||
|     private String _usageTimeZone = "GMT"; | ||||
|     private final long mgmtSrvrId = MacAddress.getMacAddress().toLong(); | ||||
| @ -169,14 +192,15 @@ public class StatsCollector extends ManagerBase implements ComponentMethodInterc | ||||
|         return true; | ||||
|     } | ||||
| 
 | ||||
|     private void init(Map<String, String> configs) { | ||||
|         _executor = Executors.newScheduledThreadPool(3, new NamedThreadFactory("StatsCollector")); | ||||
| 	private void init(Map<String, String> configs) { | ||||
| 		_executor = Executors.newScheduledThreadPool(4, new NamedThreadFactory("StatsCollector")); | ||||
| 
 | ||||
|         hostStatsInterval = NumbersUtil.parseLong(configs.get("host.stats.interval"), 60000L); | ||||
|         hostAndVmStatsInterval = NumbersUtil.parseLong(configs.get("vm.stats.interval"), 60000L); | ||||
|         storageStatsInterval = NumbersUtil.parseLong(configs.get("storage.stats.interval"), 60000L); | ||||
|         volumeStatsInterval = NumbersUtil.parseLong(configs.get("volume.stats.interval"), -1L); | ||||
|         vmDiskStatsInterval = NumbersUtil.parseInt(configs.get("vm.disk.stats.interval"), 0); | ||||
| 		 hostStatsInterval = NumbersUtil.parseLong(configs.get("host.stats.interval"), 60000L); | ||||
| 		 hostAndVmStatsInterval = NumbersUtil.parseLong(configs.get("vm.stats.interval"), 60000L); | ||||
| 		 storageStatsInterval = NumbersUtil.parseLong(configs.get("storage.stats.interval"), 60000L); | ||||
| 		 volumeStatsInterval = NumbersUtil.parseLong(configs.get("volume.stats.interval"), -1L); | ||||
| 		 autoScaleStatsInterval = NumbersUtil.parseLong(configs.get("autoscale.stats.interval"), 60000L); | ||||
| 		 vmDiskStatsInterval = NumbersUtil.parseInt(configs.get("vm.disk.stats.interval"), 0); | ||||
| 
 | ||||
|         if (hostStatsInterval > 0) { | ||||
|             _executor.scheduleWithFixedDelay(new HostCollector(), 15000L, hostStatsInterval, TimeUnit.MILLISECONDS); | ||||
| @ -186,9 +210,13 @@ public class StatsCollector extends ManagerBase implements ComponentMethodInterc | ||||
|             _executor.scheduleWithFixedDelay(new VmStatsCollector(), 15000L, hostAndVmStatsInterval, TimeUnit.MILLISECONDS); | ||||
|         } | ||||
| 
 | ||||
|         if (storageStatsInterval > 0) { | ||||
|             _executor.scheduleWithFixedDelay(new StorageCollector(), 15000L, storageStatsInterval, TimeUnit.MILLISECONDS); | ||||
|         } | ||||
| 		if (storageStatsInterval > 0) { | ||||
| 		    _executor.scheduleWithFixedDelay(new StorageCollector(), 15000L, storageStatsInterval, TimeUnit.MILLISECONDS); | ||||
| 		} | ||||
| 		  | ||||
| 		if (autoScaleStatsInterval > 0) { | ||||
|             _executor.scheduleWithFixedDelay(new AutoScaleMonitor(), 15000L, autoScaleStatsInterval, TimeUnit.MILLISECONDS); | ||||
| 		} | ||||
| 
 | ||||
|         if (vmDiskStatsInterval > 0) { | ||||
|             if (vmDiskStatsInterval < 300) | ||||
| @ -578,21 +606,271 @@ public class StatsCollector extends ManagerBase implements ComponentMethodInterc | ||||
|                     } | ||||
|                 } | ||||
|                 _storagePoolStats = storagePoolStats; | ||||
|             } catch (Throwable t) { | ||||
|                 s_logger.error("Error trying to retrieve storage stats", t); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 			} catch (Throwable t) { | ||||
| 				s_logger.error("Error trying to retrieve storage stats", t); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|     public StorageStats getStorageStats(long id) { | ||||
|         return _storageStats.get(id); | ||||
|     } | ||||
| 	class AutoScaleMonitor extends ManagedContextRunnable { | ||||
| 		@Override | ||||
| 		protected void runInContext() { | ||||
| 			try { | ||||
| 				if (s_logger.isDebugEnabled()) { | ||||
| 					s_logger.debug("AutoScaling Monitor is running..."); | ||||
| 				} | ||||
| 				// list all AS VMGroups | ||||
| 				List<AutoScaleVmGroupVO> asGroups = _asGroupDao.listAll(); | ||||
| 				for (AutoScaleVmGroupVO asGroup : asGroups) { | ||||
| 					// check group state | ||||
| 					if (asGroup.getState().equals("enabled")) { | ||||
| 						// check minimum vm of group | ||||
| 						Integer currentVM = _asGroupVmDao.countByGroup(asGroup.getId()); | ||||
| 						if (currentVM < asGroup.getMinMembers()) { | ||||
| 							_asManager.doScaleUp(asGroup.getId(), asGroup.getMinMembers() - currentVM); | ||||
| 							continue; | ||||
| 						} | ||||
| 						 | ||||
| 						//check interval | ||||
| 						long now = (new Date()).getTime(); | ||||
| 						if (asGroup.getLastInterval() != null) | ||||
| 							if ((now - asGroup.getLastInterval().getTime()) < (long) asGroup | ||||
| 									.getInterval()) { | ||||
| 								continue; | ||||
| 							} | ||||
| 
 | ||||
|     public HostStats getHostStats(long hostId) { | ||||
|         return _hostStats.get(hostId); | ||||
|     } | ||||
| 						// update last_interval | ||||
| 						asGroup.setLastInterval(new Date()); | ||||
| 						_asGroupDao.persist(asGroup); | ||||
| 
 | ||||
|     public StorageStats getStoragePoolStats(long id) { | ||||
|         return _storagePoolStats.get(id); | ||||
|     } | ||||
| 						// collect RRDs data for this group | ||||
| 						if (s_logger.isDebugEnabled()) { | ||||
| 							s_logger.debug("[AutoScale] Collecting RRDs data..."); | ||||
| 						} | ||||
| 						Map<String, String> params = new HashMap<String, String>(); | ||||
| 						List <AutoScaleVmGroupVmMapVO> asGroupVmVOs = _asGroupVmDao.listByGroup(asGroup.getId()); | ||||
| 						params.put("total_vm", String.valueOf(asGroupVmVOs.size())); | ||||
| 						for (int i = 0; i < asGroupVmVOs.size(); i++) { | ||||
| 							long vmId = asGroupVmVOs.get(i).getInstanceId(); | ||||
| 							VMInstanceVO vmVO = _vmInstance.findById(vmId); | ||||
| 							//xe vm-list | grep vmname -B 1 | head -n 1 | awk -F':' '{print $2}' | ||||
| 							params.put("vmname" + String.valueOf(i + 1), vmVO.getInstanceName()); | ||||
| 							params.put("vmid" + String.valueOf(i + 1), String.valueOf(vmVO.getId())); | ||||
| 
 | ||||
| 						} | ||||
| 						// get random hostid because all vms are in a cluster | ||||
| 						long vmId = asGroupVmVOs.get(0).getInstanceId(); | ||||
| 						VMInstanceVO vmVO = _vmInstance.findById(vmId); | ||||
| 						Long receiveHost = vmVO.getHostId(); | ||||
| 
 | ||||
| 						// setup parameters phase: duration and counter | ||||
| 						// list pair [counter, duration] | ||||
| 						List<Pair<String, Integer>> lstPair = getPairofCounternameAndDuration(asGroup.getId()); | ||||
| 						int total_counter = 0; | ||||
| 						String[] lstCounter = new String[lstPair.size()]; | ||||
| 						for (int i = 0; i < lstPair.size(); i++) { | ||||
| 							Pair<String, Integer> pair = lstPair.get(i); | ||||
| 							String strCounterNames = pair.first(); | ||||
| 							Integer duration = pair.second(); | ||||
| 							 | ||||
| 							lstCounter[i] = strCounterNames.split(",")[0]; | ||||
| 							total_counter++; | ||||
| 							params.put("duration" + String.valueOf(total_counter), duration.toString()); | ||||
| 							params.put("counter" + String.valueOf(total_counter), lstCounter[i]); | ||||
| 							params.put("con" + String.valueOf(total_counter), strCounterNames.split(",")[1]); | ||||
| 						} | ||||
| 						params.put("total_counter", String.valueOf(total_counter)); | ||||
| 
 | ||||
| 						PerformanceMonitorCommand perfMon = new PerformanceMonitorCommand(params, 20); | ||||
| 
 | ||||
| 						try { | ||||
| 							Answer answer = _agentMgr.send(receiveHost, perfMon); | ||||
| 							if (answer == null || !answer.getResult()) { | ||||
| 								s_logger.debug("Failed to send data to node !"); | ||||
| 							} else { | ||||
| 								String result = answer.getDetails(); | ||||
| 								s_logger.debug("[AutoScale] RRDs collection answer: " + result); | ||||
| 								HashMap<Long, Double> avgCounter = new HashMap<Long, Double>(); | ||||
| 								 | ||||
| 								// extract data | ||||
| 								String[] counterElements = result.split(","); | ||||
| 								if ((counterElements != null) && (counterElements.length > 0)) { | ||||
| 									for (String string : counterElements) { | ||||
| 										try { | ||||
| 											String[] counterVals = string.split(":"); | ||||
| 											String[] counter_vm = counterVals[0].split("\\."); | ||||
| 											 | ||||
| 											Long counterId = Long.parseLong(counter_vm[1]); | ||||
| 											Long conditionId = Long.parseLong(params.get("con" + counter_vm[1])); | ||||
| 											Double coVal = Double.parseDouble(counterVals[1]); | ||||
| 
 | ||||
| 											// Summary of all counter by counterId key | ||||
| 											if (avgCounter.get(counterId) == null){													 | ||||
| 												/* initialize if data is not set */ | ||||
| 												avgCounter.put(counterId, new Double(0)); | ||||
| 											} | ||||
| 											 | ||||
| 											String counterName = getCounternamebyCondition(conditionId.longValue()); | ||||
| 											if (counterName == Counter.Source.memory.toString()) { | ||||
| 												// calculate memory in percent | ||||
| 												Long profileId = asGroup.getProfileId(); | ||||
| 												AutoScaleVmProfileVO profileVo = _asProfileDao.findById(profileId); | ||||
| 												ServiceOfferingVO serviceOff = _serviceOfferingDao.findById(profileVo.getServiceOfferingId()); | ||||
| 												int maxRAM = serviceOff.getRamSize(); | ||||
| 
 | ||||
| 												// get current RAM percent | ||||
| 												coVal = coVal / maxRAM; | ||||
| 											} else { | ||||
| 												// cpu | ||||
| 												coVal = coVal * 100; | ||||
| 											} | ||||
| 											 | ||||
| 											// update data entry | ||||
| 											avgCounter.put(counterId, avgCounter.get(counterId)+ coVal); | ||||
| 											 | ||||
| 										} catch (Exception e) { | ||||
| 											e.printStackTrace(); | ||||
| 										} | ||||
| 									} | ||||
| 
 | ||||
| 									String scaleAction = getAutoscaleAction(avgCounter, asGroup.getId(), currentVM); | ||||
| 									if (scaleAction != null) { | ||||
| 										s_logger.debug("[AutoScale] Doing scale action: " + scaleAction + " for group " + asGroup.getId()); | ||||
| 										if (scaleAction.equals("scaleup")) { | ||||
| 											_asManager.doScaleUp(asGroup.getId(), 1); | ||||
| 										} else { | ||||
| 											_asManager.doScaleDown(asGroup.getId()); | ||||
| 										} | ||||
| 									} | ||||
| 								} | ||||
| 							} | ||||
| 
 | ||||
| 						} catch (Exception e) { | ||||
| 							e.printStackTrace(); | ||||
| 						} | ||||
| 
 | ||||
| 					} | ||||
| 				} | ||||
| 
 | ||||
| 			} catch (Throwable t) { | ||||
| 				s_logger.error("Error trying to monitor autoscaling", t); | ||||
| 			} | ||||
| 
 | ||||
| 		} | ||||
| 		 | ||||
| 		private String getAutoscaleAction(HashMap<Long, Double> avgCounter, long groupId, long currentVM) { | ||||
| 			 | ||||
| 			List<AutoScaleVmGroupPolicyMapVO> listMap = _asGroupPolicyDao.listByVmGroupId(groupId); | ||||
| 			if ( (listMap == null) || (listMap.size() == 0) ) | ||||
| 				return null; | ||||
| 			for (AutoScaleVmGroupPolicyMapVO asVmgPmap : listMap) { | ||||
| 				AutoScalePolicyVO policyVO = _asPolicyDao.findById(asVmgPmap.getPolicyId()); | ||||
| 				if (policyVO != null) { | ||||
| 					Integer quitetime = policyVO.getQuietTime(); | ||||
| 					long last_quitetime = policyVO.getLastQuiteTime().getTime(); | ||||
| 					long current_time = (new Date()).getTime(); | ||||
| 
 | ||||
| 					// check quite time for this policy | ||||
| 					if ((current_time - last_quitetime) >= (long) quitetime) { | ||||
| 
 | ||||
| 						// list all condition of this policy | ||||
| 						boolean bValid = true; | ||||
| 						List<ConditionVO> lstConditions = getConditionsbyPolicyId(policyVO.getId()); | ||||
| 						if ((lstConditions != null) && (lstConditions.size() > 0)) { | ||||
| 							// check whole conditions of this policy | ||||
| 							for (ConditionVO conditionVO : lstConditions) { | ||||
| 								long threholdValue = conditionVO.getThreshold(); | ||||
| 								Double sum = avgCounter.get(conditionVO.getCounterid()); | ||||
| 								Double avg = sum/ currentVM; | ||||
| 										 | ||||
| 								Operator op = conditionVO.getRelationalOperator(); | ||||
| 								boolean bConditionCheck = ((op == com.cloud.network.as.Condition.Operator.EQ) && (threholdValue == avg)) | ||||
| 										|| ((op == com.cloud.network.as.Condition.Operator.GE) && (avg >= threholdValue)) | ||||
| 										|| ((op == com.cloud.network.as.Condition.Operator.GT) && (avg > threholdValue)) | ||||
| 										|| ((op == com.cloud.network.as.Condition.Operator.LE) && (avg <= threholdValue)) | ||||
| 										|| ((op == com.cloud.network.as.Condition.Operator.LT) && (avg < threholdValue)); | ||||
| 
 | ||||
| 								if (!bConditionCheck) { | ||||
| 									bValid = false; | ||||
| 									break; | ||||
| 								} | ||||
| 							} | ||||
| 							if (bValid) { | ||||
| 								return policyVO.getAction(); | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			return null; | ||||
| 		} | ||||
| 		 | ||||
| 		private List<ConditionVO> getConditionsbyPolicyId(long policyId){ | ||||
| 			List<AutoScalePolicyConditionMapVO> conditionMap = _asConditionMapDao.findByPolicyId(policyId); | ||||
| 			if ( (conditionMap == null) || (conditionMap.size() == 0)) | ||||
| 				return null; | ||||
| 			 | ||||
| 			List<ConditionVO> lstResult = new ArrayList<ConditionVO>(); | ||||
| 			for (AutoScalePolicyConditionMapVO asPCmap : conditionMap) { | ||||
| 				lstResult.add(_asConditionDao.findById(asPCmap.getConditionId())); | ||||
| 			} | ||||
| 			 | ||||
| 			return lstResult; | ||||
| 		} | ||||
| 
 | ||||
| 		public List<Pair<String, Integer>> getPairofCounternameAndDuration( | ||||
| 				long groupId) { | ||||
| 			AutoScaleVmGroupVO groupVo = _asGroupDao.findById(groupId); | ||||
| 			if (groupVo == null) | ||||
| 				return null; | ||||
| 			List<Pair<String, Integer>> result = new ArrayList<Pair<String, Integer>>(); | ||||
| 			//list policy map | ||||
| 			List<AutoScaleVmGroupPolicyMapVO> groupPolicymap = _asGroupPolicyDao.listByVmGroupId(groupVo.getId()); | ||||
| 			if (groupPolicymap == null) | ||||
| 				return null; | ||||
| 			for (AutoScaleVmGroupPolicyMapVO gpMap : groupPolicymap) { | ||||
| 				//get duration | ||||
| 				AutoScalePolicyVO policyVo = _asPolicyDao.findById(gpMap.getPolicyId());				 | ||||
| 				Integer duration = policyVo.getDuration(); | ||||
| 				//get collection of counter name | ||||
| 				String counterNames = ""; | ||||
| 				List<AutoScalePolicyConditionMapVO> lstPCmap = _asConditionMapDao.findByPolicyId(policyVo.getId()); | ||||
| 				for (AutoScalePolicyConditionMapVO pcMap : lstPCmap) { | ||||
| 					String counterName = getCounternamebyCondition(pcMap.getConditionId()); | ||||
| 					 | ||||
| 					counterNames += counterName + "," + pcMap.getConditionId(); | ||||
| 				} | ||||
| 				// add to result | ||||
| 				Pair<String, Integer> pair = new Pair<String, Integer>(counterNames, duration); | ||||
| 				result.add(pair); | ||||
| 			} | ||||
| 
 | ||||
| 			return result; | ||||
| 		} | ||||
| 		 | ||||
| 		public String getCounternamebyCondition(long conditionId){ | ||||
| 			 | ||||
| 			ConditionVO condition = _asConditionDao.findById(conditionId); | ||||
| 			if (condition == null) | ||||
| 				return ""; | ||||
| 			 | ||||
| 			long counterId = condition.getCounterid(); | ||||
| 			CounterVO counter = _asCounterDao.findById(counterId); | ||||
| 			if (counter == null) | ||||
| 				return ""; | ||||
| 			 | ||||
| 			return counter.getSource().toString(); | ||||
| 		} | ||||
| 	} | ||||
| 	public StorageStats getStorageStats(long id) { | ||||
| 		return _storageStats.get(id); | ||||
| 	} | ||||
| 
 | ||||
| 	public HostStats getHostStats(long hostId){ | ||||
| 		return _hostStats.get(hostId); | ||||
| 	} | ||||
| 
 | ||||
| 	public StorageStats getStoragePoolStats(long id) { | ||||
| 		return _storagePoolStats.get(id); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -152,6 +152,7 @@ DROP TABLE IF EXISTS `cloud`.`template_s3_ref`; | ||||
| DROP TABLE IF EXISTS `cloud`.`nicira_nvp_router_map`; | ||||
| DROP TABLE IF EXISTS `cloud`.`external_bigswitch_vns_devices`; | ||||
| DROP TABLE IF EXISTS `cloud`.`autoscale_vmgroup_policy_map`; | ||||
| DROP TABLE IF EXISTS `cloud`.`autoscale_vmgroup_vm_map`; | ||||
| DROP TABLE IF EXISTS `cloud`.`autoscale_policy_condition_map`; | ||||
| DROP TABLE IF EXISTS `cloud`.`autoscale_vmgroups`; | ||||
| DROP TABLE IF EXISTS `cloud`.`autoscale_vmprofiles`; | ||||
|  | ||||
| @ -345,6 +345,7 @@ CREATE TABLE `cloud`.`autoscale_policies` ( | ||||
|   `account_id` bigint unsigned NOT NULL, | ||||
|   `duration` int unsigned NOT NULL, | ||||
|   `quiet_time` int unsigned NOT NULL, | ||||
|   `last_quiet_time` datetime DEFAULT NULL, | ||||
|   `action` varchar(15), | ||||
|   `created` datetime NOT NULL COMMENT 'date created', | ||||
|   `removed` datetime COMMENT 'date removed if not null', | ||||
| @ -366,6 +367,7 @@ CREATE TABLE `cloud`.`autoscale_vmgroups` ( | ||||
|   `max_members` int unsigned NOT NULL, | ||||
|   `member_port` int unsigned NOT NULL, | ||||
|   `interval` int unsigned NOT NULL, | ||||
|   `last_interval` datetime DEFAULT NULL, | ||||
|   `profile_id` bigint unsigned NOT NULL, | ||||
|   `state` varchar(255) NOT NULL COMMENT 'enabled or disabled, a vmgroup is disabled to stop autoscaling activity', | ||||
|   `created` datetime NOT NULL COMMENT 'date created', | ||||
| @ -401,10 +403,22 @@ CREATE TABLE `cloud`.`autoscale_vmgroup_policy_map` ( | ||||
|   INDEX `i_autoscale_vmgroup_policy_map__vmgroup_id`(`vmgroup_id`) | ||||
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8; | ||||
| 
 | ||||
| INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (1, UUID(), 'snmp','Linux User CPU - percentage', '1.3.6.1.4.1.2021.11.9.0', now()); | ||||
| INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (2, UUID(), 'snmp','Linux System CPU - percentage', '1.3.6.1.4.1.2021.11.10.0', now()); | ||||
| INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (3, UUID(), 'snmp','Linux CPU Idle - percentage', '1.3.6.1.4.1.2021.11.11.0', now()); | ||||
| INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (100, UUID(), 'netscaler','Response Time - microseconds', 'RESPTIME', now()); | ||||
| CREATE TABLE `cloud`.`autoscale_vmgroup_vm_map` ( | ||||
|   `id` bigint unsigned NOT NULL auto_increment, | ||||
|   `vmgroup_id` bigint unsigned NOT NULL, | ||||
|   `instance_id` bigint unsigned NOT NULL, | ||||
|   PRIMARY KEY  (`id`), | ||||
|   CONSTRAINT `fk_autoscale_vmgroup_vm_map__vmgroup_id` FOREIGN KEY `fk_autoscale_vmgroup_vm_map__vmgroup_id` (`vmgroup_id`) REFERENCES `autoscale_vmgroups` (`id`) ON DELETE CASCADE, | ||||
|   CONSTRAINT `fk_autoscale_vmgroup_vm_map__instance_id` FOREIGN KEY `fk_autoscale_vmgroup_vm_map__instance_id` (`instance_id`) REFERENCES `vm_instance` (`id`), | ||||
|   INDEX `i_autoscale_vmgroup_vm_map__vmgroup_id`(`vmgroup_id`) | ||||
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8; | ||||
| 
 | ||||
| --INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (1, UUID(), 'snmp','Linux User CPU - percentage', '1.3.6.1.4.1.2021.11.9.0', now()); | ||||
| --INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (2, UUID(), 'snmp','Linux System CPU - percentage', '1.3.6.1.4.1.2021.11.10.0', now()); | ||||
| --INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (3, UUID(), 'snmp','Linux CPU Idle - percentage', '1.3.6.1.4.1.2021.11.11.0', now()); | ||||
| --INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (100, UUID(), 'netscaler','Response Time - microseconds', 'RESPTIME', now()); | ||||
| INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (1, UUID(), 'cpu','Linux User CPU - percentage', '1.3.6.1.4.1.2021.11.9.0', now()); | ||||
| INSERT INTO `cloud`.`counter` (id, uuid, source, name, value,created) VALUES (2, UUID(), 'memory','Linux User RAM - percentage', '1.3.6.1.4.1.2021.11.10.0', now()); | ||||
| 
 | ||||
| CREATE TABLE  `cloud`.`user_ipv6_address` ( | ||||
|   `id` bigint unsigned NOT NULL UNIQUE auto_increment, | ||||
|  | ||||
| @ -25,7 +25,7 @@ region.id=1 | ||||
| # CloudStack database settings | ||||
| db.cloud.username=cloud | ||||
| db.cloud.password=cloud | ||||
| db.root.password= | ||||
| db.root.password=123 | ||||
| db.cloud.host=localhost | ||||
| db.cloud.port=3306 | ||||
| db.cloud.name=cloud | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user