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
5754ded9
Commit
5754ded9
authored
Oct 25, 2021
by
黎博
Browse files
Options
Browse Files
Download
Plain Diff
合并master
parents
3faeeda1
d0c7a412
Changes
46
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
46 changed files
with
1984 additions
and
423 deletions
+1984
-423
pom.xml
pom.xml
+6
-0
ExceptionHandlerAdvice.java
...main/java/cn/qg/holmes/aspect/ExceptionHandlerAdvice.java
+35
-0
BuildDataController.java
...a/cn/qg/holmes/controller/effect/BuildDataController.java
+132
-0
DbSyncController.java
...java/cn/qg/holmes/controller/effect/DbSyncController.java
+104
-12
JenkinsController.java
...ava/cn/qg/holmes/controller/gitlab/JenkinsController.java
+1
-1
PipelineController.java
...va/cn/qg/holmes/controller/gitlab/PipelineController.java
+41
-1
DockerProjectController.java
.../cn/qg/holmes/controller/k8s/DockerProjectController.java
+16
-2
EnvTemplateController.java
...va/cn/qg/holmes/controller/k8s/EnvTemplateController.java
+182
-0
K8sController.java
src/main/java/cn/qg/holmes/controller/k8s/K8sController.java
+278
-44
NavigateController.java
.../cn/qg/holmes/controller/navigate/NavigateController.java
+2
-11
BuildData.java
src/main/java/cn/qg/holmes/entity/effect/BuildData.java
+43
-0
BuildDataDetail.java
...main/java/cn/qg/holmes/entity/effect/BuildDataDetail.java
+57
-0
DingRobot.java
src/main/java/cn/qg/holmes/entity/jira/DingRobot.java
+19
-0
JiraBugPool.java
src/main/java/cn/qg/holmes/entity/jira/JiraBugPool.java
+6
-0
EnvTemplate.java
src/main/java/cn/qg/holmes/entity/k8s/EnvTemplate.java
+25
-0
EnvTemplateDetail.java
src/main/java/cn/qg/holmes/entity/k8s/EnvTemplateDetail.java
+31
-0
EnvTemplateVo.java
src/main/java/cn/qg/holmes/entity/k8s/EnvTemplateVo.java
+16
-0
NavigateDetail.java
...ain/java/cn/qg/holmes/entity/navigate/NavigateDetail.java
+4
-0
BuildDataDetailMapper.java
...ava/cn/qg/holmes/mapper/effect/BuildDataDetailMapper.java
+7
-0
BuildDataMapper.java
...main/java/cn/qg/holmes/mapper/effect/BuildDataMapper.java
+7
-0
DockerProjectMapper.java
...ain/java/cn/qg/holmes/mapper/k8s/DockerProjectMapper.java
+1
-1
EnvTemplateDetailMapper.java
...java/cn/qg/holmes/mapper/k8s/EnvTemplateDetailMapper.java
+7
-0
EnvTemplateMapper.java
src/main/java/cn/qg/holmes/mapper/k8s/EnvTemplateMapper.java
+7
-0
BuildDataDetailService.java
...a/cn/qg/holmes/service/effect/BuildDataDetailService.java
+7
-0
BuildDataService.java
...in/java/cn/qg/holmes/service/effect/BuildDataService.java
+7
-0
DatabaseSyncService.java
...java/cn/qg/holmes/service/effect/DatabaseSyncService.java
+9
-6
BuildDataDetailServiceImpl.java
...olmes/service/effect/impl/BuildDataDetailServiceImpl.java
+12
-0
BuildDataServiceImpl.java
...n/qg/holmes/service/effect/impl/BuildDataServiceImpl.java
+11
-0
DatabaseSyncServiceImpl.java
...g/holmes/service/effect/impl/DatabaseSyncServiceImpl.java
+470
-207
PipelineServiceImpl.java
...cn/qg/holmes/service/gitlab/impl/PipelineServiceImpl.java
+1
-1
DingRobotServiceImpl.java
.../cn/qg/holmes/service/jira/impl/DingRobotServiceImpl.java
+8
-2
DockerProjectService.java
...n/java/cn/qg/holmes/service/k8s/DockerProjectService.java
+1
-1
EnvTemplateDetailService.java
...va/cn/qg/holmes/service/k8s/EnvTemplateDetailService.java
+7
-0
EnvTemplateService.java
...ain/java/cn/qg/holmes/service/k8s/EnvTemplateService.java
+7
-0
ImageService.java
src/main/java/cn/qg/holmes/service/k8s/ImageService.java
+5
-3
K8sService.java
src/main/java/cn/qg/holmes/service/k8s/K8sService.java
+215
-116
MqService.java
src/main/java/cn/qg/holmes/service/k8s/MqService.java
+73
-5
DockerProjectServiceImpl.java
.../qg/holmes/service/k8s/impl/DockerProjectServiceImpl.java
+2
-2
EnvTemplateDetailServiceImpl.java
...holmes/service/k8s/impl/EnvTemplateDetailServiceImpl.java
+11
-0
EnvTemplateServiceImpl.java
...cn/qg/holmes/service/k8s/impl/EnvTemplateServiceImpl.java
+11
-0
BugNotifyTask.java
src/main/java/cn/qg/holmes/task/BugNotifyTask.java
+13
-4
DbSyncTask.java
src/main/java/cn/qg/holmes/task/DbSyncTask.java
+23
-0
DingdingUtils.java
src/main/java/cn/qg/holmes/utils/DingdingUtils.java
+1
-1
HttpClientUtils.java
src/main/java/cn/qg/holmes/utils/HttpClientUtils.java
+4
-2
JenkinsService.java
src/main/java/cn/qg/holmes/utils/JenkinsService.java
+56
-1
DockerProjectMapper.xml
src/main/resources/mapper/k8s/DockerProjectMapper.xml
+3
-0
No files found.
pom.xml
View file @
5754ded9
...
...
@@ -161,6 +161,12 @@
<version>
3.1.305
</version>
</dependency>
<!-- 参数校验 -->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-validation
</artifactId>
</dependency>
</dependencies>
<build>
...
...
src/main/java/cn/qg/holmes/aspect/ExceptionHandlerAdvice.java
View file @
5754ded9
...
...
@@ -3,26 +3,61 @@ package cn.qg.holmes.aspect;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.exception.TokenInvalidException
;
import
cn.qg.holmes.exception.UnauthorizedException
;
import
org.springframework.validation.ObjectError
;
import
org.springframework.web.bind.MethodArgumentNotValidException
;
import
org.springframework.web.bind.MissingServletRequestParameterException
;
import
org.springframework.web.bind.annotation.ControllerAdvice
;
import
org.springframework.web.bind.annotation.ExceptionHandler
;
import
org.springframework.web.bind.annotation.ResponseBody
;
/**
* 全局异常处理
* @author libo
*/
@ControllerAdvice
@ResponseBody
public
class
ExceptionHandlerAdvice
{
/**
* 权限不足
*/
@ExceptionHandler
(
UnauthorizedException
.
class
)
public
JsonResult
handleException
(
UnauthorizedException
e
)
{
e
.
printStackTrace
();
return
JsonResult
.
buildErrorStateResult
(
"权限不足!"
,
false
);
}
/**
* Token无效
*/
@ExceptionHandler
(
TokenInvalidException
.
class
)
public
JsonResult
handleException
(
TokenInvalidException
e
)
{
e
.
printStackTrace
();
return
JsonResult
.
buildErrorStateResult
(
"登录已失效,请重新登录!"
,
false
);
}
/**
* 参数验证失败
*/
@ExceptionHandler
(
MethodArgumentNotValidException
.
class
)
public
JsonResult
handleException
(
MethodArgumentNotValidException
e
)
{
e
.
printStackTrace
();
ObjectError
objectError
=
e
.
getBindingResult
().
getAllErrors
().
get
(
0
);
return
JsonResult
.
buildErrorStateResult
(
objectError
.
getDefaultMessage
(),
false
);
}
/**
* 参数必须性处理
*/
@ExceptionHandler
(
MissingServletRequestParameterException
.
class
)
public
JsonResult
handleException
(
MissingServletRequestParameterException
e
)
{
e
.
printStackTrace
();
return
JsonResult
.
buildErrorStateResult
(
e
.
getMessage
(),
false
);
}
/**
* 其他所有异常
*/
@ExceptionHandler
(
Exception
.
class
)
public
JsonResult
handleException
(
Exception
e
)
{
e
.
printStackTrace
();
...
...
src/main/java/cn/qg/holmes/controller/effect/BuildDataController.java
0 → 100644
View file @
5754ded9
package
cn
.
qg
.
holmes
.
controller
.
effect
;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.config.annotation.RequiresPermissions
;
import
cn.qg.holmes.entity.effect.BuildData
;
import
cn.qg.holmes.entity.effect.BuildDataDetail
;
import
cn.qg.holmes.service.effect.BuildDataDetailService
;
import
cn.qg.holmes.service.effect.BuildDataService
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
javax.validation.Valid
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* 造数据文档controller
* @author libo
*/
@CrossOrigin
@RestController
@RequestMapping
(
"/build/data"
)
public
class
BuildDataController
{
@Autowired
BuildDataService
buildDataService
;
@Autowired
BuildDataDetailService
buildDataDetailService
;
/**
* 获取造数据页面展示
* @return
*/
@GetMapping
(
"/index"
)
public
JsonResult
getBuildDataIndex
()
{
List
<
Map
<
String
,
Object
>>
resultList
=
new
ArrayList
<>();
List
<
BuildData
>
buildDataList
=
buildDataService
.
list
();
QueryWrapper
<
BuildDataDetail
>
queryWrapper
=
new
QueryWrapper
<>();
for
(
BuildData
buildData:
buildDataList
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
Integer
moduleId
=
buildData
.
getId
();
queryWrapper
.
eq
(
"module"
,
moduleId
);
List
<
BuildDataDetail
>
buildDataDetails
=
buildDataDetailService
.
list
(
queryWrapper
);
map
.
put
(
"moduleId"
,
moduleId
);
map
.
put
(
"moduleName"
,
buildData
.
getName
());
map
.
put
(
"type"
,
buildData
.
getColor
());
map
.
put
(
"list"
,
buildDataDetails
);
resultList
.
add
(
map
);
queryWrapper
.
clear
();
}
return
JsonResult
.
buildSuccessResult
(
resultList
);
}
/**
* 获取详情列表
* @param name 造数据详情名称
* @param module 模块id
* @return
*/
@GetMapping
(
"/list"
)
public
JsonResult
getBuildDataDetailList
(
String
name
,
Integer
module
)
{
QueryWrapper
<
BuildDataDetail
>
queryWrapper
=
new
QueryWrapper
<>();
if
(!
StringUtils
.
isEmpty
(
name
))
{
queryWrapper
.
eq
(
"name"
,
name
);
}
if
(
module
!=
null
)
{
queryWrapper
.
eq
(
"module"
,
module
);
}
queryWrapper
.
orderByDesc
(
"id"
);
List
<
BuildDataDetail
>
buildDataDetailList
=
buildDataDetailService
.
list
(
queryWrapper
);
Map
<
Integer
,
String
>
moduleMap
=
buildDataService
.
list
().
stream
().
collect
(
Collectors
.
toMap
(
BuildData:
:
getId
,
BuildData:
:
getName
));
for
(
BuildDataDetail
buildDataDetail:
buildDataDetailList
)
{
buildDataDetail
.
setModuleName
(
moduleMap
.
get
(
buildDataDetail
.
getModule
()));
}
return
JsonResult
.
buildSuccessResult
(
buildDataDetailList
);
}
/**
* 返回造数据模块,不分页
* @return
*/
@GetMapping
(
"/modules"
)
public
JsonResult
getBuildDataModules
()
{
return
JsonResult
.
buildSuccessResult
(
buildDataService
.
list
());
}
/**
* 新增造数据详情
* @param buildDataDetail
* @return
*/
@RequiresPermissions
(
"build:data:add"
)
@PostMapping
(
"/add"
)
public
JsonResult
addBuildDataDetail
(
@Valid
@RequestBody
BuildDataDetail
buildDataDetail
)
{
QueryWrapper
<
BuildDataDetail
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"name"
,
buildDataDetail
.
getName
())
.
eq
(
"module"
,
buildDataDetail
.
getModule
());
if
(
buildDataDetailService
.
getOne
(
queryWrapper
)
!=
null
)
{
return
JsonResult
.
buildErrorStateResult
(
"数据已存在,不能重复添加!"
,
false
);
}
return
JsonResult
.
buildSuccessResult
(
buildDataDetailService
.
save
(
buildDataDetail
));
}
/**
* 更新造数据详情
* @param buildDataDetail
* @return
*/
@RequiresPermissions
(
"build:data:update"
)
@PostMapping
(
"/update"
)
public
JsonResult
updateBuildDataDetail
(
@Valid
@RequestBody
BuildDataDetail
buildDataDetail
)
{
return
JsonResult
.
buildSuccessResult
(
buildDataDetailService
.
updateById
(
buildDataDetail
));
}
/**
* 删除造数据详情
* @param buildDataDetail
* @return
*/
@RequiresPermissions
(
"build:data:delete"
)
@PostMapping
(
"/delete"
)
public
JsonResult
deleteBuildDataDetail
(
@Valid
@RequestBody
BuildDataDetail
buildDataDetail
)
{
return
JsonResult
.
buildSuccessResult
(
buildDataDetailService
.
removeById
(
buildDataDetail
.
getId
()));
}
}
src/main/java/cn/qg/holmes/controller/effect/DbSyncController.java
View file @
5754ded9
...
...
@@ -2,8 +2,11 @@ package cn.qg.holmes.controller.effect;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.service.effect.DatabaseSyncService
;
import
cn.qg.holmes.service.k8s.K8sService
;
import
cn.qg.holmes.utils.JenkinsService
;
import
lombok.extern.slf4j.Slf4j
;
import
net.sf.jsqlparser.expression.JdbcNamedParameter
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.web.bind.annotation.*
;
...
...
@@ -35,22 +38,43 @@ public class DbSyncController {
@Value
(
"${dbsync.mysql.password}"
)
private
String
password
;
@Autowired
K8sService
k8sService
;
/**
* 同步数据库
* @param namespace 环境
* @param dbName 数据库名称
* @param tableName 表名称
* @param businessData 是否保留业务数据
* @return
*/
@GetMapping
(
"/one"
)
public
JsonResult
sync
SingleTable
(
@RequestParam
String
namespace
,
@RequestParam
String
dbName
,
@RequestParam
String
tableName
)
{
public
JsonResult
sync
Database
(
@RequestParam
String
namespace
,
@RequestParam
String
dbName
,
@RequestParam
String
tableName
,
@RequestParam
boolean
businessData
)
{
try
{
long
startTime
=
System
.
currentTimeMillis
();
Map
<
String
,
String
>
map
=
databaseSyncService
.
getMysqlInfo
ByNamespace
(
namespace
);
String
destIp
=
map
.
get
(
"
ip
"
);
Map
<
String
,
String
>
map
=
k8sService
.
getMysqlAddress
ByNamespace
(
namespace
);
String
destIp
=
map
.
get
(
"
host
"
);
String
destPort
=
map
.
get
(
"port"
);
log
.
info
(
"获取到{}环境的Mysql地址为:{}"
,
namespace
,
destIp
+
":"
+
destPort
);
if
(
tableName
.
equalsIgnoreCase
(
"all"
)
||
tableName
.
equals
(
""
))
{
log
.
info
(
"开始同步{}库下所有的表"
,
dbName
);
databaseSyncService
.
getDbInfoFromSource
(
ip
,
port
,
username
,
password
,
dbName
);
databaseSyncService
.
syncDbToDest
(
destIp
,
destPort
,
"qa"
,
"qatest"
,
dbName
,
namespace
);
}
else
{
log
.
info
(
"开始同步{}库下{}表"
,
dbName
,
tableName
);
databaseSyncService
.
getSingleTableFromSource
(
ip
,
port
,
username
,
password
,
dbName
,
tableName
);
databaseSyncService
.
syncSingleTableToDest
(
destIp
,
destPort
,
"qa"
,
"qatest"
,
dbName
,
tableName
);
if
(!
StringUtils
.
isEmpty
(
dbName
))
{
// 同步所有数据库
if
(
dbName
.
equalsIgnoreCase
(
"all"
))
{
List
<
String
>
dbList
=
databaseSyncService
.
getDatabaseList
(
ip
,
port
,
username
,
password
);
databaseSyncService
.
getDbInfoFromSource
(
ip
,
port
,
username
,
password
,
dbName
);
databaseSyncService
.
syncDbToDest
(
destIp
,
destPort
,
"qa"
,
"qatest"
,
dbName
,
namespace
,
businessData
);
}
else
{
// 同步单个数据库或单张表
if
(
tableName
.
equalsIgnoreCase
(
"all"
)
||
tableName
.
equals
(
""
))
{
log
.
info
(
"开始同步{}库下所有表到{}环境,保留业务数据:{}"
,
dbName
,
namespace
,
businessData
);
databaseSyncService
.
getDbInfoFromSource
(
ip
,
port
,
username
,
password
,
dbName
);
databaseSyncService
.
syncDbToDest
(
destIp
,
destPort
,
"qa"
,
"qatest"
,
dbName
,
namespace
,
businessData
);
}
else
{
log
.
info
(
"开始同步{}库下{}表到{}环境,保留业务数据:{}"
,
dbName
,
tableName
,
namespace
,
businessData
);
databaseSyncService
.
getSingleTableFromSource
(
ip
,
port
,
username
,
password
,
dbName
,
tableName
);
databaseSyncService
.
syncSingleTableToDest
(
destIp
,
destPort
,
"qa"
,
"qatest"
,
dbName
,
tableName
,
businessData
);
}
}
}
long
endTime
=
System
.
currentTimeMillis
();
long
elapsedTime
=
(
endTime
-
startTime
)
/
1000
;
...
...
@@ -77,11 +101,79 @@ public class DbSyncController {
*/
@GetMapping
(
"/tables"
)
public
JsonResult
getTableList
(
@RequestParam
String
dbName
)
{
List
<
Object
>
tableList
=
databaseSyncService
.
getTableListByDb
(
ip
,
port
,
username
,
password
,
dbName
);
List
<
String
>
tableList
=
databaseSyncService
.
getTableListByDb
(
ip
,
port
,
username
,
password
,
dbName
);
tableList
.
add
(
0
,
"all"
);
return
JsonResult
.
buildSuccessResult
(
tableList
);
}
/**
* 给数据库同步脚本使用的接口
* @param database 数据库名
* @return
*/
@GetMapping
(
"/tableList"
)
public
String
getTableListForSync
(
@RequestParam
String
database
)
{
List
<
String
>
tableList
=
databaseSyncService
.
getTableListByDb
(
ip
,
port
,
username
,
password
,
database
);
return
StringUtils
.
join
(
tableList
,
" "
);
}
/**
* 获取同步库所有的数据库
* 给数据库同步脚本使用的接口
* @return
*/
@GetMapping
(
"/dbList"
)
public
String
getDbListForSync
()
{
List
<
String
>
dbList
=
databaseSyncService
.
getDatabaseList
(
ip
,
port
,
username
,
password
);
return
StringUtils
.
join
(
dbList
,
" "
);
}
/**
* 同步表结构
* @param targetIp
* @param targetPort
* @param database
* @param table
* @return
*/
@GetMapping
(
"/table/structure"
)
public
JsonResult
handleTableStructure
(
@RequestParam
String
targetIp
,
@RequestParam
String
targetPort
,
@RequestParam
String
database
,
@RequestParam
String
table
)
{
try
{
log
.
info
(
"开始同步表结构到测试环境,地址:{}:{}, 数据库:{}, 表:{}"
,
targetIp
,
targetPort
,
database
,
table
);
databaseSyncService
.
getSourceDbStructure
(
ip
,
port
,
username
,
password
,
database
,
table
);
databaseSyncService
.
syncDbStructureToDest
(
targetIp
,
targetPort
,
"qa"
,
"qatest"
,
database
,
table
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
JsonResult
.
buildErrorStateResult
(
"创建表结构失败!"
,
false
);
}
return
JsonResult
.
buildSuccessResult
(
"创建"
+
targetIp
+
":"
+
targetPort
+
"环境表结构成功!"
);
}
/**
* 新-同步数据库,构建jenkins job db_sync
* @param namespace 环境
* @param targetHost 目标环境ip
* @param targetPort 目标环境端口
* @param database 数据库名称
* @param table 表名
* @param businessData 是否保留业务数据
* @return
*/
@PostMapping
(
"new"
)
public
JsonResult
dbSyncNew
(
@RequestParam
String
namespace
,
@RequestParam
String
targetHost
,
@RequestParam
String
targetPort
,
@RequestParam
String
database
,
@RequestParam
String
table
,
@RequestParam
boolean
businessData
)
{
int
buildNum
=
jenkinsService
.
buildDbSyncJobNew
(
namespace
,
targetHost
,
targetPort
,
database
,
table
,
businessData
);
if
(
buildNum
==
0
)
{
return
JsonResult
.
buildErrorStateResult
(
"数据库同步失败!"
,
0
);
}
else
{
return
JsonResult
.
buildSuccessResult
(
"开始同步数据库!"
,
buildNum
);
}
}
/**
* 老数据库同步,调用Jenkins job sync_database_schema
* @param dbName 数据库名
...
...
src/main/java/cn/qg/holmes/controller/gitlab/JenkinsController.java
View file @
5754ded9
...
...
@@ -30,7 +30,7 @@ public class JenkinsController {
@RequestParam
String
namespace
)
{
try
{
log
.
info
(
"开始构建jenkins项目:项目类型:{}, 项目名:{}, 分支:{}, 部署至环境:{}"
,
type
,
project
,
branch
,
namespace
);
jenkinsService
.
build
Jenkins
Job
(
type
,
project
,
branch
,
namespace
);
jenkinsService
.
build
Tke
Job
(
type
,
project
,
branch
,
namespace
);
return
JsonResult
.
buildSuccessResult
(
true
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
...
...
src/main/java/cn/qg/holmes/controller/gitlab/PipelineController.java
View file @
5754ded9
...
...
@@ -2,9 +2,11 @@ package cn.qg.holmes.controller.gitlab;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.config.annotation.RequiresPermissions
;
import
cn.qg.holmes.entity.auth.UserInfoVo
;
import
cn.qg.holmes.entity.gitlab.DingRobotPipelineVo
;
import
cn.qg.holmes.entity.gitlab.Pipeline
;
import
cn.qg.holmes.entity.jira.DingRobot
;
import
cn.qg.holmes.service.auth.TokenService
;
import
cn.qg.holmes.service.gitlab.PipelineService
;
import
cn.qg.holmes.service.jira.DingRobotService
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
...
...
@@ -35,6 +37,12 @@ public class PipelineController {
@Autowired
DingRobotService
dingRobotService
;
@Autowired
HttpServletRequest
servletRequest
;
@Autowired
TokenService
tokenService
;
/**
* gitlab webhook
* @param request
...
...
@@ -57,7 +65,7 @@ public class PipelineController {
}
@GetMapping
(
"/list"
)
public
JsonResult
getDingRobotAndPipelineList
(
String
jiraProjectKey
,
String
projectName
,
String
namespace
,
public
JsonResult
getDingRobotAndPipelineList
(
String
jiraProjectKey
,
String
projectName
,
String
namespace
,
Integer
status
,
@RequestParam
(
defaultValue
=
"1"
)
Integer
pageNum
,
@RequestParam
(
defaultValue
=
"10"
)
Integer
pageSize
)
{
IPage
<
DingRobot
>
page
=
new
Page
<>(
pageNum
,
pageSize
);
...
...
@@ -71,6 +79,9 @@ public class PipelineController {
if
(!
StringUtils
.
isEmpty
(
namespace
))
{
dingRobotQueryWrapper
.
eq
(
"namespace"
,
namespace
);
}
if
(
status
!=
null
)
{
dingRobotQueryWrapper
.
eq
(
"status"
,
status
);
}
dingRobotQueryWrapper
.
orderByDesc
(
"id"
);
IPage
<
DingRobot
>
projectRobotIPage
=
dingRobotService
.
page
(
page
,
dingRobotQueryWrapper
);
List
<
DingRobot
>
dingRobotList
=
projectRobotIPage
.
getRecords
();
...
...
@@ -99,6 +110,10 @@ public class PipelineController {
public
JsonResult
addRobotAndPipeline
(
@RequestBody
DingRobotPipelineVo
dingRobotPipelineVo
)
{
try
{
DingRobot
dingRobot
=
dingRobotPipelineVo
.
getDingRobot
();
// 设置创建人
String
token
=
servletRequest
.
getHeader
(
"token"
);
UserInfoVo
userInfoVo
=
tokenService
.
getUserInfoFromCache
(
token
);
dingRobot
.
setCreator
(
userInfoVo
.
getChineseName
());
String
projectName
=
dingRobot
.
getProjectName
();
String
jiraProjectKey
=
dingRobot
.
getJiraProjectKey
();
QueryWrapper
<
DingRobot
>
dingRobotQueryWrapper
=
new
QueryWrapper
<>();
...
...
@@ -205,4 +220,29 @@ public class PipelineController {
}
}
/**
* 更新状态
* @param dingRobotId 机器人id
* @param status 状态,1-进行中,2-已完成
* @return
*/
@RequiresPermissions
(
"qa:process:finish"
)
@PostMapping
(
"/finish"
)
public
JsonResult
finishPipeline
(
@RequestParam
Integer
dingRobotId
,
@RequestParam
Integer
status
)
{
try
{
DingRobot
dingRobot
=
dingRobotService
.
getById
(
dingRobotId
);
if
(
dingRobot
==
null
)
{
return
JsonResult
.
buildErrorStateResult
(
"该测试流程不存在!"
,
false
);
}
// 设置状态为已完成
dingRobot
.
setStatus
(
status
);
if
(!
dingRobotService
.
updateById
(
dingRobot
))
{
return
JsonResult
.
buildErrorStateResult
(
"更新状态失败!"
,
false
);
}
return
JsonResult
.
buildSuccessResult
(
"更新状态成功!"
,
true
);
}
catch
(
Exception
e
)
{
return
JsonResult
.
buildErrorStateResult
(
"更新状态失败!"
,
false
);
}
}
}
src/main/java/cn/qg/holmes/controller/k8s/DockerProjectController.java
View file @
5754ded9
...
...
@@ -29,10 +29,10 @@ public class DockerProjectController {
* @return
*/
@GetMapping
(
"/list"
)
public
JsonResult
getDockerProjectList
(
String
projectName
,
String
projectType
,
Integer
isActive
,
public
JsonResult
getDockerProjectList
(
String
projectName
,
String
projectType
,
Integer
isActive
,
String
hostName
,
@RequestParam
(
defaultValue
=
"1"
)
Integer
pageNum
,
@RequestParam
(
defaultValue
=
"10"
)
Integer
pageSize
)
{
IPage
projectIPage
=
dockerProjectService
.
getDockerProjectList
(
projectName
,
projectType
,
isActive
,
pageNum
,
pageSize
);
IPage
projectIPage
=
dockerProjectService
.
getDockerProjectList
(
projectName
,
projectType
,
isActive
,
hostName
,
pageNum
,
pageSize
);
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"total"
,
projectIPage
.
getTotal
());
map
.
put
(
"list"
,
projectIPage
.
getRecords
());
...
...
@@ -169,4 +169,18 @@ public class DockerProjectController {
return
dockerProject
.
getGitPath
();
}
@GetMapping
(
"/get_info"
)
public
String
getStartCommand
(
@RequestParam
String
projectName
,
@RequestParam
String
key
)
{
QueryWrapper
<
DockerProject
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"project_name"
,
projectName
);
DockerProject
dockerProject
=
dockerProjectService
.
getOne
(
queryWrapper
);
if
(
key
.
equals
(
"start_command"
))
{
return
dockerProject
.
getStartCommand
();
}
if
(
key
.
equals
(
"host_name"
))
{
return
dockerProject
.
getHostName
();
}
return
""
;
}
}
src/main/java/cn/qg/holmes/controller/k8s/EnvTemplateController.java
0 → 100644
View file @
5754ded9
package
cn
.
qg
.
holmes
.
controller
.
k8s
;
import
cn.qg.holmes.common.JsonResult
;
import
cn.qg.holmes.config.annotation.RequiresPermissions
;
import
cn.qg.holmes.entity.k8s.EnvTemplate
;
import
cn.qg.holmes.entity.k8s.EnvTemplateDetail
;
import
cn.qg.holmes.entity.k8s.EnvTemplateVo
;
import
cn.qg.holmes.service.k8s.EnvTemplateDetailService
;
import
cn.qg.holmes.service.k8s.EnvTemplateService
;
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.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
@CrossOrigin
@RestController
@RequestMapping
(
"/env/template"
)
public
class
EnvTemplateController
{
@Autowired
EnvTemplateService
envTemplateService
;
@Autowired
EnvTemplateDetailService
envTemplateDetailService
;
@GetMapping
(
"/list"
)
public
JsonResult
getTemplateList
(
@RequestParam
(
defaultValue
=
"1"
)
Integer
pageNum
,
@RequestParam
(
defaultValue
=
"10"
)
Integer
pageSize
)
{
IPage
<
EnvTemplate
>
envTemplateIPage
=
new
Page
<>(
pageNum
,
pageSize
);
IPage
<
EnvTemplate
>
IPage
=
envTemplateService
.
page
(
envTemplateIPage
);
List
<
EnvTemplate
>
envTemplateList
=
IPage
.
getRecords
();
List
<
EnvTemplateVo
>
envTemplateVoList
=
new
ArrayList
<>();
QueryWrapper
<
EnvTemplateDetail
>
queryWrapper
=
new
QueryWrapper
<>();
for
(
EnvTemplate
envTemplate:
envTemplateList
)
{
EnvTemplateVo
envTemplateVo
=
new
EnvTemplateVo
();
envTemplateVo
.
setEnvTemplate
(
envTemplate
);
queryWrapper
.
eq
(
"template_id"
,
envTemplate
.
getId
());
List
<
EnvTemplateDetail
>
envTemplateDetailList
=
envTemplateDetailService
.
list
(
queryWrapper
);
envTemplateVo
.
setEnvTemplateDetailList
(
envTemplateDetailList
);
envTemplateVoList
.
add
(
envTemplateVo
);
queryWrapper
.
clear
();
}
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"total"
,
IPage
.
getTotal
());
map
.
put
(
"list"
,
envTemplateVoList
);
return
JsonResult
.
buildSuccessResult
(
map
);
}
/**
* 获取所有的模板及其关联的服务
* @return
*/
@GetMapping
(
"/getAll"
)
public
JsonResult
getTemplateByName
()
{
List
<
Map
<
String
,
Object
>>
resultList
=
new
ArrayList
<>();
List
<
EnvTemplate
>
envTemplateList
=
envTemplateService
.
list
();
QueryWrapper
<
EnvTemplateDetail
>
queryWrapper
=
new
QueryWrapper
<>();
for
(
EnvTemplate
envTemplate:
envTemplateList
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"id"
,
envTemplate
.
getId
());
map
.
put
(
"name"
,
envTemplate
.
getName
());
map
.
put
(
"updateTime"
,
envTemplate
.
getUpdateTime
());
queryWrapper
.
eq
(
"template_id"
,
envTemplate
.
getId
());
List
<
EnvTemplateDetail
>
envTemplateDetailList
=
envTemplateDetailService
.
list
(
queryWrapper
);
for
(
EnvTemplateDetail
envTemplateDetail:
envTemplateDetailList
)
{
List
<
EnvTemplateDetail
>
envTemplateDetailListTemp
;
if
(
map
.
containsKey
(
envTemplateDetail
.
getLabel
()))
{
envTemplateDetailListTemp
=
(
List
<
EnvTemplateDetail
>)
map
.
get
(
envTemplateDetail
.
getLabel
());
}
else
{
envTemplateDetailListTemp
=
new
ArrayList
<>();
}
envTemplateDetailListTemp
.
add
(
envTemplateDetail
);
map
.
put
(
envTemplateDetail
.
getLabel
(),
envTemplateDetailListTemp
);
}
queryWrapper
.
clear
();
resultList
.
add
(
map
);
}
return
JsonResult
.
buildSuccessResult
(
resultList
);
}
/**
* 新建模板
* @param envTemplateVo 模板虚拟实体类
* @return
*/
@RequiresPermissions
(
"docker:envTemplate:create"
)
@PostMapping
(
"/create"
)
public
JsonResult
saveEnvTemplate
(
@RequestBody
EnvTemplateVo
envTemplateVo
)
{
EnvTemplate
envTemplate
=
envTemplateVo
.
getEnvTemplate
();
QueryWrapper
<
EnvTemplate
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"name"
,
envTemplate
.
getName
());
if
(
envTemplateService
.
getOne
(
queryWrapper
)
!=
null
)
{
return
JsonResult
.
buildErrorStateResult
(
"模板已存在!"
,
false
);
}
// 保存模板
if
(!
envTemplateService
.
save
(
envTemplate
))
{
return
JsonResult
.
buildErrorStateResult
(
"模板创建失败!"
,
false
);
}
// 模板详情列表设置模板id
Integer
templateId
=
envTemplateService
.
getOne
(
queryWrapper
).
getId
();
List
<
EnvTemplateDetail
>
envTemplateDetailList
=
envTemplateVo
.
getEnvTemplateDetailList
();
for
(
EnvTemplateDetail
envTemplateDetail:
envTemplateDetailList
)
{
envTemplateDetail
.
setTemplateId
(
templateId
);
}
// 保存模板详情
if
(!
envTemplateDetailService
.
saveBatch
(
envTemplateDetailList
))
{
return
JsonResult
.
buildErrorStateResult
(
"模板详情保存失败!"
,
false
);
}
return
JsonResult
.
buildSuccessResult
(
true
);
}
/**
* 编辑模板及模板详情
* @param envTemplateVo 模板列表
* @return
*/
@RequiresPermissions
(
"docker:envTemplate:modify"
)
@PostMapping
(
"/modify"
)
public
JsonResult
modifyEnvTemplate
(
@RequestBody
EnvTemplateVo
envTemplateVo
)
{
EnvTemplate
envTemplate
=
envTemplateVo
.
getEnvTemplate
();
if
(!
envTemplateService
.
updateById
(
envTemplate
))
{
return
JsonResult
.
buildErrorStateResult
(
"模板更新失败!"
,
false
);
}
// 参数传过来的列表
List
<
EnvTemplateDetail
>
envTemplateDetailList
=
envTemplateVo
.
getEnvTemplateDetailList
();
// 查询出数据库里该模板的所有条目
QueryWrapper
<
EnvTemplateDetail
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"template_id"
,
envTemplate
.
getId
());
List
<
EnvTemplateDetail
>
envTemplateDetailListDb
=
envTemplateDetailService
.
list
(
queryWrapper
);
// 删除传参里没有的
for
(
EnvTemplateDetail
envTemplateDetailDb:
envTemplateDetailListDb
)
{
boolean
delete
=
true
;
for
(
EnvTemplateDetail
envTemplateDetail:
envTemplateDetailList
)
{
if
(
envTemplateDetail
.
getId
()
!=
null
)
{
if
(
envTemplateDetail
.
getId
().
equals
(
envTemplateDetailDb
.
getId
()))
{
delete
=
false
;
break
;
}
}
}
if
(
delete
)
{
envTemplateDetailService
.
removeById
(
envTemplateDetailDb
.
getId
());
}
}
// 设置一下templateId
envTemplateDetailList
.
forEach
(
envTemplateDetail
->
{
envTemplateDetail
.
setTemplateId
(
envTemplate
.
getId
());
});
// 剩余的批量新增/修改
if
(!
envTemplateDetailService
.
saveOrUpdateBatch
(
envTemplateDetailList
))
{
return
JsonResult
.
buildErrorStateResult
(
"更新模板详情失败!"
,
false
);
}
return
JsonResult
.
buildSuccessResult
(
"模板更新成功"
);
}
/**
*
* @param templateId 模板id
* @return
*/
@RequiresPermissions
(
"docker:envTemplate:delete"
)
@PostMapping
(
"/delete"
)
public
JsonResult
deleteEnvTemplate
(
@RequestParam
Integer
templateId
)
{
if
(!
envTemplateService
.
removeById
(
templateId
))
{
return
JsonResult
.
buildErrorStateResult
(
"模板删除失败!"
,
false
);
}
QueryWrapper
<
EnvTemplateDetail
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"template_id"
,
templateId
);
if
(!
envTemplateDetailService
.
remove
(
queryWrapper
))
{
return
JsonResult
.
buildErrorStateResult
(
"模板详情删除失败"
,
false
);
}
return
JsonResult
.
buildSuccessResult
(
"模板删除成功!"
);
}
}
src/main/java/cn/qg/holmes/controller/k8s/K8sController.java
View file @
5754ded9
This diff is collapsed.
Click to expand it.
src/main/java/cn/qg/holmes/controller/navigate/NavigateController.java
View file @
5754ded9
...
...
@@ -69,19 +69,10 @@ public class NavigateController {
Map
<
Integer
,
String
>
moduleMap
=
navigateModuleList
.
stream
().
collect
(
Collectors
.
toMap
(
NavigateModule:
:
getId
,
NavigateModule:
:
getName
));
// 获取导航列表
List
<
NavigateDetail
>
navigateDetailList
=
navigateDetailService
.
list
(
detailQueryWrapper
);
List
<
Map
<
String
,
Object
>>
resultList
=
new
ArrayList
<>();
for
(
NavigateDetail
navigateDetail:
navigateDetailList
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"id"
,
navigateDetail
.
getId
());
map
.
put
(
"name"
,
navigateDetail
.
getName
());
map
.
put
(
"url"
,
navigateDetail
.
getUrl
());
map
.
put
(
"module"
,
navigateDetail
.
getModule
());
map
.
put
(
"moduleName"
,
moduleMap
.
get
(
navigateDetail
.
getModule
()));
map
.
put
(
"createTime"
,
navigateDetail
.
getCreateTime
());
map
.
put
(
"updateTime"
,
navigateDetail
.
getUpdateTime
());
resultList
.
add
(
map
);
navigateDetail
.
setModuleName
(
moduleMap
.
get
(
navigateDetail
.
getModule
()));
}
return
JsonResult
.
buildSuccessResult
(
result
List
);
return
JsonResult
.
buildSuccessResult
(
navigateDetail
List
);
}
/**
...
...
src/main/java/cn/qg/holmes/entity/effect/BuildData.java
0 → 100644
View file @
5754ded9
package
cn
.
qg
.
holmes
.
entity
.
effect
;
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
java.util.Date
;
/**
* 造数据文档模块类
*/
@TableName
(
value
=
"build_data"
)
@Data
public
class
BuildData
{
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Integer
id
;
/**
* 模块名称
*/
@TableField
(
value
=
"name"
)
@NotBlank
(
message
=
"模块名称不能为空"
)
private
String
name
;
/**
* 模块颜色
*/
@TableField
(
value
=
"color"
)
@NotBlank
(
message
=
"模块颜色不能为空"
)
private
String
color
;
/**
* 更新时间
*/
@TableField
(
value
=
"update_time"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
updateTime
;
}
src/main/java/cn/qg/holmes/entity/effect/BuildDataDetail.java
0 → 100644
View file @
5754ded9
package
cn
.
qg
.
holmes
.
entity
.
effect
;
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
;
/**
* 造数据详情实体类
*/
@TableName
(
value
=
"build_data_detail"
)
@Data
public
class
BuildDataDetail
{
/**
* 主键id
*/
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Integer
id
;
/**
* 造数据说明
*/
@TableField
(
value
=
"name"
)
@NotBlank
(
message
=
"名称不能为空"
)
private
String
name
;
/**
* 链接地址
*/
@TableField
(
value
=
"url"
)
@NotBlank
(
message
=
"链接名称不能为空"
)
private
String
url
;
/**
* 模块id
*/
@TableField
(
value
=
"module"
)
@NotNull
(
message
=
"模块id不能为空"
)
private
Integer
module
;
/**
* 更新时间
*/
@TableField
(
value
=
"update_time"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
updateTime
;
@TableField
(
exist
=
false
)
private
String
moduleName
;
}
src/main/java/cn/qg/holmes/entity/jira/DingRobot.java
View file @
5754ded9
...
...
@@ -13,11 +13,30 @@ import java.util.Date;
public
class
DingRobot
{
@TableId
(
type
=
IdType
.
AUTO
)
private
Integer
id
;
/**
* 项目名称,与提BUG时【】里的内容进行匹配
*/
private
String
projectName
;
/**
* jira项目关键字
*/
private
String
jiraProjectKey
;
/**
* 钉钉机器人webhook
*/
private
String
dingUrl
;
/**
* 创建人
*/
private
String
creator
;
/**
* 环境
*/
private
String
namespace
;
/**
* 1-进行中,2-已完成
*/
private
Integer
status
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
createTime
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
...
...
src/main/java/cn/qg/holmes/entity/jira/JiraBugPool.java
View file @
5754ded9
...
...
@@ -44,10 +44,16 @@ public class JiraBugPool {
* 钉钉robot
*/
private
String
dingUrl
;
/**
* 对应项目id
*/
private
Integer
dingRobotId
;
/**
* 是否有效,1-有效,0-无效
*/
private
Integer
enable
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
createTime
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
...
...
src/main/java/cn/qg/holmes/entity/k8s/EnvTemplate.java
0 → 100644
View file @
5754ded9
package
cn
.
qg
.
holmes
.
entity
.
k8s
;
import
com.baomidou.mybatisplus.annotation.IdType
;
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
*/
@TableName
(
value
=
"env_template"
)
@Data
public
class
EnvTemplate
{
@TableId
(
type
=
IdType
.
AUTO
)
private
Integer
id
;
private
String
name
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
updateTime
;
}
src/main/java/cn/qg/holmes/entity/k8s/EnvTemplateDetail.java
0 → 100644
View file @
5754ded9
package
cn
.
qg
.
holmes
.
entity
.
k8s
;
import
com.baomidou.mybatisplus.annotation.IdType
;
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
;
@Data
@TableName
(
value
=
"env_template_detail"
)
public
class
EnvTemplateDetail
{
@TableId
(
type
=
IdType
.
AUTO
)
private
Integer
id
;
private
String
serviceName
;
private
String
serviceType
;
private
String
label
;
private
String
domain
;
private
String
tag
;
private
Integer
templateId
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
updateTime
;
}
src/main/java/cn/qg/holmes/entity/k8s/EnvTemplateVo.java
0 → 100644
View file @
5754ded9
package
cn
.
qg
.
holmes
.
entity
.
k8s
;
import
lombok.Data
;
import
java.util.List
;
/**
* 创建环境模板虚拟实体类
*/
@Data
public
class
EnvTemplateVo
{
private
EnvTemplate
envTemplate
;
private
List
<
EnvTemplateDetail
>
envTemplateDetailList
;
}
src/main/java/cn/qg/holmes/entity/navigate/NavigateDetail.java
View file @
5754ded9
package
cn
.
qg
.
holmes
.
entity
.
navigate
;
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
;
...
...
@@ -45,4 +46,7 @@ public class NavigateDetail {
*/
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
Date
updateTime
;
@TableField
(
exist
=
false
)
private
String
moduleName
;
}
src/main/java/cn/qg/holmes/mapper/effect/BuildDataDetailMapper.java
0 → 100644
View file @
5754ded9
package
cn
.
qg
.
holmes
.
mapper
.
effect
;
import
cn.qg.holmes.entity.effect.BuildDataDetail
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
public
interface
BuildDataDetailMapper
extends
BaseMapper
<
BuildDataDetail
>
{
}
src/main/java/cn/qg/holmes/mapper/effect/BuildDataMapper.java
0 → 100644
View file @
5754ded9
package
cn
.
qg
.
holmes
.
mapper
.
effect
;
import
cn.qg.holmes.entity.effect.BuildData
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
public
interface
BuildDataMapper
extends
BaseMapper
<
BuildData
>
{
}
src/main/java/cn/qg/holmes/mapper/k8s/DockerProjectMapper.java
View file @
5754ded9
...
...
@@ -6,5 +6,5 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
public
interface
DockerProjectMapper
extends
BaseMapper
<
DockerProject
>
{
IPage
<
DockerProject
>
getDockerProjectList
(
IPage
<
DockerProject
>
page
,
String
projectName
,
String
projectType
,
Integer
isActive
);
IPage
<
DockerProject
>
getDockerProjectList
(
IPage
<
DockerProject
>
page
,
String
projectName
,
String
projectType
,
Integer
isActive
,
String
hostName
);
}
src/main/java/cn/qg/holmes/mapper/k8s/EnvTemplateDetailMapper.java
0 → 100644
View file @
5754ded9
package
cn
.
qg
.
holmes
.
mapper
.
k8s
;
import
cn.qg.holmes.entity.k8s.EnvTemplateDetail
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
public
interface
EnvTemplateDetailMapper
extends
BaseMapper
<
EnvTemplateDetail
>
{
}
src/main/java/cn/qg/holmes/mapper/k8s/EnvTemplateMapper.java
0 → 100644
View file @
5754ded9
package
cn
.
qg
.
holmes
.
mapper
.
k8s
;
import
cn.qg.holmes.entity.k8s.EnvTemplate
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
public
interface
EnvTemplateMapper
extends
BaseMapper
<
EnvTemplate
>
{
}
src/main/java/cn/qg/holmes/service/effect/BuildDataDetailService.java
0 → 100644
View file @
5754ded9
package
cn
.
qg
.
holmes
.
service
.
effect
;
import
cn.qg.holmes.entity.effect.BuildDataDetail
;
import
com.baomidou.mybatisplus.extension.service.IService
;
public
interface
BuildDataDetailService
extends
IService
<
BuildDataDetail
>
{
}
src/main/java/cn/qg/holmes/service/effect/BuildDataService.java
0 → 100644
View file @
5754ded9
package
cn
.
qg
.
holmes
.
service
.
effect
;
import
cn.qg.holmes.entity.effect.BuildData
;
import
com.baomidou.mybatisplus.extension.service.IService
;
public
interface
BuildDataService
extends
IService
<
BuildData
>
{
}
src/main/java/cn/qg/holmes/service/effect/DatabaseSyncService.java
View file @
5754ded9
package
cn
.
qg
.
holmes
.
service
.
effect
;
import
java.util.List
;
import
java.util.Map
;
public
interface
DatabaseSyncService
{
boolean
getDbInfoFromSource
(
String
ip
,
String
port
,
String
username
,
String
password
,
String
dbName
);
boolean
syncDbToDest
(
String
ip
,
String
port
,
String
username
,
String
password
,
String
dbName
,
String
namespace
);
boolean
syncDbToDest
(
String
ip
,
String
port
,
String
username
,
String
password
,
String
dbName
,
String
namespace
,
boolean
businessData
);
boolean
getSingleTableFromSource
(
String
ip
,
String
port
,
String
username
,
String
password
,
String
dbName
,
String
tableName
);
boolean
syncSingleTableToDest
(
String
ip
,
String
port
,
String
username
,
String
password
,
String
dbName
,
String
tableName
);
boolean
syncSingleTableToDest
(
String
ip
,
String
port
,
String
username
,
String
password
,
String
dbName
,
String
tableName
,
boolean
businessData
);
List
<
Object
>
getDatabaseList
(
String
ip
,
String
port
,
String
username
,
String
password
);
List
<
String
>
getDatabaseList
(
String
ip
,
String
port
,
String
username
,
String
password
);
Map
<
String
,
String
>
getMysqlInfoByNamespace
(
String
namespac
e
);
List
<
String
>
getTableListByDb
(
String
ip
,
String
port
,
String
username
,
String
password
,
String
dbNam
e
);
List
<
Object
>
getTableListByDb
(
String
ip
,
String
port
,
String
username
,
String
password
,
String
dbName
);
// 从同步库获取表结构
boolean
getSourceDbStructure
(
String
ip
,
String
port
,
String
username
,
String
password
,
String
dbName
,
String
tableName
);
// 将同步库的表结构同步到环境
boolean
syncDbStructureToDest
(
String
ip
,
String
port
,
String
username
,
String
password
,
String
dbName
,
String
tableName
);
}
\ No newline at end of file
src/main/java/cn/qg/holmes/service/effect/impl/BuildDataDetailServiceImpl.java
0 → 100644
View file @
5754ded9
package
cn
.
qg
.
holmes
.
service
.
effect
.
impl
;
import
cn.qg.holmes.entity.effect.BuildDataDetail
;
import
cn.qg.holmes.mapper.effect.BuildDataDetailMapper
;
import
cn.qg.holmes.service.effect.BuildDataDetailService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.stereotype.Service
;
@Service
public
class
BuildDataDetailServiceImpl
extends
ServiceImpl
<
BuildDataDetailMapper
,
BuildDataDetail
>
implements
BuildDataDetailService
{
}
src/main/java/cn/qg/holmes/service/effect/impl/BuildDataServiceImpl.java
0 → 100644
View file @
5754ded9
package
cn
.
qg
.
holmes
.
service
.
effect
.
impl
;
import
cn.qg.holmes.entity.effect.BuildData
;
import
cn.qg.holmes.mapper.effect.BuildDataMapper
;
import
cn.qg.holmes.service.effect.BuildDataService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.stereotype.Service
;
@Service
public
class
BuildDataServiceImpl
extends
ServiceImpl
<
BuildDataMapper
,
BuildData
>
implements
BuildDataService
{
}
src/main/java/cn/qg/holmes/service/effect/impl/DatabaseSyncServiceImpl.java
View file @
5754ded9
This diff is collapsed.
Click to expand it.
src/main/java/cn/qg/holmes/service/gitlab/impl/PipelineServiceImpl.java
View file @
5754ded9
...
...
@@ -53,7 +53,7 @@ public class PipelineServiceImpl extends ServiceImpl<PipelineMapper, Pipeline> i
if
(
pipeline
!=
null
)
{
if
(
pipeline
.
getEnable
()
==
1
)
{
log
.
info
(
"pipeline中找到对应项目,且项目是启动状态,开始构建:{}"
,
pipeline
.
toString
());
Integer
buildNum
=
jenkinsService
.
build
Jenkins
Job
(
pipeline
.
getServiceType
(),
projectName
,
branch
,
pipeline
.
getNamespace
());
Integer
buildNum
=
jenkinsService
.
build
Tke
Job
(
pipeline
.
getServiceType
(),
projectName
,
branch
,
pipeline
.
getNamespace
());
String
markdown
=
DingdingUtils
.
buildPipelineMarkdownMsg
(
projectName
,
branch
,
pipeline
.
getServiceType
(),
author
,
message
,
commitDate
,
pipeline
.
getNamespace
(),
buildNum
.
toString
());
DingdingUtils
.
sendToDingding
(
markdown
,
dingRobotService
.
getById
(
pipeline
.
getDingRobotId
()).
getDingUrl
());
}
else
{
...
...
src/main/java/cn/qg/holmes/service/jira/impl/DingRobotServiceImpl.java
View file @
5754ded9
...
...
@@ -42,16 +42,20 @@ public class DingRobotServiceImpl extends ServiceImpl<DingRobotMapper, DingRobot
String
priority
=
JsonPath
.
read
(
jiraData
,
"$.issue.fields.priority.name"
);
String
module
=
JsonPath
.
read
(
jiraData
,
"$.issue.fields.components[0].name"
);
String
robotUrl
=
null
;
Integer
dingRobotId
=
null
;
Integer
status
=
null
;
List
<
DingRobot
>
dingRobots
=
dingRobotMapper
.
selectList
(
null
);
for
(
DingRobot
dingRobot
:
dingRobots
)
{
String
projectName
=
"【"
+
dingRobot
.
getProjectName
()
+
"】"
;
if
(
summary
.
contains
(
projectName
))
{
robotUrl
=
dingRobot
.
getDingUrl
();
dingRobotId
=
dingRobot
.
getId
();
status
=
dingRobot
.
getStatus
();
break
;
}
}
// 只有创建了dingRobot的项目的BUG才会被放到BUG池子里
if
(
robotUrl
!=
null
)
{
if
(
robotUrl
!=
null
&&
dingRobotId
!=
null
)
{
// 首次提交的BUG放入bug池子
JiraBugPool
jiraBugPool
=
new
JiraBugPool
();
jiraBugPool
.
setKey
(
key
);
...
...
@@ -61,9 +65,11 @@ public class DingRobotServiceImpl extends ServiceImpl<DingRobotMapper, DingRobot
jiraBugPool
.
setAssignee
(
assignee
);
jiraBugPool
.
setUrl
(
"http://jira2.quantgroup.cn/browse/"
+
key
);
jiraBugPool
.
setDingUrl
(
robotUrl
);
jiraBugPool
.
setDingRobotId
(
dingRobotId
);
jiraBugPoolService
.
save
(
jiraBugPool
);
}
if
(
robotUrl
!=
null
)
{
// 只有项目是进行中才会发送通知
if
(
robotUrl
!=
null
&&
status
==
1
)
{
String
markdownMsg
=
DingdingUtils
.
buildBugCommitMarkdownMsg
(
key
,
summary
,
creator
,
assignee
,
priority
,
module
);
return
DingdingUtils
.
sendToDingding
(
markdownMsg
,
robotUrl
);
}
...
...
src/main/java/cn/qg/holmes/service/k8s/DockerProjectService.java
View file @
5754ded9
...
...
@@ -5,5 +5,5 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import
com.baomidou.mybatisplus.extension.service.IService
;
public
interface
DockerProjectService
extends
IService
<
DockerProject
>
{
IPage
<
DockerProject
>
getDockerProjectList
(
String
projectName
,
String
projectType
,
Integer
isActive
,
Integer
pageNum
,
Integer
pageSize
);
IPage
<
DockerProject
>
getDockerProjectList
(
String
projectName
,
String
projectType
,
Integer
isActive
,
String
hostName
,
Integer
pageNum
,
Integer
pageSize
);
}
src/main/java/cn/qg/holmes/service/k8s/EnvTemplateDetailService.java
0 → 100644
View file @
5754ded9
package
cn
.
qg
.
holmes
.
service
.
k8s
;
import
cn.qg.holmes.entity.k8s.EnvTemplateDetail
;
import
com.baomidou.mybatisplus.extension.service.IService
;
public
interface
EnvTemplateDetailService
extends
IService
<
EnvTemplateDetail
>
{
}
src/main/java/cn/qg/holmes/service/k8s/EnvTemplateService.java
0 → 100644
View file @
5754ded9
package
cn
.
qg
.
holmes
.
service
.
k8s
;
import
cn.qg.holmes.entity.k8s.EnvTemplate
;
import
com.baomidou.mybatisplus.extension.service.IService
;
public
interface
EnvTemplateService
extends
IService
<
EnvTemplate
>
{
}
src/main/java/cn/qg/holmes/service/k8s/ImageService.java
View file @
5754ded9
...
...
@@ -45,12 +45,13 @@ public class ImageService {
* @param repoName 服务名
* @return
*/
public
Map
<
String
,
Object
>
getImageListByService
(
String
repoName
)
{
public
TagInfoResp
getImageListByService
(
String
repoName
)
{
try
{
DescribeImagePersonalRequest
request
=
new
DescribeImagePersonalRequest
();
request
.
setRepoName
(
repoName
);
DescribeImagePersonalResponse
response
=
tcrClient
.
DescribeImagePersonal
(
request
);
return
JSON
.
parseObject
(
DescribeImagePersonalResponse
.
toJsonString
(
response
.
getData
()),
Map
.
class
);
// return JSON.parseObject(DescribeImagePersonalResponse.toJsonString(response.getData()), Map.class);
return
response
.
getData
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
...
...
@@ -97,7 +98,8 @@ public class ImageService {
public
static
void
main
(
String
[]
args
)
{
ImageService
imageService
=
new
ImageService
();
System
.
out
.
println
(
JSON
.
toJSONString
(
imageService
.
getRepoInfoList
(
"qa-test"
)));
// System.out.println(JSON.toJSONString(imageService.getRepoInfoList("qa-base")));
System
.
out
.
println
(
JSON
.
toJSONString
(
imageService
.
getImageListByService
(
"qa-base/mongodb"
)));
}
}
src/main/java/cn/qg/holmes/service/k8s/K8sService.java
View file @
5754ded9
This diff is collapsed.
Click to expand it.
src/main/java/cn/qg/holmes/service/k8s/MqService.java
View file @
5754ded9
...
...
@@ -16,6 +16,7 @@ public class MqService {
/**
* 获取MQ信息
*
* @param host
* @param auth
* @return
...
...
@@ -29,6 +30,7 @@ public class MqService {
/**
* 同步线上MQ到测试
*
* @param host
* @return
*/
...
...
@@ -39,13 +41,14 @@ public class MqService {
Map
<
String
,
Object
>
onlineDefinitions
=
getDefinitionsOfHost
(
ONLINE_MQ_URL
,
ONLINE_MQ_AUTH
);
List
<
Map
<
String
,
String
>>
permissionList
=
(
List
<
Map
<
String
,
String
>>)
onlineDefinitions
.
get
(
"permissions"
);
List
<
Map
<
String
,
String
>>
qaPermissionList
=
new
ArrayList
<>();
for
(
Map
<
String
,
String
>
permission:
permissionList
)
{
for
(
Map
<
String
,
String
>
permission
:
permissionList
)
{
if
(
permission
.
get
(
"user"
).
equals
(
"rabbit_admin"
))
{
qaPermissionList
.
add
(
permission
);
Map
<
String
,
String
>
temp
=
new
HashMap
<>();
temp
.
putAll
(
permission
);
qaPermissionList
.
add
(
temp
);
permission
.
put
(
"user"
,
"qa"
);
qaPermissionList
.
add
(
permission
);
}
if
(!
permission
.
get
(
"user"
).
equals
(
"qa"
)
&&
!
permission
.
get
(
"user"
).
equals
(
"rabbit_admin"
))
{
}
else
if
(!
permission
.
get
(
"user"
).
equals
(
"qa"
)
&&
!
permission
.
get
(
"user"
).
equals
(
"rabbit_admin"
))
{
qaPermissionList
.
add
(
permission
);
}
}
...
...
@@ -65,8 +68,73 @@ public class MqService {
}
}
/**
* 获取 sourceMapList 比 targetMapList 多出的元素
*
* @param sourceMapList
* @param targetMapList
* @return
*/
public
List
<
String
>
mqListCompare
(
List
<
Map
<
String
,
String
>>
sourceMapList
,
List
<
Map
<
String
,
String
>>
targetMapList
)
{
List
<
String
>
resultList
=
new
ArrayList
<>();
for
(
Map
<
String
,
String
>
sourceMap
:
sourceMapList
)
{
boolean
flag
=
false
;
for
(
Map
<
String
,
String
>
targetMap
:
targetMapList
)
{
if
(
sourceMap
.
get
(
"name"
).
equals
(
targetMap
.
get
(
"name"
)))
{
flag
=
true
;
}
}
if
(!
flag
)
{
resultList
.
add
(
sourceMap
.
get
(
"name"
));
}
}
return
resultList
;
}
/**
* 比较测试环境与线上mq
* @param host 测试环境mq地址:ip+端口
* @return
*/
public
Map
<
String
,
Object
>
getMqDiff
(
String
host
)
{
String
ONLINE_MQ_URL
=
"http://172.30.3.140:15672"
;
String
ONLINE_MQ_AUTH
=
"Basic cmFiYml0X2FkbWluOmFiYzEyMzQ="
;
Map
<
String
,
Object
>
onlineDefinitions
=
getDefinitionsOfHost
(
ONLINE_MQ_URL
,
ONLINE_MQ_AUTH
);
String
qaMqUrl
=
"http://"
+
host
;
String
QA_MQ_AUTH
=
"Basic cWE6cWF0ZXN0"
;
Map
<
String
,
Object
>
qaDefinitions
=
getDefinitionsOfHost
(
qaMqUrl
,
QA_MQ_AUTH
);
List
<
Map
<
String
,
String
>>
onlineHostList
=
(
List
<
Map
<
String
,
String
>>)
onlineDefinitions
.
get
(
"vhosts"
);
List
<
Map
<
String
,
String
>>
qaHostList
=
(
List
<
Map
<
String
,
String
>>)
qaDefinitions
.
get
(
"vhosts"
);
List
<
Map
<
String
,
String
>>
onlineQueueList
=
(
List
<
Map
<
String
,
String
>>)
onlineDefinitions
.
get
(
"queues"
);
List
<
Map
<
String
,
String
>>
qaQueueList
=
(
List
<
Map
<
String
,
String
>>)
qaDefinitions
.
get
(
"queues"
);
List
<
String
>
lostVhostList
=
mqListCompare
(
onlineHostList
,
qaHostList
);
List
<
String
>
moreVhostList
=
mqListCompare
(
qaHostList
,
onlineHostList
);
List
<
String
>
lostQueueList
=
mqListCompare
(
onlineQueueList
,
qaQueueList
);
List
<
String
>
moreQueueList
=
mqListCompare
(
qaQueueList
,
onlineQueueList
);
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
Map
<
String
,
Object
>
lostMap
=
new
HashMap
<>();
lostMap
.
put
(
"vhost"
,
lostVhostList
);
lostMap
.
put
(
"queue"
,
lostQueueList
);
Map
<
String
,
Object
>
moreMap
=
new
HashMap
<>();
moreMap
.
put
(
"vhost"
,
moreVhostList
);
moreMap
.
put
(
"queue"
,
moreQueueList
);
if
(
lostVhostList
.
size
()
>
0
||
lostQueueList
.
size
()
>
0
)
{
lostMap
.
put
(
"show"
,
true
);
}
else
{
lostMap
.
put
(
"show"
,
false
);
}
if
(
moreVhostList
.
size
()
>
0
||
moreQueueList
.
size
()
>
0
)
{
moreMap
.
put
(
"show"
,
true
);
}
else
{
moreMap
.
put
(
"show"
,
false
);
}
map
.
put
(
"lost"
,
lostMap
);
map
.
put
(
"more"
,
moreMap
);
return
map
;
}
public
static
void
main
(
String
[]
args
)
{
MqService
mqService
=
new
MqService
();
mqService
.
setDefinitions
(
"172.17.5.
17:31426
"
);
mqService
.
setDefinitions
(
"172.17.5.
46:32419
"
);
}
}
src/main/java/cn/qg/holmes/service/k8s/impl/DockerProjectServiceImpl.java
View file @
5754ded9
...
...
@@ -25,8 +25,8 @@ public class DockerProjectServiceImpl extends ServiceImpl<DockerProjectMapper, D
* @return
*/
@Override
public
IPage
<
DockerProject
>
getDockerProjectList
(
String
projectName
,
String
projectType
,
Integer
isActive
,
Integer
pageNum
,
Integer
pageSize
)
{
public
IPage
<
DockerProject
>
getDockerProjectList
(
String
projectName
,
String
projectType
,
Integer
isActive
,
String
hostName
,
Integer
pageNum
,
Integer
pageSize
)
{
IPage
<
DockerProject
>
page
=
new
Page
<>(
pageNum
,
pageSize
);
return
dockerProjectMapper
.
getDockerProjectList
(
page
,
projectName
,
projectType
,
isActive
);
return
dockerProjectMapper
.
getDockerProjectList
(
page
,
projectName
,
projectType
,
isActive
,
hostName
);
}
}
src/main/java/cn/qg/holmes/service/k8s/impl/EnvTemplateDetailServiceImpl.java
0 → 100644
View file @
5754ded9
package
cn
.
qg
.
holmes
.
service
.
k8s
.
impl
;
import
cn.qg.holmes.entity.k8s.EnvTemplateDetail
;
import
cn.qg.holmes.mapper.k8s.EnvTemplateDetailMapper
;
import
cn.qg.holmes.service.k8s.EnvTemplateDetailService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.stereotype.Service
;
@Service
public
class
EnvTemplateDetailServiceImpl
extends
ServiceImpl
<
EnvTemplateDetailMapper
,
EnvTemplateDetail
>
implements
EnvTemplateDetailService
{
}
src/main/java/cn/qg/holmes/service/k8s/impl/EnvTemplateServiceImpl.java
0 → 100644
View file @
5754ded9
package
cn
.
qg
.
holmes
.
service
.
k8s
.
impl
;
import
cn.qg.holmes.entity.k8s.EnvTemplate
;
import
cn.qg.holmes.mapper.k8s.EnvTemplateMapper
;
import
cn.qg.holmes.service.k8s.EnvTemplateService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.stereotype.Service
;
@Service
public
class
EnvTemplateServiceImpl
extends
ServiceImpl
<
EnvTemplateMapper
,
EnvTemplate
>
implements
EnvTemplateService
{
}
src/main/java/cn/qg/holmes/task/
jira/JiraToDingding
.java
→
src/main/java/cn/qg/holmes/task/
BugNotifyTask
.java
View file @
5754ded9
package
cn
.
qg
.
holmes
.
task
.
jira
;
package
cn
.
qg
.
holmes
.
task
;
import
cn.qg.holmes.entity.jira.DingRobot
;
import
cn.qg.holmes.entity.jira.JiraBugPool
;
import
cn.qg.holmes.service.jira.DingRobotService
;
import
cn.qg.holmes.service.jira.JiraBugPoolService
;
import
cn.qg.holmes.service.jira.JiraIssueService
;
import
cn.qg.holmes.utils.DingdingUtils
;
...
...
@@ -16,11 +18,11 @@ import org.springframework.stereotype.Component;
import
java.util.List
;
/**
* J
ira BUG通知到钉钉定时任务类
* J
IRA BUG相关定时任务
*/
@Component
@Slf4j
public
class
JiraToDingding
{
public
class
BugNotifyTask
{
@Autowired
JiraIssueService
jiraIssueService
;
...
...
@@ -28,6 +30,9 @@ public class JiraToDingding {
@Autowired
JiraBugPoolService
jiraBugPoolService
;
@Autowired
DingRobotService
dingRobotService
;
@Value
(
"${sjgd.ding.url}"
)
private
String
sjgdDingUrl
;
...
...
@@ -80,7 +85,11 @@ public class JiraToDingding {
log
.
info
(
"{} BUG持续时间:{}小时"
,
issue
.
getKey
(),
duration
);
// 如果已超过4个小时,则发送钉钉通知
if
(
duration
>=
4
)
{
DingdingUtils
.
sendToDingding
(
DingdingUtils
.
buildBugFixRemindMsg
(
issue
,
duration
),
jiraBugPool
.
getDingUrl
());
DingRobot
dingRobot
=
dingRobotService
.
getById
(
jiraBugPool
.
getDingRobotId
());
// 项目进行中才发送通知
if
(
dingRobot
.
getStatus
()
==
1
)
{
DingdingUtils
.
sendToDingding
(
DingdingUtils
.
buildBugFixRemindMsg
(
issue
,
duration
),
jiraBugPool
.
getDingUrl
());
}
}
}
}
else
{
...
...
src/main/java/cn/qg/holmes/task/DbSyncTask.java
0 → 100644
View file @
5754ded9
package
cn
.
qg
.
holmes
.
task
;
import
cn.qg.holmes.utils.JenkinsService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.stereotype.Component
;
/**
* 数据库同步定时任务
*/
@Slf4j
@Component
public
class
DbSyncTask
{
@Autowired
JenkinsService
jenkinsService
;
@Scheduled
(
cron
=
"0 0 23 * * ?"
)
public
void
getDbInfoFromSourceJob
()
{
jenkinsService
.
buildDbDailyBackupJob
();
}
}
src/main/java/cn/qg/holmes/utils/DingdingUtils.java
View file @
5754ded9
...
...
@@ -118,7 +118,7 @@ public class DingdingUtils {
content
+=
"今日测试进度:"
+
progress
+
" \n\n"
;
content
=
content
+
"剩余未解决BUG列表:"
+
"\n\n"
;
if
(
issueList
.
size
()
==
0
)
{
content
+=
"暂无未解决BUG!"
;
content
+=
"暂无未解决BUG!
\n\n
"
;
}
int
count
=
0
;
for
(
Issue
issue:
issueList
)
{
...
...
src/main/java/cn/qg/holmes/utils/HttpClientUtils.java
View file @
5754ded9
...
...
@@ -171,7 +171,7 @@ public class HttpClientUtils {
public
static
String
doPostJson
(
String
url
,
Map
<
String
,
String
>
headers
,
String
json
)
{
CloseableHttpClient
httpClient
=
HttpClients
.
createDefault
();
CloseableHttpResponse
httpResponse
=
null
;
String
resultString
=
""
;
String
resultString
=
null
;
try
{
// 创建Http Post请求
HttpPost
httpPost
=
new
HttpPost
(
url
);
...
...
@@ -183,7 +183,9 @@ public class HttpClientUtils {
setHeader
(
headers
,
httpPost
);
httpResponse
=
httpClient
.
execute
(
httpPost
);
resultString
=
EntityUtils
.
toString
(
httpResponse
.
getEntity
(),
ENCODING
);
if
(
httpResponse
.
getEntity
()
!=
null
)
{
resultString
=
EntityUtils
.
toString
(
httpResponse
.
getEntity
(),
ENCODING
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
finally
{
...
...
src/main/java/cn/qg/holmes/utils/JenkinsService.java
View file @
5754ded9
...
...
@@ -51,7 +51,7 @@ public class JenkinsService {
* @param namespace 部署的环境
* @return
*/
public
int
build
Jenkins
Job
(
String
type
,
String
project
,
String
branch
,
String
namespace
)
{
public
int
build
Tke
Job
(
String
type
,
String
project
,
String
branch
,
String
namespace
)
{
Map
<
String
,
String
>
buildParams
=
new
HashMap
<>();
buildParams
.
put
(
"GIT_REPO"
,
project
);
buildParams
.
put
(
"BRANCH_NAME"
,
branch
);
...
...
@@ -154,6 +154,16 @@ public class JenkinsService {
}
}
/**
* 构建sync_database_schema
* @param dbName
* @param host
* @param port
* @param replaceDomain
* @param notDeleteBusinessData
* @param useCache
* @return build num
*/
public
int
buildDbSyncJob
(
String
dbName
,
String
host
,
String
port
,
boolean
replaceDomain
,
boolean
notDeleteBusinessData
,
boolean
useCache
)
{
Map
<
String
,
String
>
params
=
new
HashMap
<>();
...
...
@@ -188,6 +198,51 @@ public class JenkinsService {
return
result
;
}
/**
* 构建db_sync
* @param namespace
* @param host
* @param port
* @param database
* @param table
* @param businessData
* @return build num
*/
public
int
buildDbSyncJobNew
(
String
namespace
,
String
host
,
String
port
,
String
database
,
String
table
,
boolean
businessData
)
{
Map
<
String
,
String
>
params
=
new
HashMap
<>();
params
.
put
(
"namespace"
,
namespace
);
params
.
put
(
"target_db_host"
,
host
);
params
.
put
(
"target_db_port"
,
port
);
params
.
put
(
"database"
,
database
);
params
.
put
(
"table"
,
table
);
params
.
put
(
"business_data"
,
String
.
valueOf
(
businessData
));
try
{
jenkinsServer
.
getJob
(
"db_sync"
).
build
(
params
);
Build
build
=
jenkinsServer
.
getJob
(
"db_sync"
).
getLastBuild
();
return
build
.
getNumber
()
+
1
;
}
catch
(
Exception
e
)
{
log
.
info
(
"执行数据库同步脚本失败,host:{}, port: {}, dbName: {}"
,
host
,
port
,
database
);
e
.
printStackTrace
();
return
0
;
}
}
/**
* 构建db_daily_backup
* @return
*/
public
int
buildDbDailyBackupJob
()
{
try
{
jenkinsServer
.
getJob
(
"db_daily_backup"
).
build
();
Build
build
=
jenkinsServer
.
getJob
(
"db_daily_backup"
).
getLastBuild
();
return
build
.
getNumber
()
+
1
;
}
catch
(
Exception
e
)
{
log
.
info
(
"执行数据库备份失败!"
);
e
.
printStackTrace
();
return
0
;
}
}
public
static
void
main
(
String
[]
args
)
throws
IOException
{
JenkinsService
jenkinsApi
=
new
JenkinsService
();
// List<Build> buildList = jenkinsApi.getJobBuildList("tke-java", 1, "kdsp");
...
...
src/main/resources/mapper/k8s/DockerProjectMapper.xml
View file @
5754ded9
...
...
@@ -14,6 +14,9 @@
<if
test=
"isActive != null"
>
AND `is_active` = #{isActive}
</if>
<if
test=
"hostName != null and hostName !=''"
>
AND `host_name` like CONCAT('%', #{hostName}, '%')
</if>
ORDER BY `id` DESC
</select>
...
...
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