This is an automated email from the ASF dual-hosted git repository.
lidongdai pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new 3dc4bdc [DS-4396][feat] Add project information to email alert
message (#4413)
3dc4bdc is described below
commit 3dc4bdc4dd0d5bfa483f2f57a2d1e872f22f0eb5
Author: K.O <[email protected]>
AuthorDate: Tue Jan 12 00:18:21 2021 -0600
[DS-4396][feat] Add project information to email alert message (#4413)
* [DS-4396][feat] Add project information to email alert message
- build find project and user sql to ProjectMapper
- add project information to alert db.
* [DS-4396][style] change style
---
.../dao/entity/ProcessAlertContent.java | 28 +++++++++++++++++++++-
.../dolphinscheduler/dao/mapper/ProjectMapper.java | 15 ++++++++++--
.../dolphinscheduler/dao/mapper/ProjectMapper.xml | 12 ++++++++++
.../server/master/runner/MasterExecThread.java | 4 +++-
.../server/utils/AlertManager.java | 17 +++++++++----
.../server/master/AlertManagerTest.java | 10 ++++++--
.../service/process/ProcessService.java | 10 ++++++++
7 files changed, 86 insertions(+), 10 deletions(-)
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessAlertContent.java
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessAlertContent.java
index 71058f4..4f46140 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessAlertContent.java
+++
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessAlertContent.java
@@ -33,6 +33,12 @@ import com.fasterxml.jackson.annotation.JsonProperty;
@JsonInclude(Include.NON_NULL)
public class ProcessAlertContent implements Serializable {
+ @JsonProperty("projectId")
+ private int projectId;
+ @JsonProperty("projectName")
+ private String projectName;
+ @JsonProperty("owner")
+ private String owner;
@JsonProperty("processId")
private int processId;
@JsonProperty("processName")
@@ -79,6 +85,9 @@ public class ProcessAlertContent implements Serializable {
private String logPath;
private ProcessAlertContent(Builder builder) {
+ this.projectId = builder.projectId;
+ this.projectName = builder.projectName;
+ this.owner = builder.owner;
this.processId = builder.processId;
this.processName = builder.processName;
this.processType = builder.processType;
@@ -107,7 +116,9 @@ public class ProcessAlertContent implements Serializable {
}
public static class Builder {
-
+ private int projectId;
+ private String projectName;
+ private String owner;
private int processId;
private String processName;
private CommandType processType;
@@ -129,6 +140,21 @@ public class ProcessAlertContent implements Serializable {
private String taskHost;
private String logPath;
+ public Builder projectId(int projectId) {
+ this.projectId = projectId;
+ return this;
+ }
+
+ public Builder projectName(String projectName) {
+ this.projectName = projectName;
+ return this;
+ }
+
+ public Builder owner(String owner) {
+ this.owner = owner;
+ return this;
+ }
+
public Builder processId(int processId) {
this.processId = processId;
return this;
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProjectMapper.java
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProjectMapper.java
index b24fd2e..872d53f 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProjectMapper.java
+++
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProjectMapper.java
@@ -14,15 +14,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.apache.dolphinscheduler.dao.mapper;
import org.apache.dolphinscheduler.dao.entity.Project;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.dolphinscheduler.dao.entity.ProjectUser;
+
import org.apache.ibatis.annotations.Param;
import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
/**
* project mapper interface
*/
@@ -81,4 +85,11 @@ public interface ProjectMapper extends BaseMapper<Project> {
*/
List<Project> queryProjectCreatedAndAuthorizedByUserId(@Param("userId")
int userId);
+ /**
+ * query project name and user name by processInstanceId.
+ * @param processInstanceId processInstanceId
+ * @return projectName and userName
+ */
+ ProjectUser
queryProjectWithUserByProcessInstanceId(@Param("processInstanceId") int
processInstanceId);
+
}
diff --git
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProjectMapper.xml
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProjectMapper.xml
index 64c5b6c..0ec0384 100644
---
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProjectMapper.xml
+++
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProjectMapper.xml
@@ -96,4 +96,16 @@
(select project_id from t_ds_relation_project_user where
user_id=#{userId}
union select id as project_id from t_ds_project where
user_id=#{userId})
</select>
+
+ <select id="queryProjectWithUserByProcessInstanceId"
resultType="org.apache.dolphinscheduler.dao.entity.ProjectUser">
+ select
+ dp.id projectId,
+ dp.name projectName,
+ u.user_name userName
+ from t_ds_process_instance di
+ join t_ds_process_definition dpd on di.process_definition_id = dpd.id
+ join t_ds_project dp on dpd.project_id = dp.id
+ join t_ds_user u on dp.user_id = u.id
+ where di.id = #{processInstanceId};
+ </select>
</mapper>
diff --git
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
index f5946d5..3b113b6 100644
---
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
+++
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
@@ -47,6 +47,7 @@ import
org.apache.dolphinscheduler.common.utils.ParameterUtils;
import org.apache.dolphinscheduler.common.utils.StringUtils;
import org.apache.dolphinscheduler.common.utils.VarPoolUtils;
import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
+import org.apache.dolphinscheduler.dao.entity.ProjectUser;
import org.apache.dolphinscheduler.dao.entity.Schedule;
import org.apache.dolphinscheduler.dao.entity.TaskInstance;
import org.apache.dolphinscheduler.dao.utils.DagHelper;
@@ -371,7 +372,8 @@ public class MasterExecThread implements Runnable {
processService.createRecoveryWaitingThreadCommand(null,
processInstance);
}
List<TaskInstance> taskInstances =
processService.findValidTaskListByProcessId(processInstance.getId());
- alertManager.sendAlertProcessInstance(processInstance, taskInstances);
+ ProjectUser projectUser =
processService.queryProjectWithUserByProcessInstanceId(processInstance.getId());
+ alertManager.sendAlertProcessInstance(processInstance, taskInstances,
projectUser);
}
/**
diff --git
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/AlertManager.java
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/AlertManager.java
index 6b8d926..6cfbc5b 100644
---
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/AlertManager.java
+++
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/AlertManager.java
@@ -29,6 +29,7 @@ import org.apache.dolphinscheduler.dao.entity.Alert;
import org.apache.dolphinscheduler.dao.entity.ProcessAlertContent;
import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
+import org.apache.dolphinscheduler.dao.entity.ProjectUser;
import org.apache.dolphinscheduler.dao.entity.TaskInstance;
import java.util.ArrayList;
@@ -94,12 +95,16 @@ public class AlertManager {
* @return process instance format content
*/
public String getContentProcessInstance(ProcessInstance processInstance,
- List<TaskInstance> taskInstances) {
+ List<TaskInstance> taskInstances,
+ ProjectUser projectUser) {
String res = "";
if (processInstance.getState().typeIsSuccess()) {
List<ProcessAlertContent> successTaskList = new ArrayList<>(1);
ProcessAlertContent processAlertContent =
ProcessAlertContent.newBuilder()
+ .projectId(projectUser.getProjectId())
+ .projectName(projectUser.getProjectName())
+ .owner(projectUser.getUserName())
.processId(processInstance.getId())
.processName(processInstance.getName())
.processType(processInstance.getCommandType())
@@ -120,6 +125,9 @@ public class AlertManager {
continue;
}
ProcessAlertContent processAlertContent =
ProcessAlertContent.newBuilder()
+ .projectId(projectUser.getProjectId())
+ .projectName(projectUser.getProjectName())
+ .owner(projectUser.getUserName())
.processId(processInstance.getId())
.processName(processInstance.getName())
.taskId(task.getId())
@@ -196,9 +204,10 @@ public class AlertManager {
* @param taskInstances task instance list
*/
public void sendAlertProcessInstance(ProcessInstance processInstance,
- List<TaskInstance> taskInstances) {
+ List<TaskInstance> taskInstances,
+ ProjectUser projectUser) {
- if(Flag.YES == processInstance.getIsSubProcess()){
+ if (Flag.YES == processInstance.getIsSubProcess()) {
return;
}
boolean sendWarnning = false;
@@ -231,7 +240,7 @@ public class AlertManager {
alert.setTitle(cmdName + " " + success);
ShowType showType = processInstance.getState().typeIsSuccess() ?
ShowType.TEXT : ShowType.TABLE;
alert.setShowType(showType);
- String content = getContentProcessInstance(processInstance,
taskInstances);
+ String content = getContentProcessInstance(processInstance,
taskInstances, projectUser);
alert.setContent(content);
alert.setAlertType(AlertType.EMAIL);
alert.setAlertGroupId(processInstance.getWarningGroupId());
diff --git
a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/AlertManagerTest.java
b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/AlertManagerTest.java
index 598b330..58fea5e 100644
---
a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/AlertManagerTest.java
+++
b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/master/AlertManagerTest.java
@@ -19,9 +19,11 @@ package org.apache.dolphinscheduler.server.master;
import org.apache.dolphinscheduler.common.enums.ExecutionStatus;
import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
+import org.apache.dolphinscheduler.dao.entity.ProjectUser;
import org.apache.dolphinscheduler.dao.entity.TaskInstance;
import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionMapper;
import org.apache.dolphinscheduler.dao.mapper.ProcessInstanceMapper;
+import org.apache.dolphinscheduler.dao.mapper.ProjectMapper;
import org.apache.dolphinscheduler.dao.mapper.TaskInstanceMapper;
import org.apache.dolphinscheduler.server.utils.AlertManager;
import org.junit.Ignore;
@@ -51,6 +53,9 @@ public class AlertManagerTest {
@Autowired
TaskInstanceMapper taskInstanceMapper;
+ @Autowired
+ ProjectMapper projectMapper;
+
AlertManager alertManager;
/**
@@ -90,7 +95,6 @@ public class AlertManagerTest {
ProcessDefinition processDefinition =
processDefinitionMapper.selectById(47);
processInstance.setProcessDefinition(processDefinition);
-
// fault task instance
TaskInstance toleranceTask1 = taskInstanceMapper.selectById(5038);
toleranceTask1.setState(ExecutionStatus.FAILURE);
@@ -101,7 +105,9 @@ public class AlertManagerTest {
toleranceTaskList.add(toleranceTask1);
toleranceTaskList.add(toleranceTask2);
- alertManager.sendAlertProcessInstance(processInstance,
toleranceTaskList);
+ ProjectUser projectUser =
projectMapper.queryProjectWithUserByProcessInstanceId(processInstance.getId());
+
+ alertManager.sendAlertProcessInstance(processInstance,
toleranceTaskList, projectUser);
}
}
diff --git
a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
index d77eb79..aa70ed2 100644
---
a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
+++
b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
@@ -56,6 +56,7 @@ import
org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
import org.apache.dolphinscheduler.dao.entity.ProcessInstanceMap;
import org.apache.dolphinscheduler.dao.entity.Project;
+import org.apache.dolphinscheduler.dao.entity.ProjectUser;
import org.apache.dolphinscheduler.dao.entity.Resource;
import org.apache.dolphinscheduler.dao.entity.Schedule;
import org.apache.dolphinscheduler.dao.entity.TaskInstance;
@@ -1860,6 +1861,15 @@ public class ProcessService {
}
/**
+ * query project name and user name by processInstanceId.
+ * @param processInstanceId processInstanceId
+ * @return projectName and userName
+ */
+ public ProjectUser queryProjectWithUserByProcessInstanceId(int
processInstanceId) {
+ return
projectMapper.queryProjectWithUserByProcessInstanceId(processInstanceId);
+ }
+
+ /**
* get task worker group
*
* @param taskInstance taskInstance