Package com.sogou.qadev.service.cynthia.util

Source Code of com.sogou.qadev.service.cynthia.util.TimerExecutor

package com.sogou.qadev.service.cynthia.util;

import java.util.Calendar;
import java.util.HashSet;
import java.util.Set;

import com.sogou.qadev.service.cynthia.bean.Data;
import com.sogou.qadev.service.cynthia.bean.Filter;
import com.sogou.qadev.service.cynthia.bean.Timer;
import com.sogou.qadev.service.cynthia.bean.TimerAction;
import com.sogou.qadev.service.cynthia.dao.FilterAccessSessionMySQL;
import com.sogou.qadev.service.cynthia.dao.TimerAccessSessionMySQL;
import com.sogou.qadev.service.cynthia.dao.TimerActionAccessSessionMySQL;
import com.sogou.qadev.service.cynthia.factory.DataAccessFactory;
import com.sogou.qadev.service.cynthia.service.DataAccessSession;
import com.sogou.qadev.service.cynthia.service.ExportDataManager;
import com.sogou.qadev.service.cynthia.service.TimerActionManager;

/**
* @description:timer execute threader
* @author:liming
* @mail:liming@sogou-inc.com
* @date:2014-5-6 下午12:16:07
* @version:v1.0
*/
public class TimerExecutor extends Thread {
 
  private class TimerRunner extends Thread {
   
    public void run() {
      try {
        Calendar c = Calendar.getInstance();
        c.setTimeInMillis(System.currentTimeMillis());

        int month = c.get(Calendar.MONTH) + 1;
        int day = c.get(Calendar.DAY_OF_MONTH);
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int minute = c.get(Calendar.MINUTE);

        int week = c.get(Calendar.DAY_OF_WEEK) - 1;
        if (week == 0) {
          week = 7;
        }

        c.get(Calendar.MONTH);

        Timer[] timerArray = new TimerAccessSessionMySQL().queryTimers();
       
        for (Timer timer : timerArray) {
          if (!timer.isStart())
            continue;

          if (timer.getHour() == null || timer.getMinute() == null) {
            continue;
          }

          if (timer.getWeek() != null) {
            Set<Integer> weekSet = new HashSet<Integer>();

            String[] weekStrArray = timer.getWeek().split(",");
            for (String weekStr : weekStrArray) {
              weekSet.add(Integer.parseInt(weekStr.trim()));
            }

            if (!weekSet.contains(week)) {
              continue;
            }
          } else if (timer.getMonth() != null
              && timer.getDay() != null) {
            Set<Integer> monthSet = new HashSet<Integer>();

            String[] monthStrArray = timer.getMonth().split(",");
            for (String monthStr : monthStrArray) {
              monthSet.add(Integer.parseInt(monthStr.trim()));
            }

            if (!monthSet.contains(month)) {
              continue;
            }

            Set<Integer> daySet = new HashSet<Integer>();

            String[] dayStrArray = timer.getDay().split(",");
            for (String dayStr : dayStrArray) {
              daySet.add(Integer.parseInt(dayStr.trim()));
            }

            if (!daySet.contains(day)) {
              continue;
            }
          } else {
            continue;
          }

          Set<Integer> hourSet = new HashSet<Integer>();

          String[] hourStrArray = timer.getHour().split(",");
          for (String hourStr : hourStrArray) {
            hourSet.add(Integer.parseInt(hourStr.trim()));
          }

          if (!hourSet.contains(hour)) {
            continue;
          }

          Set<Integer> minuteSet = new HashSet<Integer>();

          String[] minuteStrArray = timer.getMinute().split(",");
          for (String minuteStr : minuteStrArray) {
            minuteSet.add(Integer.parseInt(minuteStr.trim()));
          }

          if (!minuteSet.contains(minute)) {
            continue;
          }

          this.doTimer(timer);

          System.out.println("run timer " + timer.getId());
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
    }

    private void doTimer(Timer timer) throws Exception {
      long timerStartTime = System.currentTimeMillis();
     
      System.out.println("start execute timer" + timer.getId());
     
      TimerAction timerAction = new TimerActionAccessSessionMySQL().queryTimerAction(timer.getActionId());
     
      if (timerAction == null) {
        return;
      }

      Filter filter = null;
     
      if (timer.getFilterId() != null) {
       
        filter = new FilterAccessSessionMySQL().queryFilter(timer.getFilterId());
       
        if (filter == null) {
          return;
        }
      }

      if (timer.getStatisticerId() != null) {
        return;
      }

      Data[] dataArray = null;
      String content = null;

      if (filter != null) {
        DataAccessSession das = DataAccessFactory.getInstance().createDataAccessSession(timer.getCreateUser(),ConfigUtil.magic);
        content = ExportDataManager.exportMailHtmlFilter(das, ConfigUtil.magic, filter, timer.getCreateUser());
      }

      if (content == null) {
        TimerActionManager.getInstance().doTimerAction(timerAction, dataArray, timer.getCreateUser(), timer.getActionParam());
      } else {
        TimerActionManager.getInstance().doTimerAction(timerAction, content, timer.getCreateUser(), timer.getActionParam());
      }

      long endTimerTime = System.currentTimeMillis();
      long spendTime = endTimerTime - timerStartTime;
      System.out.println("timer action executed spend :" + spendTime);
    }
  }

  public void run() {
    while (true) {
      try {
        new TimerRunner().start();
      } catch (Exception e) {
        e.printStackTrace();
      } finally {
        try {
          Thread.sleep(60000);
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }
  }
}
TOP

Related Classes of com.sogou.qadev.service.cynthia.util.TimerExecutor

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.