Package edu.berkeley.chukwa_xtrace

Source Code of edu.berkeley.chukwa_xtrace.XtrAdaptor

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package edu.berkeley.chukwa_xtrace;

import org.apache.hadoop.chukwa.*;
import org.apache.hadoop.chukwa.datacollection.adaptor.AbstractAdaptor;
import org.apache.hadoop.chukwa.datacollection.adaptor.Adaptor;
import org.apache.hadoop.chukwa.datacollection.adaptor.AdaptorException;
import org.apache.hadoop.chukwa.datacollection.adaptor.AdaptorShutdownPolicy;
import org.apache.log4j.Logger;
import edu.berkeley.xtrace.server.*;
import edu.berkeley.xtrace.XTraceException;
import java.util.concurrent.*;

/**
* Adaptor that wraps an xtrace report source, so that xtrace messages
* can get picked up by the chukwa agent.
* Takes one mandatory param, the class name of the report source,
* implicitly inside package edu.berkeley.xtrace.server
*
*/
public class XtrAdaptor extends AbstractAdaptor implements Runnable {
 
 
  ReportSource rs;
  String rsName;
  Thread pump = new Thread(this);
  Thread reportSourceThread;
  BlockingQueue<String> q = new ArrayBlockingQueue<String>(1000);
  volatile boolean stopping = false;
  long offset = 0;
  static Logger log = Logger.getLogger(XtrAdaptor.class);
 
  static final String XTR_RS_PACKAGE = "edu.berkeley.xtrace.server.";
  /**
   * Get an xtrace report source, of name classname
   * @param classname
   * @return a report source. Defaults to UdpReportSource on error.
   */
  static ReportSource getXtrReportSource(String name) {
    try {
    Object obj = Class.forName(XTR_RS_PACKAGE + name).newInstance();
    if (ReportSource.class.isInstance(obj)) {
      return (ReportSource) obj;
    } else
      return new UdpReportSource();
    } catch(Exception e) {
      log.warn(e);
      return new UdpReportSource();
    }
  }
 
  /*
   * This is effectively the main thread associated with the adaptor;
   * however, each ReportSource separately might have a thread.
   */
  public void run() {
    try {
      log.info("starting Pump Thread");
      while(!stopping) {
        String report = q.take();
        log.info("got a report");
        byte[] data = report.getBytes();
        offset += data.length;
        ChunkImpl i = new ChunkImpl(type, "xtrace", offset, data, this);
        dest.add(i);
      }
    } catch(InterruptedException e) {
     
    }
    log.info("XtrAdaptor stopping");
  }

  @Override
  public void start( long offset) throws AdaptorException {

    this.offset = offset;
    try{
      rs.initialize();
      rs.setReportQueue(q);
      reportSourceThread = new Thread(rs);
      reportSourceThread.start();
      pump.start();
      log.info("starting Report Source");
    } catch(XTraceException e) {
      throw new AdaptorException(e);
    }
  }

  @Override
  public String getCurrentStatus() throws AdaptorException {
    return type +" "+ rsName;
  }

  @Override
  public String parseArgs(String params) {
    rs = getXtrReportSource(params)
    rsName = params;
    return params; //no optional params
  }

  @Override
  public void hardStop() throws AdaptorException {
    shutdown(AdaptorShutdownPolicy.HARD_STOP);
  }

  @Override
  public long shutdown() throws AdaptorException {
    return shutdown(AdaptorShutdownPolicy.GRACEFULLY);
  }

  @Override
  public long shutdown(AdaptorShutdownPolicy shutdownPolicy)
      throws AdaptorException {
    switch(shutdownPolicy) {
    case HARD_STOP:
    case GRACEFULLY:
    case WAIT_TILL_FINISHED:
      rs.shutdown();
      stopping = true;
    }
    return offset;
  }

}
TOP

Related Classes of edu.berkeley.chukwa_xtrace.XtrAdaptor

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.