| | |
| | | package com.xxl.job.admin.controller; |
| | | |
| | | import com.xxl.job.admin.core.cron.CronExpression; |
| | | import com.xxl.job.admin.core.exception.XxlJobException; |
| | | import com.xxl.job.admin.core.model.XxlJobGroup; |
| | | import com.xxl.job.admin.core.model.XxlJobInfo; |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.text.ParseException; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * index controller |
| | | * |
| | | * @author xuxueli 2015-12-19 16:13:16 |
| | | */ |
| | | @Controller |
| | | @RequestMapping("/jobinfo") |
| | | public class JobInfoController { |
| | | private static Logger logger = LoggerFactory.getLogger(JobInfoController.class); |
| | | private static Logger logger = LoggerFactory.getLogger(JobInfoController.class); |
| | | |
| | | @Resource |
| | | private XxlJobGroupDao xxlJobGroupDao; |
| | | @Resource |
| | | private XxlJobService xxlJobService; |
| | | |
| | | @RequestMapping |
| | | public String index(HttpServletRequest request, Model model, @RequestParam(required = false, defaultValue = "-1") int jobGroup) { |
| | | @Resource |
| | | private XxlJobGroupDao xxlJobGroupDao; |
| | | @Resource |
| | | private XxlJobService xxlJobService; |
| | | |
| | | // 枚举-字典 |
| | | model.addAttribute("ExecutorRouteStrategyEnum", ExecutorRouteStrategyEnum.values()); // 路由策略-列表 |
| | | model.addAttribute("GlueTypeEnum", GlueTypeEnum.values()); // Glue类型-字典 |
| | | model.addAttribute("ExecutorBlockStrategyEnum", ExecutorBlockStrategyEnum.values()); // 阻塞处理策略-字典 |
| | | model.addAttribute("ScheduleTypeEnum", ScheduleTypeEnum.values()); // 调度类型 |
| | | model.addAttribute("MisfireStrategyEnum", MisfireStrategyEnum.values()); // 调度过期策略 |
| | | @RequestMapping |
| | | public String index(HttpServletRequest request, Model model, @RequestParam(required = false, defaultValue = "-1") int jobGroup) { |
| | | |
| | | // 执行器列表 |
| | | List<XxlJobGroup> jobGroupList_all = xxlJobGroupDao.findAll(); |
| | | // 枚举-字典 |
| | | model.addAttribute("ExecutorRouteStrategyEnum" , ExecutorRouteStrategyEnum.values()); // 路由策略-列表 |
| | | model.addAttribute("GlueTypeEnum" , GlueTypeEnum.values()); // Glue类型-字典 |
| | | model.addAttribute("ExecutorBlockStrategyEnum" , ExecutorBlockStrategyEnum.values()); // 阻塞处理策略-字典 |
| | | model.addAttribute("ScheduleTypeEnum" , ScheduleTypeEnum.values()); // 调度类型 |
| | | model.addAttribute("MisfireStrategyEnum" , MisfireStrategyEnum.values()); // 调度过期策略 |
| | | |
| | | // filter group |
| | | List<XxlJobGroup> jobGroupList = filterJobGroupByRole(request, jobGroupList_all); |
| | | if (jobGroupList==null || jobGroupList.size()==0) { |
| | | throw new XxlJobException(I18nUtil.getString("jobgroup_empty")); |
| | | } |
| | | // 执行器列表 |
| | | List<XxlJobGroup> jobGroupList_all = xxlJobGroupDao.findAll(); |
| | | |
| | | model.addAttribute("JobGroupList", jobGroupList); |
| | | model.addAttribute("jobGroup", jobGroup); |
| | | // filter group |
| | | List<XxlJobGroup> jobGroupList = filterJobGroupByRole(request, jobGroupList_all); |
| | | if (jobGroupList == null || jobGroupList.size() == 0) { |
| | | throw new XxlJobException(I18nUtil.getString("jobgroup_empty")); |
| | | } |
| | | |
| | | return "jobinfo/jobinfo.index"; |
| | | } |
| | | model.addAttribute("JobGroupList" , jobGroupList); |
| | | model.addAttribute("jobGroup" , jobGroup); |
| | | |
| | | public static List<XxlJobGroup> filterJobGroupByRole(HttpServletRequest request, List<XxlJobGroup> jobGroupList_all){ |
| | | List<XxlJobGroup> jobGroupList = new ArrayList<>(); |
| | | if (jobGroupList_all!=null && jobGroupList_all.size()>0) { |
| | | XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY); |
| | | if (loginUser.getRole() == 1) { |
| | | jobGroupList = jobGroupList_all; |
| | | } else { |
| | | List<String> groupIdStrs = new ArrayList<>(); |
| | | if (loginUser.getPermission()!=null && loginUser.getPermission().trim().length()>0) { |
| | | groupIdStrs = Arrays.asList(loginUser.getPermission().trim().split(",")); |
| | | } |
| | | for (XxlJobGroup groupItem:jobGroupList_all) { |
| | | if (groupIdStrs.contains(String.valueOf(groupItem.getId()))) { |
| | | jobGroupList.add(groupItem); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return jobGroupList; |
| | | } |
| | | public static void validPermission(HttpServletRequest request, int jobGroup) { |
| | | XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY); |
| | | if (!loginUser.validPermission(jobGroup)) { |
| | | throw new RuntimeException(I18nUtil.getString("system_permission_limit") + "[username="+ loginUser.getUsername() +"]"); |
| | | } |
| | | } |
| | | |
| | | @RequestMapping("/pageList") |
| | | @ResponseBody |
| | | public Map<String, Object> pageList(@RequestParam(required = false, defaultValue = "0") int start, |
| | | @RequestParam(required = false, defaultValue = "10") int length, |
| | | int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author) { |
| | | |
| | | return xxlJobService.pageList(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author); |
| | | } |
| | | |
| | | @RequestMapping("/add") |
| | | @ResponseBody |
| | | public ReturnT<String> add(XxlJobInfo jobInfo) { |
| | | return xxlJobService.add(jobInfo); |
| | | } |
| | | |
| | | @RequestMapping("/update") |
| | | @ResponseBody |
| | | public ReturnT<String> update(XxlJobInfo jobInfo) { |
| | | return xxlJobService.update(jobInfo); |
| | | } |
| | | |
| | | @RequestMapping("/remove") |
| | | @ResponseBody |
| | | public ReturnT<String> remove(int id) { |
| | | return xxlJobService.remove(id); |
| | | } |
| | | |
| | | @RequestMapping("/stop") |
| | | @ResponseBody |
| | | public ReturnT<String> pause(int id) { |
| | | return xxlJobService.stop(id); |
| | | } |
| | | |
| | | @RequestMapping("/start") |
| | | @ResponseBody |
| | | public ReturnT<String> start(int id) { |
| | | return xxlJobService.start(id); |
| | | } |
| | | |
| | | @RequestMapping("/trigger") |
| | | @ResponseBody |
| | | //@PermissionLimit(limit = false) |
| | | public ReturnT<String> triggerJob(int id, String executorParam, String addressList) { |
| | | // force cover job param |
| | | if (executorParam == null) { |
| | | executorParam = ""; |
| | | } |
| | | return "jobinfo/jobinfo.index"; |
| | | } |
| | | |
| | | JobTriggerPoolHelper.trigger(id, TriggerTypeEnum.MANUAL, -1, null, executorParam, addressList); |
| | | return ReturnT.SUCCESS; |
| | | } |
| | | public static List<XxlJobGroup> filterJobGroupByRole(HttpServletRequest request, List<XxlJobGroup> jobGroupList_all) { |
| | | List<XxlJobGroup> jobGroupList = new ArrayList<>(); |
| | | if (jobGroupList_all != null && jobGroupList_all.size() > 0) { |
| | | XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY); |
| | | if (loginUser.getRole() == 1) { |
| | | jobGroupList = jobGroupList_all; |
| | | } else { |
| | | List<String> groupIdStrs = new ArrayList<>(); |
| | | if (loginUser.getPermission() != null && loginUser.getPermission().trim().length() > 0) { |
| | | groupIdStrs = Arrays.asList(loginUser.getPermission().trim().split(",")); |
| | | } |
| | | for (XxlJobGroup groupItem : jobGroupList_all) { |
| | | if (groupIdStrs.contains(String.valueOf(groupItem.getId()))) { |
| | | jobGroupList.add(groupItem); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return jobGroupList; |
| | | } |
| | | |
| | | @RequestMapping("/nextTriggerTime") |
| | | @ResponseBody |
| | | public ReturnT<List<String>> nextTriggerTime(String scheduleType, String scheduleConf) { |
| | | public static void validPermission(HttpServletRequest request, int jobGroup) { |
| | | XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY); |
| | | if (!loginUser.validPermission(jobGroup)) { |
| | | throw new RuntimeException(I18nUtil.getString("system_permission_limit") + "[username=" + loginUser.getUsername() + "]"); |
| | | } |
| | | } |
| | | |
| | | XxlJobInfo paramXxlJobInfo = new XxlJobInfo(); |
| | | paramXxlJobInfo.setScheduleType(scheduleType); |
| | | paramXxlJobInfo.setScheduleConf(scheduleConf); |
| | | @RequestMapping("/pageList") |
| | | @ResponseBody |
| | | public Map<String, Object> pageList(@RequestParam(required = false, defaultValue = "0") int start, |
| | | @RequestParam(required = false, defaultValue = "10") int length, |
| | | int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author) { |
| | | |
| | | List<String> result = new ArrayList<>(); |
| | | try { |
| | | Date lastTime = new Date(); |
| | | for (int i = 0; i < 5; i++) { |
| | | lastTime = JobScheduleHelper.generateNextValidTime(paramXxlJobInfo, lastTime); |
| | | if (lastTime != null) { |
| | | result.add(DateUtil.formatDateTime(lastTime)); |
| | | } else { |
| | | break; |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | logger.error(e.getMessage(), e); |
| | | return new ReturnT<List<String>>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) + e.getMessage()); |
| | | } |
| | | return new ReturnT<List<String>>(result); |
| | | return xxlJobService.pageList(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author); |
| | | } |
| | | |
| | | } |
| | | |
| | | @RequestMapping("/add") |
| | | @ResponseBody |
| | | public ReturnT<String> add(XxlJobInfo jobInfo) { |
| | | return xxlJobService.add(jobInfo); |
| | | } |
| | | |
| | | @RequestMapping("/update") |
| | | @ResponseBody |
| | | public ReturnT<String> update(XxlJobInfo jobInfo) { |
| | | return xxlJobService.update(jobInfo); |
| | | } |
| | | |
| | | @RequestMapping("/remove") |
| | | @ResponseBody |
| | | public ReturnT<String> remove(int id) { |
| | | return xxlJobService.remove(id); |
| | | } |
| | | |
| | | @RequestMapping("/stop") |
| | | @ResponseBody |
| | | public ReturnT<String> pause(int id) { |
| | | return xxlJobService.stop(id); |
| | | } |
| | | |
| | | @RequestMapping("/start") |
| | | @ResponseBody |
| | | public ReturnT<String> start(int id) { |
| | | return xxlJobService.start(id); |
| | | } |
| | | |
| | | @RequestMapping("/trigger") |
| | | @ResponseBody |
| | | //@PermissionLimit(limit = false) |
| | | public ReturnT<String> triggerJob(int id, String executorParam, String addressList) { |
| | | // force cover job param |
| | | if (executorParam == null) { |
| | | executorParam = ""; |
| | | } |
| | | |
| | | JobTriggerPoolHelper.trigger(id, TriggerTypeEnum.MANUAL, -1, null, executorParam, addressList); |
| | | return ReturnT.SUCCESS; |
| | | } |
| | | |
| | | @RequestMapping("/nextTriggerTime") |
| | | @ResponseBody |
| | | public ReturnT<List<String>> nextTriggerTime(String scheduleType, String scheduleConf) { |
| | | |
| | | XxlJobInfo paramXxlJobInfo = new XxlJobInfo(); |
| | | paramXxlJobInfo.setScheduleType(scheduleType); |
| | | paramXxlJobInfo.setScheduleConf(scheduleConf); |
| | | |
| | | List<String> result = new ArrayList<>(); |
| | | try { |
| | | Date lastTime = new Date(); |
| | | for (int i = 0; i < 5; i++) { |
| | | lastTime = JobScheduleHelper.generateNextValidTime(paramXxlJobInfo, lastTime); |
| | | if (lastTime != null) { |
| | | result.add(DateUtil.formatDateTime(lastTime)); |
| | | } else { |
| | | break; |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | logger.error(e.getMessage(), e); |
| | | return new ReturnT<List<String>>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")) + e.getMessage()); |
| | | } |
| | | return new ReturnT<List<String>>(result); |
| | | |
| | | } |
| | | |
| | | } |