feat: sync NE NRM data
This commit is contained in:
@@ -44,5 +44,6 @@ INSERT INTO `sys_job` VALUES (13, 'job.exportSMFCDR', 'SYSTEM', 'exportTable', '
|
|||||||
INSERT INTO `sys_job` VALUES (14, 'job.exportSMSCCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_smsc\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as record_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.serviceType\')) as service_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callerParty\')) as caller_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.calledParty\')) as called_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.result\')) as result,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.updateTime\')) as update_time\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/smsc_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724309047797, '');
|
INSERT INTO `sys_job` VALUES (14, 'job.exportSMSCCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_smsc\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as record_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.serviceType\')) as service_type,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.callerParty\')) as caller_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.calledParty\')) as called_party,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.result\')) as result,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.updateTime\')) as update_time\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/smsc_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724309047797, '');
|
||||||
INSERT INTO `sys_job` VALUES (15, 'job.removeExportedFiles', 'SYSTEM', 'removeFile', '[{\"filePath\":\"/usr/local/omc/backup/operate_log\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/ims_cdr\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/smf_cdr\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/smsc_cdr\",\"maxDays\":30}]', '0 10 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1728634085631, '');
|
INSERT INTO `sys_job` VALUES (15, 'job.removeExportedFiles', 'SYSTEM', 'removeFile', '[{\"filePath\":\"/usr/local/omc/backup/operate_log\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/ims_cdr\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/smf_cdr\",\"maxDays\":30},{\"filePath\":\"/usr/local/omc/backup/smsc_cdr\",\"maxDays\":30}]', '0 10 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1728634085631, '');
|
||||||
INSERT INTO `sys_job` VALUES (16, 'job.exportSGWCCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_sgwc\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as recordType,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.accessPointNameNI\')) as accessPointNameNI,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.servedIMSI\')) as IMSI,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.servedMSISDN\')) as MSISDN,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.servedPDPPDNAddress\')) as PdpAddress,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.duration\')) as duration,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordOpeningTime\')) as recordOpeningTime,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.chargingID\')) as chargingID,JSON_UNQUOTE(JSON_EXTRACT(cdr_json, \'$.listOfTrafficVolumes[0].dataVolumeGPRSDownlink\')) AS dataVolumeGPRSDownlink,JSON_UNQUOTE(JSON_EXTRACT(cdr_json, \'$.listOfTrafficVolumes[0].dataVolumeGPRsUplink\')) as dataVolumeGPRsUplink,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.userLocationInformation.tai.tac\')) as tac,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.userLocationInformation.ecgi.eutraCellId\')) as cellID\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/sgwc_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724309047797, '');
|
INSERT INTO `sys_job` VALUES (16, 'job.exportSGWCCDR', 'SYSTEM', 'exportTable', '{\"duration\":1,\"tableName\":\"cdr_event_sgwc\",\"columns\":\"id,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordType\')) as recordType,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.accessPointNameNI\')) as accessPointNameNI,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.servedIMSI\')) as IMSI,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.servedMSISDN\')) as MSISDN,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.servedPDPPDNAddress\')) as PdpAddress,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.duration\')) as duration,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.recordOpeningTime\')) as recordOpeningTime,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.chargingID\')) as chargingID,JSON_UNQUOTE(JSON_EXTRACT(cdr_json, \'$.listOfTrafficVolumes[0].dataVolumeGPRSDownlink\')) AS dataVolumeGPRSDownlink,JSON_UNQUOTE(JSON_EXTRACT(cdr_json, \'$.listOfTrafficVolumes[0].dataVolumeGPRsUplink\')) as dataVolumeGPRsUplink,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.userLocationInformation.tai.tac\')) as tac,JSON_UNQUOTE(JSON_EXTRACT(cdr_json,\'$.userLocationInformation.ecgi.eutraCellId\')) as cellID\",\"timeCol\":\"timestamp\",\"timeUnit\":\"second\",\"extras\":\"\",\"filePath\":\"/usr/local/omc/backup/sgwc_cdr\"}', '0 0 0/1 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1724309047797, '');
|
||||||
|
INSERT INTO `sys_job` VALUES (17, 'job.nbiNRM', 'SYSTEM', 'nbiNRM', '{}', '0 10 0 * * ?', '3', '0', '1', '1', 'system', 1698478134839, 'system', 1698478134839, '');
|
||||||
|
|
||||||
SET FOREIGN_KEY_CHECKS = 1;
|
SET FOREIGN_KEY_CHECKS = 1;
|
||||||
|
|||||||
@@ -1,30 +1,36 @@
|
|||||||
package amf
|
package amf
|
||||||
|
|
||||||
|
import "be.ems/src/modules/crontask/processor/nbiNRM/common"
|
||||||
|
|
||||||
|
const (
|
||||||
|
AMF string = "AMF" // 网元类型
|
||||||
|
)
|
||||||
|
|
||||||
type ManagedElement struct {
|
type ManagedElement struct {
|
||||||
Id string `json:"id"`
|
Id string `json:"id"`
|
||||||
UserLabel string `json:"userLabel"`
|
UserLabel string `json:"userLabel"`
|
||||||
VendorName string `json:"vendorName"`
|
VendorName string `json:"vendorName"`
|
||||||
ManagedBy string `json:"managedBy"`
|
ManagedBy string `json:"managedBy"`
|
||||||
ManagementIpAddress string `json:"managementIpAddress"`
|
ManagementIpAddress string `json:"managementIpAddress"`
|
||||||
SwVersion string `json:"swVersion"`
|
SwVersion string `json:"swVersion"`
|
||||||
PatchInfo string `json:"patchInfo"`
|
PatchInfo string `json:"patchInfo"`
|
||||||
AdministrativeState string `json:"administrativeState"`
|
AdministrativeState common.AdministrativeState `json:"administrativeState"`
|
||||||
OperationalState string `json:"operationalState"`
|
OperationalState common.OperationalState `json:"operationalState"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type AmfFunction struct {
|
type AmfFunction struct {
|
||||||
Id string `json:"id"`
|
Id string `json:"id"`
|
||||||
UserLabel string `json:"userLabel"`
|
UserLabel string `json:"userLabel"`
|
||||||
AdministrativeState string `json:"administrativeState"`
|
AdministrativeState common.AdministrativeState `json:"administrativeState"`
|
||||||
OperationalState string `json:"operationalState"`
|
OperationalState common.OperationalState `json:"operationalState"`
|
||||||
VnfInstanceId string `json:"vnfInstanceId"`
|
VnfInstanceId string `json:"vnfInstanceId"`
|
||||||
Fqdn string `json:"fqdn"`
|
Fqdn string `json:"fqdn"`
|
||||||
SbiServiceList string `json:"sbiServiceList"`
|
SbiServiceList string `json:"sbiServiceList"`
|
||||||
AmfGuamiList string `json:"amfGuamiList"`
|
AmfGuamiList string `json:"amfGuamiList"`
|
||||||
SnssaiList string `json:"snssaiList"`
|
SnssaiList string `json:"snssaiList"`
|
||||||
MaxUser int `json:"maxUser"`
|
MaxUser int `json:"maxUser"`
|
||||||
RelativeCapacity int `json:"relativeCapacity"`
|
RelativeCapacity int `json:"relativeCapacity"`
|
||||||
MaxGnbNum int `json:"maxGnbNum"`
|
MaxGnbNum int `json:"maxGnbNum"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type EpRpDynN8Amf struct {
|
type EpRpDynN8Amf struct {
|
||||||
|
|||||||
138
src/modules/crontask/processor/nbiNRM/common/common.go
Normal file
138
src/modules/crontask/processor/nbiNRM/common/common.go
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
package common
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
type AdministrativeState string
|
||||||
|
|
||||||
|
const (
|
||||||
|
Locked AdministrativeState = "Locked"
|
||||||
|
Unlocked AdministrativeState = "Unlocked"
|
||||||
|
ShuttingDown AdministrativeState = "ShuttingDown"
|
||||||
|
)
|
||||||
|
|
||||||
|
type OperationalState string
|
||||||
|
|
||||||
|
const (
|
||||||
|
Enabled OperationalState = "Enabled"
|
||||||
|
Disabled OperationalState = "Disabled"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// NBI CM表名
|
||||||
|
NbiCmTableName = "nbi_cm"
|
||||||
|
CmVersion = "v1" // CM版本
|
||||||
|
)
|
||||||
|
|
||||||
|
type EventType int
|
||||||
|
|
||||||
|
const (
|
||||||
|
ObjectNullEvent EventType = iota // ObjectNullEvent 空事件
|
||||||
|
ObjectCreationEvent // ObjectCreationEvent 创建事件
|
||||||
|
ObjectDeletionEvent // ObjectDeletionEvent 删除事件
|
||||||
|
ObjectAttributeValueChangeEvent // ObjectAttributeValueChangeEvent 修改事件
|
||||||
|
ObjectUnkownEvent // 未知事件
|
||||||
|
)
|
||||||
|
|
||||||
|
func (et EventType) EventTypeEnumString() string {
|
||||||
|
switch et {
|
||||||
|
case ObjectCreationEvent:
|
||||||
|
return "ObjectCreationEvent"
|
||||||
|
case ObjectDeletionEvent:
|
||||||
|
return "ObjectDeletionEvent"
|
||||||
|
case ObjectAttributeValueChangeEvent:
|
||||||
|
return "ObjectAttributeValueChangeEvent"
|
||||||
|
case ObjectNullEvent:
|
||||||
|
return "ObjectNullEvent"
|
||||||
|
default:
|
||||||
|
return "ObjectUnkownEvent"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (et EventType) EventTypeIntString() string {
|
||||||
|
return fmt.Sprintf("%d", et)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EventTypeInt 将字符串转换为 EventType 枚举类型
|
||||||
|
func EventTypeInt(s string) EventType {
|
||||||
|
if i, err := strconv.Atoi(s); err == nil {
|
||||||
|
return EventType(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
switch s {
|
||||||
|
case "ObjectCreationEvent":
|
||||||
|
return ObjectCreationEvent
|
||||||
|
case "ObjectDeletionEvent":
|
||||||
|
return ObjectDeletionEvent
|
||||||
|
case "ObjectAttributeValueChangeEvent":
|
||||||
|
return ObjectAttributeValueChangeEvent
|
||||||
|
case "":
|
||||||
|
// 如果字符串为空,则返回未知事件
|
||||||
|
return ObjectNullEvent
|
||||||
|
default:
|
||||||
|
return ObjectUnkownEvent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type NeStatus int
|
||||||
|
|
||||||
|
const (
|
||||||
|
NeStatusOffline NeStatus = iota
|
||||||
|
NeStatusActive
|
||||||
|
NeStatusToSync
|
||||||
|
NeStatusStandby
|
||||||
|
NeStatusUnknown
|
||||||
|
)
|
||||||
|
|
||||||
|
// ParseStateFromStatus 将状态字符串转换为 AdministrativeState 和 OperationalState
|
||||||
|
func ParseStateFromStatus(status NeStatus) (AdministrativeState, OperationalState) {
|
||||||
|
var adminState AdministrativeState
|
||||||
|
var operState OperationalState
|
||||||
|
|
||||||
|
switch status {
|
||||||
|
case NeStatusOffline:
|
||||||
|
adminState = Locked
|
||||||
|
operState = Disabled
|
||||||
|
case NeStatusActive:
|
||||||
|
adminState = Unlocked
|
||||||
|
operState = Enabled
|
||||||
|
case NeStatusToSync:
|
||||||
|
adminState = Unlocked
|
||||||
|
operState = Enabled
|
||||||
|
case NeStatusStandby:
|
||||||
|
adminState = Locked
|
||||||
|
operState = Enabled
|
||||||
|
default:
|
||||||
|
adminState = ShuttingDown
|
||||||
|
operState = Disabled
|
||||||
|
}
|
||||||
|
|
||||||
|
return adminState, operState
|
||||||
|
}
|
||||||
|
|
||||||
|
type NeInfo struct {
|
||||||
|
NeId string `db:"ne_id"`
|
||||||
|
NeType string `db:"ne_type"`
|
||||||
|
RmUid string `db:"rm_uid"`
|
||||||
|
VendorName string `db:"vendor_name"`
|
||||||
|
NeName string `db:"ne_name"`
|
||||||
|
Ip string `db:"ip"`
|
||||||
|
Port string `db:"port"`
|
||||||
|
Dn string `db:"dn"`
|
||||||
|
Status NeStatus `db:"status"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// NbiCm 表结构
|
||||||
|
type NbiCm struct {
|
||||||
|
Id int `json:"id" db:"id PRIMARY KEY"`
|
||||||
|
NeType string `json:"neType" db:"ne_type"`
|
||||||
|
NeId string `json:"neId" db:"ne_id"`
|
||||||
|
CmVersion string `json:"cmVersion" db:"cm_version"`
|
||||||
|
RmUid string `json:"rmUid" db:"rm_uid"`
|
||||||
|
EventType EventType `json:"eventType" db:"event_type"`
|
||||||
|
ObjectType string `json:"objectType" db:"object_type"`
|
||||||
|
ValueJson string `json:"valueJson" db:"value_json"`
|
||||||
|
Timestamp string `json:"timestamp" db:"timestamp"`
|
||||||
|
}
|
||||||
@@ -2,80 +2,11 @@ package nbiNRM
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"be.ems/lib/log"
|
"be.ems/lib/log"
|
||||||
"be.ems/src/framework/cron"
|
"be.ems/src/framework/cron"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
// NBI CM表名
|
|
||||||
NbiCmTableName = "nbi_cm"
|
|
||||||
CmVersion = "v1" // CM版本
|
|
||||||
)
|
|
||||||
|
|
||||||
type EventType int
|
|
||||||
|
|
||||||
const (
|
|
||||||
ObjectCreationEvent EventType = iota // ObjectCreationEvent 创建事件
|
|
||||||
ObjectDeletionEvent // ObjectDeletionEvent 删除事件
|
|
||||||
ObjectAttributeValueChangeEvent // ObjectAttributeValueChangeEvent 修改事件
|
|
||||||
ObjectUnkownEvent // 未知事件
|
|
||||||
)
|
|
||||||
|
|
||||||
func (et EventType) EventTypeEnumString() string {
|
|
||||||
switch et {
|
|
||||||
case ObjectCreationEvent:
|
|
||||||
return "ObjectCreationEvent"
|
|
||||||
case ObjectDeletionEvent:
|
|
||||||
return "ObjectDeletionEvent"
|
|
||||||
case ObjectAttributeValueChangeEvent:
|
|
||||||
return "ObjectAttributeValueChangeEvent"
|
|
||||||
default:
|
|
||||||
return "ObjectUnkownEvent"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (et EventType) EventTypeIntString() string {
|
|
||||||
return fmt.Sprintf("%d", et)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ParseCallTag 将字符串转换为 CallTag 枚举类型
|
|
||||||
func EventTypeInt(s string) EventType {
|
|
||||||
if i, err := strconv.Atoi(s); err == nil {
|
|
||||||
return EventType(i)
|
|
||||||
}
|
|
||||||
// 如果转换失败,则按名称匹配(忽略大小写)
|
|
||||||
switch strings.ToLower(s) {
|
|
||||||
case "ObjectCreationEvent":
|
|
||||||
return ObjectCreationEvent
|
|
||||||
case "ObjectDeletionEvent":
|
|
||||||
return ObjectDeletionEvent
|
|
||||||
case "ObjectAttributeValueChangeEvent":
|
|
||||||
return ObjectAttributeValueChangeEvent
|
|
||||||
case "":
|
|
||||||
// 如果字符串为空,则返回未知事件
|
|
||||||
return ObjectUnkownEvent
|
|
||||||
default:
|
|
||||||
return ObjectUnkownEvent
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// NbiCm 表结构
|
|
||||||
type NbiCm struct {
|
|
||||||
Id string `json:"id" db:"id PRIMARY KEY"`
|
|
||||||
NeType string `json:"neType" db:"ne_type"`
|
|
||||||
NeId string `json:"neId" db:"ne_id"`
|
|
||||||
CmVersion string `json:"cmVersion" db:"cm_version"`
|
|
||||||
RmUid string `json:"rmUid" db:"rm_uid"`
|
|
||||||
EventType EventType `json:"eventType" db:"event_type"`
|
|
||||||
ObjectType string `json:"objectType" db:"object_type"`
|
|
||||||
ValueJson string `json:"valueJson" db:"value_json"`
|
|
||||||
Timestamp string `json:"timestamp" db:"timestamp"`
|
|
||||||
}
|
|
||||||
|
|
||||||
var NewProcessor = &BarProcessor{
|
var NewProcessor = &BarProcessor{
|
||||||
progress: 0,
|
progress: 0,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -116,10 +47,29 @@ func (s *BarProcessor) Execute(data any) (any, error) {
|
|||||||
log.Errorf("SyncAmfNbiCM error: %v", err)
|
log.Errorf("SyncAmfNbiCM error: %v", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
err = s.SyncPcfNbiCM()
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("SyncPcfNbiCM error: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
err = s.SyncUdmNbiCM()
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("SyncUdmNbiCM error: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
err = s.SyncSmfNbiCM()
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("SyncSmfNbiCM error: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
err = s.SyncUpfNbiCM()
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("SyncUpfNbiCM error: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
// 返回结果,用于记录执行结果
|
// 返回结果,用于记录执行结果
|
||||||
return map[string]any{
|
return map[string]any{
|
||||||
"msg": "sucess",
|
"msg": "sucess",
|
||||||
"affected": 1,
|
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,33 +1,39 @@
|
|||||||
package pcf
|
package pcf
|
||||||
|
|
||||||
|
import "be.ems/src/modules/crontask/processor/nbiNRM/common"
|
||||||
|
|
||||||
|
const (
|
||||||
|
PCF string = "PCF" // 网元类型
|
||||||
|
)
|
||||||
|
|
||||||
type ManagedElement struct {
|
type ManagedElement struct {
|
||||||
Id string `json:"id"`
|
Id string `json:"id"`
|
||||||
UserLabel string `json:"userLabel"`
|
UserLabel string `json:"userLabel"`
|
||||||
VendorName string `json:"vendorName"`
|
VendorName string `json:"vendorName"`
|
||||||
ManagedBy string `json:"managedBy"`
|
ManagedBy string `json:"managedBy"`
|
||||||
ManagementIpAddress string `json:"managementIpAddress"`
|
ManagementIpAddress string `json:"managementIpAddress"`
|
||||||
SwVersion string `json:"swVersion"`
|
SwVersion string `json:"swVersion"`
|
||||||
PatchInfo string `json:"patchInfo"`
|
PatchInfo string `json:"patchInfo"`
|
||||||
AdministrativeState string `json:"administrativeState"`
|
AdministrativeState common.AdministrativeState `json:"administrativeState"`
|
||||||
OperationalState string `json:"operationalState"`
|
OperationalState common.OperationalState `json:"operationalState"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type PcfFunction struct {
|
type PcfFunction struct {
|
||||||
Id string `json:"id"`
|
Id string `json:"id"`
|
||||||
UserLabel string `json:"userLabel"`
|
UserLabel string `json:"userLabel"`
|
||||||
AdministrativeState string `json:"administrativeState"`
|
AdministrativeState common.AdministrativeState `json:"administrativeState"`
|
||||||
OperationalState string `json:"operationalState"`
|
OperationalState common.OperationalState `json:"operationalState"`
|
||||||
VnfInstanceId string `json:"vnfInstanceId"`
|
VnfInstanceId string `json:"vnfInstanceId"`
|
||||||
Fqdn string `json:"fqdn"`
|
Fqdn string `json:"fqdn"`
|
||||||
SbiServiceList string `json:"sbiServiceList"`
|
SbiServiceList string `json:"sbiServiceList"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type UdrFunction struct {
|
type UdrFunction struct {
|
||||||
Id string `json:"id"`
|
Id string `json:"id"`
|
||||||
UserLabel string `json:"userLabel"`
|
UserLabel string `json:"userLabel"`
|
||||||
AdministrativeState string `json:"administrativeState"`
|
AdministrativeState common.AdministrativeState `json:"administrativeState"`
|
||||||
OperationalState string `json:"operationalState"`
|
OperationalState common.OperationalState `json:"operationalState"`
|
||||||
MaxSubNbr int `json:"maxSubNbr"`
|
MaxSubNbr int `json:"maxSubNbr"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type IPResource struct {
|
type IPResource struct {
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import (
|
|||||||
"be.ems/lib/log"
|
"be.ems/lib/log"
|
||||||
|
|
||||||
"be.ems/src/modules/crontask/processor/nbiNRM/amf"
|
"be.ems/src/modules/crontask/processor/nbiNRM/amf"
|
||||||
|
"be.ems/src/modules/crontask/processor/nbiNRM/common"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SyncAmfNbiCM 从ne_info获取AMF网元并同步数据到nbi_cm表
|
// SyncAmfNbiCM 从ne_info获取AMF网元并同步数据到nbi_cm表
|
||||||
@@ -16,16 +17,9 @@ func (s *BarProcessor) SyncAmfNbiCM() error {
|
|||||||
log.Info("Starting AMF NBI CM synchronization")
|
log.Info("Starting AMF NBI CM synchronization")
|
||||||
|
|
||||||
// 从ne_info表获取AMF类型的网元
|
// 从ne_info表获取AMF类型的网元
|
||||||
var amfNEs []struct {
|
var amfNEs []common.NeInfo
|
||||||
NeID string `db:"ne_id"`
|
err := dborm.DefaultDB().Table("ne_info").Where("ne_type = ?", "AMF").
|
||||||
NeType string `db:"ne_type"`
|
|
||||||
RmUid string `db:"rm_uid"`
|
|
||||||
}
|
|
||||||
|
|
||||||
err := dborm.DefaultDB().Table("ne_info").
|
|
||||||
Where("ne_type = ? AND status = 1", "AMF").
|
|
||||||
Find(&amfNEs).Error
|
Find(&amfNEs).Error
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("Failed to query AMF network elements: %v", err)
|
log.Errorf("Failed to query AMF network elements: %v", err)
|
||||||
return err
|
return err
|
||||||
@@ -39,39 +33,42 @@ func (s *BarProcessor) SyncAmfNbiCM() error {
|
|||||||
|
|
||||||
// 遍历每个AMF网元,生成对应的NBI CM记录
|
// 遍历每个AMF网元,生成对应的NBI CM记录
|
||||||
for _, ne := range amfNEs {
|
for _, ne := range amfNEs {
|
||||||
|
adminState, operState := common.ParseStateFromStatus(ne.Status)
|
||||||
|
|
||||||
// 为每个网元生成ManagedElement记录
|
// 为每个网元生成ManagedElement记录
|
||||||
managedElement := amf.ManagedElement{
|
managedElement := amf.ManagedElement{
|
||||||
Id: "ManagedElement=" + ne.NeID,
|
Id: "ME" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp), // 生成唯一ID
|
||||||
UserLabel: "AMF-" + ne.NeID,
|
UserLabel: ne.NeName,
|
||||||
VendorName: "Vendor",
|
VendorName: ne.VendorName,
|
||||||
ManagedBy: "OMC",
|
ManagedBy: ne.Dn,
|
||||||
ManagementIpAddress: "", // 可以从其他表获取IP地址
|
ManagementIpAddress: ne.Ip, // 可以从其他表获取IP地址
|
||||||
SwVersion: "", // 可以从其他表获取软件版本
|
SwVersion: "", // 可以从其他表获取软件版本
|
||||||
AdministrativeState: "UNLOCKED",
|
PatchInfo: "-",
|
||||||
OperationalState: "ENABLED",
|
AdministrativeState: adminState,
|
||||||
|
OperationalState: operState,
|
||||||
}
|
}
|
||||||
|
|
||||||
// 序列化为JSON
|
// 序列化为JSON
|
||||||
meJSON, err := json.Marshal(managedElement)
|
meJSON, err := json.Marshal(managedElement)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("Failed to marshal ManagedElement for ne_id %s: %v", ne.NeID, err)
|
log.Errorf("Failed to marshal ManagedElement for ne_id %s: %v", ne.NeId, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// 生成唯一ID
|
// 生成唯一ID
|
||||||
meID := fmt.Sprintf("nbi-cm-%s-me-%d", ne.NeID, timestamp)
|
// meID := fmt.Sprintf("nbi-cm-%s-me-%d", ne.NeID, timestamp)
|
||||||
|
|
||||||
// 插入ManagedElement记录
|
// 插入ManagedElement记录
|
||||||
nbiCM := NbiCm{
|
nbiCM := common.NbiCm{
|
||||||
Id: meID,
|
// Id: meID,
|
||||||
NeType: ne.NeType,
|
NeType: ne.NeType,
|
||||||
NeId: ne.NeID,
|
NeId: ne.NeId,
|
||||||
CmVersion: CmVersion,
|
CmVersion: common.CmVersion,
|
||||||
RmUid: ne.RmUid,
|
RmUid: ne.RmUid,
|
||||||
EventType: EventTypeInt("ObjectCreationEvent"),
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
ObjectType: "ManagedElement",
|
ObjectType: "ManagedElement",
|
||||||
ValueJson: string(meJSON),
|
ValueJson: string(meJSON),
|
||||||
Timestamp: fmt.Sprintf("%d", timestamp),
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
}
|
}
|
||||||
|
|
||||||
// 插入到数据库
|
// 插入到数据库
|
||||||
@@ -83,14 +80,14 @@ func (s *BarProcessor) SyncAmfNbiCM() error {
|
|||||||
|
|
||||||
// 为每个网元生成AmfFunction记录
|
// 为每个网元生成AmfFunction记录
|
||||||
amfFunction := amf.AmfFunction{
|
amfFunction := amf.AmfFunction{
|
||||||
Id: "ManagedElement=" + ne.NeID + ",AmfFunction=1",
|
Id: "AF" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp), // 生成唯一ID
|
||||||
UserLabel: "AMF-" + ne.NeID + "-Func",
|
UserLabel: ne.NeName + "-AmfFunction",
|
||||||
AdministrativeState: "UNLOCKED",
|
AdministrativeState: adminState,
|
||||||
OperationalState: "ENABLED",
|
OperationalState: operState,
|
||||||
VnfInstanceId: "vnf-" + ne.NeID,
|
VnfInstanceId: "vnf-" + ne.NeType + "-" + ne.NeId,
|
||||||
Fqdn: "amf-" + ne.NeID + ".example.com",
|
Fqdn: "amf-" + ne.NeId + ".5gc.3gpp.org",
|
||||||
SbiServiceList: "Namf_Communication,Namf_EventExposure,Namf_MT,Namf_Location",
|
SbiServiceList: "Namf_Communication,Namf_EventExposure,Namf_MT,Namf_Location",
|
||||||
AmfGuamiList: "[{\"mcc\":\"460\",\"mnc\":\"01\",\"amfId\":\"" + ne.NeID + "\"}]",
|
AmfGuamiList: "[{\"mcc\":\"460\",\"mnc\":\"01\",\"amfId\":\"" + ne.NeId + "\"}]",
|
||||||
SnssaiList: "[{\"sst\":1,\"sd\":\"010203\"}]",
|
SnssaiList: "[{\"sst\":1,\"sd\":\"010203\"}]",
|
||||||
MaxUser: 1000000,
|
MaxUser: 1000000,
|
||||||
RelativeCapacity: 30,
|
RelativeCapacity: 30,
|
||||||
@@ -100,24 +97,24 @@ func (s *BarProcessor) SyncAmfNbiCM() error {
|
|||||||
// 序列化为JSON
|
// 序列化为JSON
|
||||||
amfJSON, err := json.Marshal(amfFunction)
|
amfJSON, err := json.Marshal(amfFunction)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("Failed to marshal AmfFunction for ne_id %s: %v", ne.NeID, err)
|
log.Errorf("Failed to marshal AmfFunction for ne_id %s: %v", ne.NeId, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// 生成唯一ID
|
// 生成唯一ID
|
||||||
amfID := fmt.Sprintf("nbi-cm-%s-amf-%d", ne.NeID, timestamp)
|
// amfID := fmt.Sprintf("nbi-cm-%s-amf-%d", ne.NeID, timestamp)
|
||||||
|
|
||||||
// 插入AmfFunction记录
|
// 插入AmfFunction记录
|
||||||
nbiCM = NbiCm{
|
nbiCM = common.NbiCm{
|
||||||
Id: amfID,
|
// Id: amfID,
|
||||||
NeType: ne.NeType,
|
NeType: ne.NeType,
|
||||||
NeId: ne.NeID,
|
NeId: ne.NeId,
|
||||||
CmVersion: "1.0",
|
CmVersion: common.CmVersion,
|
||||||
RmUid: "OMC-SYSTEM",
|
RmUid: ne.RmUid,
|
||||||
EventType: EventTypeInt("ObjectCreationEvent"),
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
ObjectType: "AmfFunction",
|
ObjectType: "AmfFunction",
|
||||||
ValueJson: string(amfJSON),
|
ValueJson: string(amfJSON),
|
||||||
Timestamp: fmt.Sprintf("%d", timestamp),
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
}
|
}
|
||||||
|
|
||||||
// 插入到数据库
|
// 插入到数据库
|
||||||
@@ -127,8 +124,136 @@ func (s *BarProcessor) SyncAmfNbiCM() error {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// 可以继续添加其他AMF相关对象,如EpRpDynN8Amf、IPResource等
|
// 在 AmfFunction 记录创建完成后添加以下代码
|
||||||
// 这里仅展示了基本结构,可根据实际需求扩展
|
|
||||||
|
// 创建 EpRpDynN8Amf 记录
|
||||||
|
epRpDynN8Amf := amf.EpRpDynN8Amf{
|
||||||
|
Id: "N8" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-N8",
|
||||||
|
LocIpAddrList: "[\"" + ne.Ip + "\"]",
|
||||||
|
FarIpSubnetworkList: "[\"10.10.0.0/16\"]",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
n8JSON, err := json.Marshal(epRpDynN8Amf)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal EpRpDynN8Amf for ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
// 插入EpRpDynN8Amf记录
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "EpRpDynN8Amf",
|
||||||
|
ValueJson: string(n8JSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入到数据库
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert EpRpDynN8Amf record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建 EpRpDynN11Amf 记录
|
||||||
|
epRpDynN11Amf := amf.EpRpDynN11Amf{
|
||||||
|
Id: "N11" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-N11",
|
||||||
|
LocIpAddrList: "[\"" + ne.Ip + "\"]",
|
||||||
|
FarIpSubnetworkList: "[\"10.11.0.0/16\"]",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
n11JSON, err := json.Marshal(epRpDynN11Amf)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal EpRpDynN11Amf for ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
// 插入EpRpDynN11Amf记录
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "EpRpDynN11Amf",
|
||||||
|
ValueJson: string(n11JSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入到数据库
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert EpRpDynN11Amf record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建 EpRpDynN12Amf 记录
|
||||||
|
epRpDynN12Amf := amf.EpRpDynN12Amf{
|
||||||
|
Id: "N12" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-N12",
|
||||||
|
LocIpAddrList: "[\"" + ne.Ip + "\"]",
|
||||||
|
FarIpSubnetworkList: "[\"10.12.0.0/16\"]",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
n12JSON, err := json.Marshal(epRpDynN12Amf)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal EpRpDynN12Amf for ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
// 插入EpRpDynN12Amf记录
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "EpRpDynN12Amf",
|
||||||
|
ValueJson: string(n12JSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入到数据库
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert EpRpDynN12Amf record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建 IPResource 记录
|
||||||
|
ipResource := amf.IPResource{
|
||||||
|
Id: "IP" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-IPResource",
|
||||||
|
InterfaceType: "{Mgt,N8,N11,N12}",
|
||||||
|
LocIpV4AddrList: fmt.Sprintf("{%s,Default,Default,Default}", ne.Ip),
|
||||||
|
LocIpV6AddrList: "{Default,Default,Default,Default}",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
ipJSON, err := json.Marshal(ipResource)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal IPResource for ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
// 插入IPResource记录
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "IPResource",
|
||||||
|
ValueJson: string(ipJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入到数据库
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert IPResource record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Info("AMF NBI CM synchronization completed")
|
log.Info("AMF NBI CM synchronization completed")
|
||||||
|
|||||||
182
src/modules/crontask/processor/nbiNRM/syncPcf.go
Normal file
182
src/modules/crontask/processor/nbiNRM/syncPcf.go
Normal file
@@ -0,0 +1,182 @@
|
|||||||
|
package nbiNRM
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"be.ems/lib/dborm"
|
||||||
|
"be.ems/lib/log"
|
||||||
|
"be.ems/src/modules/crontask/processor/nbiNRM/common"
|
||||||
|
"be.ems/src/modules/crontask/processor/nbiNRM/pcf"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SyncPcfNbiCM 从ne_info获取PCF网元并同步数据到nbi_cm表
|
||||||
|
func (s *BarProcessor) SyncPcfNbiCM() error {
|
||||||
|
log.Info("Starting PCF NBI CM synchronization")
|
||||||
|
|
||||||
|
// 从ne_info表获取PCF类型的网元
|
||||||
|
var pcfNEs []common.NeInfo
|
||||||
|
err := dborm.DefaultDB().Table("ne_info").Where("ne_type = ?", "PCF").
|
||||||
|
Find(&pcfNEs).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to query PCF network elements: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Infof("Found %d PCF network elements", len(pcfNEs))
|
||||||
|
|
||||||
|
// 当前时间戳
|
||||||
|
now := time.Now()
|
||||||
|
timestamp := now.Unix()
|
||||||
|
|
||||||
|
// 遍历每个PCF网元,生成对应的NBI CM记录
|
||||||
|
for _, ne := range pcfNEs {
|
||||||
|
adminState, operState := common.ParseStateFromStatus(ne.Status)
|
||||||
|
|
||||||
|
// 为每个网元生成ManagedElement记录
|
||||||
|
managedElement := pcf.ManagedElement{
|
||||||
|
Id: "ME" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName,
|
||||||
|
VendorName: ne.VendorName,
|
||||||
|
ManagedBy: ne.Dn,
|
||||||
|
ManagementIpAddress: ne.Ip,
|
||||||
|
SwVersion: "",
|
||||||
|
PatchInfo: "-",
|
||||||
|
AdministrativeState: adminState,
|
||||||
|
OperationalState: operState,
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
meJSON, err := json.Marshal(managedElement)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal ManagedElement for PCF ne_id %s: %v", ne.NeId, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入ManagedElement记录
|
||||||
|
nbiCM := common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "ManagedElement",
|
||||||
|
ValueJson: string(meJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入到数据库
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert PCF ManagedElement record: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 为每个网元生成PcfFunction记录
|
||||||
|
pcfFunction := pcf.PcfFunction{
|
||||||
|
Id: "PF" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-PcfFunction",
|
||||||
|
AdministrativeState: adminState,
|
||||||
|
OperationalState: operState,
|
||||||
|
VnfInstanceId: "vnf-" + ne.NeType + "-" + ne.NeId,
|
||||||
|
Fqdn: "pcf-" + ne.NeId + ".5gc.3gpp.org",
|
||||||
|
SbiServiceList: "Npcf_AMPolicyControl,Npcf_PolicyAuthorization,Npcf_SMPolicyControl,Npcf_BDTPolicyControl",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
pcfJSON, err := json.Marshal(pcfFunction)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal PcfFunction for ne_id %s: %v", ne.NeId, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入PcfFunction记录
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "PcfFunction",
|
||||||
|
ValueJson: string(pcfJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入到数据库
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert PcfFunction record: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 为每个网元生成UdrFunction记录
|
||||||
|
udrFunction := pcf.UdrFunction{
|
||||||
|
Id: "UF" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-UdrFunction",
|
||||||
|
AdministrativeState: adminState,
|
||||||
|
OperationalState: operState,
|
||||||
|
MaxSubNbr: 500000,
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
udrJSON, err := json.Marshal(udrFunction)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal UdrFunction for ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
// 插入UdrFunction记录
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "UdrFunction",
|
||||||
|
ValueJson: string(udrJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入到数据库
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert UdrFunction record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建 IPResource 记录
|
||||||
|
ipResource := pcf.IPResource{
|
||||||
|
Id: "IP" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-IPResource",
|
||||||
|
InterfaceType: "{Mgt,N5,N7,N15}",
|
||||||
|
LocIpV4AddrList: fmt.Sprintf("{%s,Default,Default,Default}", ne.Ip),
|
||||||
|
LocIpV6AddrList: "{Default,Default,Default,Default}",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
ipJSON, err := json.Marshal(ipResource)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal IPResource for PCF ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
// 插入IPResource记录
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "IPResource",
|
||||||
|
ValueJson: string(ipJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入到数据库
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert PCF IPResource record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Info("PCF NBI CM synchronization completed")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
249
src/modules/crontask/processor/nbiNRM/syncSmf.go
Normal file
249
src/modules/crontask/processor/nbiNRM/syncSmf.go
Normal file
@@ -0,0 +1,249 @@
|
|||||||
|
package nbiNRM
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"be.ems/lib/dborm"
|
||||||
|
"be.ems/lib/log"
|
||||||
|
"be.ems/src/modules/crontask/processor/nbiNRM/common"
|
||||||
|
"be.ems/src/modules/crontask/processor/nbiNRM/smf"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SyncSmfNbiCM 从ne_info获取SMF网元并同步数据到nbi_cm表
|
||||||
|
func (s *BarProcessor) SyncSmfNbiCM() error {
|
||||||
|
log.Info("Starting SMF NBI CM synchronization")
|
||||||
|
|
||||||
|
// 从ne_info表获取SMF类型的网元
|
||||||
|
var smfNEs []common.NeInfo
|
||||||
|
err := dborm.DefaultDB().Table("ne_info").Where("ne_type = ?", "SMF").
|
||||||
|
Find(&smfNEs).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to query SMF network elements: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Infof("Found %d SMF network elements", len(smfNEs))
|
||||||
|
|
||||||
|
// 当前时间戳
|
||||||
|
now := time.Now()
|
||||||
|
timestamp := now.Unix()
|
||||||
|
|
||||||
|
// 遍历每个SMF网元,生成对应的NBI CM记录
|
||||||
|
for _, ne := range smfNEs {
|
||||||
|
adminState, operState := common.ParseStateFromStatus(ne.Status)
|
||||||
|
|
||||||
|
// 为每个网元生成ManagedElement记录
|
||||||
|
managedElement := smf.ManagedElement{
|
||||||
|
Id: "ME" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName,
|
||||||
|
VendorName: ne.VendorName,
|
||||||
|
ManagedBy: ne.Dn,
|
||||||
|
ManagementIpAddress: ne.Ip,
|
||||||
|
SwVersion: "",
|
||||||
|
PatchInfo: "-",
|
||||||
|
AdministrativeState: string(adminState),
|
||||||
|
OperationalState: string(operState),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
meJSON, err := json.Marshal(managedElement)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal ManagedElement for SMF ne_id %s: %v", ne.NeId, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入ManagedElement记录
|
||||||
|
nbiCM := common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "ManagedElement",
|
||||||
|
ValueJson: string(meJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入到数据库
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert SMF ManagedElement record: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 为每个网元生成SmfFunction记录
|
||||||
|
smfFunction := smf.SmfFunction{
|
||||||
|
Id: "SF" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-SmfFunction",
|
||||||
|
AdministrativeState: string(adminState),
|
||||||
|
OperationalState: string(operState),
|
||||||
|
VnfInstanceId: "vnf-" + ne.NeType + "-" + ne.NeId,
|
||||||
|
Fqdn: "smf-" + ne.NeId + ".5gc.3gpp.org",
|
||||||
|
SbiServiceList: "Nsmf_PDUSession,Nsmf_EventExposure",
|
||||||
|
MaxPduSessions: 1000000,
|
||||||
|
MaxQfi: 64,
|
||||||
|
UpfList: "[\"UPF-1\",\"UPF-2\"]",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
smfJSON, err := json.Marshal(smfFunction)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal SmfFunction for ne_id %s: %v", ne.NeId, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入SmfFunction记录
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "SmfFunction",
|
||||||
|
ValueJson: string(smfJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入到数据库
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert SmfFunction record: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建 AddrPool 记录
|
||||||
|
addrPool := smf.AddrPool{
|
||||||
|
Id: "AP" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-AddrPool",
|
||||||
|
AddrType: "UE",
|
||||||
|
IpVersion: "IPv4",
|
||||||
|
AddrSegList: "[\"10.60.0.0/16\",\"10.61.0.0/16\"]",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
addrPoolJSON, err := json.Marshal(addrPool)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal AddrPool for ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
// 插入AddrPool记录
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "AddrPool",
|
||||||
|
ValueJson: string(addrPoolJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入到数据库
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert AddrPool record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建 EpRpDynN7Smf 记录
|
||||||
|
epRpDynN7Smf := smf.EpRpDynN7Smf{
|
||||||
|
Id: "N7" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-N7",
|
||||||
|
LocIpAddrList: "[\"" + ne.Ip + "\"]",
|
||||||
|
FarIpSubnetworkList: "[\"10.17.0.0/16\"]",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
n7JSON, err := json.Marshal(epRpDynN7Smf)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal EpRpDynN7Smf for ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
// 插入EpRpDynN7Smf记录
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "EpRpDynN7Smf",
|
||||||
|
ValueJson: string(n7JSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入到数据库
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert EpRpDynN7Smf record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建 EpRpDynN10Smf 记录
|
||||||
|
epRpDynN10Smf := smf.EpRpDynN10Smf{
|
||||||
|
Id: "N10" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-N10",
|
||||||
|
LocIpAddrList: "[\"" + ne.Ip + "\"]",
|
||||||
|
FarIpSubnetworkList: "[\"10.20.0.0/16\"]",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
n10JSON, err := json.Marshal(epRpDynN10Smf)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal EpRpDynN10Smf for ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
// 插入EpRpDynN10Smf记录
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "EpRpDynN10Smf",
|
||||||
|
ValueJson: string(n10JSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入到数据库
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert EpRpDynN10Smf record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建 IPResource 记录
|
||||||
|
ipResource := smf.IPResource{
|
||||||
|
Id: "IP" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-IPResource",
|
||||||
|
InterfaceType: "{Mgt,N4,N7,N10,N11}",
|
||||||
|
LocIpV4AddrList: fmt.Sprintf("{%s,%s,%s,%s,%s}", ne.Ip, ne.Ip, ne.Ip, ne.Ip, ne.Ip),
|
||||||
|
LocIpV6AddrList: "{Default,Default,Default,Default,Default}",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
ipJSON, err := json.Marshal(ipResource)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal IPResource for SMF ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
// 插入IPResource记录
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "IPResource",
|
||||||
|
ValueJson: string(ipJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入到数据库
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert SMF IPResource record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Info("SMF NBI CM synchronization completed")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
221
src/modules/crontask/processor/nbiNRM/syncUdm.go
Normal file
221
src/modules/crontask/processor/nbiNRM/syncUdm.go
Normal file
@@ -0,0 +1,221 @@
|
|||||||
|
package nbiNRM
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"be.ems/lib/dborm"
|
||||||
|
"be.ems/lib/log"
|
||||||
|
"be.ems/src/modules/crontask/processor/nbiNRM/common"
|
||||||
|
"be.ems/src/modules/crontask/processor/nbiNRM/udm"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SyncUdmNbiCM 从ne_info获取UDM网元并同步数据到nbi_cm表
|
||||||
|
func (s *BarProcessor) SyncUdmNbiCM() error {
|
||||||
|
log.Info("Starting UDM NBI CM synchronization")
|
||||||
|
|
||||||
|
// 从ne_info表获取UDM类型的网元
|
||||||
|
var udmNEs []common.NeInfo
|
||||||
|
err := dborm.DefaultDB().Table("ne_info").Where("ne_type = ?", "UDM").
|
||||||
|
Find(&udmNEs).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to query UDM network elements: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Infof("Found %d UDM network elements", len(udmNEs))
|
||||||
|
|
||||||
|
// 当前时间戳
|
||||||
|
now := time.Now()
|
||||||
|
timestamp := now.Unix()
|
||||||
|
|
||||||
|
// 遍历每个UDM网元,生成对应的NBI CM记录
|
||||||
|
for _, ne := range udmNEs {
|
||||||
|
adminState, operState := common.ParseStateFromStatus(ne.Status)
|
||||||
|
|
||||||
|
// 为每个网元生成ManagedElement记录
|
||||||
|
managedElement := udm.ManagedElement{
|
||||||
|
Id: "ME" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName,
|
||||||
|
VendorName: ne.VendorName,
|
||||||
|
ManagedBy: ne.Dn,
|
||||||
|
ManagementIpAddress: ne.Ip,
|
||||||
|
SwVersion: "",
|
||||||
|
PatchInfo: "-",
|
||||||
|
AdministrativeState: string(adminState),
|
||||||
|
OperationalState: string(operState),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
meJSON, err := json.Marshal(managedElement)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal ManagedElement for UDM ne_id %s: %v", ne.NeId, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入ManagedElement记录
|
||||||
|
nbiCM := common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "ManagedElement",
|
||||||
|
ValueJson: string(meJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入到数据库
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert UDM ManagedElement record: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 为每个网元生成UdmFunction记录
|
||||||
|
udmFunction := udm.UdmFunction{
|
||||||
|
Id: "UF" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-UdmFunction",
|
||||||
|
AdministrativeState: string(adminState),
|
||||||
|
OperationalState: string(operState),
|
||||||
|
VnfInstanceId: "vnf-" + ne.NeType + "-" + ne.NeId,
|
||||||
|
Fqdn: "udm-" + ne.NeId + ".5gc.3gpp.org",
|
||||||
|
SbiServiceList: "Nudm_UEAuthentication,Nudm_SubscriberDataManagement,Nudm_UEContextManagement",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
udmJSON, err := json.Marshal(udmFunction)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal UdmFunction for ne_id %s: %v", ne.NeId, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入UdmFunction记录
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "UdmFunction",
|
||||||
|
ValueJson: string(udmJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入到数据库
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert UdmFunction record: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 为每个网元生成UdrFunction记录
|
||||||
|
udrFunction := udm.UdrFunction{
|
||||||
|
Id: "UDR" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-UdrFunction",
|
||||||
|
AdministrativeState: string(adminState),
|
||||||
|
OperationalState: string(operState),
|
||||||
|
VnfInstanceId: "vnf-UDR-" + ne.NeId,
|
||||||
|
Fqdn: "udr-" + ne.NeId + ".5gc.3gpp.org",
|
||||||
|
SbiServiceList: "Nudr_DataRepository",
|
||||||
|
MaxNumSupi: 800000,
|
||||||
|
MaxNumMsisdn: 800000,
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
udrJSON, err := json.Marshal(udrFunction)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal UdrFunction for ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
// 插入UdrFunction记录
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "UdrFunction",
|
||||||
|
ValueJson: string(udrJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入到数据库
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert UdrFunction record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 为每个网元生成AusfFunction记录
|
||||||
|
ausfFunction := udm.AusfFunction{
|
||||||
|
Id: "AUSF" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-AusfFunction",
|
||||||
|
AdministrativeState: string(adminState),
|
||||||
|
OperationalState: string(operState),
|
||||||
|
VnfInstanceId: "vnf-AUSF-" + ne.NeId,
|
||||||
|
Fqdn: "ausf-" + ne.NeId + ".5gc.3gpp.org",
|
||||||
|
SbiServiceList: "Nausf_UEAuthentication,Nausf_SoRProtection",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
ausfJSON, err := json.Marshal(ausfFunction)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal AusfFunction for ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
// 插入AusfFunction记录
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "AusfFunction",
|
||||||
|
ValueJson: string(ausfJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入到数据库
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert AusfFunction record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建 IPResource 记录
|
||||||
|
ipResource := udm.IPResource{
|
||||||
|
Id: "IP" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-IPResource",
|
||||||
|
InterfaceType: "{Mgt,N8,N10,N12,N21}",
|
||||||
|
LocIpV4AddrList: fmt.Sprintf("{%s,%s,%s,%s,%s}", ne.Ip, ne.Ip, ne.Ip, ne.Ip, ne.Ip),
|
||||||
|
LocIpV6AddrList: "{Default,Default,Default,Default,Default}",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
ipJSON, err := json.Marshal(ipResource)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal IPResource for UDM ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
// 插入IPResource记录
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "IPResource",
|
||||||
|
ValueJson: string(ipJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入到数据库
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert UDM IPResource record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Info("UDM NBI CM synchronization completed")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
393
src/modules/crontask/processor/nbiNRM/syncUpf.go
Normal file
393
src/modules/crontask/processor/nbiNRM/syncUpf.go
Normal file
@@ -0,0 +1,393 @@
|
|||||||
|
package nbiNRM
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"be.ems/lib/dborm"
|
||||||
|
"be.ems/lib/log"
|
||||||
|
"be.ems/src/modules/crontask/processor/nbiNRM/common"
|
||||||
|
"be.ems/src/modules/crontask/processor/nbiNRM/upf"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SyncUpfNbiCM 从ne_info获取UPF网元并同步数据到nbi_cm表
|
||||||
|
func (s *BarProcessor) SyncUpfNbiCM() error {
|
||||||
|
log.Info("Starting UPF NBI CM synchronization")
|
||||||
|
|
||||||
|
// 从ne_info表获取UPF类型的网元
|
||||||
|
var upfNEs []common.NeInfo
|
||||||
|
err := dborm.DefaultDB().Table("ne_info").Where("ne_type = ?", "UPF").
|
||||||
|
Find(&upfNEs).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to query UPF network elements: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Infof("Found %d UPF network elements", len(upfNEs))
|
||||||
|
|
||||||
|
// 当前时间戳
|
||||||
|
now := time.Now()
|
||||||
|
timestamp := now.Unix()
|
||||||
|
|
||||||
|
// 遍历每个UPF网元,生成对应的NBI CM记录
|
||||||
|
for _, ne := range upfNEs {
|
||||||
|
adminState, operState := common.ParseStateFromStatus(ne.Status)
|
||||||
|
|
||||||
|
// 为每个网元生成ManagedElement记录
|
||||||
|
managedElement := upf.ManagedElement{
|
||||||
|
Id: "ME" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName,
|
||||||
|
VendorName: ne.VendorName,
|
||||||
|
ManagedBy: ne.Dn,
|
||||||
|
ManagementIpAddress: ne.Ip,
|
||||||
|
SwVersion: "",
|
||||||
|
PatchInfo: "-",
|
||||||
|
AdministrativeState: string(adminState),
|
||||||
|
OperationalState: string(operState),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
meJSON, err := json.Marshal(managedElement)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal ManagedElement for UPF ne_id %s: %v", ne.NeId, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入ManagedElement记录
|
||||||
|
nbiCM := common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "ManagedElement",
|
||||||
|
ValueJson: string(meJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入到数据库
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert UPF ManagedElement record: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成 InventoryUnitRack 记录
|
||||||
|
inventoryUnitRack := upf.InventoryUnitRack{
|
||||||
|
Id: "RACK" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-Rack",
|
||||||
|
VendorUnitFamilyType: "5G-UPF",
|
||||||
|
VendorUnitTypeNumber: "UPF-" + ne.NeId,
|
||||||
|
VendorName: ne.VendorName,
|
||||||
|
SerialNumber: "SN-UPF-" + ne.NeId,
|
||||||
|
VersionNumber: "1.0.0",
|
||||||
|
DateOfManufacture: "2023-01-01",
|
||||||
|
DateOfLastService: now.Format("2006-01-02"),
|
||||||
|
ManufacturerData: "{}",
|
||||||
|
RackPosition: "1",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
rackJSON, err := json.Marshal(inventoryUnitRack)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal InventoryUnitRack for ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "InventoryUnitRack",
|
||||||
|
ValueJson: string(rackJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert InventoryUnitRack record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成 InventoryUnitShelf 记录
|
||||||
|
inventoryUnitShelf := upf.InventoryUnitShelf{
|
||||||
|
Id: "SHELF" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-Shelf",
|
||||||
|
VendorUnitFamilyType: "5G-UPF-SHELF",
|
||||||
|
VendorUnitTypeNumber: "UPF-SHELF-" + ne.NeId,
|
||||||
|
VendorName: ne.VendorName,
|
||||||
|
SerialNumber: "SN-UPF-SHELF-" + ne.NeId,
|
||||||
|
VersionNumber: "1.0.0",
|
||||||
|
DateOfManufacture: "2023-01-01",
|
||||||
|
DateOfLastService: now.Format("2006-01-02"),
|
||||||
|
ManufacturerData: "{}",
|
||||||
|
ShelfPosition: "1",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
shelfJSON, err := json.Marshal(inventoryUnitShelf)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal InventoryUnitShelf for ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "InventoryUnitShelf",
|
||||||
|
ValueJson: string(shelfJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert InventoryUnitShelf record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成 InventoryUnitPack 记录
|
||||||
|
inventoryUnitPack := upf.InventoryUnitPack{
|
||||||
|
Id: "PACK" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-Pack",
|
||||||
|
VendorUnitFamilyType: "5G-UPF-PACK",
|
||||||
|
VendorUnitTypeNumber: "UPF-PACK-" + ne.NeId,
|
||||||
|
VendorName: ne.VendorName,
|
||||||
|
SerialNumber: "SN-UPF-PACK-" + ne.NeId,
|
||||||
|
VersionNumber: "1.0.0",
|
||||||
|
DateOfManufacture: "2023-01-01",
|
||||||
|
DateOfLastService: now.Format("2006-01-02"),
|
||||||
|
ManufacturerData: "{}",
|
||||||
|
SlotsOccupied: "1,2",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
packJSON, err := json.Marshal(inventoryUnitPack)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal InventoryUnitPack for ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "InventoryUnitPack",
|
||||||
|
ValueJson: string(packJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert InventoryUnitPack record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成 InventoryUnitHost 记录
|
||||||
|
inventoryUnitHost := upf.InventoryUnitHost{
|
||||||
|
Id: "HOST" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-Host",
|
||||||
|
VendorUnitFamilyType: "5G-UPF-HOST",
|
||||||
|
VendorUnitTypeNumber: "UPF-HOST-" + ne.NeId,
|
||||||
|
VendorName: ne.VendorName,
|
||||||
|
SerialNumber: "SN-UPF-HOST-" + ne.NeId,
|
||||||
|
VersionNumber: "1.0.0",
|
||||||
|
DateOfManufacture: "2023-01-01",
|
||||||
|
DateOfLastService: now.Format("2006-01-02"),
|
||||||
|
ManufacturerData: "{}",
|
||||||
|
HostPosition: "1",
|
||||||
|
NumberOfCpu: "16",
|
||||||
|
MemSize: "64GB",
|
||||||
|
HardDiskSize: "1TB",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
hostJSON, err := json.Marshal(inventoryUnitHost)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal InventoryUnitHost for ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "InventoryUnitHost",
|
||||||
|
ValueJson: string(hostJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert InventoryUnitHost record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成 InventoryUnitAccessory 记录
|
||||||
|
inventoryUnitAccessory := upf.InventoryUnitAccessory{
|
||||||
|
Id: "ACC" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-Accessory",
|
||||||
|
VendorUnitFamilyType: "5G-UPF-ACC",
|
||||||
|
VendorUnitTypeNumber: "UPF-ACC-" + ne.NeId,
|
||||||
|
VendorName: ne.VendorName,
|
||||||
|
SerialNumber: "SN-UPF-ACC-" + ne.NeId,
|
||||||
|
VersionNumber: "1.0.0",
|
||||||
|
DateOfManufacture: "2023-01-01",
|
||||||
|
DateOfLastService: now.Format("2006-01-02"),
|
||||||
|
ManufacturerData: "{}",
|
||||||
|
AccessoryPosition: "1",
|
||||||
|
AccessoryType: "FAN",
|
||||||
|
AddtionalInformation: "Cooling system",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
accJSON, err := json.Marshal(inventoryUnitAccessory)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal InventoryUnitAccessory for ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "InventoryUnitAccessory",
|
||||||
|
ValueJson: string(accJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert InventoryUnitAccessory record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成 UpfFunction 记录
|
||||||
|
upfFunction := upf.UpfFunction{
|
||||||
|
Id: "UF" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-UpfFunction",
|
||||||
|
AdministrativeState: string(adminState),
|
||||||
|
OperationalState: string(operState),
|
||||||
|
VnfInstanceId: "vnf-" + ne.NeType + "-" + ne.NeId,
|
||||||
|
MaxQosFlows: "1000000",
|
||||||
|
MaxThroughput: "10Gbps",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
upfJSON, err := json.Marshal(upfFunction)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal UpfFunction for ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "UpfFunction",
|
||||||
|
ValueJson: string(upfJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert UpfFunction record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建 EpRpDynN3Upf 记录
|
||||||
|
epRpDynN3Upf := upf.EpRpDynN3Upf{
|
||||||
|
Id: "N3" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-N3",
|
||||||
|
LocIpAddrList: "[\"" + ne.Ip + "\"]",
|
||||||
|
FarIpSubnetworkList: "[\"10.13.0.0/16\"]",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
n3JSON, err := json.Marshal(epRpDynN3Upf)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal EpRpDynN3Upf for ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "EpRpDynN3Upf",
|
||||||
|
ValueJson: string(n3JSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert EpRpDynN3Upf record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建 EpRpDynN9Upf 记录
|
||||||
|
epRpDynN9Upf := upf.EpRpDynN9Upf{
|
||||||
|
Id: "N9" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-N9",
|
||||||
|
LocIpAddrList: "[\"" + ne.Ip + "\"]",
|
||||||
|
FarIpSubnetworkList: "[\"10.19.0.0/16\"]",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
n9JSON, err := json.Marshal(epRpDynN9Upf)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal EpRpDynN9Upf for ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "EpRpDynN9Upf",
|
||||||
|
ValueJson: string(n9JSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert EpRpDynN9Upf record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建 IPResource 记录
|
||||||
|
ipResource := upf.IPResource{
|
||||||
|
Id: "IP" + fmt.Sprintf("-%s-%d", ne.NeId, timestamp),
|
||||||
|
UserLabel: ne.NeName + "-IPResource",
|
||||||
|
InterfaceType: "{Mgt,N3,N4,N9}",
|
||||||
|
LocIpV4AddrList: fmt.Sprintf("{%s,%s,%s,%s}", ne.Ip, ne.Ip, ne.Ip, ne.Ip),
|
||||||
|
LocIpV6AddrList: "{Default,Default,Default,Default}",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 序列化为JSON
|
||||||
|
ipJSON, err := json.Marshal(ipResource)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to marshal IPResource for UPF ne_id %s: %v", ne.NeId, err)
|
||||||
|
} else {
|
||||||
|
nbiCM = common.NbiCm{
|
||||||
|
NeType: ne.NeType,
|
||||||
|
NeId: ne.NeId,
|
||||||
|
CmVersion: common.CmVersion,
|
||||||
|
RmUid: ne.RmUid,
|
||||||
|
EventType: common.EventTypeInt("ObjectCreationEvent"),
|
||||||
|
ObjectType: "IPResource",
|
||||||
|
ValueJson: string(ipJSON),
|
||||||
|
Timestamp: now.Format("2006-01-02 15:04:05"),
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Failed to insert UPF IPResource record: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Info("UPF NBI CM synchronization completed")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user