Package com.dianping.cat.report.page.matrix

Source Code of com.dianping.cat.report.page.matrix.Handler

package com.dianping.cat.report.page.matrix;

import java.io.IOException;
import java.util.Date;
import java.util.Set;

import javax.servlet.ServletException;

import org.unidal.lookup.annotation.Inject;
import org.unidal.web.mvc.PageHandler;
import org.unidal.web.mvc.annotation.InboundActionMeta;
import org.unidal.web.mvc.annotation.OutboundActionMeta;
import org.unidal.web.mvc.annotation.PayloadMeta;

import com.dianping.cat.consumer.matrix.MatrixAnalyzer;
import com.dianping.cat.consumer.matrix.model.entity.MatrixReport;
import com.dianping.cat.helper.TimeHelper;
import com.dianping.cat.report.ReportPage;
import com.dianping.cat.report.page.PayloadNormalizer;
import com.dianping.cat.report.page.model.spi.ModelService;
import com.dianping.cat.report.service.ReportServiceManager;
import com.dianping.cat.service.ModelRequest;
import com.dianping.cat.service.ModelResponse;

public class Handler implements PageHandler<Context> {

  @Inject
  private ReportServiceManager m_reportService;

  @Inject
  private JspViewer m_jspViewer;

  @Inject
  private PayloadNormalizer m_normalizePayload;

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

  private MatrixReport getHourlyReport(Payload payload) {
    String domain = payload.getDomain();
    String ipAddress = payload.getIpAddress();
    ModelRequest request = new ModelRequest(domain, payload.getDate()) //
          .setProperty("ip", ipAddress);

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

      if (payload.getPeriod().isLast()) {
        Set<String> domains = m_reportService.queryAllDomainNames(new Date(payload.getDate()),
              new Date(payload.getDate() + TimeHelper.ONE_HOUR), MatrixAnalyzer.ID);
        Set<String> domainNames = report.getDomainNames();

        domainNames.addAll(domains);
      }
      return report;
    } else {
      throw new RuntimeException("Internal error: no eligable matrix service registered for " + request + "!");
    }
  }

  @Override
  @PayloadMeta(Payload.class)
  @InboundActionMeta(name = MatrixAnalyzer.ID)
  public void handleInbound(Context ctx) throws ServletException, IOException {
    // display only, no action here
  }

  @Override
  @OutboundActionMeta(name = MatrixAnalyzer.ID)
  public void handleOutbound(Context ctx) throws ServletException, IOException {
    Model model = new Model(ctx);
    Payload payload = ctx.getPayload();

    normalize(model, payload);
    switch (payload.getAction()) {
    case HISTORY_REPORT:
      showSummarizeReport(model, payload);
      break;
    case HOURLY_REPORT:
      MatrixReport report = getHourlyReport(payload);
      model.setReport(report);
      model.setMatrix(new DisplayMatrix(report).setSortBy(payload.getSortBy()));
      break;
    }
    m_jspViewer.view(ctx, model);
  }

  private void normalize(Model model, Payload payload) {
    model.setPage(ReportPage.MATRIX);
    m_normalizePayload.normalize(model, payload);
  }

  private void showSummarizeReport(Model model, Payload payload) {
    String domain = payload.getDomain();

    Date start = payload.getHistoryStartDate();
    Date end = payload.getHistoryEndDate();
    MatrixReport matrixReport = m_reportService.queryMatrixReport(domain, start, end);

    if (matrixReport == null) {
      return;
    }
    matrixReport.setStartTime(start);
    matrixReport.setEndTime(end);
    model.setReport(matrixReport);
    model.setMatrix(new DisplayMatrix(matrixReport).setSortBy(payload.getSortBy()));
  }

}
TOP

Related Classes of com.dianping.cat.report.page.matrix.Handler

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.