Package com.dianping.cat.report.page.model.spi.internal

Source Code of com.dianping.cat.report.page.model.spi.internal.BaseLocalModelService

package com.dianping.cat.report.page.model.spi.internal;

import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.unidal.lookup.annotation.Inject;

import com.dianping.cat.Cat;
import com.dianping.cat.Constants;
import com.dianping.cat.ServerConfigManager;
import com.dianping.cat.analysis.AbstractMessageAnalyzer;
import com.dianping.cat.analysis.MessageAnalyzer;
import com.dianping.cat.consumer.RealtimeConsumer;
import com.dianping.cat.message.Message;
import com.dianping.cat.message.Transaction;
import com.dianping.cat.message.spi.core.MessageConsumer;
import com.dianping.cat.report.page.model.spi.ModelService;
import com.dianping.cat.service.ModelPeriod;
import com.dianping.cat.service.ModelRequest;
import com.dianping.cat.service.ModelResponse;

public abstract class BaseLocalModelService<T> extends ModelServiceWithCalSupport implements ModelService<T>,
      Initializable {
  @Inject(type = MessageConsumer.class)
  private RealtimeConsumer m_consumer;

  private String m_defaultDomain = Constants.CAT;

  private String m_name;

  public BaseLocalModelService(String name) {
    m_name = name;
  }

  @Override
  public String getName() {
    return m_name;
  }

  @SuppressWarnings("unchecked")
  protected T getReport(ModelRequest request, ModelPeriod period, String domain) throws Exception {
    MessageAnalyzer analyzer = null;

    if (period.isCurrent() || period.isFuture()) {
      analyzer = m_consumer.getCurrentAnalyzer(m_name);
    } else if (period.isLast()) {
      analyzer = m_consumer.getLastAnalyzer(m_name);
    }

    if (analyzer == null) {
      return null;
    } else if (analyzer instanceof AbstractMessageAnalyzer) {
      AbstractMessageAnalyzer<T> a = (AbstractMessageAnalyzer<T>) analyzer;

      if (domain == null || domain.length() == 0) {
        return a.getReport(m_defaultDomain);
      } else {
        return a.getReport(domain);
      }
    }

    throw new RuntimeException("Internal error: this should not be reached!");
  }

  @Override
  public void initialize() throws InitializationException {
    ServerConfigManager manager = lookup(ServerConfigManager.class);

    m_defaultDomain = manager.getConsoleDefaultDomain();
  }

  @Override
  public ModelResponse<T> invoke(ModelRequest request) {
    ModelResponse<T> response = new ModelResponse<T>();
    Transaction t = Cat.newTransaction("ModelService", getClass().getSimpleName());

    try {
      ModelPeriod period = request.getPeriod();
      String domain = request.getDomain();
      T report = getReport(request, period, domain);

      t.addData("period", period);
      t.addData("domain", domain);

      if (report != null) {
        response.setModel(report);
        t.setStatus(Message.SUCCESS);
      } else {
        t.setStatus("NoReportFound");
      }
    } catch (Exception e) {
      Cat.logError(e);
      t.setStatus(e);
      response.setException(e);
    } finally {
      t.complete();
    }
    return response;
  }

  @Override
  public boolean isEligable(ModelRequest request) {
    ModelPeriod period = request.getPeriod();

    return !period.isHistorical();
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder(64);

    sb.append(getClass().getSimpleName()).append('[');
    sb.append("name=").append(m_name);
    sb.append(']');

    return sb.toString();
  }
}
TOP

Related Classes of com.dianping.cat.report.page.model.spi.internal.BaseLocalModelService

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.