Package com.dianping.cat.report.task.state

Source Code of com.dianping.cat.report.task.state.StateReportBuilder$ClearDetailInfo

package com.dianping.cat.report.task.state;

import java.util.Date;

import org.unidal.lookup.annotation.Inject;

import com.dianping.cat.Cat;
import com.dianping.cat.configuration.NetworkInterfaceManager;
import com.dianping.cat.consumer.state.StateAnalyzer;
import com.dianping.cat.consumer.state.model.entity.ProcessDomain;
import com.dianping.cat.consumer.state.model.entity.StateReport;
import com.dianping.cat.consumer.state.model.transform.BaseVisitor;
import com.dianping.cat.consumer.state.model.transform.DefaultNativeBuilder;
import com.dianping.cat.core.dal.DailyReport;
import com.dianping.cat.core.dal.MonthlyReport;
import com.dianping.cat.core.dal.WeeklyReport;
import com.dianping.cat.helper.TimeHelper;
import com.dianping.cat.report.service.ReportServiceManager;
import com.dianping.cat.report.task.TaskHelper;
import com.dianping.cat.report.task.spi.ReportTaskBuilder;

public class StateReportBuilder implements ReportTaskBuilder {

  public static final String ID = StateAnalyzer.ID;

  @Inject
  protected ReportServiceManager m_reportService;

  @Override
  public boolean buildDailyTask(String name, String domain, Date period) {
    StateReport stateReport = queryHourlyReportsByDuration(name, domain, period, TaskHelper.tomorrowZero(period));
    DailyReport report = new DailyReport();

    report.setContent("");
    report.setCreationDate(new Date());
    report.setDomain(domain);
    report.setIp(NetworkInterfaceManager.INSTANCE.getLocalHostAddress());
    report.setName(name);
    report.setPeriod(period);
    report.setType(1);
    byte[] binaryContent = DefaultNativeBuilder.build(stateReport);
    return m_reportService.insertDailyReport(report, binaryContent);
  }

  @Override
  public boolean buildHourlyTask(String name, String domain, Date period) {
    throw new RuntimeException("State report don't support HourReport!");
  }

  @Override
  public boolean buildMonthlyTask(String name, String domain, Date period) {
    StateReport stateReport = queryDailyReportsByDuration(domain, period, TaskHelper.nextMonthStart(period));
    MonthlyReport report = new MonthlyReport();

    report.setContent("");
    report.setCreationDate(new Date());
    report.setDomain(domain);
    report.setIp(NetworkInterfaceManager.INSTANCE.getLocalHostAddress());
    report.setName(name);
    report.setPeriod(period);
    report.setType(1);
    byte[] binaryContent = DefaultNativeBuilder.build(stateReport);
    return m_reportService.insertMonthlyReport(report, binaryContent);
  }

  @Override
  public boolean buildWeeklyTask(String name, String domain, Date period) {
    Date start = period;
    Date end = new Date(start.getTime() + TimeHelper.ONE_DAY * 7);

    StateReport stateReport = queryDailyReportsByDuration(domain, start, end);
    WeeklyReport report = new WeeklyReport();

    report.setContent("");
    report.setCreationDate(new Date());
    report.setDomain(domain);
    report.setIp(NetworkInterfaceManager.INSTANCE.getLocalHostAddress());
    report.setName(name);
    report.setPeriod(period);
    report.setType(1);
    byte[] binaryContent = DefaultNativeBuilder.build(stateReport);
    return m_reportService.insertWeeklyReport(report, binaryContent);
  }

  private StateReport queryDailyReportsByDuration(String domain, Date start, Date end) {
    long startTime = start.getTime();
    long endTime = end.getTime();
    HistoryStateReportMerger merger = new HistoryStateReportMerger(new StateReport(domain));

    for (; startTime < endTime; startTime += TimeHelper.ONE_DAY) {
      try {
        StateReport reportModel = m_reportService.queryStateReport(domain, new Date(startTime), new Date(startTime
              + TimeHelper.ONE_DAY));

        reportModel.accept(merger);
      } catch (Exception e) {
        Cat.logError(e);
      }
    }
    StateReport stateReport = merger.getStateReport();

    new ClearDetailInfo().visitStateReport(stateReport);
    stateReport.setStartTime(start);
    stateReport.setEndTime(end);
    return stateReport;
  }

  private StateReport queryHourlyReportsByDuration(String name, String domain, Date period, Date endDate) {
    long startTime = period.getTime();
    long endTime = endDate.getTime();
    HistoryStateReportMerger merger = new HistoryStateReportMerger(new StateReport(domain));

    for (; startTime < endTime; startTime = startTime + TimeHelper.ONE_HOUR) {
      Date date = new Date(startTime);
      StateReport reportModel = m_reportService.queryStateReport(domain, date, new Date(date.getTime()
            + TimeHelper.ONE_HOUR));

      reportModel.accept(merger);
    }
    StateReport stateReport = merger.getStateReport();

    new ClearDetailInfo().visitStateReport(stateReport);
    stateReport.setStartTime(period);
    stateReport.setEndTime(endDate);
    return stateReport;
  }

  public static class ClearDetailInfo extends BaseVisitor {

    @Override
    public void visitProcessDomain(ProcessDomain processDomain) {
      processDomain.getDetails().clear();
    }
  }

}
TOP

Related Classes of com.dianping.cat.report.task.state.StateReportBuilder$ClearDetailInfo

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.