Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
DolphinScheduler
提交
d84f1ef2
DolphinScheduler
项目概览
apache
/
DolphinScheduler
上一次同步 接近 2 年
通知
707
Star
9572
Fork
3514
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
DolphinScheduler
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
d84f1ef2
编写于
10月 30, 2022
作者:
大数据猿人
提交者:
GitHub
10月 30, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[Improvement][UI] Support to view the process variables on the page of DAG. (#12609)
上级
064fec88
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
222 addition
and
37 deletion
+222
-37
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
...scheduler/api/controller/ProcessDefinitionController.java
+24
-0
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
...in/java/org/apache/dolphinscheduler/api/enums/Status.java
+3
-0
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
...olphinscheduler/api/service/ProcessDefinitionService.java
+9
-0
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
...eduler/api/service/impl/ProcessDefinitionServiceImpl.java
+91
-0
dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionControllerTest.java
...duler/api/controller/ProcessDefinitionControllerTest.java
+14
-0
dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
...inscheduler/api/service/ProcessDefinitionServiceTest.java
+22
-0
dolphinscheduler-ui/src/service/modules/process-definition/index.ts
...eduler-ui/src/service/modules/process-definition/index.ts
+8
-0
dolphinscheduler-ui/src/service/modules/process-instances/index.ts
...heduler-ui/src/service/modules/process-instances/index.ts
+1
-0
dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag-toolbar.tsx
...rc/views/projects/workflow/components/dag/dag-toolbar.tsx
+34
-32
dolphinscheduler-ui/src/views/projects/workflow/instance/components/variables-view.tsx
.../projects/workflow/instance/components/variables-view.tsx
+16
-5
未找到文件。
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
浏览文件 @
d84f1ef2
...
...
@@ -27,6 +27,7 @@ import static org.apache.dolphinscheduler.api.enums.Status.ENCAPSULATION_TREEVIE
import
static
org
.
apache
.
dolphinscheduler
.
api
.
enums
.
Status
.
GET_TASKS_LIST_BY_PROCESS_DEFINITION_ID_ERROR
;
import
static
org
.
apache
.
dolphinscheduler
.
api
.
enums
.
Status
.
IMPORT_PROCESS_DEFINE_ERROR
;
import
static
org
.
apache
.
dolphinscheduler
.
api
.
enums
.
Status
.
QUERY_DETAIL_OF_PROCESS_DEFINITION_ERROR
;
import
static
org
.
apache
.
dolphinscheduler
.
api
.
enums
.
Status
.
QUERY_PROCESS_DEFINITION_ALL_VARIABLES_ERROR
;
import
static
org
.
apache
.
dolphinscheduler
.
api
.
enums
.
Status
.
QUERY_PROCESS_DEFINITION_LIST
;
import
static
org
.
apache
.
dolphinscheduler
.
api
.
enums
.
Status
.
QUERY_PROCESS_DEFINITION_LIST_PAGING_ERROR
;
import
static
org
.
apache
.
dolphinscheduler
.
api
.
enums
.
Status
.
QUERY_PROCESS_DEFINITION_VERSIONS_ERROR
;
...
...
@@ -872,4 +873,27 @@ public class ProcessDefinitionController extends BaseController {
return
returnDataList
(
processDefinitionService
.
releaseWorkflowAndSchedule
(
loginUser
,
projectCode
,
code
,
releaseState
));
}
/**
* query process definition global variables and local variables
*
* @param loginUser login user
* @param code process definition code
* @return variables data
*/
@Operation
(
summary
=
"viewVariables"
,
description
=
"QUERY_PROCESS_DEFINITION_GLOBAL_VARIABLES_AND_LOCAL_VARIABLES_NOTES"
)
@Parameters
({
@Parameter
(
name
=
"code"
,
description
=
"PROCESS_DEFINITION_CODE"
,
required
=
true
,
schema
=
@Schema
(
implementation
=
long
.
class
,
example
=
"100"
))
})
@GetMapping
(
value
=
"/{code}/view-variables"
)
@ResponseStatus
(
HttpStatus
.
OK
)
@ApiException
(
QUERY_PROCESS_DEFINITION_ALL_VARIABLES_ERROR
)
@AccessLogAnnotation
public
Result
viewVariables
(
@Parameter
(
hidden
=
true
)
@RequestAttribute
(
value
=
Constants
.
SESSION_USER
)
User
loginUser
,
@Parameter
(
name
=
"projectCode"
,
description
=
"PROJECT_CODE"
,
required
=
true
)
@PathVariable
long
projectCode
,
@PathVariable
(
"code"
)
Long
code
)
{
Map
<
String
,
Object
>
result
=
processDefinitionService
.
viewVariables
(
loginUser
,
projectCode
,
code
);
return
returnDataList
(
result
);
}
}
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
浏览文件 @
d84f1ef2
...
...
@@ -504,6 +504,9 @@ public enum Status {
USER_PASSWORD_LENGTH_ERROR
(
1300017
,
"user's password length error"
,
"用户密码长度错误"
),
QUERY_CAN_USE_K8S_NAMESPACE_ERROR
(
1300018
,
"login user query can used namespace list error"
,
"查询可用命名空间错误"
),
QUERY_PROCESS_DEFINITION_ALL_VARIABLES_ERROR
(
1300100
,
"query process definition all variables error"
,
"查询工作流自定义变量信息错误"
),
NO_CURRENT_OPERATING_PERMISSION
(
1400001
,
"The current user does not have this permission."
,
"当前用户无此权限"
),
FUNCTION_DISABLED
(
1400002
,
"The current feature is disabled."
,
"当前功能已被禁用"
),
SCHEDULE_TIME_NUMBER
(
1400003
,
"The number of complement dates exceed 100."
,
"补数日期个数超过100"
),
...
...
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
浏览文件 @
d84f1ef2
...
...
@@ -522,4 +522,13 @@ public interface ProcessDefinitionService {
* @return Json String
*/
String
doOtherOperateProcess
(
User
loginUser
,
ProcessDefinition
processDefinition
);
/**
* view process variables
* @param loginUser login user
* @param projectCode project code
* @param code process definition code
* @return variables data
*/
Map
<
String
,
Object
>
viewVariables
(
User
loginUser
,
long
projectCode
,
long
code
);
}
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
浏览文件 @
d84f1ef2
...
...
@@ -31,11 +31,17 @@ import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationCon
import
static
org
.
apache
.
dolphinscheduler
.
api
.
constants
.
ApiFuncIdentificationConstant
.
WORKFLOW_SWITCH_TO_THIS_VERSION
;
import
static
org
.
apache
.
dolphinscheduler
.
api
.
constants
.
ApiFuncIdentificationConstant
.
WORKFLOW_TREE_VIEW
;
import
static
org
.
apache
.
dolphinscheduler
.
api
.
constants
.
ApiFuncIdentificationConstant
.
WORKFLOW_UPDATE
;
import
static
org
.
apache
.
dolphinscheduler
.
api
.
enums
.
Status
.
PROCESS_DEFINE_NOT_EXIST
;
import
static
org
.
apache
.
dolphinscheduler
.
common
.
constants
.
CommandKeyConstants
.
CMD_PARAM_SUB_PROCESS_DEFINE_CODE
;
import
static
org
.
apache
.
dolphinscheduler
.
common
.
constants
.
Constants
.
COPY_SUFFIX
;
import
static
org
.
apache
.
dolphinscheduler
.
common
.
constants
.
Constants
.
DATA_LIST
;
import
static
org
.
apache
.
dolphinscheduler
.
common
.
constants
.
Constants
.
DEFAULT_WORKER_GROUP
;
import
static
org
.
apache
.
dolphinscheduler
.
common
.
constants
.
Constants
.
EMPTY_STRING
;
import
static
org
.
apache
.
dolphinscheduler
.
common
.
constants
.
Constants
.
GLOBAL_PARAMS
;
import
static
org
.
apache
.
dolphinscheduler
.
common
.
constants
.
Constants
.
IMPORT_SUFFIX
;
import
static
org
.
apache
.
dolphinscheduler
.
common
.
constants
.
Constants
.
LOCAL_PARAMS
;
import
static
org
.
apache
.
dolphinscheduler
.
plugin
.
task
.
api
.
TaskConstants
.
LOCAL_PARAMS_LIST
;
import
static
org
.
apache
.
dolphinscheduler
.
plugin
.
task
.
api
.
TaskConstants
.
TASK_TYPE
;
import
static
org
.
apache
.
dolphinscheduler
.
plugin
.
task
.
api
.
TaskConstants
.
TASK_TYPE_SQL
;
import
org.apache.dolphinscheduler.api.dto.DagDataSchedule
;
...
...
@@ -106,6 +112,7 @@ import org.apache.dolphinscheduler.dao.repository.ProcessDefinitionDao;
import
org.apache.dolphinscheduler.dao.repository.TaskDefinitionLogDao
;
import
org.apache.dolphinscheduler.plugin.task.api.enums.SqlType
;
import
org.apache.dolphinscheduler.plugin.task.api.enums.TaskTimeoutStrategy
;
import
org.apache.dolphinscheduler.plugin.task.api.model.Property
;
import
org.apache.dolphinscheduler.plugin.task.api.parameters.ParametersNode
;
import
org.apache.dolphinscheduler.plugin.task.api.parameters.SqlParameters
;
import
org.apache.dolphinscheduler.service.model.TaskNode
;
...
...
@@ -133,6 +140,7 @@ import java.util.Map;
import
java.util.Objects
;
import
java.util.Optional
;
import
java.util.Set
;
import
java.util.TreeSet
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
...
...
@@ -2896,6 +2904,89 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro
return
null
;
}
/**
* view process variables
* @param loginUser login user
* @param projectCode project code
* @param code process definition code
* @return variables data
*/
@Override
public
Map
<
String
,
Object
>
viewVariables
(
User
loginUser
,
long
projectCode
,
long
code
)
{
Project
project
=
projectMapper
.
queryByCode
(
projectCode
);
// check user access for project
Map
<
String
,
Object
>
result
=
projectService
.
checkProjectAndAuth
(
loginUser
,
project
,
projectCode
,
WORKFLOW_DEFINITION
);
if
(
result
.
get
(
Constants
.
STATUS
)
!=
Status
.
SUCCESS
)
{
return
result
;
}
ProcessDefinition
processDefinition
=
processDefinitionMapper
.
queryByCode
(
code
);
if
(
Objects
.
isNull
(
processDefinition
)
||
projectCode
!=
processDefinition
.
getProjectCode
())
{
logger
.
error
(
"Process definition does not exist, projectCode:{}, processDefinitionCode:{}."
,
projectCode
,
code
);
putMsg
(
result
,
PROCESS_DEFINE_NOT_EXIST
,
code
);
return
result
;
}
// global params
List
<
Property
>
globalParams
=
processDefinition
.
getGlobalParamList
();
Map
<
String
,
Map
<
String
,
Object
>>
localUserDefParams
=
getLocalParams
(
processDefinition
);
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
if
(
Objects
.
nonNull
(
globalParams
))
{
resultMap
.
put
(
GLOBAL_PARAMS
,
globalParams
);
}
if
(
Objects
.
nonNull
(
localUserDefParams
))
{
resultMap
.
put
(
LOCAL_PARAMS
,
localUserDefParams
);
}
result
.
put
(
DATA_LIST
,
resultMap
);
putMsg
(
result
,
Status
.
SUCCESS
);
return
result
;
}
/**
* get local params
*/
private
Map
<
String
,
Map
<
String
,
Object
>>
getLocalParams
(
ProcessDefinition
processDefinition
)
{
Map
<
String
,
Map
<
String
,
Object
>>
localUserDefParams
=
new
HashMap
<>();
Set
<
Long
>
taskCodeSet
=
new
TreeSet
<>();
processTaskRelationMapper
.
queryByProcessCode
(
processDefinition
.
getProjectCode
(),
processDefinition
.
getCode
())
.
forEach
(
processTaskRelation
->
{
if
(
processTaskRelation
.
getPreTaskCode
()
>
0
)
{
taskCodeSet
.
add
(
processTaskRelation
.
getPreTaskCode
());
}
if
(
processTaskRelation
.
getPostTaskCode
()
>
0
)
{
taskCodeSet
.
add
(
processTaskRelation
.
getPostTaskCode
());
}
});
taskDefinitionMapper
.
queryByCodeList
(
taskCodeSet
)
.
stream
().
forEach
(
taskDefinition
->
{
Map
<
String
,
Object
>
localParamsMap
=
new
HashMap
<>();
String
localParams
=
JSONUtils
.
getNodeString
(
taskDefinition
.
getTaskParams
(),
LOCAL_PARAMS
);
if
(!
StringUtils
.
isEmpty
(
localParams
))
{
List
<
Property
>
localParamsList
=
JSONUtils
.
toList
(
localParams
,
Property
.
class
);
localParamsMap
.
put
(
TASK_TYPE
,
taskDefinition
.
getTaskType
());
localParamsMap
.
put
(
LOCAL_PARAMS_LIST
,
localParamsList
);
if
(
CollectionUtils
.
isNotEmpty
(
localParamsList
))
{
localUserDefParams
.
put
(
taskDefinition
.
getName
(),
localParamsMap
);
}
}
});
return
localUserDefParams
;
}
/**
* delete other relation
* @param project
...
...
dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionControllerTest.java
浏览文件 @
d84f1ef2
...
...
@@ -431,4 +431,18 @@ public class ProcessDefinitionControllerTest {
Assertions
.
assertEquals
(
Status
.
SUCCESS
.
getCode
(),
(
int
)
result
.
getCode
());
}
@Test
public
void
testViewVariables
()
{
long
projectCode
=
1L
;
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
putMsg
(
resultMap
,
Status
.
SUCCESS
);
Mockito
.
when
(
processDefinitionService
.
viewVariables
(
user
,
projectCode
,
1
))
.
thenReturn
(
resultMap
);
Result
result
=
processDefinitionController
.
viewVariables
(
user
,
projectCode
,
1L
);
Assertions
.
assertEquals
(
Status
.
SUCCESS
.
getCode
(),
result
.
getCode
().
intValue
());
}
}
dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
浏览文件 @
d84f1ef2
...
...
@@ -1060,6 +1060,28 @@ public class ProcessDefinitionServiceTest extends BaseServiceTestTool {
Assertions
.
assertEquals
(
processDefinition
,
processDefinitionUpdate
);
}
@Test
public
void
testViewVariables
()
{
Mockito
.
when
(
projectMapper
.
queryByCode
(
projectCode
)).
thenReturn
(
getProject
(
projectCode
));
Project
project
=
getProject
(
projectCode
);
ProcessDefinition
processDefinition
=
getProcessDefinition
();
Map
<
String
,
Object
>
result
=
new
HashMap
<>();
putMsg
(
result
,
Status
.
PROJECT_NOT_FOUND
,
projectCode
);
// project check auth fail
Mockito
.
when
(
projectService
.
checkProjectAndAuth
(
user
,
project
,
projectCode
,
WORKFLOW_DEFINITION
))
.
thenReturn
(
result
);
Map
<
String
,
Object
>
map
=
processDefinitionService
.
viewVariables
(
user
,
processDefinition
.
getProjectCode
(),
processDefinition
.
getCode
());
Assertions
.
assertEquals
(
Status
.
PROJECT_NOT_FOUND
,
map
.
get
(
Constants
.
STATUS
));
}
/**
* get mock processDefinition
*
...
...
dolphinscheduler-ui/src/service/modules/process-definition/index.ts
浏览文件 @
d84f1ef2
...
...
@@ -247,3 +247,11 @@ export function viewTree(
params
})
}
export
function
viewProcessDefinitionVariables
(
code
:
number
,
processCode
:
number
):
any
{
return
axios
({
url
:
`/projects/
${
code
}
/process-definition/
${
processCode
}
/view-variables`
,
method
:
'
get
'
})
}
dolphinscheduler-ui/src/service/modules/process-instances/index.ts
浏览文件 @
d84f1ef2
...
...
@@ -130,3 +130,4 @@ export function viewVariables(id: number, code: number): any {
method
:
'
get
'
})
}
dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag-toolbar.tsx
浏览文件 @
d84f1ef2
...
...
@@ -215,48 +215,50 @@ export default defineComponent({
}
}
></
NTooltip
>
)
}
<
div
class
=
{
Styles
[
'
toolbar-left-part
'
]
}
>
{
route
.
name
!==
'
workflow-instance-detail
'
&&
props
.
definition
?.
processDefinition
?.
releaseState
===
'
ONLINE
'
&&
(
<
NTag
round
size
=
'small'
type
=
'info'
>
{
t
(
'
project.dag.online
'
)
}
</
NTag
>
)
}
{
route
.
name
===
'
workflow-instance-detail
'
&&
(
<>
<
NTooltip
v
-
slots
=
{
{
trigger
:
()
=>
(
{
props
.
definition
?.
processDefinition
?.
name
&&
(
<
NTooltip
v
-
slots
=
{
{
trigger
:
()
=>
(
<
NPopover
placement
=
'bottom'
trigger
=
'click'
scrollable
style
=
{
{
maxWidth
:
'
50vw
'
,
maxHeight
:
'
70vh
'
}
}
placement
=
'bottom'
trigger
=
'click'
scrollable
style
=
{
{
maxWidth
:
'
50vw
'
,
maxHeight
:
'
70vh
'
}
}
>
{
{
trigger
:
()
=>
(
<
NButton
quaternary
circle
class
=
{
Styles
[
'
toolbar-btn
'
]
}
>
<
NIcon
>
<
FundViewOutlined
/>
</
NIcon
>
</
NButton
>
<
NButton
quaternary
circle
class
=
{
Styles
[
'
toolbar-btn
'
]
}
>
<
NIcon
>
<
FundViewOutlined
/>
</
NIcon
>
</
NButton
>
),
header
:
()
=>
(
<
NText
strong
depth
=
{
1
}
>
{
t
(
'
project.workflow.parameters_variables
'
)
}
</
NText
>
<
NText
strong
depth
=
{
1
}
>
{
t
(
'
project.workflow.parameters_variables
'
)
}
</
NText
>
),
default
:
()
=>
<
VariablesView
onCopy
=
{
copy
}
/>
}
}
</
NPopover
>
),
default
:
()
=>
t
(
'
project.dag.view_variables
'
)
}
}
></
NTooltip
>
),
default
:
()
=>
t
(
'
project.dag.view_variables
'
)
}
}
></
NTooltip
>
)
}
<
div
class
=
{
Styles
[
'
toolbar-left-part
'
]
}
>
{
route
.
name
!==
'
workflow-instance-detail
'
&&
props
.
definition
?.
processDefinition
?.
releaseState
===
'
ONLINE
'
&&
(
<
NTag
round
size
=
'small'
type
=
'info'
>
{
t
(
'
project.dag.online
'
)
}
</
NTag
>
)
}
{
route
.
name
===
'
workflow-instance-detail
'
&&
(
<>
<
NTooltip
v
-
slots
=
{
{
trigger
:
()
=>
(
...
...
dolphinscheduler-ui/src/views/projects/workflow/instance/components/variables-view.tsx
浏览文件 @
d84f1ef2
...
...
@@ -19,9 +19,11 @@ import { useRoute } from 'vue-router'
import
{
defineComponent
,
onMounted
,
ref
,
computed
}
from
'
vue
'
import
{
useI18n
}
from
'
vue-i18n
'
import
{
viewVariables
}
from
'
@/service/modules/process-instances
'
import
{
viewProcessDefinitionVariables
}
from
"
@/service/modules/process-definition
"
;
import
styles
from
'
./variables.module.scss
'
import
{
NButton
}
from
'
naive-ui
'
export
default
defineComponent
({
name
:
'
variables-view
'
,
emits
:
[
'
copy
'
],
...
...
@@ -30,20 +32,29 @@ export default defineComponent({
const
route
=
useRoute
()
const
projectCode
=
Number
(
route
.
params
.
projectCode
)
const
instanceId
=
Number
(
route
.
params
.
id
)
const
processCode
=
Number
(
route
.
params
.
code
)
const
globalParams
=
computed
(()
=>
{
return
paramsRef
.
value
?
paramsRef
.
value
.
globalParams
:
[]
return
paramsRef
.
value
&&
paramsRef
.
value
.
globalParams
?
paramsRef
.
value
.
globalParams
:
[]
})
const
localParams
=
computed
(()
=>
{
return
paramsRef
.
value
?
paramsRef
.
value
.
localParams
:
{}
return
paramsRef
.
value
&&
paramsRef
.
value
.
localParams
?
paramsRef
.
value
.
localParams
:
{}
})
const
getViewVariables
=
()
=>
{
viewVariables
(
instanceId
,
projectCode
).
then
((
res
:
any
)
=>
{
paramsRef
.
value
=
res
})
if
(
Number
.
isNaN
(
instanceId
))
{
viewProcessDefinitionVariables
(
projectCode
,
processCode
).
then
((
res
:
any
)
=>
{
paramsRef
.
value
=
res
})
}
else
{
viewVariables
(
instanceId
,
projectCode
).
then
((
res
:
any
)
=>
{
paramsRef
.
value
=
res
})
}
}
const
handleCopy
=
(
text
:
string
)
=>
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录