diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/BaseService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/BaseService.java index 04ff3c875f0e01219d623f4a984bb9995fee5b87..11a6a4b16dee994c1fcab4120f6194b8fbae5cd9 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/BaseService.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/BaseService.java @@ -89,4 +89,13 @@ public interface BaseService { * @param createUserId create user id */ boolean hasPerm(User operateUser, int createUserId); + + /** + * check and parse date parameters + * + * @param startDateStr start date string + * @param endDateStr end date string + * @return map + */ + Map checkAndParseDateParameters(String startDateStr, String endDateStr); } diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/BaseServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/BaseServiceImpl.java index 6b581dbb51bd6020ca5364cdcabf9721aea02c4f..f39df5d400bc92cf881363bf3e494cd79899e08c 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/BaseServiceImpl.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/BaseServiceImpl.java @@ -22,12 +22,17 @@ import org.apache.dolphinscheduler.api.service.BaseService; import org.apache.dolphinscheduler.api.utils.Result; import org.apache.dolphinscheduler.common.Constants; import org.apache.dolphinscheduler.common.enums.UserType; +import org.apache.dolphinscheduler.common.utils.DateUtils; import org.apache.dolphinscheduler.common.utils.HadoopUtils; +import org.apache.dolphinscheduler.common.utils.StringUtils; import org.apache.dolphinscheduler.dao.entity.User; import java.io.IOException; import java.text.MessageFormat; +import java.util.Date; +import java.util.HashMap; import java.util.Map; +import java.util.Objects; /** * base service impl @@ -140,4 +145,39 @@ public class BaseServiceImpl implements BaseService { public boolean hasPerm(User operateUser, int createUserId) { return operateUser.getId() == createUserId || isAdmin(operateUser); } + + /** + * check and parse date parameters + * + * @param startDateStr start date string + * @param endDateStr end date string + * @return map + */ + @Override + public Map checkAndParseDateParameters(String startDateStr, String endDateStr) { + Map result = new HashMap<>(); + Date start = null; + if (StringUtils.isNotEmpty(startDateStr)) { + start = DateUtils.getScheduleDate(startDateStr); + if (Objects.isNull(start)) { + putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR, Constants.START_END_DATE); + return result; + } + } + result.put(Constants.START_TIME, start); + + Date end = null; + if (StringUtils.isNotEmpty(endDateStr)) { + end = DateUtils.getScheduleDate(endDateStr); + if (Objects.isNull(end)) { + putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR, Constants.START_END_DATE); + return result; + } + } + result.put(Constants.END_TIME, end); + + putMsg(result, Status.SUCCESS); + return result; + } + } diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/DataAnalysisServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/DataAnalysisServiceImpl.java index aaa4cd31fb7c0a37a42b64fb5e97c697945fef91..f95ad5f3176d9d6aaa6712410b32e31fd6fe7a4d 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/DataAnalysisServiceImpl.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/DataAnalysisServiceImpl.java @@ -43,7 +43,6 @@ import org.apache.dolphinscheduler.dao.mapper.ProjectMapper; import org.apache.dolphinscheduler.dao.mapper.TaskInstanceMapper; import org.apache.dolphinscheduler.service.process.ProcessService; -import java.text.MessageFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; @@ -103,7 +102,7 @@ public class DataAnalysisServiceImpl extends BaseServiceImpl implements DataAnal projectId, startDate, endDate, - (start, end, projectIds) -> this.taskInstanceMapper.countTaskInstanceStateByUser(start, end, projectIds)); + (start, end, projectIds) -> this.taskInstanceMapper.countTaskInstanceStateByUser(start, end, projectIds)); } /** @@ -122,7 +121,7 @@ public class DataAnalysisServiceImpl extends BaseServiceImpl implements DataAnal projectId, startDate, endDate, - (start, end, projectIds) -> this.processInstanceMapper.countInstanceStateByUser(start, end, projectIds)); + (start, end, projectIds) -> this.processInstanceMapper.countInstanceStateByUser(start, end, projectIds)); // process state count needs to remove state of forced success if (result.containsKey(Constants.STATUS) && result.get(Constants.STATUS).equals(Status.SUCCESS)) { ((TaskCountDto)result.get(Constants.DATA_LIST)).removeStateFromCountList(ExecutionStatus.FORCED_SUCCESS); @@ -144,7 +143,7 @@ public class DataAnalysisServiceImpl extends BaseServiceImpl implements DataAnal start = DateUtils.getScheduleDate(startDate); end = DateUtils.getScheduleDate(endDate); if (Objects.isNull(start) || Objects.isNull(end)) { - putErrorRequestParamsMsg(result); + putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR, Constants.START_END_DATE); return result; } } @@ -173,7 +172,6 @@ public class DataAnalysisServiceImpl extends BaseServiceImpl implements DataAnal public Map countDefinitionByUser(User loginUser, int projectId) { Map result = new HashMap<>(); - Integer[] projectIdArray = getProjectIdsArrays(loginUser, projectId); List defineGroupByUsers = processDefinitionMapper.countDefinitionGroupByUser( loginUser.getId(), projectIdArray, isAdmin(loginUser)); @@ -211,7 +209,7 @@ public class DataAnalysisServiceImpl extends BaseServiceImpl implements DataAnal if (StringUtils.isNotEmpty(startDate)) { start = DateUtils.getScheduleDate(startDate); if (Objects.isNull(start)) { - putErrorRequestParamsMsg(result); + putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR, Constants.START_END_DATE); return result; } } @@ -219,7 +217,7 @@ public class DataAnalysisServiceImpl extends BaseServiceImpl implements DataAnal if (StringUtils.isNotEmpty(endDate)) { end = DateUtils.getScheduleDate(endDate); if (Objects.isNull(end)) { - putErrorRequestParamsMsg(result); + putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR, Constants.START_END_DATE); return result; } } @@ -293,8 +291,4 @@ public class DataAnalysisServiceImpl extends BaseServiceImpl implements DataAnal return true; } - private void putErrorRequestParamsMsg(Map result) { - result.put(Constants.STATUS, Status.REQUEST_PARAMS_NOT_VALID_ERROR); - result.put(Constants.MSG, MessageFormat.format(Status.REQUEST_PARAMS_NOT_VALID_ERROR.getMsg(), "startDate,endDate")); - } } diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessInstanceServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessInstanceServiceImpl.java index 6659a7bcd6990567febea6c2d0852fd0972cb9ab..4310652f965cef8406643808b30a773d7936b330 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessInstanceServiceImpl.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessInstanceServiceImpl.java @@ -236,19 +236,12 @@ public class ProcessInstanceServiceImpl extends BaseServiceImpl implements Proce statusArray = new int[]{stateType.ordinal()}; } - Date start = null; - Date end = null; - try { - if (StringUtils.isNotEmpty(startDate)) { - start = DateUtils.getScheduleDate(startDate); - } - if (StringUtils.isNotEmpty(endDate)) { - end = DateUtils.getScheduleDate(endDate); - } - } catch (Exception e) { - putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR, Constants.START_END_DATE); - return result; + Map checkAndParseDateResult = checkAndParseDateParameters(startDate, endDate); + if (checkAndParseDateResult.get(Constants.STATUS) != Status.SUCCESS) { + return checkAndParseDateResult; } + Date start = (Date) checkAndParseDateResult.get(Constants.START_TIME); + Date end = (Date) checkAndParseDateResult.get(Constants.END_TIME); Page page = new Page<>(pageNo, pageSize); PageInfo pageInfo = new PageInfo<>(pageNo, pageSize); diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskInstanceServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskInstanceServiceImpl.java index 926ffa0c2c37d668059021f4e8a741e1fe13fa1d..5fd219f892dc6a496fea3610db1b1725a3d711e4 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskInstanceServiceImpl.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskInstanceServiceImpl.java @@ -27,7 +27,6 @@ import org.apache.dolphinscheduler.common.Constants; import org.apache.dolphinscheduler.common.enums.ExecutionStatus; import org.apache.dolphinscheduler.common.utils.CollectionUtils; import org.apache.dolphinscheduler.common.utils.DateUtils; -import org.apache.dolphinscheduler.common.utils.StringUtils; import org.apache.dolphinscheduler.dao.entity.Project; import org.apache.dolphinscheduler.dao.entity.TaskInstance; import org.apache.dolphinscheduler.dao.entity.User; @@ -35,7 +34,6 @@ import org.apache.dolphinscheduler.dao.mapper.ProjectMapper; import org.apache.dolphinscheduler.dao.mapper.TaskInstanceMapper; import org.apache.dolphinscheduler.service.process.ProcessService; -import java.text.MessageFormat; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -108,20 +106,12 @@ public class TaskInstanceServiceImpl extends BaseServiceImpl implements TaskInst statusArray = new int[]{stateType.ordinal()}; } - Date start = null; - Date end = null; - if (StringUtils.isNotEmpty(startDate)) { - start = DateUtils.getScheduleDate(startDate); - if (start == null) { - return generateInvalidParamRes(result, "startDate"); - } - } - if (StringUtils.isNotEmpty(endDate)) { - end = DateUtils.getScheduleDate(endDate); - if (end == null) { - return generateInvalidParamRes(result, "endDate"); - } + Map checkAndParseDateResult = checkAndParseDateParameters(startDate, endDate); + if (checkAndParseDateResult.get(Constants.STATUS) != Status.SUCCESS) { + return checkAndParseDateResult; } + Date start = (Date) checkAndParseDateResult.get(Constants.START_TIME); + Date end = (Date) checkAndParseDateResult.get(Constants.END_TIME); Page page = new Page<>(pageNo, pageSize); PageInfo> pageInfo = new PageInfo<>(pageNo, pageSize); @@ -194,16 +184,4 @@ public class TaskInstanceServiceImpl extends BaseServiceImpl implements TaskInst return result; } - - /*** - * generate {@link org.apache.dolphinscheduler.api.enums.Status#REQUEST_PARAMS_NOT_VALID_ERROR} res with param name - * @param result exist result map - * @param params invalid params name - * @return update result map - */ - private Map generateInvalidParamRes(Map result, String params) { - result.put(Constants.STATUS, Status.REQUEST_PARAMS_NOT_VALID_ERROR); - result.put(Constants.MSG, MessageFormat.format(Status.REQUEST_PARAMS_NOT_VALID_ERROR.getMsg(), params)); - return result; - } } diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessInstanceServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessInstanceServiceTest.java index 3ac5c69dcd0540b9a0f56a65743812f24ad4b651..1afad6ec424bb7a90c3c9759a54c83570415ee44 100644 --- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessInstanceServiceTest.java +++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessInstanceServiceTest.java @@ -125,9 +125,18 @@ public class ProcessInstanceServiceTest { "192.168.xx.xx", 1, 10); Assert.assertEquals(Status.PROJECT_NOT_FOUNT, proejctAuthFailRes.get(Constants.STATUS)); - //project auth success + // data parameter check putMsg(result, Status.SUCCESS, projectName); Project project = getProject(projectName); + when(projectMapper.queryByName(projectName)).thenReturn(project); + when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result); + Map dataParameterRes = processInstanceService.queryProcessInstanceList(loginUser, projectName, 1, "20200101 00:00:00", + "20200102 00:00:00", "", loginUser.getUserName(), ExecutionStatus.SUBMITTED_SUCCESS, + "192.168.xx.xx", 1, 10); + Assert.assertEquals(Status.REQUEST_PARAMS_NOT_VALID_ERROR, dataParameterRes.get(Constants.STATUS)); + + //project auth success + putMsg(result, Status.SUCCESS, projectName); Date start = DateUtils.getScheduleDate("2020-01-01 00:00:00"); Date end = DateUtils.getScheduleDate("2020-01-02 00:00:00"); ProcessInstance processInstance = getProcessInstance(); @@ -147,6 +156,14 @@ public class ProcessInstanceServiceTest { "192.168.xx.xx", 1, 10); Assert.assertEquals(Status.SUCCESS, successRes.get(Constants.STATUS)); + // data parameter empty + when(processInstanceMapper.queryProcessInstanceListPaging(Mockito.any(Page.class), eq(project.getId()), eq(1), eq(""), eq(-1), Mockito.any(), + eq("192.168.xx.xx"), eq(null), eq(null))).thenReturn(pageReturn); + successRes = processInstanceService.queryProcessInstanceList(loginUser, projectName, 1, "", + "", "", loginUser.getUserName(), ExecutionStatus.SUBMITTED_SUCCESS, + "192.168.xx.xx", 1, 10); + Assert.assertEquals(Status.SUCCESS, successRes.get(Constants.STATUS)); + //executor null when(usersService.queryUser(loginUser.getId())).thenReturn(null); when(usersService.getUserIdByName(loginUser.getUserName())).thenReturn(-1); diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskInstanceServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskInstanceServiceTest.java index a746e6294fd63f6856a25baca35ea0a7b7477c80..62b0b73da3b25fc873c5dc30523f482d50ccac52 100644 --- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskInstanceServiceTest.java +++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskInstanceServiceTest.java @@ -94,9 +94,17 @@ public class TaskInstanceServiceTest { "test_user", "2019-02-26 19:48:00", "2019-02-26 19:48:22", "", null, "", 1, 20); Assert.assertEquals(Status.PROJECT_NOT_FOUNT, proejctAuthFailRes.get(Constants.STATUS)); - //project + // data parameter check putMsg(result, Status.SUCCESS, projectName); Project project = getProject(projectName); + when(projectMapper.queryByName(Mockito.anyString())).thenReturn(project); + when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result); + Map dataParameterRes = taskInstanceService.queryTaskListPaging(loginUser, projectName, 1, "", "", + "test_user", "20200101 00:00:00", "2020-01-02 00:00:00", "", ExecutionStatus.SUCCESS, "192.168.xx.xx", 1, 20); + Assert.assertEquals(Status.REQUEST_PARAMS_NOT_VALID_ERROR, dataParameterRes.get(Constants.STATUS)); + + //project + putMsg(result, Status.SUCCESS, projectName); Date start = DateUtils.getScheduleDate("2020-01-01 00:00:00"); Date end = DateUtils.getScheduleDate("2020-01-02 00:00:00"); ProcessInstance processInstance = getProcessInstance();