Package com.dianping.cat.report.task.alert.exception

Source Code of com.dianping.cat.report.task.alert.exception.TopReportVisitor

package com.dianping.cat.report.task.alert.exception;

import com.dianping.cat.consumer.top.model.entity.Domain;
import com.dianping.cat.consumer.top.model.entity.Error;
import com.dianping.cat.consumer.top.model.entity.Segment;
import com.dianping.cat.consumer.top.model.entity.TopReport;
import com.dianping.cat.consumer.top.model.transform.BaseVisitor;
import com.dianping.cat.home.alert.report.entity.AlertReport;
import com.dianping.cat.home.dependency.exception.entity.ExceptionExclude;
import com.dianping.cat.home.dependency.exception.entity.ExceptionLimit;
import com.dianping.cat.system.config.ExceptionConfigManager;

public class TopReportVisitor extends BaseVisitor {

  private ExceptionConfigManager m_exceptionConfigManager;

  private AlertReport m_report;

  private String m_currentDomain;

  private long m_totalSegmentException;

  private static final String TOTAL_EXCEPTION_ALERT = "TotalExceptionAlert";

  public TopReportVisitor setExceptionConfigManager(ExceptionConfigManager exceptionConfigManager) {
    m_exceptionConfigManager = exceptionConfigManager;
    return this;
  }

  public TopReportVisitor setReport(AlertReport report) {
    m_report = report;
    return this;
  }

  @Override
  public void visitDomain(Domain domain) {
    m_currentDomain = domain.getName();
    super.visitDomain(domain);
  }

  @Override
  public void visitError(Error error) {

    ExceptionExclude exceptionExclude = m_exceptionConfigManager.queryDomainExceptionExclude(m_currentDomain,
          error.getId());

    if (exceptionExclude != null) {
      return;
    }

    int warnLimit = -1;
    int errorLimit = -1;
    int count = error.getCount();
    ExceptionLimit exceptionLimit = m_exceptionConfigManager
          .queryDomainExceptionLimit(m_currentDomain, error.getId());

    m_totalSegmentException += count;

    if (exceptionLimit != null) {
      warnLimit = exceptionLimit.getWarning();
      errorLimit = exceptionLimit.getError();
    }

    if (errorLimit > 0 & warnLimit > 0 & count >= Math.min(warnLimit, errorLimit)) {

      com.dianping.cat.home.alert.report.entity.Domain domain = m_report.findOrCreateDomain(m_currentDomain);
      domain.setName(m_currentDomain);

      com.dianping.cat.home.alert.report.entity.Exception exception = domain.findOrCreateException(error.getId());

      if (errorLimit > 0 && count >= errorLimit) {
        exception.incErrorNumber();
        domain.incErrorNumber();
      } else if (warnLimit > 0 && count >= warnLimit) {
        exception.incWarnNumber();
        domain.incWarnNumber();
      }
    }
  }

  @Override
  public void visitSegment(Segment segment) {
    m_totalSegmentException = 0;

    super.visitSegment(segment);

    ExceptionLimit exceptionLimit = m_exceptionConfigManager.queryDomainTotalLimit(m_currentDomain);
    int warnLimit = -1;
    int errorLimit = -1;

    if (exceptionLimit != null) {
      warnLimit = exceptionLimit.getWarning();
      errorLimit = exceptionLimit.getError();
    }

    if (errorLimit > 0 & warnLimit > 0 & m_totalSegmentException >= Math.min(warnLimit, errorLimit)) {
      com.dianping.cat.home.alert.report.entity.Domain domain = m_report.findOrCreateDomain(m_currentDomain);
      com.dianping.cat.home.alert.report.entity.Exception exception = domain
            .findOrCreateException(TOTAL_EXCEPTION_ALERT);

      if (m_totalSegmentException >= errorLimit) {
        domain.incErrorNumber();
        exception.incErrorNumber();
      } else if (m_totalSegmentException >= warnLimit) {
        domain.incWarnNumber();
        exception.incWarnNumber();
      }
    }
  }

  @Override
  public void visitTopReport(TopReport topReport) {
    super.visitTopReport(topReport);
  }
}
TOP

Related Classes of com.dianping.cat.report.task.alert.exception.TopReportVisitor

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.