Browse Source

[Feature][UI Next]Add PIGEON Task (#8462)

* Fix field errors in SubProcess

* Add PIGEON Task
labbomb 3 years ago
parent
commit
cd8c5e1c9a

+ 3 - 1
dolphinscheduler-ui-next/src/locales/modules/en_US.ts

@@ -670,7 +670,9 @@ const project = {
     status_code_custom: 'Custom response code',
     body_contains: 'Content includes',
     body_not_contains: 'Content does not contain',
-    http_parameters_position: 'Http Parameters Position'
+    http_parameters_position: 'Http Parameters Position',
+    target_task_name: 'Target Task Name',
+    target_task_name_tips: 'Please enter the Pigeon task name'
   }
 }
 

+ 3 - 1
dolphinscheduler-ui-next/src/locales/modules/zh_CN.ts

@@ -662,7 +662,9 @@ const project = {
     status_code_custom: '自定义响应码',
     body_contains: '内容包含',
     body_not_contains: '内容不包含',
-    http_parameters_position: '参数位置'
+    http_parameters_position: '参数位置',
+    target_task_name: '目标任务名',
+    target_task_name_tips: '请输入Pigeon任务名'
   }
 }
 

+ 1 - 0
dolphinscheduler-ui-next/src/views/projects/task/components/node/fields/index.ts

@@ -29,6 +29,7 @@ export { usePreTasks } from './use-pre-tasks'
 export { useTaskType } from './use-task-type'
 export { useProcessName } from './use-process-name'
 export { useChildNode } from './use-child-node'
+export { useTargetTaskName } from './use-target-task-name'
 
 export { useShell } from './use-shell'
 export { useSpark } from './use-spark'

+ 32 - 0
dolphinscheduler-ui-next/src/views/projects/task/components/node/fields/use-target-task-name.ts

@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { useI18n } from 'vue-i18n'
+import type { IJsonItem } from '../types'
+
+export function useTargetTaskName(): IJsonItem {
+  const { t } = useI18n()
+  return {
+    type: 'input',
+    field: 'targetJobName',
+    name: t('project.node.target_task_name'),
+    props: {
+      placeholder: t('project.node.target_task_name_tips'),
+      maxLength: 100
+    }
+  }
+}

+ 81 - 0
dolphinscheduler-ui-next/src/views/projects/task/components/node/tasks/use-pigeon.ts

@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { reactive } from 'vue'
+import * as Fields from '../fields/index'
+import type { IJsonItem, INodeData, ITaskData } from '../types'
+
+export function usePigeon({
+  projectCode,
+  from = 0,
+  readonly,
+  data
+}: {
+  projectCode: number
+  from?: number
+  readonly?: boolean
+  data?: ITaskData
+}) {
+  const model = reactive({
+    name: '',
+    flag: 'YES',
+    description: '',
+    timeoutFlag: false,
+    localParams: [],
+    environmentCode: null,
+    failRetryInterval: 1,
+    failRetryTimes: 0,
+    workerGroup: 'default',
+    delayTime: 0,
+    timeout: 30,
+    rawScript: ''
+  } as INodeData)
+
+  let extra: IJsonItem[] = []
+  if (from === 1) {
+    extra = [
+      Fields.useTaskType(model, readonly),
+      Fields.useProcessName({
+        model,
+        projectCode,
+        isCreate: !data?.id,
+        from,
+        processName: data?.processName,
+        code: data?.code
+      })
+    ]
+  }
+
+  return {
+    json: [
+      Fields.useName(),
+      ...extra,
+      Fields.useRunFlag(),
+      Fields.useDescription(),
+      Fields.useTaskPriority(),
+      Fields.useWorkerGroup(),
+      Fields.useEnvironmentName(model, !data?.id),
+      ...Fields.useTaskGroup(model, projectCode),
+      ...Fields.useFailed(),
+      Fields.useDelayTime(model),
+      ...Fields.useTimeoutAlarm(model),
+      Fields.useTargetTaskName(),
+      Fields.usePreTasks(model)
+    ] as IJsonItem[],
+    model
+  }
+}

+ 9 - 0
dolphinscheduler-ui-next/src/views/projects/task/components/node/use-task.ts

@@ -18,6 +18,7 @@
 import { useFlink } from './tasks/use-flink'
 import { useShell } from './tasks/use-shell'
 import { useSubProcess } from './tasks/use-sub-process'
+import { usePigeon } from './tasks/use-pigeon'
 import { usePython } from './tasks/use-python'
 import { useSpark } from './tasks/use-spark'
 import { useMr } from './tasks/use-mr'
@@ -93,5 +94,13 @@ export function useTask({
       data
     })
   }
+  if (taskType === 'PIGEON') {
+    node = usePigeon({
+      projectCode,
+      from,
+      readonly,
+      data
+    })
+  }
   return node
 }