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

Source Code of com.dianping.cat.report.task.alert.summary.FailureSummaryContentGenerator

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

import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.unidal.lookup.annotation.Inject;

import com.dianping.cat.Cat;
import com.dianping.cat.consumer.problem.ProblemAnalyzer;
import com.dianping.cat.consumer.problem.model.entity.ProblemReport;
import com.dianping.cat.report.page.PieChart.Item;
import com.dianping.cat.report.page.model.spi.ModelService;
import com.dianping.cat.report.page.problem.PieGraphChartVisitor;
import com.dianping.cat.report.page.problem.ProblemStatistics;
import com.dianping.cat.report.page.problem.ProblemStatistics.StatusStatistics;
import com.dianping.cat.report.page.problem.ProblemStatistics.TypeStatistics;
import com.dianping.cat.service.ModelRequest;
import com.dianping.cat.service.ModelResponse;

public class FailureSummaryContentGenerator extends SummaryContentGenerator {

  public static final String ID = "FailureDecorator";

  @Inject(type = ModelService.class, value = ProblemAnalyzer.ID)
  private ModelService<ProblemReport> m_service;

  private void addDistributeInfo(Map<Object, Object> resultMap, ProblemReport report) {
    PieGraphChartVisitor pieChart = new PieGraphChartVisitor("error", null);
    Map<Object, Object> distributes = new HashMap<Object, Object>();

    pieChart.visitProblemReport(report);
    for (Item item : pieChart.getPieChart().getItems()) {
      distributes.put(item.getTitle(), item.getNumber());
    }
    resultMap.put("distributeMap", distributes);
  }

  private void addFailureInfo(Map<Object, Object> resultMap, ProblemReport report) {
    ProblemStatistics problemStatistics = new ProblemStatistics();
    problemStatistics.setAllIp(true);
    problemStatistics.visitProblemReport(report);
    TypeStatistics failureStatus = problemStatistics.getStatus().get("error");

    if (failureStatus != null) {
      Map<Object, Object> statusMap = new HashMap<Object, Object>();

      for (StatusStatistics status : failureStatus.getStatus().values()) {
        statusMap.put(status.getStatus(), status.getCount());
      }

      resultMap.put("count", failureStatus.getCount());
      resultMap.put("statusMap", statusMap);
    }
  }

  @Override
  public Map<Object, Object> generateModel(String domain, Date endTime) {
    Map<Object, Object> result = new HashMap<Object, Object>();
    ModelRequest request = new ModelRequest(domain, getCurrentHour()).setProperty("queryType", "view");
    request.setProperty("type", "error");
    ProblemReport report = null;

    if (m_service.isEligable(request)) {
      ModelResponse<ProblemReport> response = m_service.invoke(request);
      report = response.getModel();
    }

    try {
      addFailureInfo(result, report);
      addDistributeInfo(result, report);
    } catch (Exception ex) {
      Cat.logError(ex);
    }
    return result;
  }

  private long getCurrentHour() {
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);

    return cal.getTimeInMillis();
  }

  @Override
  public String getID() {
    return ID;
  }

  @Override
  protected String getTemplateAddress() {
    return "errorInfo.ftl";
  }

}
TOP

Related Classes of com.dianping.cat.report.task.alert.summary.FailureSummaryContentGenerator

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.