Package com.dianping.cat.report.page.cache

Source Code of com.dianping.cat.report.page.cache.TransactionReportVistor

package com.dianping.cat.report.page.cache;

import org.apache.commons.lang.StringUtils;

import com.dianping.cat.consumer.event.model.entity.EventName;
import com.dianping.cat.consumer.event.model.entity.EventReport;
import com.dianping.cat.consumer.event.model.entity.EventType;
import com.dianping.cat.consumer.transaction.model.entity.Machine;
import com.dianping.cat.consumer.transaction.model.entity.TransactionName;
import com.dianping.cat.consumer.transaction.model.entity.TransactionReport;
import com.dianping.cat.consumer.transaction.model.entity.TransactionType;
import com.dianping.cat.consumer.transaction.model.transform.BaseVisitor;

public class TransactionReportVistor extends BaseVisitor {

  private CacheReport m_cacheReport = new CacheReport();

  private String m_currentIp;

  private String m_currentType;

  private EventReport m_eventReport;

  private String m_queryName;

  private String m_sortBy = "missed";

  private String m_type;

  public CacheReport getCacheReport() {
    return m_cacheReport;
  }

  private boolean isFit(String queryName, String methodName) {
    String[] args = queryName.split("\\|");

    if (args != null) {
      for (String str : args) {
        if (str.length() > 0 && methodName.toLowerCase().contains(str.trim().toLowerCase())) {
          return true;
        }
      }
    }
    return false;
  }

  public TransactionReportVistor setCurrentIp(String currentIp) {
    m_currentIp = currentIp;
    return this;
  }

  public TransactionReportVistor setEventReport(EventReport eventReport) {
    m_eventReport = eventReport;
    return this;
  }

  public TransactionReportVistor setQueryName(String queryName) {
    m_queryName = queryName;
    return this;
  }

  public TransactionReportVistor setSortBy(String sortBy) {
    if (sortBy != null) {
      m_sortBy = sortBy;
    }
    return this;
  }

  public TransactionReportVistor setType(String type) {
    m_type = type;
    return this;
  }

  @Override
  public void visitMachine(Machine machine) {
    if (machine.getIp().equalsIgnoreCase(m_currentIp)) {
      super.visitMachine(machine);
    }
  }

  @Override
  public void visitName(TransactionName transactionName) {
    String id = transactionName.getId();
    if (!StringUtils.isEmpty(m_type)) {
      if (StringUtils.isEmpty(m_queryName) || isFit(m_queryName, id)) {
        com.dianping.cat.consumer.event.model.entity.Machine machine = m_eventReport
              .findOrCreateMachine(m_currentIp);
        EventType eventType = machine.findOrCreateType(m_currentType);

        String arrays[] = id.split(":");
        String categroy = arrays[0];
        String method = "";

        if (arrays.length > 1) {
          method = arrays[1];
        }
        EventName eventName = new EventName();
        if (method.equals("get")) {
          eventName = eventType.findOrCreateName(categroy + ":missed");
        }
        m_cacheReport.addNewNameItem(transactionName, eventName);
      }
    }
  }

  @Override
  public void visitTransactionReport(TransactionReport transactionReport) {
    m_cacheReport.setSortBy(m_sortBy);

    super.visitTransactionReport(transactionReport);
    m_cacheReport.setDomain(transactionReport.getDomain());
    m_cacheReport.setDomainNames(transactionReport.getDomainNames());
    m_cacheReport.setStartTime(transactionReport.getStartTime());
    m_cacheReport.setEndTime(transactionReport.getEndTime());
    m_cacheReport.setIps(transactionReport.getIps());
  }

  @Override
  public void visitType(TransactionType transactionType) {
    String id = transactionType.getId();
    if (id.startsWith("Cache.")) {
      if (StringUtils.isEmpty(m_type)) {
        m_currentType = transactionType.getId();
        com.dianping.cat.consumer.event.model.entity.Machine machine = m_eventReport
              .findOrCreateMachine(m_currentIp);
        EventType eventType = machine.findOrCreateType(m_currentType);
        m_cacheReport.addNewTypeItem(transactionType, eventType);

        super.visitType(transactionType);
      } else if (id.equalsIgnoreCase(m_type)) {
        m_currentType = transactionType.getId();
        super.visitType(transactionType);
      }
    }
  }

}
TOP

Related Classes of com.dianping.cat.report.page.cache.TransactionReportVistor

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.