Skip to content

Commit

Permalink
Merge pull request #2 from freakkid/dev_add_device
Browse files Browse the repository at this point in the history
update add device
  • Loading branch information
freakkid committed Sep 18, 2018
2 parents 49f1e8e + 2471fbc commit 89cde62
Show file tree
Hide file tree
Showing 7 changed files with 132 additions and 65 deletions.
5 changes: 3 additions & 2 deletions resources/errors/common/default/datacollection.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
"1112000": "增加设备失败",
"1112001": "查找设备失败",
"1112002": "删除设备失败",
"1112003": "实例ID和实例名不一致",
"1112004": "实例ID或实例名不是网络采集设备",
"1112003": "模型ID和模型名不一致",
"1112004": "模型ID或模型名不是网络采集设备",
"1112005": "模型名不存在或不属于网络采集设备",
"": ""
}
1 change: 1 addition & 0 deletions resources/errors/english/en/datacollection.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
"1112002": "Delete device failed",
"1112003": "Object ID and object name are different",
"1112004": "Object ID or object name is not net collect device",
"1112005": "Object name is not exist or a net collect device",
"": ""
}
3 changes: 3 additions & 0 deletions src/common/definitions.go
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,9 @@ const BKAppName string = "蓝鲸"

const BKMainLine = "mainline"

// bk_classification_id value
const BKNetwork = "bk_network"

const (
// DefaultResModuleFlag the default resource module flag
DefaultResModuleFlag int = 1
Expand Down
5 changes: 3 additions & 2 deletions src/common/errInfo.go
Original file line number Diff line number Diff line change
Expand Up @@ -435,8 +435,9 @@ const (
CCErrCollectNetDeviceCreateFail = 1112000
CCErrCollectNetDeviceGetFail = 1112001
CCErrCollectNetDeviceDeleteFail = 1112002
CCErrCollectDiffObjIDAndName = 1112003
CCErrCollectObjIDNotNetDevice = 1112004
CCErrCollectDiffObjIDAndName = 1112003
CCErrCollectObjIDNotNetDevice = 1112004
CCErrCollectObjNameNotNetDevice = 1112005

CC_Err_Comm_HOST_CREATE_FAIL = 4300
CC_Err_Comm_HOST_CREATE_FAIL_STR = "create host fail"
Expand Down
31 changes: 31 additions & 0 deletions src/common/metadata/datacollection.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/*
* Tencent is pleased to support the open source community by making 蓝鲸 available.
* Copyright (C) 2017-2018 THL A29 Limited, a Tencent company. All rights reserved.
* Licensed under the MIT License (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
* http://opensource.org/licenses/MIT
* Unless required by applicable law or agreed to in writing, software distributed under
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language governing permissions and
* limitations under the License.
*/

package metadata

import "configcenter/src/common/mapstr"

type AddDeviceResult struct {
Result bool `json:"result"`
ErrMsg string `json:"error_msg"`
DeviceID int64 `json:"device_id"`
}

type SearchNetDevice struct {
Count int `json:"count"`
Info []mapstr.MapStr `json:"info"`
}

type SearchNetDeviceResult struct {
BaseResp `json:",inline"`
Data SearchNetDevice `json:"data"`
}
18 changes: 0 additions & 18 deletions src/common/metadata/netdevice.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@ package metadata

import (
"time"

"configcenter/src/common"
)

type NetcollectDevice struct {
Expand Down Expand Up @@ -45,19 +43,3 @@ type NetcollectProperty struct {
CreateTime *time.Time `field:"create_time" json:"create_time,omitempty" bson:"create_time"`
LastTime *time.Time `field:"last_time" json:"last_time,omitempty" bson:"last_time"`
}

// IsNetDeviceObject is net device object
func IsNetDeviceObject(objID string) bool {
switch objID {
case common.BKInnerObjIDSwitch:
return true
case common.BKInnerObjIDBlance:
return true
case common.BKInnerObjIDFirewall:
return true
case common.BKInnerObjIDRouter:
return true
}

return false
}
134 changes: 91 additions & 43 deletions src/scene_server/datacollection/logics/device.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,10 @@ import (
"configcenter/src/common/util"
)

type ReturnResult struct {
Result bool `json:"result"`
ErrMsg string `json:"error_msg"`
DeviceID int64 `json:"device_id"`
}

func (lgc *Logics) AddDevices(pheader http.Header, deviceInfoList []meta.NetcollectDevice) ([]ReturnResult, bool) {
func (lgc *Logics) AddDevices(pheader http.Header, deviceInfoList []meta.NetcollectDevice) ([]meta.AddDeviceResult, bool) {
ownerID := util.GetOwnerID(pheader)

resultList := make([]ReturnResult, 0)
resultList := make([]meta.AddDeviceResult, 0)
hasError := false

for _, deviceInfo := range deviceInfoList {
Expand All @@ -43,17 +37,21 @@ func (lgc *Logics) AddDevices(pheader http.Header, deviceInfoList []meta.Netcoll
if nil != err {
errMsg = err.Error()
result = false
}

resultList = append(resultList, ReturnResult{result, errMsg, deviceID})
if nil != err && !hasError {
hasError = true
}

resultList = append(resultList, meta.AddDeviceResult{result, errMsg, deviceID})
}

return resultList, hasError
}

func (lgc *Logics) SearchDevice(pheader http.Header, params *meta.AssociationParams) (*meta.SearchNetDevice, error) {
//ownerID := util.GetOwnerID(pheader)

return nil, nil
}

// add a device
func (lgc *Logics) addDevice(deviceInfo meta.NetcollectDevice, pheader http.Header, ownerID string) (int64, error) {
defErr := lgc.Engine.CCErr.CreateDefaultCCErrorIf(util.GetLanguage(pheader))
Expand All @@ -73,7 +71,7 @@ func (lgc *Logics) addDevice(deviceInfo meta.NetcollectDevice, pheader http.Head
}

// check if device_name exist
isExist, err := lgc.isNetDeviceNameExist(deviceInfo.DeviceName, ownerID)
isExist, err := lgc.checkIfNetDeviceNameExist(deviceInfo.DeviceName, ownerID)
if nil != err {
blog.Errorf("add net device fail, error: %v", err)
return -1, defErr.Errorf(common.CCErrCollectNetDeviceCreateFail)
Expand All @@ -83,24 +81,23 @@ func (lgc *Logics) addDevice(deviceInfo meta.NetcollectDevice, pheader http.Head
return -1, defErr.Errorf(common.CCErrCommDuplicateItem)
}

// check if bk_object_id and bk_object_name are net device
isNetDevice, err := lgc.isNetDeviceObjectID(&deviceInfo, pheader)
// check if bk_object_id and bk_object_name are net device object
isNetDevice, err := lgc.checkIfNetDeviceObject(&deviceInfo, pheader)
if nil != err {
blog.Errorf("add net device fail, error: %v", err)
return -1, err
}
if !isNetDevice {
blog.Errorf("add net device fail, object name [%s] and object ID [%s] is not netcollect device",
deviceInfo.ObjectName, deviceInfo.ObjectID)

return -1, defErr.Errorf(common.CCErrCollectObjIDNotNetDevice)
}

// add to the storage
deviceInfo.CreateTime = new(time.Time)
*deviceInfo.CreateTime = time.Now()
deviceInfo.LastTime = new(time.Time)
*deviceInfo.LastTime = time.Now()
now := time.Now()
deviceInfo.CreateTime = &now
now = time.Now()
deviceInfo.LastTime = &now
deviceInfo.OwnerID = ownerID

deviceInfo.DeviceID, err = lgc.Instance.GetIncID(common.BKTableNameNetcollectDevice)
Expand All @@ -118,46 +115,72 @@ func (lgc *Logics) addDevice(deviceInfo meta.NetcollectDevice, pheader http.Head
return deviceInfo.DeviceID, nil
}

// check if bk_obj_id and bk_obj_name function parameter are valid or not
func (lgc *Logics) isNetDeviceObjectID(deviceInfo *meta.NetcollectDevice, pheader http.Header) (bool, error) {
// check the deviceInfo if is a net object
// by checking if bk_obj_id and bk_obj_name function parameter are valid net device object or not
func (lgc *Logics) checkIfNetDeviceObject(deviceInfo *meta.NetcollectDevice, pheader http.Header) (bool, error) {
defErr := lgc.Engine.CCErr.CreateDefaultCCErrorIf(util.GetLanguage(pheader))

if "" == deviceInfo.ObjectName && "" == deviceInfo.ObjectID {
blog.Errorf("check net device object ID, empty bk_obj_id and bk_obj_name")
return false, defErr.Errorf(common.CCErrCommParamsLostField, common.BKObjIDField)
}

// netDeviceObjID is a net device objID from deviceInfo.ObjectName
var (
netDeviceObjID string
err error
)

// one of objectName and objectID must not be empty
objectIDFromObjectName, err := lgc.getObjectIDFromObjectName(deviceInfo.ObjectName, pheader)
if nil != err {
blog.Errorf("check net device object ID, error: %v", err)
return false, err
}
if "" != objectIDFromObjectName && "" != deviceInfo.ObjectID && objectIDFromObjectName != deviceInfo.ObjectID {
// if objectName is not empty, get net device objectID from deviceInfo.ObjectName
if "" != deviceInfo.ObjectName {
netDeviceObjID, err = lgc.getNetDeviceObjIDFromObjName(deviceInfo.ObjectName, pheader)
if nil != err {
blog.Errorf("check net device object ID, error: %v", err)
return false, err
}

// if deviceInfo.ObjectName is not empty, netDeviceObjID must not be empty
if "" == netDeviceObjID {
blog.Errorf("check net device object ID, get empty objID from object name [%s]", deviceInfo.ObjectName)
return false, defErr.Errorf(common.CCErrCollectObjNameNotNetDevice)
}

// return true if objectID is empty or netDeviceObjID and objectID are the same
switch {
case "" == deviceInfo.ObjectID:
deviceInfo.ObjectID = netDeviceObjID
return true, nil
case netDeviceObjID == deviceInfo.ObjectID:
return true, nil
}

// objectID are not empty, netDeviceObjID and objectID are the same
blog.Errorf("check net device object ID, get objID [%s] from object name [%s], different between object ID [%s]",
objectIDFromObjectName, deviceInfo.ObjectID, deviceInfo.ObjectName)
netDeviceObjID, deviceInfo.ObjectID, deviceInfo.ObjectName)
return false, defErr.Errorf(common.CCErrCollectDiffObjIDAndName)
}

// one of objectName and objectID must not be empty
// if objectID from function parameter is empty, get objectID from objectName
if "" == deviceInfo.ObjectID {
deviceInfo.ObjectID = objectIDFromObjectName
// objectName from function parameter is empty and objectID must not be empty
// check if objectID is one of net collect device, such as bk_router, bk_switch...
isNetDeviceObjID, err := lgc.checkIfObjIDIsNetDevice(deviceInfo.ObjectID, pheader)
if nil != err {
return false, err
}

// check if objectID is one of net collect device, such as bk_router, bk_switch...
return meta.IsNetDeviceObject(deviceInfo.ObjectID), nil
return isNetDeviceObjID, nil
}

// get value of bk_obj_id by bk_obj_name
func (lgc *Logics) getObjectIDFromObjectName(objectName string, pheader http.Header) (string, error) {
// get value of net device bk_obj_id from bk_obj_name
// return error if bk_obj_name is empty or bk_obj_name is not net device
func (lgc *Logics) getNetDeviceObjIDFromObjName(objectName string, pheader http.Header) (string, error) {
defErr := lgc.Engine.CCErr.CreateDefaultCCErrorIf(util.GetLanguage(pheader))
if "" == objectName {
return "", nil
return "", defErr.Errorf(common.CCErrCollectObjNameNotNetDevice)
}
cond := make(map[string]interface{}, 0)
// cond := condition.CreateCondition().Field(common.BKObjNameField).Eq(objectName)
cond[common.BKObjNameField] = objectName
cond[common.BKClassificationIDField] = common.BKNetwork

objResult, err := lgc.CoreAPI.ObjectController().Meta().SelectObjects(context.Background(), pheader, cond)
if nil != err {
Expand All @@ -171,15 +194,15 @@ func (lgc *Logics) getObjectIDFromObjectName(objectName string, pheader http.Hea
}

if nil == objResult.Data || 0 == len(objResult.Data) {
blog.Errorf("check net device object ID, [%s] is not exist", objectName)
return "", nil
blog.Errorf("check net device object ID, object Name[%s] is not exist", objectName)
return "", defErr.Errorf(common.CCErrCollectObjNameNotNetDevice)
}

return objResult.Data[0].ObjectID, nil
}

// check if net device name exist
func (lgc *Logics) isNetDeviceNameExist(deviceName string, ownerID string) (bool, error) {
func (lgc *Logics) checkIfNetDeviceNameExist(deviceName string, ownerID string) (bool, error) {
queryParams := common.KvMap{common.BKDeviceNameField: deviceName, common.BKOwnerIDField: ownerID}

rowCount, err := lgc.Instance.GetCntByCondition(common.BKTableNameNetcollectDevice, queryParams)
Expand All @@ -190,9 +213,34 @@ func (lgc *Logics) isNetDeviceNameExist(deviceName string, ownerID string) (bool
}

if 0 != rowCount {
blog.Infof("check if net device name exist, bk_device_name is [%s] device is exist", deviceName)
blog.V(4).Infof("check if net device name exist, bk_device_name is [%s] device is exist", deviceName)
return true, nil
}

return false, nil
}

// check if objID is net device object
func (lgc *Logics) checkIfObjIDIsNetDevice(objID string, pheader http.Header) (bool, error) {
defErr := lgc.Engine.CCErr.CreateDefaultCCErrorIf(util.GetLanguage(pheader))

if "" == objID {
return false, nil
}

cond := make(map[string]interface{}, 0)
cond[common.BKObjIDField] = objID

objResult, err := lgc.CoreAPI.ObjectController().Meta().SelectObjects(context.Background(), pheader, cond)
if nil != err {
blog.Errorf("check if objID is net device object, search objID [%s] fail, %v", objID, err)
return false, defErr.Errorf(common.CCErrObjectSelectInstFailed)
}

if !objResult.Result {
blog.Errorf("check if objID is net device object, errors: %s", objResult.ErrMsg)
return false, defErr.Errorf(objResult.Code)
}

return nil != objResult.Data && 0 < len(objResult.Data), nil
}

0 comments on commit 89cde62

Please sign in to comment.