Browse Source

[Feature-8735][UI Next][V1.0.0-Alpha] Added the form of the EMR task. (#8766)

* add two icons

* developed the form of the emr task
3.0.0/version-upgrade
calvin 2 years ago committed by GitHub
parent
commit
fcbaaf5de6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2737
      dolphinscheduler-ui-next/pnpm-lock.yaml
  2. BIN
      dolphinscheduler-ui-next/src/assets/images/task-icons/emr.png
  3. BIN
      dolphinscheduler-ui-next/src/assets/images/task-icons/emr_hover.png
  4. 4
      dolphinscheduler-ui-next/src/locales/modules/en_US.ts
  5. 4
      dolphinscheduler-ui-next/src/locales/modules/zh_CN.ts
  6. 1
      dolphinscheduler-ui-next/src/views/projects/task/components/node/fields/index.ts
  7. 144
      dolphinscheduler-ui-next/src/views/projects/task/components/node/fields/use-emr.ts
  8. 10
      dolphinscheduler-ui-next/src/views/projects/task/components/node/format-data.ts
  9. 4
      dolphinscheduler-ui-next/src/views/projects/task/components/node/tasks/index.ts
  10. 82
      dolphinscheduler-ui-next/src/views/projects/task/components/node/tasks/use-emr.ts
  11. 1
      dolphinscheduler-ui-next/src/views/projects/task/components/node/types.ts
  12. 3
      dolphinscheduler-ui-next/src/views/projects/task/constants/task-type.ts
  13. 6
      dolphinscheduler-ui-next/src/views/projects/workflow/components/dag/dag.module.scss

2737
dolphinscheduler-ui-next/pnpm-lock.yaml

File diff suppressed because it is too large Load Diff

BIN
dolphinscheduler-ui-next/src/assets/images/task-icons/emr.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1015 B

BIN
dolphinscheduler-ui-next/src/assets/images/task-icons/emr_hover.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

4
dolphinscheduler-ui-next/src/locales/modules/en_US.ts

@ -887,7 +887,9 @@ const project = {
enum_list: 'EnumList',
begin_time: 'BeginTime',
fix_value: 'FixValue',
required: 'required'
required: 'required',
emr_flow_define_json: 'jobFlowDefineJson',
emr_flow_define_json_tips: 'Please enter the definition of the job flow.'
}
}

4
dolphinscheduler-ui-next/src/locales/modules/zh_CN.ts

@ -877,7 +877,9 @@ const project = {
enum_list: '枚举值列表',
begin_time: '起始时间',
fix_value: '固定值',
required: '必填'
required: '必填',
emr_flow_define_json: 'jobFlowDefineJson',
emr_flow_define_json_tips: '请输入工作流定义'
}
}

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

@ -59,3 +59,4 @@ export { useSwitch } from './use-switch'
export { useDataX } from './use-datax'
export { useConditions } from './use-conditions'
export { useDependent } from './use-dependent'
export { useEmr } from './use-emr'

144
dolphinscheduler-ui-next/src/views/projects/task/components/node/fields/use-emr.ts

@ -0,0 +1,144 @@
/*
* 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 useEmr(model: { [field: string]: any }): IJsonItem[] {
const { t } = useI18n()
return [
{
type: 'editor',
field: 'jobFlowDefineJson',
name: t('project.node.emr_flow_define_json'),
props: {
language: 'json'
},
validate: {
trigger: ['input', 'trigger'],
required: true,
message: t('project.node.emr_flow_define_json_tips')
}
},
{
type: 'custom-parameters',
field: 'localParams',
name: t('project.node.custom_parameters'),
children: [
{
type: 'input',
field: 'prop',
span: 6,
props: {
placeholder: t('project.node.prop_tips'),
maxLength: 256
},
validate: {
trigger: ['input', 'blur'],
required: true,
validator(validate: any, value: string) {
if (!value) {
return new Error(t('project.node.prop_tips'))
}
const sameItems = model.localParams.filter(
(item: { prop: string }) => item.prop === value
)
if (sameItems.length > 1) {
return new Error(t('project.node.prop_repeat'))
}
}
}
},
{
type: 'select',
field: 'direct',
span: 4,
options: DIRECT_LIST,
value: 'IN'
},
{
type: 'select',
field: 'type',
span: 6,
options: TYPE_LIST,
value: 'VARCHAR'
},
{
type: 'input',
field: 'value',
span: 6,
props: {
placeholder: t('project.node.value_tips'),
maxLength: 256
}
}
]
}
]
}
export const TYPE_LIST = [
{
value: 'VARCHAR',
label: 'VARCHAR'
},
{
value: 'INTEGER',
label: 'INTEGER'
},
{
value: 'LONG',
label: 'LONG'
},
{
value: 'FLOAT',
label: 'FLOAT'
},
{
value: 'DOUBLE',
label: 'DOUBLE'
},
{
value: 'DATE',
label: 'DATE'
},
{
value: 'TIME',
label: 'TIME'
},
{
value: 'TIMESTAMP',
label: 'TIMESTAMP'
},
{
value: 'BOOLEAN',
label: 'BOOLEAN'
}
]
export const DIRECT_LIST = [
{
value: 'IN',
label: 'IN'
},
{
value: 'OUT',
label: 'OUT'
}
]

10
dolphinscheduler-ui-next/src/views/projects/task/components/node/format-data.ts

@ -276,6 +276,11 @@ export function formatParams(data: INodeData): {
}
}
if (data.taskType === 'EMR') {
taskParams.type = data.type
taskParams.jobFlowDefineJson = data.jobFlowDefineJson
}
const params = {
processDefinitionCode: data.processName ? String(data.processName) : '',
upstreamCodes: data?.preTasks?.join(','),
@ -447,6 +452,11 @@ export function formatModel(data: ITaskData) {
params.numExecutors = data.numExecutors
params.others = data.others
}
if (data.taskParams?.jobFlowDefineJson) {
params.jobFlowDefineJson = data.taskParams.jobFlowDefineJson
}
return params
}

4
dolphinscheduler-ui-next/src/views/projects/task/components/node/tasks/index.ts

@ -32,6 +32,7 @@ import { useConditions } from './use-conditions'
import { useDataX } from './use-datax'
import { useDependent } from './use-dependent'
import { useDataQuality } from './use-data-quality'
import { useEmr } from './use-emr'
export default {
SHELL: useShell,
@ -50,5 +51,6 @@ export default {
CONDITIONS: useConditions,
DATAX: useDataX,
DEPENDENT: useDependent,
DATA_QUALITY: useDataQuality
DATA_QUALITY: useDataQuality,
EMR: useEmr
}

82
dolphinscheduler-ui-next/src/views/projects/task/components/node/tasks/use-emr.ts

@ -0,0 +1,82 @@
/*
* 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 } from '../types'
import { ITaskData } from '../types'
export function useEmr({
projectCode,
from = 0,
readonly,
data
}: {
projectCode: number
from?: number
readonly?: boolean
data?: ITaskData
}) {
const model = reactive({
name: '',
taskType: 'EMR',
flag: 'YES',
description: '',
timeoutFlag: false,
localParams: [],
environmentCode: null,
failRetryInterval: 1,
failRetryTimes: 0,
workerGroup: 'default',
delayTime: 0,
timeout: 30
} 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, !model.id),
...Fields.useTaskGroup(model, projectCode),
...Fields.useFailed(),
Fields.useDelayTime(model),
...Fields.useTimeoutAlarm(model),
...Fields.useEmr(model),
Fields.usePreTasks(model)
] as IJsonItem[],
model
}
}

1
dolphinscheduler-ui-next/src/views/projects/task/components/node/types.ts

@ -270,6 +270,7 @@ interface ITaskParams {
sparkParameters?: ISparkParameters
ruleId?: number
ruleInputParameter?: IRuleParameters
jobFlowDefineJson?: string
}
interface INodeData

3
dolphinscheduler-ui-next/src/views/projects/task/constants/task-type.ts

@ -66,6 +66,9 @@ export const TASK_TYPES_MAP = {
},
SEATUNNEL: {
alias: 'WATERDROP'
},
EMR: {
alias: 'AmazonEMR'
}
}

6
dolphinscheduler-ui-next/src/views/projects/workflow/components/dag/dag.module.scss

@ -149,6 +149,9 @@ $bgLight: #ffffff;
&.icon-switch {
background-image: url('@/assets/images/task-icons/switch.png');
}
&.icon-emr {
background-image: url('@/assets/images/task-icons/emr.png');
}
}
&:hover {
@ -201,6 +204,9 @@ $bgLight: #ffffff;
&.icon-switch {
background-image: url('@/assets/images/task-icons/switch_hover.png');
}
&.icon-emr {
background-image: url('@/assets/images/task-icons/emr_hover.png');
}
}
}
}

Loading…
Cancel
Save