Package com.taobao.top.analysis.node.connect

Source Code of com.taobao.top.analysis.node.connect.MasterConnectorHandler

/**
*
*/
package com.taobao.top.analysis.node.connect;


import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelEvent;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;

import com.taobao.top.analysis.node.component.MasterNode;
import com.taobao.top.analysis.node.event.GetTaskRequestEvent;
import com.taobao.top.analysis.node.event.MasterEventCode;
import com.taobao.top.analysis.node.event.MasterNodeEvent;
import com.taobao.top.analysis.node.event.SendMonitorInfoEvent;
import com.taobao.top.analysis.node.event.SendResultsRequestEvent;

/**
* @author fangweng
* @email: fangweng@taobao.com
* 2011-12-5 上午11:44:50
*
*/
public class MasterConnectorHandler extends SimpleChannelUpstreamHandler {
 
  private static final Log logger = LogFactory.getLog(MasterConnectorHandler.class);
 
  MasterNode masterNode;
  volatile Channel channel;
 
  public MasterConnectorHandler(MasterNode masterNode)
  {
    super();
    this.masterNode = masterNode;
  }
 
  @Override
    public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e)
            throws Exception {
        channel = e.getChannel();
    }
 
  @Override
  public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
      throws Exception {
   
   
    MasterNodeEvent nodeEvent = (MasterNodeEvent)e.getMessage();
   
    if (nodeEvent != null)
    {
      if (nodeEvent.getEventCode().equals(MasterEventCode.GET_TASK) ||
          nodeEvent.getEventCode().equals(MasterEventCode.SEND_RESULT) || nodeEvent.getEventCode().equals(MasterEventCode.SEND_MONITOR_INFO))
      {
        nodeEvent.setChannel(channel);
        masterNode.addEvent(nodeEvent);
       
      } else {
          if (logger.isInfoEnabled())
                    logger.info("receive message from slave : " + channel.getRemoteAddress() + ", squence : " + nodeEvent.getSequence());
      }
     
            if (nodeEvent.getEventCode().equals(MasterEventCode.GET_TASK)) {
                //INFO信息记录M/S通信内容
                if (logger.isInfoEnabled()) {
                    GetTaskRequestEvent requestEvent = (GetTaskRequestEvent) nodeEvent;
                    String jobName = requestEvent.getJobName();
                    int jobCount = requestEvent.getRequestJobCount();
                    StringBuffer stringBuffer = new StringBuffer("receive get_task event, jobName:");
                    if (jobName != null)
                        stringBuffer.append("jobName:").append(jobName).append(",");
                    stringBuffer.append("jobCount:").append(jobCount).append(",from:")
                        .append(channel.getRemoteAddress()).append(",squence:").append(nodeEvent.getSequence());
                    logger.info(stringBuffer.toString());
                }
            }
      if(nodeEvent.getEventCode().equals(MasterEventCode.SEND_RESULT)) {
          //INFO信息记录M/S通信内容
          if(logger.isInfoEnabled()) {
              SendResultsRequestEvent requestEvent = (SendResultsRequestEvent)nodeEvent;
                  StringBuffer stringBuffer = new StringBuffer("receive send_result event, result:{");
                  stringBuffer.append(requestEvent.getJobTaskResult().toString()).append("}");
                  stringBuffer.append("from slave:").append(channel.getRemoteAddress()).append(",squence:").append(nodeEvent.getSequence());
              logger.info(stringBuffer.toString());
          }
      }
      if(nodeEvent.getEventCode().equals(MasterEventCode.SEND_MONITOR_INFO)) {
         //INFO信息记录M/S通信内容
          if(logger.isInfoEnabled()) {
              SendMonitorInfoEvent requestEvent = (SendMonitorInfoEvent)nodeEvent;
                  StringBuffer stringBuffer = new StringBuffer("receive send_monitor_info event, result:{");
                  stringBuffer.append(requestEvent.getSlaveMonitorInfo().toString()).append("}");
                  stringBuffer.append("from slave:").append(channel.getRemoteAddress()).append(",squence:").append(nodeEvent.getSequence());
              logger.info(stringBuffer.toString());
          }
      }
    }
   
  }

  @Override
  public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)
      throws Exception {
   
    logger.error("Unexpected exception from downstream.channel:" + e.getChannel().getRemoteAddress().toString(),
                e.getCause());
   
    e.getChannel().close();
  }

  @Override
  public void handleUpstream(ChannelHandlerContext ctx, ChannelEvent event)
      throws Exception {
   
    if (event instanceof ChannelStateEvent)
    {
      logger.info(event.toString());
    }
   
    super.handleUpstream(ctx, event);
  }

}
TOP

Related Classes of com.taobao.top.analysis.node.connect.MasterConnectorHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.