Package com.dianping.cat.task

Source Code of com.dianping.cat.task.TaskManager$TaskCreationPolicy

package com.dianping.cat.task;

import java.util.Calendar;
import java.util.Date;

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

import com.dianping.cat.Cat;
import com.dianping.cat.ReportType;
import com.dianping.cat.configuration.NetworkInterfaceManager;
import com.dianping.cat.core.dal.Task;
import com.dianping.cat.core.dal.TaskDao;

public class TaskManager {

  @Inject
  private TaskDao m_taskDao;

  private String m_ip = NetworkInterfaceManager.INSTANCE.getLocalHostAddress();

  private static final long ONE_HOUR = 60 * 60 * 1000L;

  private static final long ONE_DAY = 24 * ONE_HOUR;

  private static final int STATUS_TODO = 1;

  private void createDailyTask(Date period, String domain, String name) throws DalException {
    createTask(period, domain, name, ReportType.DAILY);
  }

  private void createHourlyTask(Date period, String domain, String name) throws DalException {
    createTask(period, domain, name, ReportType.HOUR);
  }

  private void createMonthlyTask(Date period, String domain, String name) throws DalException {
    createTask(period, domain, name, ReportType.MONTH);
  }

  protected void createTask(Date period, String domain, String name, int reportType) throws DalException {
    Task task = m_taskDao.createLocal();

    task.setCreationDate(new Date());
    task.setProducer(m_ip);
    task.setReportDomain(domain);
    task.setReportName(name);
    task.setReportPeriod(period);
    task.setStatus(STATUS_TODO);
    task.setTaskType(reportType);
    m_taskDao.insert(task);
  }

  public boolean createTask(Date period, String domain, String name, TaskCreationPolicy prolicy) {
    try {
      if (prolicy.shouldCreateHourlyTask()) {
        createHourlyTask(period, domain, name);
      }

      Calendar cal = Calendar.getInstance();
      cal.setTime(period);

      int hour = cal.get(Calendar.HOUR_OF_DAY);
      cal.add(Calendar.HOUR_OF_DAY, -hour);
      Date currentDay = cal.getTime();

      if (prolicy.shouldCreateDailyTask()) {
        createDailyTask(new Date(currentDay.getTime() - ONE_DAY), domain, name);
      }

      if (prolicy.shouldCreateWeeklyTask()) {
        int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
        if (dayOfWeek == 7) {
          createWeeklyTask(new Date(currentDay.getTime() - 7 * ONE_DAY), domain, name);
        }
      }
      if (prolicy.shouldCreateMonthTask()) {
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);

        if (dayOfMonth == 1) {
          cal.add(Calendar.MONTH, -1);
          createMonthlyTask(cal.getTime(), domain, name);
        }
      }
      return true;
    } catch (DalException e) {
      Cat.logError(e);
      return false;
    }
  }

  private void createWeeklyTask(Date period, String domain, String name) throws DalException {
    createTask(period, domain, name, ReportType.WEEK);

  }

  public static interface TaskCreationPolicy {

    boolean shouldCreateHourlyTask();

    boolean shouldCreateDailyTask();

    boolean shouldCreateWeeklyTask();

    boolean shouldCreateMonthTask();
  }

  public enum TaskProlicy implements TaskCreationPolicy {

    ALL {
      @Override
      public boolean shouldCreateDailyTask() {
        return true;
      }

      @Override
      public boolean shouldCreateHourlyTask() {
        return true;
      }

      @Override
      public boolean shouldCreateMonthTask() {
        return true;
      }

      @Override
      public boolean shouldCreateWeeklyTask() {
        return true;
      }
    },

    HOULY {

      @Override
      public boolean shouldCreateDailyTask() {
        return false;
      }

      @Override
      public boolean shouldCreateHourlyTask() {
        return true;
      }

      @Override
      public boolean shouldCreateMonthTask() {
        return false;
      }

      @Override
      public boolean shouldCreateWeeklyTask() {
        return false;
      }
    },

    ALL_EXCLUED_HOURLY {

      @Override
      public boolean shouldCreateDailyTask() {
        return true;
      }

      @Override
      public boolean shouldCreateHourlyTask() {
        return false;
      }

      @Override
      public boolean shouldCreateMonthTask() {
        return true;
      }

      @Override
      public boolean shouldCreateWeeklyTask() {
        return true;
      }
    },

    DAILY {

      @Override
      public boolean shouldCreateDailyTask() {
        return true;
      }

      @Override
      public boolean shouldCreateHourlyTask() {
        return false;
      }

      @Override
      public boolean shouldCreateMonthTask() {
        return false;
      }

      @Override
      public boolean shouldCreateWeeklyTask() {
        return false;
      }
    };
  }

}
TOP

Related Classes of com.dianping.cat.task.TaskManager$TaskCreationPolicy

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.