Package com.dianping.cat.consumer.problem

Source Code of com.dianping.cat.consumer.problem.ProblemAnalyzer

package com.dianping.cat.consumer.problem;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
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.Constants;
import com.dianping.cat.analysis.AbstractMessageAnalyzer;
import com.dianping.cat.consumer.problem.model.entity.Machine;
import com.dianping.cat.consumer.problem.model.entity.ProblemReport;
import com.dianping.cat.message.spi.MessageTree;
import com.dianping.cat.service.DefaultReportManager.StoragePolicy;
import com.dianping.cat.service.ReportManager;

public class ProblemAnalyzer extends AbstractMessageAnalyzer<ProblemReport> implements LogEnabled, Initializable {
  public static final String ID = "problem";

  @Inject(ID)
  private ReportManager<ProblemReport> m_reportManager;

  @Inject
  private ProblemDelegate m_problemDelegate;

  @Inject
  private List<ProblemHandler> m_handlers;

  @Override
  public void doCheckpoint(boolean atEnd) {
    if (atEnd && !isLocalMode()) {
      m_reportManager.storeHourlyReports(getStartTime(), StoragePolicy.FILE_AND_DB);
    } else {
      m_reportManager.storeHourlyReports(getStartTime(), StoragePolicy.FILE);
    }
  }

  @Override
  public void enableLogging(Logger logger) {
    m_logger = logger;
  }

  @Override
  public ProblemReport getReport(String domain) {
    if (!Constants.ALL.equals(domain)) {
      ProblemReport report = m_reportManager.getHourlyReport(getStartTime(), domain, false);

      report.getDomainNames().addAll(m_reportManager.getDomains(getStartTime()));

      return report;
    } else {
      Map<String, ProblemReport> reports = m_reportManager.getHourlyReports(getStartTime());

      return m_problemDelegate.createAggregatedReport(reports);
    }
  }

  @Override
  public void initialize() throws InitializationException {
    // to work around a performance issue within plexus
    m_handlers = new ArrayList<ProblemHandler>(m_handlers);
  }

  protected void loadReports() {
    m_reportManager.loadHourlyReports(getStartTime(), StoragePolicy.FILE);
  }

  @Override
  public void process(MessageTree tree) {
    String domain = tree.getDomain();
    ProblemReport report = m_reportManager.getHourlyReport(getStartTime(), domain, true);

    report.addIp(tree.getIpAddress());
    Machine machine = report.findOrCreateMachine(tree.getIpAddress());

    for (ProblemHandler handler : m_handlers) {
      handler.handle(machine, tree);
    }
  }

}
TOP

Related Classes of com.dianping.cat.consumer.problem.ProblemAnalyzer

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.