Package com.dianping.cat.report.task.notify

Source Code of com.dianping.cat.report.task.notify.NotifyTaskBuilder

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

import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.List;

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

import com.dianping.cat.Cat;
import com.dianping.cat.Constants;
import com.dianping.cat.consumer.event.EventAnalyzer;
import com.dianping.cat.consumer.event.model.entity.EventReport;
import com.dianping.cat.consumer.problem.ProblemAnalyzer;
import com.dianping.cat.consumer.problem.model.entity.ProblemReport;
import com.dianping.cat.consumer.transaction.TransactionAnalyzer;
import com.dianping.cat.consumer.transaction.model.entity.TransactionReport;
import com.dianping.cat.helper.TimeHelper;
import com.dianping.cat.home.dal.alarm.MailRecord;
import com.dianping.cat.home.dal.alarm.MailRecordDao;
import com.dianping.cat.home.dal.alarm.ScheduledReport;
import com.dianping.cat.message.Transaction;
import com.dianping.cat.report.service.ReportServiceManager;
import com.dianping.cat.report.task.alert.sender.AlertChannel;
import com.dianping.cat.report.task.alert.sender.AlertMessageEntity;
import com.dianping.cat.report.task.alert.sender.sender.SenderManager;
import com.dianping.cat.report.task.spi.ReportTaskBuilder;
import com.dianping.cat.system.page.alarm.ScheduledManager;

public class NotifyTaskBuilder implements ReportTaskBuilder {

  public static final String ID = Constants.REPORT_NOTIFY;

  @Inject
  private ReportServiceManager m_reportService;

  @Inject
  private MailRecordDao m_mailRecordDao;

  @Inject
  private SenderManager m_sendManager;

  @Inject
  private ReportRender m_render;

  @Inject
  private ScheduledManager m_scheduledManager;

  @Inject
  private AppDataComparisonNotifier m_appDataInformer;

  private SimpleDateFormat m_sdf = new SimpleDateFormat("yyyy-MM-dd");

  private void insertMailLog(int reportId, String content, String title, boolean result, List<String> emails)
        throws DalException {
    MailRecord entity = m_mailRecordDao.createLocal();

    entity.setTitle(title);
    entity.setContent(content);
    entity.setRuleId(reportId);
    entity.setType(1);
    entity.setReceivers(emails.toString());
    if (result) {
      entity.setStatus(0);
    } else {
      entity.setStatus(1);
    }
    m_mailRecordDao.insert(entity);
  }

  private String renderContent(String names, String domain, Date start) {
    int transactionFlag = names.indexOf(TransactionAnalyzer.ID);
    int eventFlag = names.indexOf(EventAnalyzer.ID);
    int problemFlag = names.indexOf(ProblemAnalyzer.ID);
    Date end = new Date(start.getTime() + TimeHelper.ONE_DAY);
    TransactionReport transactionReport = m_reportService.queryTransactionReport(domain, start, end);
    EventReport eventReport = m_reportService.queryEventReport(domain, start, end);
    ProblemReport problemReport = m_reportService.queryProblemReport(domain, start, end);

    StringBuilder sb = new StringBuilder(10240);
    sb.append(m_sdf.format(start)).append("</br>");
    if (transactionFlag > -1) {
      sb.append(m_render.renderReport(transactionReport));
    }
    if (eventFlag > -1) {
      sb.append(m_render.renderReport(eventReport));
    }
    if (problemFlag > -1) {
      sb.append(m_render.renderReport(problemReport));
    }
    return sb.toString();
  }

  private String renderTitle(String names, String domain) {
    return " CAT 日常报表 [ " + domain + " ]";
  }

  @Override
  public boolean buildDailyTask(String name, String domainName, Date period) {
    sendDailyReport(period);
    sendVsMeiTuanReport(period);
    return true;
  }

  private void sendVsMeiTuanReport(Date period) {
    m_appDataInformer.doNotifying(period);
  }

  private void sendDailyReport(Date period) {
    Collection<ScheduledReport> reports = m_scheduledManager.queryScheduledReports();

    for (ScheduledReport report : reports) {
      String domain = report.getDomain();
      Transaction t = Cat.newTransaction("ScheduledReport", domain);

      try {
        String names = String.valueOf(report.getNames());
        String content = renderContent(names, domain, period);
        String title = renderTitle(names, domain);
        List<String> emails = m_scheduledManager.queryEmailsBySchReportId(report.getId());
        AlertMessageEntity message = new AlertMessageEntity(domain, title, "ScheduledJob", content, emails);
        boolean result = m_sendManager.sendAlert(AlertChannel.MAIL, message);

        insertMailLog(report.getId(), content, title, result, emails);
        t.addData(emails.toString());
        t.setStatus(Transaction.SUCCESS);
      } catch (Exception e) {
        Cat.logError(e);
        t.setStatus(e);
      } finally {
        t.complete();
      }
    }
  }

  @Override
  public boolean buildHourlyTask(String name, String domain, Date period) {
    throw new RuntimeException("daily report builder don't support hourly task");
  }

  @Override
  public boolean buildMonthlyTask(String name, String domain, Date period) {
    throw new RuntimeException("daily report builder don't support monthly task");
  }

  @Override
  public boolean buildWeeklyTask(String name, String domain, Date period) {
    throw new RuntimeException("daily report builder don't support weekly task");
  }

}
TOP

Related Classes of com.dianping.cat.report.task.notify.NotifyTaskBuilder

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.