Skip to content

Commit

Permalink
Merge pull request #1283 from WeBankPartners/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
zgyzgyhero authored Nov 2, 2021
2 parents 85d9fb0 + 66c02c7 commit a0ecc64
Show file tree
Hide file tree
Showing 20 changed files with 489 additions and 68 deletions.
13 changes: 13 additions & 0 deletions build/register.xml
Original file line number Diff line number Diff line change
Expand Up @@ -94,5 +94,18 @@
</outputParameters>
</interface>
</plugin>
<plugin name="view" targetPackage="" targetEntity="" registerName="" targetEntityFilterRule="">
<interface action="confirm" path="/wecmdb/plugin/view/confirm" filterRule="">
<inputParameters>
<parameter datatype="string" required="Y" sensitiveData="N" mappingType="entity" mappingEntityExpression="">viewId</parameter>
<parameter datatype="string" required="Y" sensitiveData="N" mappingType="entity" mappingEntityExpression="">rootCi</parameter>
</inputParameters>
<outputParameters>
<parameter datatype="string" sensitiveData="N" mappingType="context">errorCode</parameter>
<parameter datatype="string" sensitiveData="N" mappingType="context">errorMessage</parameter>
<parameter datatype="string" sensitiveData="N" mappingType="context">confirmTime</parameter>
</outputParameters>
</interface>
</plugin>
</plugins>
</package>
4 changes: 4 additions & 0 deletions cmdb-server/api/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -115,12 +115,15 @@ func init() {
&handlerFuncObj{Url: "/views", Method: "GET", HandlerFunc: view.GetViewList},
&handlerFuncObj{Url: "/view/:viewId", Method: "GET", HandlerFunc: view.GetView},
&handlerFuncObj{Url: "/view-data", Method: "POST", HandlerFunc: view.GetViewData},
&handlerFuncObj{Url: "/view-confirm", Method: "POST", HandlerFunc: view.ConfirmView},
)

// report
httpHandlerFuncList = append(httpHandlerFuncList,
&handlerFuncObj{Url: "/reports", Method: "GET", HandlerFunc: report.QueryReport},
&handlerFuncObj{Url: "/reports", Method: "POST", HandlerFunc: report.CreateReport},
&handlerFuncObj{Url: "/reports", Method: "PUT", HandlerFunc: report.UpdateReport},
&handlerFuncObj{Url: "/report-message/:reportId", Method: "GET", HandlerFunc: report.GetReport},
&handlerFuncObj{Url: "/report/:reportId", Method: "DELETE", HandlerFunc: report.DeleteReport},
&handlerFuncObj{Url: "/report-struct/:reportId", Method: "GET", HandlerFunc: report.QueryReportStruct},
&handlerFuncObj{Url: "/report-flat-struct/:reportId", Method: "GET", HandlerFunc: report.QueryReportFlatStruct},
Expand Down Expand Up @@ -190,6 +193,7 @@ func InitHttpServer() {
r.GET(urlPrefix+"/data-model", middleware.AuthToken(), ci.GetAllDataModel)
r.POST(urlPrefix+"/plugin/ci-data/operation", middleware.AuthCorePluginToken(), ci.PluginCiDataOperationHandle, ci.HandleOperationLog)
r.POST(urlPrefix+"/plugin/ci-data/attr-value", middleware.AuthCorePluginToken(), ci.PluginCiDataAttrValueHandle, ci.HandleOperationLog)
r.POST(urlPrefix+"/plugin/view/confirm", middleware.AuthCorePluginToken(), ci.PluginViewConfirmHandle, ci.HandleOperationLog)
r.Run(":" + models.Config.HttpServer.Port)
}

Expand Down
51 changes: 51 additions & 0 deletions cmdb-server/api/v1/ci/wecube.go
Original file line number Diff line number Diff line change
Expand Up @@ -515,3 +515,54 @@ func pluginAttrValue(input *models.PluginCiDataAttrValueRequestObj) (result *mod
_, _, err = db.HandleCiDataOperation(handleParam)
return
}

func PluginViewConfirmHandle(c *gin.Context) {
response := models.PluginViewConfirmResp{ResultCode: "0", ResultMessage: "success", Results: models.PluginViewConfirmOutput{}}
var err error
defer func() {
if err != nil {
log.Logger.Error("Plugin view confirm handle fail", log.Error(err))
response.ResultCode = "1"
response.ResultMessage = err.Error()
}
bodyBytes, _ := json.Marshal(response)
c.Set("responseBody", string(bodyBytes))
c.JSON(http.StatusOK, response)
}()
var param models.PluginViewConfirmRequest
if err = c.ShouldBindJSON(&param); err != nil {
return
}
if len(param.Inputs) == 0 {
return
}
userToken := c.GetHeader("Authorization")
for _, input := range param.Inputs {
output, tmpErr := pluginViewConfirm(input, userToken)
if tmpErr != nil {
output.ErrorCode = "1"
output.ErrorMessage = tmpErr.Error()
err = tmpErr
}
response.Results.Outputs = append(response.Results.Outputs, output)
}
logParam, _ := json.Marshal(param)
c.Set("requestBody", string(logParam))
}

func pluginViewConfirm(input *models.PluginViewConfirmRequestObj, userToken string) (result *models.PluginViewConfirmOutputObj, err error) {
result = &models.PluginViewConfirmOutputObj{CallbackParameter: input.CallbackParameter, ErrorCode: "0", ErrorMessage: ""}
if input.ViewId == "" || input.RootCi == "" {
err = fmt.Errorf("Param validate fail,viewId && rootCi can not empty ")
return
}
confirmResult, confirmErr := db.ViewConfirmAction(models.ViewData{ViewId: input.ViewId, RootCi: input.RootCi}, userToken, "SYSTEM", []string{})
if confirmErr != nil {
err = confirmErr
return
}
if len(confirmResult) > 0 {
result.ConfirmTime = confirmResult[0]["confirm_time"]
}
return
}
25 changes: 25 additions & 0 deletions cmdb-server/api/v1/report/report.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,16 @@ func QueryReportData(c *gin.Context) {
return
}

func GetReport(c *gin.Context) {
reportId := c.Param("reportId")
result, err := db.GetReport(reportId)
if err != nil {
middleware.ReturnServerHandleError(c, err)
} else {
middleware.ReturnData(c, result)
}
}

func CreateReport(c *gin.Context) {
//Param validate
var param models.ModifyReport
Expand All @@ -132,6 +142,21 @@ func CreateReport(c *gin.Context) {
}
}

func UpdateReport(c *gin.Context) {
var param models.ModifyReport
if err := c.ShouldBindJSON(&param); err != nil {
middleware.ReturnParamValidateError(c, err)
return
}
param.UpdateUser = middleware.GetRequestUser(c)
rowData, err := db.UpdateReport(param)
if err != nil {
middleware.ReturnServerHandleError(c, err)
} else {
middleware.ReturnData(c, rowData)
}
}

func DeleteReport(c *gin.Context) {
reportId := c.Param("reportId")

Expand Down
20 changes: 17 additions & 3 deletions cmdb-server/api/v1/view/view.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,11 @@ package view

import (
"fmt"
"strings"

"github.com/WeBankPartners/we-cmdb/cmdb-server/api/middleware"
"github.com/WeBankPartners/we-cmdb/cmdb-server/models"
"github.com/WeBankPartners/we-cmdb/cmdb-server/services/db"
"github.com/gin-gonic/gin"
"strings"
)

func GetViewList(c *gin.Context) {
Expand Down Expand Up @@ -156,7 +155,7 @@ func GetViewData(c *gin.Context) {
err = tmpErr
break
}
rowData, err = db.GetChildReportObject(roNode, rootGuidList, rootReportAttr, param.ConfirmTime)
rowData, _, err = db.GetChildReportObject(roNode, rootGuidList, rootReportAttr, param.ConfirmTime, param.ViewId)
if err != nil {
break
}
Expand Down Expand Up @@ -185,3 +184,18 @@ func GetViewData(c *gin.Context) {
middleware.ReturnData(c, rowDataList)
}
}

func ConfirmView(c *gin.Context) {
var param models.ViewData
if err := c.ShouldBindJSON(&param); err != nil {
middleware.ReturnParamValidateError(c, err)
return
}
result, err := db.ViewConfirmAction(param, c.GetHeader("Authorization"), middleware.GetRequestUser(c), middleware.GetRequestRoles(c))
if err != nil {
middleware.ReturnServerHandleError(c, err)
return
} else {
middleware.ReturnData(c, result)
}
}
27 changes: 18 additions & 9 deletions cmdb-server/models/report.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,13 @@ type SysReportObjectTable struct {
SeqNo int `json:"seqNo" xorm:"seq_no"`
}

type SysRoleReportTable struct {
Id string `json:"id" xorm:"id"`
Role string `json:"role" xorm:"role"`
Report string `json:"report" xorm:"report"`
Permission string `json:"permission" xorm:"permission"`
}

type SysReportObjectAttrTable struct {
Id string `json:"reportObjectAttrId" xorm:"id"`
ReportObject string `json:"reportObject" xorm:"report_object"`
Expand Down Expand Up @@ -91,15 +98,17 @@ type QueryReportObjectAttr struct {
}

type ModifyReport struct {
Id string `json:"id" xorm:"id"`
Name string `json:"name" xorm:"name"`
CiType string `json:"ciType" xorm:"ci_type"`
CreateUser string `json:"createUser" xorm:"create_user"`
UpdateUser string `json:"updateUser" xorm:"update_user"`
UseRole string `json:"useRole" xorm:"use_role"`
MgmtRole string `json:"mgmtRole" xorm:"mgmt_role"`
DataName string `json:"dataName" xorm:"data_name"`
DataTitleName string `json:"dataTitleName" xorm:"data_title_name"`
Id string `json:"id" xorm:"id"`
Name string `json:"name" xorm:"name"`
CiType string `json:"ciType" xorm:"ci_type"`
CreateUser string `json:"createUser" xorm:"create_user"`
UpdateUser string `json:"updateUser" xorm:"update_user"`
UseRole string `json:"useRole" xorm:"use_role"`
UseRoleList []string `json:"useRoleList"`
MgmtRole string `json:"mgmtRole" xorm:"mgmt_role"`
MgmtRoleList []string `json:"mgmtRoleList"`
DataName string `json:"dataName" xorm:"data_name"`
DataTitleName string `json:"dataTitleName" xorm:"data_title_name"`
}

type ModifyReportObject struct {
Expand Down
7 changes: 7 additions & 0 deletions cmdb-server/models/view.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,10 @@ type UpdateViewParam struct {
MGMT []string `json:"MGMT" xorm:"-"`
USE []string `json:"USE" xorm:"-"`
}

type SysRoleViewTable struct {
Id string `json:"id" xorm:"id"`
Role string `json:"role" xorm:"role"`
View string `json:"view" xorm:"view"`
Permission string `json:"permission" xorm:"permission"`
}
29 changes: 29 additions & 0 deletions cmdb-server/models/wecube.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,3 +97,32 @@ type CoreRoleDataObj struct {
Email string `json:"email"`
DisplayName string `json:"displayName"`
}

type PluginViewConfirmRequest struct {
RequestId string `json:"requestId"`
Inputs []*PluginViewConfirmRequestObj `json:"inputs"`
}

type PluginViewConfirmRequestObj struct {
CallbackParameter string `json:"callbackParameter"`
ViewId string `json:"viewId"`
RootCi string `json:"rootCi"`
}

type PluginViewConfirmResp struct {
ResultCode string `json:"resultCode"`
ResultMessage string `json:"resultMessage"`
Results PluginViewConfirmOutput `json:"results"`
}

type PluginViewConfirmOutput struct {
Outputs []*PluginViewConfirmOutputObj `json:"outputs"`
}

type PluginViewConfirmOutputObj struct {
CallbackParameter string `json:"callbackParameter"`
ConfirmTime string `json:"confirmTime"`
ErrorCode string `json:"errorCode"`
ErrorMessage string `json:"errorMessage"`
ErrorDetail string `json:"errorDetail,omitempty"`
}
30 changes: 21 additions & 9 deletions cmdb-server/services/db/ci_data.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,11 +109,12 @@ func HandleCiDataOperation(param models.HandleCiDataParam) (outputData []models.
return
}
}
tNow := time.Now().Format(models.DateTimeFormat)
// 获取属性字段
if err = getMultiCiAttributes(multiCiData); err != nil {
return
}
outputData, newInputBody = buildRequestBodyWithoutPwd(multiCiData, param.BareAction)
outputData, newInputBody = buildRequestBodyWithoutPwd(multiCiData, param.BareAction, tNow, param.Operation)
// 获取状态机
if param.BareAction == "" {
if err = getMultiCiTransition(multiCiData); err != nil {
Expand All @@ -124,12 +125,14 @@ func HandleCiDataOperation(param models.HandleCiDataParam) (outputData []models.
return
}
}
if (firstAction == "update" || firstAction == "insert") && strings.ToLower(param.Operation) != models.RollbackAction && param.BareAction == "" {
if (firstAction == "update" || firstAction == "insert") && strings.ToLower(param.Operation) != models.RollbackAction {
if err = validateUniqueColumn(multiCiData); err != nil {
return
}
if err = validateMultiRefFilterData(multiCiData); err != nil {
return
if param.BareAction == "" {
if err = validateMultiRefFilterData(multiCiData); err != nil {
return
}
}
}
if firstAction != "insert" {
Expand All @@ -142,7 +145,6 @@ func HandleCiDataOperation(param models.HandleCiDataParam) (outputData []models.
if err = getMultiReferenceAttributes(multiCiData); err != nil {
return
}
tNow := time.Now().Format(models.DateTimeFormat)
var actions []*execAction
var insertPermissionMap = make(map[string]*InsertPermissionObj)
var autofillChainMap = make(map[string][]*models.AutofillChainObj)
Expand Down Expand Up @@ -545,7 +547,11 @@ func confirmActionFunc(param *models.ActionFuncParam) (result []*execAction, err
}

func deleteActionFunc(param *models.ActionFuncParam) (result []*execAction, err error) {
if len(param.ReferenceAttributes) > 0 && param.BareAction == "" {
toNull := false
if strings.HasSuffix(param.Transition.TargetState, "null_0") || strings.HasSuffix(param.Transition.TargetState, "null_1") {
toNull = true
}
if len(param.ReferenceAttributes) > 0 && param.BareAction == "" && !toNull {
if err = validateLeftStateTrans(param); err != nil {
return
}
Expand All @@ -556,12 +562,12 @@ func deleteActionFunc(param *models.ActionFuncParam) (result []*execAction, err
continue
}
if ciAttr.InputType == models.MultiRefType {
mutiRefActions, tmpErr := buildMultiRefActions(&models.BuildAttrValueParam{NowTime: param.NowTime, AttributeConfig: ciAttr, IsSystem: false, Action: param.Transition.Action, InputData: param.NowData})
multiRefActions, tmpErr := buildMultiRefActions(&models.BuildAttrValueParam{NowTime: param.NowTime, AttributeConfig: ciAttr, IsSystem: false, Action: param.Transition.Action, InputData: param.NowData})
if tmpErr != nil {
err = tmpErr
break
}
result = append(result, mutiRefActions...)
result = append(result, multiRefActions...)
delete(param.NowData, ciAttr.Name)
}
}
Expand Down Expand Up @@ -1063,8 +1069,9 @@ func getMultiCiAttributes(multiCiData []*models.MultiCiDataObj) error {
return nil
}

func buildRequestBodyWithoutPwd(multiCiData []*models.MultiCiDataObj, baseAction string) (output []models.CiDataMapObj, newInputBody string) {
func buildRequestBodyWithoutPwd(multiCiData []*models.MultiCiDataObj, baseAction, nowTime, operation string) (output []models.CiDataMapObj, newInputBody string) {
inputStringList := []string{}
operation = strings.ToLower(operation)
for _, ciDataObj := range multiCiData {
tmpPwdKeyMap := make(map[string]int)
for _, attr := range ciDataObj.Attributes {
Expand All @@ -1088,6 +1095,11 @@ func buildRequestBodyWithoutPwd(multiCiData []*models.MultiCiDataObj, baseAction
outputRowData[k] = v
}
}
if operation == "confirm" {
outputRowData["confirm_time"] = nowTime
} else {
outputRowData["update_time"] = nowTime
}
output = append(output, outputRowData)
tmpInputByte, _ := json.Marshal(tmpNewRowData)
inputStringList = append(inputStringList, string(tmpInputByte))
Expand Down
3 changes: 3 additions & 0 deletions cmdb-server/services/db/ci_data_query.go
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,9 @@ func fetchRefAttrData(rowData []map[string]interface{}, refAttrs []*models.CiDat
err = fmt.Errorf("Try to query ref attr:%s refCiType:%s fail,%s ", refAttr.Attribute.Name, refAttr.Attribute.RefCiType, tmpErr.Error())
break
}
if len(refRowDatas) == 0 {
x.SQL(fmt.Sprintf("select guid,key_name from %s%s where guid in ('%s') and state in ('null_0','null_1')", HistoryTablePrefix, refAttr.Attribute.RefCiType, strings.Join(refAttr.GuidList, "','"))).Find(&refRowDatas)
}
refRowMap := make(map[string]*models.CiDataRefDataObj)
for _, refRow := range refRowDatas {
refRowMap[refRow.Guid] = refRow
Expand Down
Loading

0 comments on commit a0ecc64

Please sign in to comment.