package com.eucalyptus.cluster.handlers;
import org.apache.log4j.Logger;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelPipelineCoverage;
import org.jboss.netty.channel.MessageEvent;
import com.eucalyptus.binding.BindingException;
import com.eucalyptus.bootstrap.Component;
import com.eucalyptus.cluster.Cluster;
import com.eucalyptus.cluster.VmTypes;
import com.eucalyptus.entities.VmType;
import com.eucalyptus.event.Event;
import com.eucalyptus.http.MappingHttpResponse;
import edu.ucsb.eucalyptus.msgs.DescribeResourcesResponseType;
import edu.ucsb.eucalyptus.msgs.DescribeResourcesType;
@ChannelPipelineCoverage( "one" )
public class ResourceStateHandler extends AbstractClusterMessageDispatcher {
private static Logger LOG = Logger.getLogger( NetworkStateHandler.class );
public ResourceStateHandler( Cluster cluster ) throws BindingException {
super( cluster );
}
@Override
public void trigger( ) {
DescribeResourcesType drMsg = new DescribeResourcesType( ).regarding( );
for ( VmType v : VmTypes.list( ) ) {
drMsg.getInstanceTypes( ).add( v.getAsVmTypeInfo( ) );
}
this.write( drMsg );
}
@Override
public void fireEvent( Event event ) {
super.fireTimedStatefulTrigger( event );
}
@Override
public void upstreamMessage( ChannelHandlerContext ctx, MessageEvent e ) {
if ( e.getMessage( ) instanceof MappingHttpResponse ) {
MappingHttpResponse resp = ( MappingHttpResponse ) e.getMessage( );
DescribeResourcesResponseType reply = ( DescribeResourcesResponseType ) resp.getMessage( );
if ( reply.get_return( ) ) {
this.getCluster( ).getNodeState( ).update( reply.getResources( ) );
LOG.debug( "Adding node service tags: " + reply.getServiceTags( ) );
this.getCluster( ).updateNodeInfo( reply.getServiceTags( ) );
}
this.verified = true;
}
}
@Override
public void advertiseEvent( Event event ) {}
}