Commit 93611fc2 authored by 智勇's avatar 智勇

git user

parent 32f6075a
...@@ -66,6 +66,8 @@ const sonarJenkinsBuild = async (data) => { ...@@ -66,6 +66,8 @@ const sonarJenkinsBuild = async (data) => {
projectName, projectName,
branchName, branchName,
branchHash, branchHash,
gitUser,
commitMes,
} }
SonarJob.saveSonarJob(saveData) SonarJob.saveSonarJob(saveData)
} }
......
...@@ -11,6 +11,7 @@ const config = require(global.configPath) ...@@ -11,6 +11,7 @@ const config = require(global.configPath)
const title = 'sonar 扫描结果' const title = 'sonar 扫描结果'
const sendFailMail = async (data, item, executionTimeMs) => { const sendFailMail = async (data, item, executionTimeMs) => {
const address = data.gitUser ? `${data.gitUser}@quantgroup.cn` : data.gitUserMail
const duration = data.duration / 1000 const duration = data.duration / 1000
const executionTime = executionTimeMs / 1000 const executionTime = executionTimeMs / 1000
const text = `<font color=#FF7F50> 扫描结果 : ${item.status.qualityGateStatus}<br/>` const text = `<font color=#FF7F50> 扫描结果 : ${item.status.qualityGateStatus}<br/>`
...@@ -20,20 +21,22 @@ const sendFailMail = async (data, item, executionTimeMs) => { ...@@ -20,20 +21,22 @@ const sendFailMail = async (data, item, executionTimeMs) => {
+ `分析时间 : ${executionTime}s<br/>` + `分析时间 : ${executionTime}s<br/>`
+ `扫描日期 : ${item.analysisDate}<br/>` + `扫描日期 : ${item.analysisDate}<br/>`
+ `查看详情 : ${config.sonarHost}/project/activity?id=${data.project}&&selected_date=${item.analysisDate}` + `查看详情 : ${config.sonarHost}/project/activity?id=${data.project}&&selected_date=${item.analysisDate}`
sendMail(data.gitUserMail, `${data.project} ${title}`, text) sendMail(address, `${data.project} ${title}`, text)
} }
const sendExceptionMail = async (data) => { const sendExceptionMail = async (data) => {
const address = data.gitUser ? `${data.gitUser}@quantgroup.cn` : data.gitUserMail
const text = '<font color=#FF0000> 扫描结果 : 扫描任务执行失败 <br/>' const text = '<font color=#FF0000> 扫描结果 : 扫描任务执行失败 <br/>'
+ `<font color=#000000> 结果信息 : ${data.error} <br/>` + `<font color=#000000> 结果信息 : ${data.error} <br/>`
+ `项目名称 : ${data.project}<br/>` + `项目名称 : ${data.project}<br/>`
+ `分支名称 : ${data.branch}<br/>` + `分支名称 : ${data.branch}<br/>`
+ `Sonar详情 : ${config.sonarHost}/dashboard?id=${data.project} <br/>` + `Sonar详情 : ${config.sonarHost}/dashboard?id=${data.project} <br/>`
+ `Jenskins详情 : ${data.absoluteUrl}console <br/>` + `Jenskins详情 : ${data.absoluteUrl}console <br/>`
sendMail(`${data.gitUser}@quantgroup.cn`, `${data.project} ${title}`, text) sendMail(address, `${data.project} ${title}`, text)
} }
const sendExistMail = async (data) => { const sendExistMail = async (data, gitUser) => {
const address = data.gitUser ? `${data.gitUser}@quantgroup.cn` : `${gitUser}@quantgroup.cn`
const text = '<font color=#FF7F50> 本次执行的GITHASH曾经扫描过<br/>' const text = '<font color=#FF7F50> 本次执行的GITHASH曾经扫描过<br/>'
+ `扫描结果 : ${data.sonarResult}<br/>` + `扫描结果 : ${data.sonarResult}<br/>`
+ `<font color=#000000> 项目名称 : ${data.projectName}<br/>` + `<font color=#000000> 项目名称 : ${data.projectName}<br/>`
...@@ -41,7 +44,16 @@ const sendExistMail = async (data) => { ...@@ -41,7 +44,16 @@ const sendExistMail = async (data) => {
+ `GITHASH : ${data.branchHash}<br/>` + `GITHASH : ${data.branchHash}<br/>`
+ `扫描分析日期 : ${data.analysisDate}<br/>` + `扫描分析日期 : ${data.analysisDate}<br/>`
+ `查看详情 : ${config.sonarHost}/project/activity?id=${data.projectName}&&selected_date=${data.analysisDate}` + `查看详情 : ${config.sonarHost}/project/activity?id=${data.projectName}&&selected_date=${data.analysisDate}`
sendMail(data.gitUserMail, `${data.projectName} ${title}`, text) sendMail(address, `${data.projectName} ${title}`, text)
}
const saveData = async (data) => {
const sonarJob = await SonarJob.getOneSonarJob({ branchHash: data.branchHash })
if (sonarJob) {
await SonarJob.updateSonarJob(data)
} else {
await SonarJob.saveSonarJob(data)
}
} }
const callback = async (ctx) => { const callback = async (ctx) => {
...@@ -52,25 +64,25 @@ const callback = async (ctx) => { ...@@ -52,25 +64,25 @@ const callback = async (ctx) => {
logger.info(data.sonarJob.projectName, data.sonarJob.branchName, data.sonarJob.branchHash, logger.info(data.sonarJob.projectName, data.sonarJob.branchName, data.sonarJob.branchHash,
'GITHASH 曾经 扫描过,扫描结果:', data.sonarJob) 'GITHASH 曾经 扫描过,扫描结果:', data.sonarJob)
if (data.sonarJob.sonarResult !== 'OK' && data.mail !== 'noMail') { if (data.sonarJob.sonarResult !== 'OK' && data.mail !== 'noMail') {
sendExistMail(data.sonarJob) sendExistMail(data.sonarJob, data.gitUser)
} }
ctx.body = ctx.ok() ctx.body = ctx.ok()
return return
} }
const saveData = { // const saveData = {
buildId: data.buildId, // buildId: data.buildId,
buildJob: data.buildJob, // buildJob: data.buildJob,
branchName: data.branch, // branchName: data.branch,
} // projectName: data.project,
// }
if (data.error) { if (data.error) {
saveData.buildResult = 'error' data.buildResult = 'error'
saveData.projectName = data.project
if (data.mail !== 'noMail') { if (data.mail !== 'noMail') {
sendExceptionMail(data) sendExceptionMail(data)
} }
// await SonarJob.saveSonarJob(saveData) await saveData(data)
ctx.body = ctx.ok() ctx.body = ctx.ok()
return return
} }
...@@ -98,30 +110,84 @@ const callback = async (ctx) => { ...@@ -98,30 +110,84 @@ const callback = async (ctx) => {
logger.info(data.project, '触发质量阀,发送邮件通知') logger.info(data.project, '触发质量阀,发送邮件通知')
sendFailMail(data, i, executionTimeMs) sendFailMail(data, i, executionTimeMs)
} }
saveData.projectName = data.project data.buildResult = 'success'
saveData.buildResult = 'success' data.sonarResult = i.status.qualityGateStatus
saveData.sonarResult = i.status.qualityGateStatus data.analysisDate = i.analysisDate
saveData.analysisDate = i.analysisDate // const sonarJob = await SonarJob.getOneSonarJob({ branchHash: data.branchHash })
saveData.branchHash = data.branchHash // if (sonarJob) {
const sonarJob = await SonarJob.getOneSonarJob({ branchHash: data.branchHash }) // await SonarJob.updateSonarJob(data)
if (sonarJob) { // } else {
await SonarJob.updateSonarJob(saveData) // await SonarJob.saveSonarJob(data)
} else { // }
await SonarJob.saveSonarJob(saveData) await saveData(data)
}
} }
ctx.body = ctx.ok(saveData) ctx.body = ctx.ok(data)
} }
const getSonarJob = async (ctx) => { const getOneSonarJob = async (ctx) => {
const sonarJob = await SonarJob.getOneSonarJob(ctx.request.query) const sonarJob = await SonarJob.getOneSonarJob(ctx.request.query)
ctx.body = ctx.ok(sonarJob) ctx.body = ctx.ok(sonarJob)
} }
const queryHandle = function (query) {
if (query.projectName && query.projectName.trim()) {
query.projectName = new RegExp(query.projectName)
} else {
delete query.projectName
}
if (query.branchName && query.branchName.trim()) {
query.branchName = new RegExp(query.branchName)
} else {
delete query.branchName
}
if (query.gitUser && query.gitUser.trim()) {
query.gitUser = new RegExp(query.gitUser)
} else {
delete query.gitUser
}
}
const getSonarJob = async (ctx) => {
const query = ctx.request.body.query
const page = ctx.request.body.page
queryHandle(query)
const curDate = new Date()
const date = new Date(curDate.getTime() - 3 * 24 * 60 * 60 * 1000)
Object.assign(query, { updatedAt: { $gte: date } })
console.log(1, query)
const data = await SonarJob.getSonarJob(query, { _id: 0 }, { updatedAt: -1 }, page)
const count = await SonarJob.getSonarJobCount(query)
ctx.body = ctx.ok({ data, count })
}
const fetchQuality = async (ctx) => {
const req = ctx.request.body
const query = {
updatedAt: { $gte: req.startDate, $lte: req.endDate },
}
if (req.repository) {
query.projectName = req.repository
}
// const data = await SonarJob.getSonarJobGroup(query);
const data = await SonarJob.getSonarJob(query, {
_id: 0, projectName: 1, buildResult: 1, sonarResult: 1,
}, {}, {});
// console.log(1, data)
ctx.body = ctx.ok(data)
}
const router = new Router() const router = new Router()
router router
.use(bodyParser()) .use(bodyParser())
.post('/callback', callback) .post('/callback', callback)
.get('/getSonarJob', getSonarJob) .get('/getSonarJob', getOneSonarJob)
.post('/getSonarJobs', getSonarJob)
.post('/fetchQuality', fetchQuality)
module.exports = router; module.exports = router;
...@@ -6,6 +6,8 @@ const schema = new Schema({ ...@@ -6,6 +6,8 @@ const schema = new Schema({
buildJob: { type: String }, buildJob: { type: String },
projectName: { type: String }, projectName: { type: String },
branchName: { type: String }, branchName: { type: String },
gitUser: { type: String },
commitMes: { type: String },
branchHash: { branchHash: {
type: String, unique: true, required: true, index: true, type: String, unique: true, required: true, index: true,
}, },
...@@ -17,6 +19,7 @@ const schema = new Schema({ ...@@ -17,6 +19,7 @@ const schema = new Schema({
collection: 'sonarJob', // 表名 collection: 'sonarJob', // 表名
timestamps: true, timestamps: true,
}) })
schema.statics.saveSonarJob = function (doc) { schema.statics.saveSonarJob = function (doc) {
return this.create(doc) return this.create(doc)
} }
...@@ -31,4 +34,29 @@ schema.statics.getOneSonarJob = function (query) { ...@@ -31,4 +34,29 @@ schema.statics.getOneSonarJob = function (query) {
return this.findOne(query, { _id: 0 }) return this.findOne(query, { _id: 0 })
} }
schema.statics.getSonarJob = function (query, column, sort, page) {
return this.find(query, column).sort(sort).skip(page.num * page.count).limit(page.count)
.lean()
}
schema.statics.getSonarJobCount = function (query) {
return this.find(query).countDocuments()
}
schema.statics.getSonarJobGroup = function (query) {
console.log(2, { $match: query })
return this.aggregate([
{
$match: {
updatedAt:
{
$gte: '2019-12-03T16:00:00.000Z',
$lte: '2019-12-04T16:00:00.000Z',
},
},
},
{ $group: { _id: '$projectName', result: { $push: { sonarResult: '$sonarResult', buildResult: '$buildResult' } } } },
])
}
module.exports = schema module.exports = schema
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment