You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by so...@apache.org on 2022/04/22 08:30:24 UTC

[dolphinscheduler] branch dev updated: [Feature][UI][V1.0.0-Beta] Add dependent task status in dependent task. (#9663)

This is an automated email from the ASF dual-hosted git repository.

songjian pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new b564e58cf3 [Feature][UI][V1.0.0-Beta] Add dependent task status in dependent task. (#9663)
b564e58cf3 is described below

commit b564e58cf365ef0d065d3527bad9f79a8e15c71c
Author: Amy0104 <97...@users.noreply.github.com>
AuthorDate: Fri Apr 22 16:30:17 2022 +0800

    [Feature][UI][V1.0.0-Beta] Add dependent task status in dependent task. (#9663)
    
    * [Feature][UI][V1.0.0-Beta] Add dependent task status in dependent task.
    
    * [Fix][UI][V1.0.0-Beta] Format back end data.
---
 .../src/store/project/task-node.ts                 | 17 +++++++--
 .../src/store/project/types.ts                     |  9 +++++
 .../task/components/node/fields/use-dependent.ts   | 40 ++++++++++++++++++++--
 .../views/projects/task/components/node/types.ts   |  1 +
 .../workflow/components/dag/use-node-status.ts     |  6 ++++
 5 files changed, 69 insertions(+), 4 deletions(-)

diff --git a/dolphinscheduler-ui-next/src/store/project/task-node.ts b/dolphinscheduler-ui-next/src/store/project/task-node.ts
index ec0df87455..15d7c1be6c 100644
--- a/dolphinscheduler-ui-next/src/store/project/task-node.ts
+++ b/dolphinscheduler-ui-next/src/store/project/task-node.ts
@@ -22,7 +22,9 @@ import type {
   IOption,
   IResource,
   ProgramType,
-  IMainJar
+  IMainJar,
+  DependentResultType,
+  BDependentResultType
 } from './types'
 
 export const useTaskNodeStore = defineStore({
@@ -33,7 +35,8 @@ export const useTaskNodeStore = defineStore({
     preTasks: [],
     resources: [],
     mainJars: {},
-    name: ''
+    name: '',
+    dependentResult: {}
   }),
   persist: true,
   getters: {
@@ -54,6 +57,9 @@ export const useTaskNodeStore = defineStore({
     },
     getName(): string {
       return this.name
+    },
+    getDependentResult(): DependentResultType {
+      return this.dependentResult
     }
   },
   actions: {
@@ -123,6 +129,13 @@ export const useTaskNodeStore = defineStore({
     updateName(name: string) {
       this.name = name
     },
+    updateDependentResult(dependentResult: BDependentResultType) {
+      const result = {} as DependentResultType
+      for (let [key, value] of Object.entries(dependentResult)) {
+        result[key] = value === 'FAILED' ? 'FAILURE' : value
+      }
+      this.dependentResult = result
+    },
     init() {
       this.preTaskOptions = []
       this.postTaskOptions = []
diff --git a/dolphinscheduler-ui-next/src/store/project/types.ts b/dolphinscheduler-ui-next/src/store/project/types.ts
index ce30fb1cc0..99a0e67d17 100644
--- a/dolphinscheduler-ui-next/src/store/project/types.ts
+++ b/dolphinscheduler-ui-next/src/store/project/types.ts
@@ -19,6 +19,12 @@ import type { EditWorkflowDefinition } from '@/views/projects/workflow/component
 import type { IOption } from '@/components/form/types'
 
 type ProgramType = 'JAVA' | 'SCALA' | 'PYTHON'
+type DependentResultType = {
+  [key: string]: 'SUCCESS' | 'WAITING_THREAD' | 'FAILURE'
+}
+type BDependentResultType = {
+  [key: string]: 'SUCCESS' | 'WAITING_THREAD' | 'FAILED'
+}
 
 interface IResource {
   id: number
@@ -37,6 +43,7 @@ interface TaskNodeState {
   resources: IResource[]
   mainJars: { [key in ProgramType]?: IMainJar[] }
   name: string
+  dependentResult: DependentResultType
 }
 export {
   TaskNodeState,
@@ -44,5 +51,7 @@ export {
   IOption,
   IResource,
   ProgramType,
+  DependentResultType,
+  BDependentResultType,
   IMainJar
 }
diff --git a/dolphinscheduler-ui-next/src/views/projects/task/components/node/fields/use-dependent.ts b/dolphinscheduler-ui-next/src/views/projects/task/components/node/fields/use-dependent.ts
index 2d9c059c00..220489dce5 100644
--- a/dolphinscheduler-ui-next/src/views/projects/task/components/node/fields/use-dependent.ts
+++ b/dolphinscheduler-ui-next/src/views/projects/task/components/node/fields/use-dependent.ts
@@ -15,18 +15,32 @@
  * limitations under the License.
  */
 
-import { ref, onMounted, watch } from 'vue'
+import { ref, onMounted, watch, h } from 'vue'
 import { useI18n } from 'vue-i18n'
+import { NIcon } from 'naive-ui'
 import { useRelationCustomParams, useDependentTimeout } from '.'
+import { useTaskNodeStore } from '@/store/project/task-node'
 import { queryAllProjectList } from '@/service/modules/projects'
+import { tasksState } from '@/utils/common'
 import {
   queryProcessDefinitionList,
   getTasksByDefinitionList
 } from '@/service/modules/process-definition'
-import type { IJsonItem, IDependpendItem, IDependTask } from '../types'
+import { Router, useRouter } from 'vue-router'
+import type {
+  IJsonItem,
+  IDependpendItem,
+  IDependTask,
+  ITaskState
+} from '../types'
 
 export function useDependent(model: { [field: string]: any }): IJsonItem[] {
   const { t } = useI18n()
+  const router: Router = useRouter()
+  const nodeStore = useTaskNodeStore()
+
+  const dependentResult = nodeStore.getDependentResult
+  const TasksStateConfig = tasksState(t)
   const projectList = ref([] as { label: string; value: number }[])
   const processCache = {} as {
     [key: number]: { label: string; value: number }[]
@@ -199,6 +213,21 @@ export function useDependent(model: { [field: string]: any }): IJsonItem[] {
     return taskList
   }
 
+  const renderState = (item: {
+    definitionCode: number
+    depTaskCode: number
+    cycle: string
+    dateValue: string
+  }) => {
+    if (!item || router.currentRoute.value.name !== 'workflow-instance-detail')
+      return null
+    const key = `${item.definitionCode}-${item.depTaskCode}-${item.cycle}-${item.dateValue}`
+    const state: ITaskState = dependentResult[key] || 'WAITING_THREAD'
+    return h(NIcon, { size: 24, color: TasksStateConfig[state].color }, () =>
+      h(TasksStateConfig[state].icon)
+    )
+  }
+
   onMounted(() => {
     getProjectList()
   })
@@ -306,6 +335,13 @@ export function useDependent(model: { [field: string]: any }): IJsonItem[] {
             name: ' ',
             options:
               model.dependTaskList[i]?.dependItemList[j]?.dateOptions || []
+          }),
+          (j = 0) => ({
+            type: 'custom',
+            field: 'state',
+            span: 2,
+            name: ' ',
+            widget: renderState(model.dependTaskList[i]?.dependItemList[j])
           })
         ]
       }),
diff --git a/dolphinscheduler-ui-next/src/views/projects/task/components/node/types.ts b/dolphinscheduler-ui-next/src/views/projects/task/components/node/types.ts
index 7e595b754e..70121e650c 100644
--- a/dolphinscheduler-ui-next/src/views/projects/task/components/node/types.ts
+++ b/dolphinscheduler-ui-next/src/views/projects/task/components/node/types.ts
@@ -31,6 +31,7 @@ export type {
   WorkflowInstance
 } from '@/views/projects/workflow/components/dag/types'
 export type { IResource, ProgramType, IMainJar } from '@/store/project/types'
+export type { ITaskState } from '@/utils/types'
 
 type SourceType = 'MYSQL' | 'HDFS' | 'HIVE'
 type ModelType = 'import' | 'export'
diff --git a/dolphinscheduler-ui-next/src/views/projects/workflow/components/dag/use-node-status.ts b/dolphinscheduler-ui-next/src/views/projects/workflow/components/dag/use-node-status.ts
index 2dc7b19b5c..8a36122573 100644
--- a/dolphinscheduler-ui-next/src/views/projects/workflow/components/dag/use-node-status.ts
+++ b/dolphinscheduler-ui-next/src/views/projects/workflow/components/dag/use-node-status.ts
@@ -22,6 +22,7 @@ import { tasksState } from '@/utils/common'
 import { NODE, NODE_STATUS_MARKUP } from './dag-config'
 import { queryTaskListByProcessId } from '@/service/modules/process-instances'
 import NodeStatus from '@/views/projects/workflow/components/dag/dag-node-status'
+import { useTaskNodeStore } from '@/store/project/task-node'
 import type { IWorkflowTaskInstance, ITaskState } from './types'
 import type { Graph } from '@antv/x6'
 import type { Ref } from 'vue'
@@ -40,6 +41,8 @@ export function useNodeStatus(options: Options) {
 
   const { t } = useI18n()
 
+  const nodeStore = useTaskNodeStore()
+
   const setNodeStatus = (
     code: string,
     state: ITaskState,
@@ -76,6 +79,9 @@ export function useNodeStatus(options: Options) {
       if (taskList.value) {
         taskList.value.forEach((taskInstance: any) => {
           setNodeStatus(taskInstance.taskCode, taskInstance.state, taskInstance)
+          nodeStore.updateDependentResult(
+            JSON.parse(taskInstance.dependentResult)
+          )
         })
       }
     })