Package com.dianping.cat.report.service.impl

Source Code of com.dianping.cat.report.service.impl.MetricReportService

package com.dianping.cat.report.service.impl;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.unidal.dal.jdbc.DalNotFoundException;
import org.unidal.lookup.annotation.Inject;

import com.dianping.cat.Cat;
import com.dianping.cat.consumer.advanced.dal.BusinessReport;
import com.dianping.cat.consumer.advanced.dal.BusinessReportDao;
import com.dianping.cat.consumer.advanced.dal.BusinessReportEntity;
import com.dianping.cat.consumer.metric.MetricAnalyzer;
import com.dianping.cat.consumer.metric.model.entity.MetricItem;
import com.dianping.cat.consumer.metric.model.entity.MetricReport;
import com.dianping.cat.consumer.metric.model.entity.Point;
import com.dianping.cat.consumer.metric.model.entity.Segment;
import com.dianping.cat.consumer.metric.model.transform.DefaultNativeParser;
import com.dianping.cat.message.Event;
import com.dianping.cat.report.page.model.metric.MetricReportMerger;
import com.dianping.cat.report.service.AbstractReportService;

public class MetricReportService extends AbstractReportService<MetricReport> {

  @Inject
  private BusinessReportDao m_businessReportDao;

  @Override
  public MetricReport makeReport(String domain, Date start, Date end) {
    MetricReport report = new MetricReport(domain);

    report.setStartTime(start);
    report.setEndTime(end);
    return report;
  }

  @Override
  public MetricReport queryDailyReport(String domain, Date start, Date end) {
    throw new RuntimeException("Metric report don't support daily report");
  }

  @Override
  public MetricReport queryHourlyReport(String group, Date start, Date end) {
    MetricReportMerger merger = new MetricReportMerger(new MetricReport(group));

    try {
      List<BusinessReport> reports = m_businessReportDao.findAllByPeriodProductLineName(start, group,
            BusinessReportEntity.READSET_FULL);

      for (BusinessReport report : reports) {
        byte[] content = report.getContent();

        try {
          MetricReport reportModel = DefaultNativeParser.parse(content);

          reportModel.accept(merger);
        } catch (Exception e) {
          Cat.logError(e);
          Cat.getProducer().logEvent("ErrorXML", MetricAnalyzer.ID, Event.SUCCESS,
                report.getProductLine() + " " + report.getPeriod() + " " + report.getId());
        }
      }
    } catch (DalNotFoundException e) {
      m_logger.warn(this.getClass().getSimpleName() + " " + group + " " + start + " " + end);
    } catch (Exception e) {
      Cat.logError(e);
    }
    MetricReport metricReport = merger.getMetricReport();

    metricReport.setStartTime(start);
    metricReport.setEndTime(new Date(end.getTime() - 1));
    return transform(metricReport);
  }

  @Override
  public MetricReport queryMonthlyReport(String domain, Date start) {
    throw new RuntimeException("Metric report don't support monthly report");
  }

  @Override
  public MetricReport queryWeeklyReport(String domain, Date start) {
    throw new RuntimeException("Metric report don't support weekly report");
  }

  public MetricReport transform(MetricReport report) {
    Map<String, MetricItem> items = report.getMetricItems();

    for (Entry<String, MetricItem> item : items.entrySet()) {
      MetricItem metricItem = item.getValue();
      Map<Integer, Segment> segs = metricItem.getSegments();

      if (segs.size() == 0) {
        Map<Integer, Point> oldPoints = metricItem.findOrCreateAbtest("-1").findOrCreateGroup("").getPoints();

        for (Point point : oldPoints.values()) {
          Segment seg = new Segment();

          seg.setId(point.getId());
          seg.setCount(point.getCount());
          seg.setAvg(point.getAvg());
          seg.setSum(point.getSum());
          segs.put(seg.getId(), seg);
        }
      }
    }

    return report;
  }

}
TOP

Related Classes of com.dianping.cat.report.service.impl.MetricReportService

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.