/************************************************************************* * Copyright 2009-2013 Eucalyptus Systems, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see http://www.gnu.org/licenses/. * * Please contact Eucalyptus Systems, Inc., 6755 Hollister Ave., Goleta * CA 93117, USA or visit http://www.eucalyptus.com/licenses/ if you need * additional information or have any questions. ************************************************************************/ package com.eucalyptus.autoscaling.common.internal.instances; import static com.eucalyptus.autoscaling.common.AutoScalingMetadata.AutoScalingGroupMetadata; import java.util.Collection; import java.util.List; import java.util.Set; import com.eucalyptus.autoscaling.common.AutoScalingMetadatas; import com.eucalyptus.autoscaling.common.msgs.AutoScalingInstanceDetails; import com.eucalyptus.autoscaling.common.msgs.Instance; import com.eucalyptus.autoscaling.common.internal.metadata.AutoScalingMetadataException; import com.eucalyptus.util.Callback; import com.eucalyptus.auth.principal.OwnerFullName; import com.eucalyptus.util.Strings; import com.eucalyptus.util.TypeMapper; import com.google.common.base.Function; import com.google.common.base.Predicate; /** * */ public abstract class AutoScalingInstances { public abstract <T> List<T> list( OwnerFullName ownerFullName, Predicate<? super AutoScalingInstance> filter, Function<? super AutoScalingInstance,T> transform ) throws AutoScalingMetadataException; public abstract <T> List<T> listByGroup( OwnerFullName ownerFullName, String groupName, Function<? super AutoScalingInstance,T> transform ) throws AutoScalingMetadataException; public abstract <T> List<T> listByGroup( AutoScalingGroupMetadata group, Predicate<? super AutoScalingInstance> filter, Function<? super AutoScalingInstance,T> transform ) throws AutoScalingMetadataException; public abstract <T> List<T> listByState( LifecycleState lifecycleState, ConfigurationState configurationState, Function<? super AutoScalingInstance,T> transform ) throws AutoScalingMetadataException; public abstract <T> List<T> listUnhealthyByGroup( AutoScalingGroupMetadata group, Function<? super AutoScalingInstance,T> transform ) throws AutoScalingMetadataException; public abstract <T> T lookup( OwnerFullName ownerFullName, String instanceId, Function<? super AutoScalingInstance,T> transform ) throws AutoScalingMetadataException; public abstract void update( OwnerFullName ownerFullName, String instanceId, Callback<AutoScalingInstance> instanceUpdateCallback ) throws AutoScalingMetadataException; public abstract void markMissingInstancesUnhealthy( AutoScalingGroupMetadata group, Collection<String> instanceIds ) throws AutoScalingMetadataException; public abstract void markExpiredPendingUnhealthy( AutoScalingGroupMetadata group, Collection<String> instanceIds, long maxAge ) throws AutoScalingMetadataException; public abstract Set<String> verifyInstanceIds( String accountNumber, Collection<String> instanceIds ) throws AutoScalingMetadataException; public abstract void transitionState( AutoScalingGroupMetadata group, LifecycleState from, LifecycleState to, Collection<String> instanceIds ) throws AutoScalingMetadataException; public abstract void transitionConfigurationState( AutoScalingGroupMetadata group, ConfigurationState from, ConfigurationState to, Collection<String> instanceIds ) throws AutoScalingMetadataException; public abstract int registrationFailure( AutoScalingGroupMetadata group, Collection<String> instanceIds ) throws AutoScalingMetadataException; public abstract boolean delete( OwnerFullName ownerFullName, String instanceId ) throws AutoScalingMetadataException; public abstract boolean deleteByGroup( final AutoScalingGroupMetadata group ) throws AutoScalingMetadataException; public abstract AutoScalingInstance save( AutoScalingInstance autoScalingInstance ) throws AutoScalingMetadataException; public static Function<AutoScalingInstance,String> instanceId() { return AutoScalingMetadatas.toDisplayName(); } public static Function<AutoScalingInstanceCoreView,String> launchConfigurationName() { return AutoScalingInstanceProperties.LAUNCH_CONFIGURATION_NAME; } public static Function<AutoScalingInstanceCoreView,String> availabilityZone() { return AutoScalingInstanceProperties.AVAILABILITY_ZONE; } public static Function<AutoScalingInstanceGroupView,String> groupArn() { return AutoScalingInstanceGroupProperties.GROUP_ARN; } @TypeMapper public enum AutoScalingInstanceTransform implements Function<AutoScalingInstance, AutoScalingInstanceDetails> { INSTANCE; @Override public AutoScalingInstanceDetails apply( final AutoScalingInstance autoScalingInstance ) { final AutoScalingInstanceDetails details = new AutoScalingInstanceDetails(); details.setAutoScalingGroupName( autoScalingInstance.getAutoScalingGroupName() ); details.setAvailabilityZone( autoScalingInstance.getAvailabilityZone() ); details.setHealthStatus( Strings.toString( autoScalingInstance.getHealthStatus() ) ); details.setInstanceId( autoScalingInstance.getInstanceId() ); details.setLaunchConfigurationName( autoScalingInstance.getLaunchConfigurationName() ); details.setLifecycleState( Strings.toString( autoScalingInstance.getLifecycleState() ) ); details.setProtectedFromScaleIn( autoScalingInstance.getProtectedFromScaleIn() ); return details; } } @TypeMapper public enum AutoScalingInstanceCoreViewTransform implements Function<AutoScalingInstance, AutoScalingInstanceCoreView> { INSTANCE; @Override public AutoScalingInstanceCoreView apply( final AutoScalingInstance autoScalingInstance ) { return new AutoScalingInstanceCoreView( autoScalingInstance ); } } @TypeMapper public enum AutoScalingInstanceGroupViewTransform implements Function<AutoScalingInstance, AutoScalingInstanceGroupView> { INSTANCE; @Override public AutoScalingInstanceGroupView apply( final AutoScalingInstance autoScalingInstance ) { return new AutoScalingInstanceGroupView( autoScalingInstance ); } } @TypeMapper public enum AutoScalingInstanceSummaryTransform implements Function<AutoScalingInstance, Instance> { INSTANCE; @Override public Instance apply( final AutoScalingInstance autoScalingInstance ) { final Instance details = new Instance(); details.setAvailabilityZone( autoScalingInstance.getAvailabilityZone() ); details.setHealthStatus( Strings.toString( autoScalingInstance.getHealthStatus() ) ); details.setInstanceId( autoScalingInstance.getInstanceId() ); details.setLaunchConfigurationName( autoScalingInstance.getLaunchConfigurationName() ); details.setLifecycleState( Strings.toString( autoScalingInstance.getLifecycleState() ) ); details.setProtectedFromScaleIn( autoScalingInstance.getProtectedFromScaleIn( ) ); return details; } } private enum AutoScalingInstanceGroupProperties implements Function<AutoScalingInstanceGroupView,String> { GROUP_ARN { @Override public String apply( final AutoScalingInstanceGroupView autoScalingInstance ) { return AutoScalingMetadatas.toArn().apply( autoScalingInstance.getAutoScalingGroup() ); } }, } private enum AutoScalingInstanceProperties implements Function<AutoScalingInstanceCoreView,String> { AVAILABILITY_ZONE { @Override public String apply( final AutoScalingInstanceCoreView autoScalingInstance ) { return autoScalingInstance.getAvailabilityZone(); } }, LAUNCH_CONFIGURATION_NAME { @Override public String apply( final AutoScalingInstanceCoreView autoScalingInstance ) { return autoScalingInstance.getLaunchConfigurationName(); } }, } }