Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
dlink
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zhaowei
dlink
Commits
6e735863
Commit
6e735863
authored
May 26, 2022
by
wenmo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Feature-534][admin,web] Add task open API page
parent
73bb3184
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
302 additions
and
31 deletions
+302
-31
APIController.java
...min/src/main/java/com/dlink/controller/APIController.java
+48
-5
TaskController.java
...in/src/main/java/com/dlink/controller/TaskController.java
+22
-5
TaskService.java
dlink-admin/src/main/java/com/dlink/service/TaskService.java
+4
-2
TaskServiceImpl.java
...src/main/java/com/dlink/service/impl/TaskServiceImpl.java
+60
-14
index.tsx
dlink-web/src/components/Studio/StudioMenu/index.tsx
+29
-5
index.tsx
dlink-web/src/pages/API/TaskAPI/index.tsx
+134
-0
service.ts
dlink-web/src/pages/API/service.ts
+5
-0
No files found.
dlink-admin/src/main/java/com/dlink/controller/APIController.java
View file @
6e735863
package
com
.
dlink
.
controller
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.dlink.common.result.Result
;
import
com.dlink.dto.*
;
import
com.dlink.dto.APICancelDTO
;
import
com.dlink.dto.APIExecuteJarDTO
;
import
com.dlink.dto.APIExecuteSqlDTO
;
import
com.dlink.dto.APIExplainSqlDTO
;
import
com.dlink.dto.APISavePointDTO
;
import
com.dlink.dto.APISavePointTaskDTO
;
import
com.dlink.service.APIService
;
import
com.dlink.service.StudioService
;
import
com.dlink.service.TaskService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
/**
* APIController
...
...
@@ -27,7 +39,7 @@ public class APIController {
@Autowired
private
TaskService
taskService
;
@GetMapping
(
value
=
"/submitTask"
)
@GetMapping
(
"/submitTask"
)
public
Result
submitTask
(
@RequestParam
Integer
id
)
{
return
Result
.
succeed
(
taskService
.
submitTask
(
id
),
"执行成功"
);
}
...
...
@@ -74,7 +86,38 @@ public class APIController {
@PostMapping
(
"/savepointTask"
)
public
Result
savepointTask
(
@RequestBody
APISavePointTaskDTO
apiSavePointTaskDTO
)
{
return
Result
.
succeed
(
taskService
.
savepointTask
(
apiSavePointTaskDTO
.
getTaskId
(),
apiSavePointTaskDTO
.
getType
()),
"执行成功"
);
return
Result
.
succeed
(
taskService
.
savepointTask
(
apiSavePointTaskDTO
.
getTaskId
(),
apiSavePointTaskDTO
.
getType
()),
"执行成功"
);
}
/**
* 重启任务
*/
@GetMapping
(
"/restartTask"
)
public
Result
restartTask
(
@RequestParam
Integer
id
)
{
return
Result
.
succeed
(
taskService
.
restartTask
(
id
),
"重启成功"
);
}
/**
* 上线任务
*/
@GetMapping
(
"/onLineTask"
)
public
Result
onLineTask
(
@RequestParam
Integer
id
)
{
return
taskService
.
onLineTask
(
id
);
}
/**
* 下线任务
*/
@GetMapping
(
"/offLineTask"
)
public
Result
offLineTask
(
@RequestParam
Integer
id
)
{
return
taskService
.
offLineTask
(
id
,
null
);
}
/**
* 重新上线任务
*/
@GetMapping
(
"/reOnLineTask"
)
public
Result
reOnLineTask
(
@RequestParam
Integer
id
)
{
return
taskService
.
reOnLineTask
(
id
);
}
}
dlink-admin/src/main/java/com/dlink/controller/TaskController.java
View file @
6e735863
package
com
.
dlink
.
controller
;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.DeleteMapping
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.PutMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.dlink.common.result.ProTableResult
;
import
com.dlink.common.result.Result
;
import
com.dlink.job.JobResult
;
import
com.dlink.model.Task
;
import
com.dlink.service.TaskService
;
import
com.fasterxml.jackson.databind.JsonNode
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.ArrayList
;
import
java.util.List
;
import
lombok.extern.slf4j.Slf4j
;
/**
* 任务 Controller
...
...
@@ -180,5 +189,13 @@ public class TaskController {
return
Result
.
succeed
(
taskService
.
restartTask
(
id
),
"重启成功"
);
}
}
/**
* 获取当前的 API 的地址
*/
@GetMapping
(
value
=
"/getTaskAPIAddress"
)
public
Result
getTaskAPIAddress
()
{
return
Result
.
succeed
(
taskService
.
getTaskAPIAddress
(),
"重启成功"
);
}
}
dlink-admin/src/main/java/com/dlink/service/TaskService.java
View file @
6e735863
package
com
.
dlink
.
service
;
import
java.util.List
;
import
com.dlink.common.result.Result
;
import
com.dlink.db.service.ISuperService
;
import
com.dlink.job.JobResult
;
...
...
@@ -9,8 +11,6 @@ import com.dlink.model.JobInstance;
import
com.dlink.model.Task
;
import
com.dlink.result.SqlExplainResult
;
import
java.util.List
;
/**
* 作业 服务类
*
...
...
@@ -56,4 +56,6 @@ public interface TaskService extends ISuperService<Task> {
JobInstance
refreshJobInstance
(
Integer
id
,
boolean
isCoercive
);
JobInfoDetail
refreshJobInfoDetail
(
Integer
id
);
String
getTaskAPIAddress
();
}
dlink-admin/src/main/java/com/dlink/service/impl/TaskServiceImpl.java
View file @
6e735863
package
com
.
dlink
.
service
.
impl
;
import
java.net.InetAddress
;
import
java.net.UnknownHostException
;
import
java.time.Duration
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.dlink.alert.Alert
;
import
com.dlink.alert.AlertConfig
;
...
...
@@ -11,6 +23,7 @@ import com.dlink.assertion.Tips;
import
com.dlink.common.result.Result
;
import
com.dlink.config.Dialect
;
import
com.dlink.constant.FlinkRestResultConstant
;
import
com.dlink.constant.NetConstant
;
import
com.dlink.daemon.task.DaemonFactory
;
import
com.dlink.daemon.task.DaemonTaskConfig
;
import
com.dlink.db.service.impl.SuperServiceImpl
;
...
...
@@ -21,26 +34,44 @@ import com.dlink.gateway.config.SavePointStrategy;
import
com.dlink.gateway.config.SavePointType
;
import
com.dlink.gateway.model.JobInfo
;
import
com.dlink.gateway.result.SavePointResult
;
import
com.dlink.job.*
;
import
com.dlink.job.FlinkJobTask
;
import
com.dlink.job.Job
;
import
com.dlink.job.JobConfig
;
import
com.dlink.job.JobManager
;
import
com.dlink.job.JobResult
;
import
com.dlink.mapper.TaskMapper
;
import
com.dlink.metadata.driver.Driver
;
import
com.dlink.metadata.result.JdbcSelectResult
;
import
com.dlink.model.*
;
import
com.dlink.model.AlertGroup
;
import
com.dlink.model.AlertHistory
;
import
com.dlink.model.AlertInstance
;
import
com.dlink.model.Cluster
;
import
com.dlink.model.DataBase
;
import
com.dlink.model.Jar
;
import
com.dlink.model.JobHistory
;
import
com.dlink.model.JobInfoDetail
;
import
com.dlink.model.JobInstance
;
import
com.dlink.model.JobLifeCycle
;
import
com.dlink.model.JobStatus
;
import
com.dlink.model.Savepoints
;
import
com.dlink.model.Statement
;
import
com.dlink.model.SystemConfiguration
;
import
com.dlink.model.Task
;
import
com.dlink.result.SqlExplainResult
;
import
com.dlink.service.*
;
import
com.dlink.service.AlertGroupService
;
import
com.dlink.service.AlertHistoryService
;
import
com.dlink.service.ClusterConfigurationService
;
import
com.dlink.service.ClusterService
;
import
com.dlink.service.DataBaseService
;
import
com.dlink.service.JarService
;
import
com.dlink.service.JobHistoryService
;
import
com.dlink.service.JobInstanceService
;
import
com.dlink.service.SavepointsService
;
import
com.dlink.service.StatementService
;
import
com.dlink.service.TaskService
;
import
com.dlink.utils.CustomStringJavaCompiler
;
import
com.dlink.utils.JSONUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
java.time.Duration
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
/**
* 任务 服务实现类
*
...
...
@@ -79,6 +110,8 @@ public class TaskServiceImpl extends SuperServiceImpl<TaskMapper, Task> implemen
private
String
username
;
@Value
(
"${spring.datasource.password}"
)
private
String
password
;
@Value
(
"${server.port}"
)
private
String
serverPort
;
private
String
buildParas
(
Integer
id
)
{
return
"--id "
+
id
+
" --driver "
+
driver
+
" --url "
+
url
+
" --username "
+
username
+
" --password "
+
password
;
...
...
@@ -226,7 +259,7 @@ public class TaskServiceImpl extends SuperServiceImpl<TaskMapper, Task> implemen
JobInstance
jobInstance
=
jobInstanceService
.
getJobInstanceByTaskId
(
id
);
if
(
Asserts
.
isNotNull
(
jobInstance
)
&&
!
JobStatus
.
isDone
(
jobInstance
.
getStatus
()))
{
task
.
setJobInstanceId
(
jobInstance
.
getId
());
}
else
{
}
else
{
task
.
setJobInstanceId
(
0
);
}
}
...
...
@@ -588,6 +621,19 @@ public class TaskServiceImpl extends SuperServiceImpl<TaskMapper, Task> implemen
return
jobInstanceService
.
getJobInfoDetailInfo
(
refreshJobInstance
(
id
,
true
));
}
@Override
public
String
getTaskAPIAddress
()
{
try
{
InetAddress
inetAddress
=
InetAddress
.
getLocalHost
();
if
(
inetAddress
!=
null
)
{
return
inetAddress
.
getHostAddress
()
+
NetConstant
.
COLON
+
serverPort
;
}
}
catch
(
UnknownHostException
e
)
{
e
.
printStackTrace
();
}
return
"127.0.0.1:"
+
serverPort
;
}
private
void
handleJobDone
(
JobInstance
jobInstance
)
{
if
(
Asserts
.
isNull
(
jobInstance
.
getTaskId
()))
{
return
;
...
...
dlink-web/src/components/Studio/StudioMenu/index.tsx
View file @
6e735863
...
...
@@ -4,7 +4,7 @@ import {
PauseCircleTwoTone
,
CarryOutTwoTone
,
DeleteTwoTone
,
PlayCircleTwoTone
,
CameraTwoTone
,
SnippetsTwoTone
,
FileAddTwoTone
,
FolderOpenTwoTone
,
SafetyCertificateTwoTone
,
SaveTwoTone
,
FlagTwoTone
,
CodeTwoTone
,
EnvironmentOutlined
,
SmileOutlined
,
RocketTwoTone
,
QuestionCircleTwoTone
,
MessageOutlined
,
ClusterOutlined
,
EditTwoTone
,
RestTwoTone
,
ShrinkOutlined
,
EditTwoTone
,
RestTwoTone
,
ShrinkOutlined
,
ApiTwoTone
}
from
"@ant-design/icons"
;
import
Space
from
"antd/es/space"
;
import
Divider
from
"antd/es/divider"
;
...
...
@@ -14,6 +14,7 @@ import {StateType} from "@/pages/DataStudio/model";
import
{
connect
}
from
"umi"
;
import
{
CODE
,
postDataArray
}
from
"@/components/Common/crud"
;
import
{
executeSql
,
getJobPlan
}
from
"@/pages/DataStudio/service"
;
import
TaskAPI
from
"@/pages/API/TaskAPI"
;
import
StudioHelp
from
"./StudioHelp"
;
import
StudioGraph
from
"./StudioGraph"
;
import
{
...
...
@@ -456,6 +457,18 @@ const StudioMenu = (props: any) => {
return
itemList
;
};
const
showAPI
=
()
=>
{
Modal
.
info
({
title
:
current
.
task
.
alias
+
' API 手册'
,
width
:
1000
,
content
:
(
<
TaskAPI
task=
{
current
.
task
}
/>
),
onOk
()
{
},
});
};
const
showHelp
=
()
=>
{
Modal
.
info
({
title
:
'使用帮助'
,
...
...
@@ -499,14 +512,12 @@ const StudioMenu = (props: any) => {
<
Divider
className=
{
styles
[
"ant-divider-horizontal-0"
]
}
/>
<
Col
span=
{
24
}
>
<
Row
>
<
Col
span=
{
4
}
>
<
Col
span=
{
16
}
>
<
Breadcrumb
className=
{
styles
[
"dw-path"
]
}
>
<
EnvironmentOutlined
/>
<
Divider
type=
"vertical"
/>
{
getPathItem
(
currentPath
)
}
</
Breadcrumb
>
</
Col
>
<
Col
span=
{
12
}
>
{
currentSession
.
session
&&
(
<
Breadcrumb
className=
{
styles
[
"dw-path"
]
}
>
...
...
@@ -645,6 +656,13 @@ const StudioMenu = (props: any) => {
/>
</
Tooltip
>
:
undefined
}
<
Tooltip
title=
"查看 API"
>
<
Button
type=
"text"
icon=
{
<
ApiTwoTone
/>
}
onClick=
{
showAPI
}
/>
</
Tooltip
>
<
Tooltip
title=
"查看使用帮助"
>
<
Button
type=
"text"
...
...
@@ -652,7 +670,13 @@ const StudioMenu = (props: any) => {
onClick=
{
showHelp
}
/>
</
Tooltip
>
</
Col
>
:
undefined
}
</
Col
>
:
<
Col
span=
{
8
}
><
Tooltip
title=
"查看使用帮助"
>
<
Button
type=
"text"
icon=
{
<
QuestionCircleTwoTone
/>
}
onClick=
{
showHelp
}
/>
</
Tooltip
></
Col
>
}
</
Row
>
</
Col
>
<
StudioExplain
...
...
dlink-web/src/pages/API/TaskAPI/index.tsx
0 → 100644
View file @
6e735863
import
{
Typography
,
Tabs
,
Badge
,
Empty
}
from
"antd"
;
import
CodeShow
from
"@/components/Common/CodeShow"
;
import
{
useEffect
,
useState
}
from
"react"
;
import
{
getTaskAPIAddress
}
from
"@/pages/API/service"
;
const
{
Title
,
Paragraph
,
Text
,
Link
}
=
Typography
;
const
{
TabPane
}
=
Tabs
;
const
TaskAPI
=
(
props
:
any
)
=>
{
const
{
task
}
=
props
;
const
[
address
,
setAddress
]
=
useState
<
string
>
(
'127.0.0.1:8888'
);
useEffect
(()
=>
{
getAddress
();
},
[]);
const
getAddress
=
()
=>
{
const
res
=
getTaskAPIAddress
();
res
.
then
((
result
)
=>
{
if
(
result
.
datas
){
setAddress
(
result
.
datas
);
}
})
}
return
(
<
Tabs
defaultActiveKey=
"tableInfo"
size=
"small"
>
<
TabPane
tab=
{
<
span
>
异步提交
</
span
>
}
key=
"submitTask"
>
<
CodeShow
code=
{
`curl http://${address}/openapi/submitTask?id=${(task ? task.id : '1')}`
}
language=
'shell'
height=
'500px'
theme=
"vs-dark"
/>
</
TabPane
>
<
TabPane
tab=
{
<
span
>
停止作业
</
span
>
}
key=
"cancelJob"
>
<
CodeShow
code=
{
`curl --location --request POST 'http://${address}/openapi/savepointTask' \\
--header 'Content-Type: application/json' \\
--data-raw '{
"taskId":${(task ? task.id : '1')},
"type":"canceljob"
}'`
}
language=
'shell'
height=
'500px'
theme=
"vs-dark"
/>
</
TabPane
>
<
TabPane
tab=
{
<
span
>
重启作业
</
span
>
}
key=
"restartTask"
>
<
CodeShow
code=
{
`curl http://${address}/openapi/restartTask?id=${(task ? task.id : '1')}`
}
language=
'shell'
height=
'500px'
theme=
"vs-dark"
/>
</
TabPane
>
<
TabPane
tab=
{
<
span
>
SavePoint 触发
</
span
>
}
key=
"triggerSavePoint"
>
<
CodeShow
code=
{
`curl --location --request POST 'http://${address}/openapi/savepointTask' \\
--header 'Content-Type: application/json' \\
--data-raw '{
"taskId":${(task ? task.id : '1')},
"type":"trigger"
}'`
}
language=
'shell'
height=
'500px'
theme=
"vs-dark"
/>
</
TabPane
>
<
TabPane
tab=
{
<
span
>
SavePoint 停止
</
span
>
}
key=
"cancelSavePoint"
>
<
CodeShow
code=
{
`curl --location --request POST 'http://${address}/openapi/savepointTask' \\
--header 'Content-Type: application/json' \\
--data-raw '{
"taskId":${(task ? task.id : '1')},
"type":"cancel"
}'`
}
language=
'shell'
height=
'500px'
theme=
"vs-dark"
/>
</
TabPane
>
<
TabPane
tab=
{
<
span
>
上线作业
</
span
>
}
key=
"onLineTask"
>
<
CodeShow
code=
{
`curl http://${address}/openapi/onLineTask?id=${(task ? task.id : '1')}`
}
language=
'shell'
height=
'500px'
theme=
"vs-dark"
/>
</
TabPane
>
<
TabPane
tab=
{
<
span
>
下线作业
</
span
>
}
key=
"offLineTask"
>
<
CodeShow
code=
{
`curl http://${address}/openapi/offLineTask?id=${(task ? task.id : '1')}`
}
language=
'shell'
height=
'500px'
theme=
"vs-dark"
/>
</
TabPane
>
<
TabPane
tab=
{
<
span
>
重新上线作业
</
span
>
}
key=
"reOnLineTask"
>
<
CodeShow
code=
{
`curl http://${address}/openapi/reOnLineTask?id=${(task ? task.id : '1')}`
}
language=
'shell'
height=
'500px'
theme=
"vs-dark"
/>
</
TabPane
>
</
Tabs
>
);
};
export
default
TaskAPI
;
dlink-web/src/pages/API/service.ts
0 → 100644
View file @
6e735863
import
{
getData
}
from
"@/components/Common/crud"
;
export
function
getTaskAPIAddress
()
{
return
getData
(
"api/task/getTaskAPIAddress"
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment