MtasSolrComponentStatus.java

  1. package mtas.solr.handler.component.util;

  2. import java.io.IOException;
  3. import java.util.Map.Entry;

  4. import org.apache.commons.logging.Log;
  5. import org.apache.commons.logging.LogFactory;
  6. import org.apache.solr.common.params.ShardParams;
  7. import org.apache.solr.common.util.SimpleOrderedMap;
  8. import org.apache.solr.core.SolrInfoBean;
  9. import org.apache.solr.handler.component.ResponseBuilder;
  10. import org.apache.solr.handler.component.SearchComponent;
  11. import org.apache.solr.handler.component.ShardRequest;

  12. import mtas.codec.util.Status;
  13. import mtas.codec.util.CodecComponent.ComponentFields;
  14. import mtas.codec.util.CodecComponent.ComponentStatus;
  15. import mtas.solr.handler.MtasRequestHandler;
  16. import mtas.solr.handler.MtasRequestHandler.ShardInformation;
  17. import mtas.solr.handler.component.MtasSolrSearchComponent;

  18. /**
  19.  * The Class MtasSolrComponentStatus.
  20.  */
  21. public class MtasSolrComponentStatus
  22.     implements MtasSolrComponent<ComponentStatus> {

  23.   /** The Constant log. */
  24.   private static final Log log = LogFactory
  25.       .getLog(MtasSolrComponentStatus.class);

  26.   /** The search component. */
  27.   MtasSolrSearchComponent searchComponent;

  28.   /** The Constant NAME. */
  29.   public static final String NAME = "status";

  30.   /** The Constant PARAM_MTAS_STATUS. */
  31.   public static final String PARAM_MTAS_STATUS = MtasSolrSearchComponent.PARAM_MTAS
  32.       + "." + NAME;

  33.   /** The Constant NAME_MTAS_STATUS_KEY. */
  34.   public static final String NAME_MTAS_STATUS_KEY = "key";

  35.   public static final String NAME_MTAS_STATUS_MTASHANDLER = "mtasHandler";

  36.   public static final String NAME_MTAS_STATUS_NUMBEROFSEGMENTS = "numberOfSegments";
  37.   public static final String NAME_MTAS_STATUS_NUMBEROFDOCUMENTS = "numberOfDocuments";

  38.   /**
  39.    * Instantiates a new mtas solr component status.
  40.    *
  41.    * @param searchComponent
  42.    *          the search component
  43.    */
  44.   public MtasSolrComponentStatus(MtasSolrSearchComponent searchComponent) {
  45.     this.searchComponent = searchComponent;
  46.   }

  47.   /*
  48.    * (non-Javadoc)
  49.    *
  50.    * @see
  51.    * mtas.solr.handler.component.util.MtasSolrComponent#prepare(org.apache.solr.
  52.    * handler.component.ResponseBuilder,
  53.    * mtas.codec.util.CodecComponent.ComponentFields)
  54.    */
  55.   @Override
  56.   public void prepare(ResponseBuilder rb, ComponentFields mtasFields)
  57.       throws IOException {
  58.     mtasFields.doStatus = true;
  59.     String key = rb.req.getParams()
  60.         .get(PARAM_MTAS_STATUS + "." + NAME_MTAS_STATUS_KEY, null);
  61.     boolean getHandler = rb.req.getParams()
  62.         .getBool(MtasSolrComponentStatus.PARAM_MTAS_STATUS + "."
  63.             + NAME_MTAS_STATUS_MTASHANDLER, false);
  64.     boolean getNumberOfDocuments = rb.req.getParams()
  65.         .getBool(MtasSolrComponentStatus.PARAM_MTAS_STATUS + "."
  66.             + NAME_MTAS_STATUS_NUMBEROFDOCUMENTS, false);
  67.     boolean getNumberOfSegments = rb.req.getParams()
  68.         .getBool(MtasSolrComponentStatus.PARAM_MTAS_STATUS + "."
  69.             + NAME_MTAS_STATUS_NUMBEROFSEGMENTS, false);
  70.     mtasFields.status = new ComponentStatus(rb.req.getCore().getName(), key,
  71.         getHandler, getNumberOfDocuments, getNumberOfSegments);
  72.     mtasFields.status.numberOfDocuments = rb.req.getSearcher().getRawReader()
  73.         .numDocs();
  74.     mtasFields.status.numberOfSegments = rb.req.getSearcher().getRawReader()
  75.         .leaves().size();
  76.   }

  77.   /*
  78.    * (non-Javadoc)
  79.    *
  80.    * @see
  81.    * mtas.solr.handler.component.util.MtasSolrComponent#create(mtas.codec.util.
  82.    * CodecComponent.BasicComponent, java.lang.Boolean)
  83.    */
  84.   @Override
  85.   public SimpleOrderedMap<Object> create(ComponentStatus status, Boolean encode)
  86.       throws IOException {
  87.     SimpleOrderedMap<Object> mtasStatusResponse = new SimpleOrderedMap<>();
  88.     if (status.getMtasHandler) {
  89.       mtasStatusResponse.add(NAME_MTAS_STATUS_MTASHANDLER, status.handler);
  90.     }
  91.     if (status.getNumberOfDocuments) {
  92.       mtasStatusResponse.add(NAME_MTAS_STATUS_NUMBEROFDOCUMENTS,
  93.           status.numberOfDocuments);
  94.     }
  95.     if (status.getNumberOfSegments) {
  96.       mtasStatusResponse.add(NAME_MTAS_STATUS_NUMBEROFSEGMENTS,
  97.           status.numberOfSegments);
  98.     }
  99.     if(mtasStatusResponse.size()>0) {
  100.       mtasStatusResponse.add(ShardInformation.NAME_NAME, status.name);
  101.       if (status.key != null) {
  102.         mtasStatusResponse.add(NAME_MTAS_STATUS_KEY, status.key);
  103.       }
  104.       return mtasStatusResponse;
  105.     } else {
  106.       return null;
  107.     }  
  108.   }

  109.   /*
  110.    * (non-Javadoc)
  111.    *
  112.    * @see
  113.    * mtas.solr.handler.component.util.MtasSolrComponent#modifyRequest(org.apache
  114.    * .solr.handler.component.ResponseBuilder,
  115.    * org.apache.solr.handler.component.SearchComponent,
  116.    * org.apache.solr.handler.component.ShardRequest)
  117.    */
  118.   @Override
  119.   public void modifyRequest(ResponseBuilder rb, SearchComponent who,
  120.       ShardRequest sreq) {
  121.     sreq.params.remove(PARAM_MTAS_STATUS + "." + NAME_MTAS_STATUS_KEY);
  122.   }

  123.   /*
  124.    * (non-Javadoc)
  125.    *
  126.    * @see
  127.    * mtas.solr.handler.component.util.MtasSolrComponent#finishStage(org.apache.
  128.    * solr.handler.component.ResponseBuilder)
  129.    */
  130.   @Override
  131.   public void finishStage(ResponseBuilder rb) {
  132.     // TODO Auto-generated method stub

  133.   }

  134.   /*
  135.    * (non-Javadoc)
  136.    *
  137.    * @see
  138.    * mtas.solr.handler.component.util.MtasSolrComponent#distributedProcess(org.
  139.    * apache.solr.handler.component.ResponseBuilder,
  140.    * mtas.codec.util.CodecComponent.ComponentFields)
  141.    */
  142.   @Override
  143.   public void distributedProcess(ResponseBuilder rb, ComponentFields mtasFields)
  144.       throws IOException {
  145.     // TODO Auto-generated method stub

  146.   }

  147. }