Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
holmes
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
QA
holmes
Commits
c838611b
Commit
c838611b
authored
Dec 10, 2021
by
黎博
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新增监控模块
parent
e529948d
Changes
17
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
824 additions
and
0 deletions
+824
-0
pom.xml
pom.xml
+5
-0
QuartzInitRunner.java
src/main/java/cn/qg/holmes/config/QuartzInitRunner.java
+39
-0
MonitorDataSourceController.java
...olmes/controller/monitor/MonitorDataSourceController.java
+102
-0
MonitorTaskController.java
...n/qg/holmes/controller/monitor/MonitorTaskController.java
+145
-0
MonitorDataSource.java
...n/java/cn/qg/holmes/entity/monitor/MonitorDataSource.java
+66
-0
MonitorTask.java
src/main/java/cn/qg/holmes/entity/monitor/MonitorTask.java
+95
-0
MonitorDataSourceMapper.java
.../cn/qg/holmes/mapper/monitor/MonitorDataSourceMapper.java
+7
-0
MonitorTaskMapper.java
...n/java/cn/qg/holmes/mapper/monitor/MonitorTaskMapper.java
+7
-0
DbQueryTask.java
src/main/java/cn/qg/holmes/quartz/DbQueryTask.java
+87
-0
MonitorDataSourceService.java
...n/qg/holmes/service/monitor/MonitorDataSourceService.java
+10
-0
MonitorService.java
...ain/java/cn/qg/holmes/service/monitor/MonitorService.java
+8
-0
MonitorTaskService.java
...java/cn/qg/holmes/service/monitor/MonitorTaskService.java
+8
-0
MonitorDataSourceServiceImpl.java
...es/service/monitor/impl/MonitorDataSourceServiceImpl.java
+13
-0
MonitorServiceImpl.java
...cn/qg/holmes/service/monitor/impl/MonitorServiceImpl.java
+11
-0
MonitorTaskServiceImpl.java
...g/holmes/service/monitor/impl/MonitorTaskServiceImpl.java
+11
-0
JdbcUtils.java
src/main/java/cn/qg/holmes/utils/JdbcUtils.java
+91
-0
QuartzUtils.java
src/main/java/cn/qg/holmes/utils/QuartzUtils.java
+119
-0
No files found.
pom.xml
View file @
c838611b
...
@@ -167,6 +167,11 @@
...
@@ -167,6 +167,11 @@
<artifactId>
spring-boot-starter-validation
</artifactId>
<artifactId>
spring-boot-starter-validation
</artifactId>
</dependency>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-quartz
</artifactId>
</dependency>
</dependencies>
</dependencies>
<build>
<build>
...
...
src/main/java/cn/qg/holmes/config/QuartzInitRunner.java
0 → 100644
View file @
c838611b
package
cn
.
qg
.
holmes
.
config
;
import
cn.qg.holmes.entity.monitor.MonitorTask
;
import
cn.qg.holmes.service.monitor.MonitorTaskService
;
import
cn.qg.holmes.utils.QuartzUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.quartz.Scheduler
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.ApplicationArguments
;
import
org.springframework.boot.ApplicationRunner
;
import
org.springframework.core.annotation.Order
;
import
org.springframework.stereotype.Component
;
import
java.util.List
;
/**
* 项目启动时,初始化定时任务表里的任务
*/
@Slf4j
@Component
@Order
(
value
=
5
)
public
class
QuartzInitRunner
implements
ApplicationRunner
{
@Autowired
MonitorTaskService
monitorTaskService
;
@Autowired
private
Scheduler
scheduler
;
@Override
public
void
run
(
ApplicationArguments
args
)
{
List
<
MonitorTask
>
monitorTaskList
=
monitorTaskService
.
list
();
for
(
MonitorTask
monitorTask:
monitorTaskList
)
{
if
(
monitorTask
.
getInitStart
()
==
1
)
{
QuartzUtils
.
createScheduleJob
(
scheduler
,
monitorTask
);
}
}
}
}
src/main/java/cn/qg/holmes/controller/monitor/MonitorDataSourceController.java
0 → 100644
View file @
c838611b
package
cn
.
qg
.
holmes
.
controller
.
monitor
;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.entity.monitor.MonitorDataSource
;
import
cn.qg.holmes.service.monitor.MonitorDataSourceService
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* 监控数据源相关接口
*/
@CrossOrigin
@RestController
@RequestMapping
(
"/monitor/ds"
)
public
class
MonitorDataSourceController
{
@Autowired
MonitorDataSourceService
monitorDataSourceService
;
/**
* 获取监控数据源列表,带分页和筛选
* @param pageNum
* @param pageSize
* @param dsName
* @return
*/
@GetMapping
(
"/listWithPaging"
)
public
JsonResult
getMonitorDataSourceListWithPaging
(
@RequestParam
(
defaultValue
=
"1"
)
Integer
pageNum
,
@RequestParam
(
defaultValue
=
"10"
)
Integer
pageSize
,
String
dsName
)
{
IPage
<
MonitorDataSource
>
IPageParam
=
new
Page
<>(
pageNum
,
pageSize
);
QueryWrapper
<
MonitorDataSource
>
queryWrapper
=
new
QueryWrapper
<>();
if
(!
StringUtils
.
isEmpty
(
dsName
))
{
queryWrapper
.
eq
(
"name"
,
dsName
);
}
IPage
<
MonitorDataSource
>
IPageResult
=
monitorDataSourceService
.
page
(
IPageParam
);
Map
<
String
,
Object
>
dsResult
=
new
HashMap
<>();
dsResult
.
put
(
"total"
,
IPageResult
.
getTotal
());
dsResult
.
put
(
"list"
,
IPageResult
.
getRecords
());
return
JsonResult
.
buildSuccessResult
(
dsResult
);
}
/**
* 获取监控数据源接口,不带分页和筛选
* @return
*/
@GetMapping
(
"/list"
)
public
JsonResult
getMonitorDataSourceList
()
{
return
JsonResult
.
buildSuccessResult
(
monitorDataSourceService
.
list
());
}
/**
* 添加监控数据源
* @param monitorDataSource
* @return
*/
@PostMapping
(
"/add"
)
public
JsonResult
addMonitorDataSource
(
@RequestBody
MonitorDataSource
monitorDataSource
)
{
return
JsonResult
.
buildSuccessResult
(
monitorDataSourceService
.
saveOrUpdate
(
monitorDataSource
));
}
/**
* 更新监控数据源
* @param monitorDataSource
* @return
*/
@PostMapping
(
"/update"
)
public
JsonResult
updateMonitorDataSource
(
@RequestBody
MonitorDataSource
monitorDataSource
)
{
Integer
dsId
=
monitorDataSource
.
getId
();
if
(
dsId
==
null
)
{
return
JsonResult
.
buildErrorStateResult
(
"数据源不存在!"
,
null
);
}
if
(
monitorDataSourceService
.
getById
(
dsId
)
==
null
)
{
return
JsonResult
.
buildErrorStateResult
(
"数据源不存在"
,
null
);
}
return
JsonResult
.
buildSuccessResult
(
monitorDataSourceService
.
saveOrUpdate
(
monitorDataSource
));
}
/**
* 删除监控数据源
* @param monitorDataSource
* @return
*/
@PostMapping
(
"/delete"
)
public
JsonResult
deleteMonitorDataSource
(
@RequestBody
MonitorDataSource
monitorDataSource
)
{
Integer
dsId
=
monitorDataSource
.
getId
();
if
(
dsId
==
null
)
{
return
JsonResult
.
buildErrorStateResult
(
"数据源不存在!"
,
null
);
}
if
(
monitorDataSourceService
.
getById
(
dsId
)
==
null
)
{
return
JsonResult
.
buildErrorStateResult
(
"数据源不存在"
,
null
);
}
return
JsonResult
.
buildSuccessResult
(
monitorDataSourceService
.
getById
(
dsId
));
}
}
src/main/java/cn/qg/holmes/controller/monitor/MonitorTaskController.java
0 → 100644
View file @
c838611b
package
cn
.
qg
.
holmes
.
controller
.
monitor
;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.entity.monitor.MonitorDataSource
;
import
cn.qg.holmes.entity.monitor.MonitorTask
;
import
cn.qg.holmes.service.monitor.MonitorDataSourceService
;
import
cn.qg.holmes.service.monitor.MonitorTaskService
;
import
cn.qg.holmes.utils.DingdingUtils
;
import
cn.qg.holmes.utils.JdbcUtils
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* 定时任务Controller
*/
@CrossOrigin
@RestController
@RequestMapping
(
"/monitor/task"
)
public
class
MonitorTaskController
{
@Autowired
MonitorTaskService
monitorTaskService
;
@Autowired
MonitorDataSourceService
monitorDataSourceService
;
@Autowired
JdbcTemplate
jdbcTemplate
;
@GetMapping
(
"/list"
)
public
JsonResult
getMonitorTaskList
(
@RequestParam
(
defaultValue
=
"1"
)
Integer
pageNum
,
@RequestParam
(
defaultValue
=
"10"
)
Integer
pageSize
,
String
businessLine
,
String
serviceName
,
String
owner
)
{
IPage
<
MonitorTask
>
pageParam
=
new
Page
<>(
pageNum
,
pageSize
);
QueryWrapper
<
MonitorTask
>
queryWrapper
=
new
QueryWrapper
<>();
if
(!
StringUtils
.
isEmpty
(
businessLine
))
{
queryWrapper
.
eq
(
"business_line"
,
businessLine
);
}
if
(!
StringUtils
.
isEmpty
(
serviceName
))
{
queryWrapper
.
eq
(
"service_name"
,
serviceName
);
}
if
(!
StringUtils
.
isEmpty
(
"owner"
))
{
queryWrapper
.
eq
(
"owner"
,
owner
);
}
IPage
<
MonitorTask
>
monitorTaskIPage
=
monitorTaskService
.
page
(
pageParam
,
queryWrapper
);
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
resultMap
.
put
(
"list"
,
monitorTaskIPage
.
getRecords
());
resultMap
.
put
(
"total"
,
monitorTaskIPage
.
getTotal
());
return
JsonResult
.
buildSuccessResult
(
resultMap
);
}
/**
* 新增监控
*
* @param monitorTask
* @return
*/
@PostMapping
(
"/add"
)
public
JsonResult
addMonitorTask
(
@RequestBody
MonitorTask
monitorTask
)
{
return
JsonResult
.
buildSuccessResult
(
monitorTaskService
.
save
(
monitorTask
));
}
/**
* 修改监控
*
* @param monitorTask
* @return
*/
@PostMapping
(
"/edit"
)
public
JsonResult
editMonitorTask
(
@RequestBody
MonitorTask
monitorTask
)
{
return
JsonResult
.
buildSuccessResult
(
monitorTaskService
.
saveOrUpdate
(
monitorTask
));
}
/**
* 删除监控
*
* @param monitorTask
* @return
*/
@PostMapping
(
"/delete"
)
public
JsonResult
deleteMonitorTask
(
@RequestBody
MonitorTask
monitorTask
)
{
Integer
taskId
=
monitorTask
.
getId
();
if
(
monitorTaskService
.
getById
(
taskId
)
==
null
)
{
return
JsonResult
.
buildErrorStateResult
(
"定时任务不存在!"
,
false
);
}
boolean
delResult
=
monitorTaskService
.
removeById
(
taskId
);
if
(
delResult
)
{
return
JsonResult
.
buildSuccessResult
(
"删除成功!"
);
}
else
{
return
JsonResult
.
buildErrorStateResult
(
"删除失败!"
,
false
);
}
}
/**
* 立即执行SQL
*
* @param dsId 数据源id
* @param sql SQL
* @return
*/
@PostMapping
(
"/execute"
)
public
JsonResult
executeSql
(
@RequestParam
Integer
dsId
,
@RequestParam
String
sql
)
{
MonitorDataSource
monitorDataSource
=
monitorDataSourceService
.
getById
(
dsId
);
List
<
Map
<
String
,
Object
>>
resultList
=
JdbcUtils
.
queryForList
(
monitorDataSource
.
getHost
(),
monitorDataSource
.
getPort
(),
monitorDataSource
.
getUsername
(),
monitorDataSource
.
getPassword
(),
null
,
sql
);
return
JsonResult
.
buildSuccessResult
(
resultList
);
}
/**
* 发送测试,立即测试下定时任务发送消息是否准确
*
* @param monitorTask 监控任务
* @return
*/
@PostMapping
(
"/test"
)
public
JsonResult
testMonitorTask
(
@RequestBody
MonitorTask
monitorTask
)
{
try
{
Integer
dsId
=
monitorTask
.
getDsId
();
MonitorDataSource
monitorDataSource
=
monitorDataSourceService
.
getById
(
dsId
);
List
<
Map
<
String
,
Object
>>
resultList
=
JdbcUtils
.
queryForList
(
monitorDataSource
.
getHost
(),
monitorDataSource
.
getPort
(),
monitorDataSource
.
getUsername
(),
monitorDataSource
.
getPassword
(),
null
,
monitorTask
.
getSql
());
String
dingUrl
=
monitorTask
.
getDingUrl
();
String
dingText
=
monitorTask
.
getDingText
();
dingText
=
dingText
.
replaceAll
(
"\\{count}"
,
String
.
valueOf
(
resultList
.
size
()));
String
markdownMsg
=
DingdingUtils
.
buildMarkdownMsg
(
"监控测试"
,
dingText
+
"\n"
+
JSON
.
toJSONString
(
resultList
),
false
);
boolean
result
=
DingdingUtils
.
sendToDingding
(
markdownMsg
,
dingUrl
);
return
JsonResult
.
buildSuccessResult
(
result
?
"发送成功!"
:
"发送失败!"
,
true
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
JsonResult
.
buildErrorStateResult
(
"发送异常!"
,
false
);
}
}
}
src/main/java/cn/qg/holmes/entity/monitor/MonitorDataSource.java
0 → 100644
View file @
c838611b
package
cn
.
qg
.
holmes
.
entity
.
monitor
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
java.util.Date
;
/**
* 监控数据源表
* @author libo
*/
@Data
@TableName
(
value
=
"monitor_data_source"
)
public
class
MonitorDataSource
{
@TableId
(
type
=
IdType
.
AUTO
)
private
Integer
id
;
/**
* 数据源名称
*/
@TableField
(
value
=
"`name`"
)
private
String
name
;
/**
* 数据源host
*/
@TableField
(
value
=
"`host`"
)
private
String
host
;
/**
* 数据源端口
*/
@TableField
(
value
=
"`port`"
)
private
String
port
;
/**
* 数据源用户名
*/
@TableField
(
value
=
"`username`"
)
private
String
username
;
/**
* 数据源密码
*/
@TableField
(
value
=
"`password`"
)
private
String
password
;
/**
* 创建时间
*/
@TableField
(
value
=
"`create_time`"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
createTime
;
/**
* 更新时间
*/
@TableField
(
value
=
"`update_time`"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
updateTime
;
}
src/main/java/cn/qg/holmes/entity/monitor/MonitorTask.java
0 → 100644
View file @
c838611b
package
cn
.
qg
.
holmes
.
entity
.
monitor
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
import
java.util.Date
;
/**
* 监控定时任务配置实体类
* @author libo
*/
@Data
@TableName
(
value
=
"monitor_task"
)
public
class
MonitorTask
{
@TableId
(
type
=
IdType
.
AUTO
)
private
Integer
id
;
/**
* 定时任务执行类
*/
@TableField
(
value
=
"task_class"
)
@NotBlank
(
message
=
"定时任务执行类不能为空"
)
private
String
taskClass
;
/**
* 定时任务描述
*/
@TableField
(
value
=
"task_name"
)
@NotBlank
(
message
=
"定时任务名称不能为空"
)
private
String
taskName
;
/**
* 定时任务cron表达式
*/
@TableField
(
value
=
"task_cron"
)
private
String
taskCron
;
@TableField
(
value
=
"`sql`"
)
private
String
sql
;
@TableField
(
value
=
"`ds_id`"
)
@NotNull
(
message
=
"数据源id不能为空"
)
private
Integer
dsId
;
@TableField
(
value
=
"`ding_url`"
)
private
String
dingUrl
;
@TableField
(
value
=
"`ding_text`"
)
private
String
dingText
;
/**
* 是否项目初始化时启动,0-不启动,1-启动
*/
@TableField
(
value
=
"init_start"
)
private
Integer
initStart
;
/**
* 业务线
*/
@TableField
(
value
=
"`business_line`"
)
private
String
businessLine
;
/**
* 服务名
*/
@TableField
(
value
=
"`service_name`"
)
private
String
serviceName
;
/**
* 所有人
*/
@TableField
(
value
=
"`owner`"
)
private
String
owner
;
/**
* 创建时间
*/
@TableField
(
value
=
"`create_time`"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
createTime
;
/**
* 更新时间
*/
@TableField
(
value
=
"`update_time`"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
updateTime
;
}
src/main/java/cn/qg/holmes/mapper/monitor/MonitorDataSourceMapper.java
0 → 100644
View file @
c838611b
package
cn
.
qg
.
holmes
.
mapper
.
monitor
;
import
cn.qg.holmes.entity.monitor.MonitorDataSource
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
public
interface
MonitorDataSourceMapper
extends
BaseMapper
<
MonitorDataSource
>
{
}
src/main/java/cn/qg/holmes/mapper/monitor/MonitorTaskMapper.java
0 → 100644
View file @
c838611b
package
cn
.
qg
.
holmes
.
mapper
.
monitor
;
import
cn.qg.holmes.entity.monitor.MonitorTask
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
public
interface
MonitorTaskMapper
extends
BaseMapper
<
MonitorTask
>
{
}
src/main/java/cn/qg/holmes/quartz/DbQueryTask.java
0 → 100644
View file @
c838611b
package
cn
.
qg
.
holmes
.
quartz
;
import
cn.qg.holmes.entity.monitor.MonitorDataSource
;
import
cn.qg.holmes.entity.monitor.MonitorTask
;
import
cn.qg.holmes.service.monitor.MonitorDataSourceService
;
import
cn.qg.holmes.service.monitor.MonitorTaskService
;
import
cn.qg.holmes.utils.DingdingUtils
;
import
cn.qg.holmes.utils.JdbcUtils
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
lombok.extern.slf4j.Slf4j
;
import
org.quartz.JobDetail
;
import
org.quartz.JobExecutionContext
;
import
org.quartz.JobExecutionException
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.scheduling.quartz.QuartzJobBean
;
import
java.util.*
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
@Slf4j
public
class
DbQueryTask
extends
QuartzJobBean
{
@Autowired
MonitorDataSourceService
monitorDataSourceService
;
@Autowired
MonitorTaskService
monitorTaskService
;
@Override
protected
void
executeInternal
(
JobExecutionContext
jobExecutionContext
)
throws
JobExecutionException
{
JobDetail
jobDetail
=
jobExecutionContext
.
getJobDetail
();
// 定时任务名称
String
taskName
=
jobDetail
.
getKey
().
getName
();
// 获取定时任务信息
QueryWrapper
<
MonitorTask
>
monitorTaskQueryWrapper
=
new
QueryWrapper
<>();
monitorTaskQueryWrapper
.
eq
(
"task_name"
,
taskName
);
MonitorTask
monitorTask
=
monitorTaskService
.
getOne
(
monitorTaskQueryWrapper
);
// 获取数据源相关信息
Integer
dsId
=
monitorTask
.
getDsId
();
MonitorDataSource
monitorDataSource
=
monitorDataSourceService
.
getById
(
dsId
);
List
<
Map
<
String
,
Object
>>
resultList
=
JdbcUtils
.
queryForList
(
monitorDataSource
.
getHost
(),
monitorDataSource
.
getPort
(),
monitorDataSource
.
getUsername
(),
monitorDataSource
.
getPassword
(),
null
,
monitorTask
.
getSql
());
String
dingUrl
=
monitorTask
.
getDingUrl
();
String
dingText
=
monitorTask
.
getDingText
();
// dingText = dingText.replaceAll("\\{count}", String.valueOf(resultList.size()));
dingText
=
replaceDingText
(
dingText
,
resultList
);
String
markdownMsg
=
DingdingUtils
.
buildMarkdownMsg
(
"监控测试"
,
dingText
+
"\n"
+
JSON
.
toJSONString
(
resultList
),
false
);
DingdingUtils
.
sendToDingding
(
markdownMsg
,
dingUrl
);
}
public
static
String
replaceDingText
(
String
dingText
,
List
<
Map
<
String
,
Object
>>
queryList
)
{
if
(
dingText
.
contains
(
"{count}"
))
{
dingText
=
dingText
.
replace
(
"{count}"
,
String
.
valueOf
(
queryList
.
size
()));
}
Pattern
numPattern
=
Pattern
.
compile
(
"\\{\\d}"
);
Matcher
matcher
=
numPattern
.
matcher
(
dingText
);
List
<
String
>
firstLineDataList
=
null
;
if
(
queryList
.
size
()
>
0
)
{
firstLineDataList
=
new
ArrayList
(
queryList
.
get
(
0
).
values
());
}
int
count
=
matcher
.
groupCount
();
for
(
int
i
=
0
;
i
<
count
;
i
++)
{
dingText
.
replace
(
matcher
.
group
(
i
+
1
),
firstLineDataList
.
get
(
i
));
}
return
dingText
;
}
public
static
void
main
(
String
[]
args
)
{
String
dingText
=
"监控定时任务测试,本次共查出{count}条数据,第一行第一列数据是{0}"
;
List
<
Map
<
String
,
Object
>>
mapList
=
new
ArrayList
<>();
Map
<
String
,
Object
>
map1
=
new
LinkedHashMap
<>();
Map
<
String
,
Object
>
map2
=
new
LinkedHashMap
<>();
map1
.
put
(
"sku_no"
,
"123"
);
map1
.
put
(
"sku_name"
,
"商品一"
);
map2
.
put
(
"sku_no"
,
"456"
);
map2
.
put
(
"sku_name"
,
"商品二"
);
mapList
.
add
(
map1
);
mapList
.
add
(
map2
);
dingText
=
replaceDingText
(
dingText
,
mapList
);
System
.
out
.
println
(
dingText
);
}
}
src/main/java/cn/qg/holmes/service/monitor/MonitorDataSourceService.java
0 → 100644
View file @
c838611b
package
cn
.
qg
.
holmes
.
service
.
monitor
;
import
cn.qg.holmes.entity.monitor.MonitorDataSource
;
import
com.baomidou.mybatisplus.extension.service.IService
;
/**
* 监控数据源Service
*/
public
interface
MonitorDataSourceService
extends
IService
<
MonitorDataSource
>
{
}
src/main/java/cn/qg/holmes/service/monitor/MonitorService.java
0 → 100644
View file @
c838611b
package
cn
.
qg
.
holmes
.
service
.
monitor
;
/**
* 监控Service
*/
public
interface
MonitorService
{
}
src/main/java/cn/qg/holmes/service/monitor/MonitorTaskService.java
0 → 100644
View file @
c838611b
package
cn
.
qg
.
holmes
.
service
.
monitor
;
import
cn.qg.holmes.entity.monitor.MonitorTask
;
import
com.baomidou.mybatisplus.extension.service.IService
;
public
interface
MonitorTaskService
extends
IService
<
MonitorTask
>
{
}
src/main/java/cn/qg/holmes/service/monitor/impl/MonitorDataSourceServiceImpl.java
0 → 100644
View file @
c838611b
package
cn
.
qg
.
holmes
.
service
.
monitor
.
impl
;
import
cn.qg.holmes.entity.monitor.MonitorDataSource
;
import
cn.qg.holmes.mapper.monitor.MonitorDataSourceMapper
;
import
cn.qg.holmes.service.monitor.MonitorDataSourceService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.stereotype.Service
;
@Service
public
class
MonitorDataSourceServiceImpl
extends
ServiceImpl
<
MonitorDataSourceMapper
,
MonitorDataSource
>
implements
MonitorDataSourceService
{
}
src/main/java/cn/qg/holmes/service/monitor/impl/MonitorServiceImpl.java
0 → 100644
View file @
c838611b
package
cn
.
qg
.
holmes
.
service
.
monitor
.
impl
;
import
cn.qg.holmes.service.monitor.MonitorService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
@Slf4j
@Service
public
class
MonitorServiceImpl
implements
MonitorService
{
}
src/main/java/cn/qg/holmes/service/monitor/impl/MonitorTaskServiceImpl.java
0 → 100644
View file @
c838611b
package
cn
.
qg
.
holmes
.
service
.
monitor
.
impl
;
import
cn.qg.holmes.entity.monitor.MonitorTask
;
import
cn.qg.holmes.mapper.monitor.MonitorTaskMapper
;
import
cn.qg.holmes.service.monitor.MonitorTaskService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.stereotype.Service
;
@Service
public
class
MonitorTaskServiceImpl
extends
ServiceImpl
<
MonitorTaskMapper
,
MonitorTask
>
implements
MonitorTaskService
{
}
src/main/java/cn/qg/holmes/utils/JdbcUtils.java
0 → 100644
View file @
c838611b
package
cn
.
qg
.
holmes
.
utils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
java.sql.*
;
import
java.util.ArrayList
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* jdbc操作工具类
* @author libo
* 2021-12-06
*/
public
class
JdbcUtils
{
@Autowired
JdbcTemplate
jdbcTemplate
;
public
static
List
<
Map
<
String
,
Object
>>
queryForList
(
String
host
,
String
port
,
String
username
,
String
password
,
String
db
,
String
sql
)
{
String
driver
=
"com.mysql.jdbc.Driver"
;
String
url
;
if
(
db
==
null
)
{
url
=
"jdbc:mysql://"
+
host
+
":"
+
port
;
}
else
{
url
=
"jdbc:mysql://"
+
host
+
":"
+
port
+
"/"
+
db
;
}
Connection
connection
=
null
;
Statement
statement
=
null
;
ResultSet
resultSet
=
null
;
try
{
Class
.
forName
(
driver
);
connection
=
DriverManager
.
getConnection
(
url
,
username
,
password
);
statement
=
connection
.
createStatement
();
resultSet
=
statement
.
executeQuery
(
sql
);
List
<
Map
<
String
,
Object
>>
resultList
=
convertResultSetToList
(
resultSet
);
return
resultList
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
finally
{
try
{
resultSet
.
close
();
statement
.
close
();
connection
.
close
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
finally
{
if
(
resultSet
!=
null
)
{
resultSet
=
null
;
}
if
(
statement
!=
null
)
{
statement
=
null
;
}
if
(
connection
!=
null
)
{
connection
=
null
;
}
}
}
}
/**
* ResultSet转列表
* @param resultSet
* @return
*/
public
static
List
<
Map
<
String
,
Object
>>
convertResultSetToList
(
ResultSet
resultSet
)
{
if
(
null
==
resultSet
)
{
return
null
;
}
List
<
Map
<
String
,
Object
>>
dataList
=
new
ArrayList
<>();
try
{
ResultSetMetaData
resultSetMetaData
=
resultSet
.
getMetaData
();
while
(
resultSet
.
next
())
{
Map
<
String
,
Object
>
rowData
=
new
LinkedHashMap
<>();
for
(
int
i
=
0
,
columnCount
=
resultSetMetaData
.
getColumnCount
();
i
<
columnCount
;
i
++)
{
rowData
.
put
(
resultSetMetaData
.
getColumnName
(
i
+
1
),
resultSet
.
getObject
(
i
+
1
));
}
dataList
.
add
(
rowData
);
}
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
return
null
;
}
return
dataList
;
}
}
src/main/java/cn/qg/holmes/utils/QuartzUtils.java
0 → 100644
View file @
c838611b
package
cn
.
qg
.
holmes
.
utils
;
import
cn.qg.holmes.entity.monitor.MonitorTask
;
import
lombok.extern.slf4j.Slf4j
;
import
org.quartz.*
;
@Slf4j
public
class
QuartzUtils
{
public
static
void
createScheduleJob
(
Scheduler
scheduler
,
MonitorTask
monitorTask
)
{
try
{
Class
<?
extends
Job
>
jobClass
=
(
Class
<?
extends
Job
>)
Class
.
forName
(
"cn.qg.holmes.quartz."
+
monitorTask
.
getTaskClass
());
JobDetail
jobDetail
=
JobBuilder
.
newJob
(
jobClass
)
.
withIdentity
(
monitorTask
.
getTaskName
())
.
build
();
CronScheduleBuilder
scheduleBuilder
=
CronScheduleBuilder
.
cronSchedule
(
monitorTask
.
getTaskCron
());
CronTrigger
cronTrigger
=
TriggerBuilder
.
newTrigger
()
.
withIdentity
(
monitorTask
.
getTaskName
())
.
withSchedule
(
scheduleBuilder
)
.
build
();
scheduler
.
scheduleJob
(
jobDetail
,
cronTrigger
);
}
catch
(
ClassNotFoundException
e
)
{
log
.
info
(
"定时任务类路径出错:请输入类的绝对路径"
);
}
catch
(
SchedulerException
e
)
{
log
.
info
(
"创建定时任务出错:"
+
e
.
getMessage
());
}
log
.
info
(
"创建定时任务: {}"
,
monitorTask
.
getTaskName
());
}
/**
* 根据任务名称暂停定时任务
* @param scheduler 调度器
* @param jobName 定时任务名称
* @throws SchedulerException
*/
public
static
void
pauseScheduleJob
(
Scheduler
scheduler
,
String
jobName
)
{
JobKey
jobKey
=
JobKey
.
jobKey
(
jobName
);
try
{
scheduler
.
pauseJob
(
jobKey
);
}
catch
(
SchedulerException
e
)
{
log
.
info
(
"暂停定时任务出错:"
+
e
.
getMessage
());
}
}
/**
* 根据任务名称恢复定时任务
* @param scheduler 调度器
* @param jobName 定时任务名称
* @throws SchedulerException
*/
public
static
void
resumeScheduleJob
(
Scheduler
scheduler
,
String
jobName
)
{
JobKey
jobKey
=
JobKey
.
jobKey
(
jobName
);
try
{
scheduler
.
resumeJob
(
jobKey
);
}
catch
(
SchedulerException
e
)
{
log
.
info
(
"启动定时任务出错:"
+
e
.
getMessage
());
}
}
/**
* 根据任务名称立即运行一次定时任务
* @param scheduler 调度器
* @param jobName 定时任务名称
* @throws SchedulerException
*/
public
static
void
runOnce
(
Scheduler
scheduler
,
String
jobName
)
{
JobKey
jobKey
=
JobKey
.
jobKey
(
jobName
);
try
{
scheduler
.
triggerJob
(
jobKey
);
}
catch
(
SchedulerException
e
)
{
log
.
info
(
"运行定时任务出错:"
+
e
.
getMessage
());
}
}
/**
* 更新定时任务
*
* @param scheduler 调度器
* @param monitorTask 定时任务信息类
* @throws SchedulerException
*/
public
static
void
updateScheduleJob
(
Scheduler
scheduler
,
MonitorTask
monitorTask
)
{
try
{
//获取到对应任务的触发器
TriggerKey
triggerKey
=
TriggerKey
.
triggerKey
(
monitorTask
.
getTaskName
());
//设置定时任务执行方式
CronScheduleBuilder
scheduleBuilder
=
CronScheduleBuilder
.
cronSchedule
(
monitorTask
.
getTaskCron
());
//重新构建任务的触发器trigger
CronTrigger
trigger
=
(
CronTrigger
)
scheduler
.
getTrigger
(
triggerKey
);
trigger
=
trigger
.
getTriggerBuilder
()
.
withIdentity
(
triggerKey
)
.
withSchedule
(
scheduleBuilder
)
.
build
();
//重置对应的job
scheduler
.
rescheduleJob
(
triggerKey
,
trigger
);
}
catch
(
SchedulerException
e
)
{
System
.
out
.
println
(
"更新定时任务出错:"
+
e
.
getMessage
());
}
}
/**
* 根据定时任务名称从调度器当中删除定时任务
*
* @param scheduler 调度器
* @param jobName 定时任务名称
* @throws SchedulerException
*/
public
static
void
deleteScheduleJob
(
Scheduler
scheduler
,
String
jobName
)
{
JobKey
jobKey
=
JobKey
.
jobKey
(
jobName
);
try
{
scheduler
.
deleteJob
(
jobKey
);
}
catch
(
SchedulerException
e
)
{
log
.
info
(
"删除定时任务出错:"
+
e
.
getMessage
());
}
}
}
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