Skip to content

Commit 90135e6

Browse files
committed
feat: Turbo编译加速对接权限中心RBAC TencentBlueKing#316
1 parent 3a374ec commit 90135e6

File tree

7 files changed

+130
-7
lines changed

7 files changed

+130
-7
lines changed

src/backend/turbo/api-turbo/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ dependencies {
66
api("com.tencent.bk.devops.ci.common:common-api") {
77
isTransitive = false
88
}
9+
api("com.tencent.bk.sdk:iam-java-sdk")
910
}
1011

1112
plugins {

src/backend/turbo/api-turbo/src/main/kotlin/com/tencent/devops/turbo/api/IServiceTurboPlanController.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.tencent.devops.turbo.api
22

3+
import com.tencent.bk.sdk.iam.dto.callback.request.CallbackRequestDTO
34
import com.tencent.devops.api.pojo.Response
45
import com.tencent.devops.common.util.constants.AUTH_HEADER_DEVOPS_PROJECT_ID
56
import io.swagger.annotations.Api
@@ -9,6 +10,7 @@ import org.springframework.cloud.openfeign.FeignClient
910
import org.springframework.http.MediaType
1011
import org.springframework.web.bind.annotation.GetMapping
1112
import org.springframework.web.bind.annotation.PathVariable
13+
import org.springframework.web.bind.annotation.PostMapping
1214
import org.springframework.web.bind.annotation.RequestHeader
1315
import org.springframework.web.bind.annotation.RequestMapping
1416

@@ -33,4 +35,11 @@ interface IServiceTurboPlanController {
3335
@PathVariable("pipelineElementId")
3436
pipelineElementId: String
3537
): Response<String?>
38+
39+
@ApiOperation("特定资源列表,注册存量加速方案")
40+
@PostMapping("/instances/list")
41+
fun resourceList(
42+
@ApiParam(value = "回调信息", required = true)
43+
callBackInfo: CallbackRequestDTO
44+
): Response<String>
3645
}
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,32 @@
11
package com.tencent.devops.turbo.controller
22

3+
import com.tencent.bk.sdk.iam.dto.callback.request.CallbackRequestDTO
34
import com.tencent.devops.api.pojo.Response
45
import com.tencent.devops.turbo.api.IServiceTurboPlanController
56
import com.tencent.devops.turbo.service.TurboPlanService
67
import org.springframework.beans.factory.annotation.Autowired
78
import org.springframework.web.bind.annotation.RestController
89

9-
@Suppress("MaxLineLength")
1010
@RestController
1111
class ServiceTurboPlanController @Autowired constructor(
1212
private val turboPlanService: TurboPlanService
1313
) : IServiceTurboPlanController {
1414

15-
override fun findTurboPlanIdByProjectIdAndPipelineInfo(projectId: String, pipelineId: String, pipelineElementId: String): Response<String?> {
16-
return Response.success(turboPlanService.findMigratedTurboPlanByPipelineInfo(projectId, pipelineId, pipelineElementId)?.taskId)
15+
override fun findTurboPlanIdByProjectIdAndPipelineInfo(
16+
projectId: String,
17+
pipelineId: String,
18+
pipelineElementId: String
19+
): Response<String?> {
20+
return Response.success(
21+
turboPlanService.findMigratedTurboPlanByPipelineInfo(
22+
projectId,
23+
pipelineId,
24+
pipelineElementId
25+
)?.taskId
26+
)
27+
}
28+
29+
override fun resourceList(callBackInfo: CallbackRequestDTO): Response<String> {
30+
return Response.success(turboPlanService.getInstanceByResource(callBackInfo))
1731
}
1832
}

src/backend/turbo/biz-turbo/src/main/kotlin/com/tencent/devops/turbo/dao/mongotemplate/TurboPlanDao.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,12 @@ class TurboPlanDao @Autowired constructor(
259259
/**
260260
* 根据项目id和创建时间获取加速方案列表
261261
*/
262-
fun getTurboPlanByProjectIdAndCreatedDate(projectId: String, startTime: LocalDate?, endTime: LocalDate?, pageable: Pageable): Page<TTurboPlanEntity> {
262+
fun getTurboPlanByProjectIdAndCreatedDate(
263+
projectId: String,
264+
startTime: LocalDate?,
265+
endTime: LocalDate?,
266+
pageable: Pageable
267+
): Page<TTurboPlanEntity> {
263268
val query = turboPlanParameter(projectId, startTime, endTime)
264269
//先算总数
265270
val totalCount = mongoTemplate.count(query, TTurboPlanEntity::class.java)

src/backend/turbo/biz-turbo/src/main/kotlin/com/tencent/devops/turbo/service/TurboPlanService.kt

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,28 @@
11
package com.tencent.devops.turbo.service
22

3+
import com.tencent.bk.sdk.iam.constants.CallbackMethodEnum
4+
import com.tencent.bk.sdk.iam.dto.callback.request.CallbackRequestDTO
5+
import com.tencent.bk.sdk.iam.dto.callback.response.CallbackBaseResponseDTO
6+
import com.tencent.bk.sdk.iam.dto.callback.response.FetchInstanceInfoResponseDTO
7+
import com.tencent.bk.sdk.iam.dto.callback.response.InstanceInfoDTO
8+
import com.tencent.bk.sdk.iam.dto.callback.response.ListInstanceResponseDTO
39
import com.tencent.devops.common.api.exception.TurboException
410
import com.tencent.devops.common.api.exception.code.TURBO_NO_DATA_FOUND
511
import com.tencent.devops.common.api.exception.code.TURBO_PARAM_INVALID
612
import com.tencent.devops.common.api.exception.code.TURBO_THIRDPARTY_SYSTEM_FAIL
713
import com.tencent.devops.common.api.pojo.Page
814
import com.tencent.devops.common.api.util.OkhttpUtil
915
import com.tencent.devops.common.auth.api.AuthRegisterApi
16+
import com.tencent.devops.common.auth.callback.FetchInstanceInfo
17+
import com.tencent.devops.common.auth.callback.ListInstanceInfo
1018
import com.tencent.devops.common.client.Client
1119
import com.tencent.devops.common.db.PageUtils
1220
import com.tencent.devops.common.service.prometheus.BkTimed
1321
import com.tencent.devops.common.util.JsonUtil
1422
import com.tencent.devops.common.util.MathUtil
23+
import com.tencent.devops.common.util.constants.COMMON_NUM_0L
24+
import com.tencent.devops.common.util.constants.COMMON_NUM_10L
25+
import com.tencent.devops.common.util.constants.COMMON_NUM_1L
1526
import com.tencent.devops.common.util.constants.SYSTEM_ADMIN
1627
import com.tencent.devops.project.api.service.ServiceProjectResource
1728
import com.tencent.devops.turbo.dao.mongotemplate.TurboPlanDao
@@ -33,6 +44,7 @@ import com.tencent.devops.turbo.vo.TurboPlanStatusBatchUpdateReqVO
3344
import org.slf4j.LoggerFactory
3445
import org.springframework.beans.BeanUtils
3546
import org.springframework.beans.factory.annotation.Autowired
47+
import org.springframework.data.domain.Sort
3648
import org.springframework.data.repository.findByIdOrNull
3749
import org.springframework.stereotype.Service
3850
import java.time.LocalDate
@@ -750,4 +762,82 @@ class TurboPlanService @Autowired constructor(
750762
"all project id turbo plan status updated successfully!"
751763
}
752764
}
765+
766+
/**
767+
* iam(蓝盾)回调实现方法
768+
*/
769+
fun getInstanceByResource(callBackInfo: CallbackRequestDTO): String {
770+
logger.info("CallbackRequestDTO: {}", callBackInfo)
771+
val result: CallbackBaseResponseDTO = when (callBackInfo.method) {
772+
CallbackMethodEnum.LIST_INSTANCE -> handleListInstance(callBackInfo)
773+
CallbackMethodEnum.FETCH_INSTANCE_INFO -> handleFetchInstanceInfo(callBackInfo)
774+
else -> CallbackBaseResponseDTO()
775+
}
776+
return JsonUtil.toJson(result)
777+
}
778+
779+
/**
780+
* 按项目id分页获取方案清单
781+
*/
782+
private fun handleListInstance(callBackInfo: CallbackRequestDTO): CallbackBaseResponseDTO {
783+
return callBackInfo.filter.parent?.id?.let { parentId ->
784+
listInstance(parentId, callBackInfo.page.offset, callBackInfo.page.limit)
785+
} ?: ListInstanceInfo().buildListInstanceFailResult()
786+
}
787+
788+
/**
789+
* 按方案id批量获取方案清单
790+
*/
791+
private fun handleFetchInstanceInfo(callBackInfo: CallbackRequestDTO): CallbackBaseResponseDTO {
792+
val idList = callBackInfo.filter.idList
793+
return if (idList.isNullOrEmpty()) {
794+
FetchInstanceInfo().buildFetchInstanceFailResult()
795+
} else {
796+
val turboPlanIdSet = idList.mapNotNull { it.toString() }.toSet()
797+
fetchInstance(turboPlanIdSet)
798+
}
799+
}
800+
801+
/**
802+
* 按项目id
803+
*/
804+
private fun listInstance(projectId: String, offset: Long?, limit: Long?): ListInstanceResponseDTO {
805+
val safeOffset = (offset ?: COMMON_NUM_0L).coerceAtLeast(COMMON_NUM_0L)
806+
val safeLimit = (limit ?: COMMON_NUM_10L).coerceAtLeast(COMMON_NUM_1L)
807+
val pageNum = safeOffset / safeLimit + COMMON_NUM_1L
808+
val pageable =
809+
PageUtils.convertPageSizeToPageable(pageNum.toInt(), safeLimit.toInt(), "_id", Sort.Direction.ASC.name)
810+
811+
val turboPlanEntityList = turboPlanDao.getAllTurboPlanList(null, null, projectId, pageable).records
812+
val instanceInfoList = turboPlanEntityList.map { it.toDTO() }
813+
val result = ListInstanceInfo()
814+
return if (instanceInfoList.isEmpty()) result.buildListInstanceFailResult() else result.buildListInstanceResult(
815+
instanceInfoList,
816+
instanceInfoList.size.toLong()
817+
)
818+
}
819+
820+
/**
821+
* 按方案id
822+
*/
823+
private fun fetchInstance(turboPlanIdSet: Set<String>): FetchInstanceInfoResponseDTO {
824+
val turboPlanEntityList = turboPlanRepository.findByIdIn(turboPlanIdSet.toList())
825+
val instanceInfos = turboPlanEntityList.map { it.toDTO() }
826+
val result = FetchInstanceInfo()
827+
return if (instanceInfos.isEmpty()) result.buildFetchInstanceFailResult() else result.buildFetchInstanceResult(
828+
instanceInfos
829+
)
830+
}
831+
832+
/**
833+
* entity转DTO
834+
*/
835+
private fun TTurboPlanEntity.toDTO(): InstanceInfoDTO {
836+
return InstanceInfoDTO().apply {
837+
id = this@toDTO.id
838+
displayName = this@toDTO.planName
839+
iamApprover =
840+
listOf(if (this@toDTO.createdBy.isNullOrBlank()) this@toDTO.createdBy else this@toDTO.updatedBy)
841+
}
842+
}
753843
}

src/backend/turbo/common-turbo/common-turbo-auth/build.gradle.kts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
dependencies {
22
api(project(":common-turbo:common-turbo-client"))
3-
api("com.tencent.bk.sdk:iam-java-sdk") {
4-
isTransitive = false
5-
}
63
api("com.tencent.bk.devops.ci.auth:api-auth") {
74
isTransitive = false
85
}

src/backend/turbo/common-turbo/common-turbo-util/src/main/kotlin/com/tencent/devops/common/util/constants/TurboConstants.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,10 @@ const val BASE_EXCLUDED_PROJECT_ID_LIST = "EXCLUDED_PROJECT_ID_LIST"
2525
* 内部测试的方案,服务计费时需要过滤掉
2626
*/
2727
const val BASE_EXCLUDED_COMMON_PLAN_ID = "EXCLUDED_COMMON_PLAN_ID_LIST"
28+
29+
/**
30+
* 常用整数
31+
*/
32+
const val COMMON_NUM_0L = 0L
33+
const val COMMON_NUM_1L = 1L
34+
const val COMMON_NUM_10L = 10L

0 commit comments

Comments
 (0)