feat: support nbi cm task
This commit is contained in:
136
src/modules/crontask/processor/nbiNRM/syncAmf.go
Normal file
136
src/modules/crontask/processor/nbiNRM/syncAmf.go
Normal file
@@ -0,0 +1,136 @@
|
||||
package nbiNRM
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/log"
|
||||
|
||||
"be.ems/src/modules/crontask/processor/nbiNRM/amf"
|
||||
)
|
||||
|
||||
// SyncAmfNbiCM 从ne_info获取AMF网元并同步数据到nbi_cm表
|
||||
func (s *BarProcessor) SyncAmfNbiCM() error {
|
||||
log.Info("Starting AMF NBI CM synchronization")
|
||||
|
||||
// 从ne_info表获取AMF类型的网元
|
||||
var amfNEs []struct {
|
||||
NeID string `db:"ne_id"`
|
||||
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
|
||||
|
||||
if err != nil {
|
||||
log.Errorf("Failed to query AMF network elements: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
log.Infof("Found %d AMF network elements", len(amfNEs))
|
||||
|
||||
// 当前时间戳
|
||||
now := time.Now()
|
||||
timestamp := now.Unix()
|
||||
|
||||
// 遍历每个AMF网元,生成对应的NBI CM记录
|
||||
for _, ne := range amfNEs {
|
||||
// 为每个网元生成ManagedElement记录
|
||||
managedElement := amf.ManagedElement{
|
||||
Id: "ManagedElement=" + ne.NeID,
|
||||
UserLabel: "AMF-" + ne.NeID,
|
||||
VendorName: "Vendor",
|
||||
ManagedBy: "OMC",
|
||||
ManagementIpAddress: "", // 可以从其他表获取IP地址
|
||||
SwVersion: "", // 可以从其他表获取软件版本
|
||||
AdministrativeState: "UNLOCKED",
|
||||
OperationalState: "ENABLED",
|
||||
}
|
||||
|
||||
// 序列化为JSON
|
||||
meJSON, err := json.Marshal(managedElement)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to marshal ManagedElement for ne_id %s: %v", ne.NeID, err)
|
||||
continue
|
||||
}
|
||||
|
||||
// 生成唯一ID
|
||||
meID := fmt.Sprintf("nbi-cm-%s-me-%d", ne.NeID, timestamp)
|
||||
|
||||
// 插入ManagedElement记录
|
||||
nbiCM := NbiCm{
|
||||
Id: meID,
|
||||
NeType: ne.NeType,
|
||||
NeId: ne.NeID,
|
||||
CmVersion: CmVersion,
|
||||
RmUid: ne.RmUid,
|
||||
EventType: EventTypeInt("ObjectCreationEvent"),
|
||||
ObjectType: "ManagedElement",
|
||||
ValueJson: string(meJSON),
|
||||
Timestamp: fmt.Sprintf("%d", timestamp),
|
||||
}
|
||||
|
||||
// 插入到数据库
|
||||
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||
if err != nil {
|
||||
log.Errorf("Failed to insert ManagedElement record: %v", err)
|
||||
continue
|
||||
}
|
||||
|
||||
// 为每个网元生成AmfFunction记录
|
||||
amfFunction := amf.AmfFunction{
|
||||
Id: "ManagedElement=" + ne.NeID + ",AmfFunction=1",
|
||||
UserLabel: "AMF-" + ne.NeID + "-Func",
|
||||
AdministrativeState: "UNLOCKED",
|
||||
OperationalState: "ENABLED",
|
||||
VnfInstanceId: "vnf-" + ne.NeID,
|
||||
Fqdn: "amf-" + ne.NeID + ".example.com",
|
||||
SbiServiceList: "Namf_Communication,Namf_EventExposure,Namf_MT,Namf_Location",
|
||||
AmfGuamiList: "[{\"mcc\":\"460\",\"mnc\":\"01\",\"amfId\":\"" + ne.NeID + "\"}]",
|
||||
SnssaiList: "[{\"sst\":1,\"sd\":\"010203\"}]",
|
||||
MaxUser: 1000000,
|
||||
RelativeCapacity: 30,
|
||||
MaxGnbNum: 100,
|
||||
}
|
||||
|
||||
// 序列化为JSON
|
||||
amfJSON, err := json.Marshal(amfFunction)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to marshal AmfFunction for ne_id %s: %v", ne.NeID, err)
|
||||
continue
|
||||
}
|
||||
|
||||
// 生成唯一ID
|
||||
amfID := fmt.Sprintf("nbi-cm-%s-amf-%d", ne.NeID, timestamp)
|
||||
|
||||
// 插入AmfFunction记录
|
||||
nbiCM = NbiCm{
|
||||
Id: amfID,
|
||||
NeType: ne.NeType,
|
||||
NeId: ne.NeID,
|
||||
CmVersion: "1.0",
|
||||
RmUid: "OMC-SYSTEM",
|
||||
EventType: EventTypeInt("ObjectCreationEvent"),
|
||||
ObjectType: "AmfFunction",
|
||||
ValueJson: string(amfJSON),
|
||||
Timestamp: fmt.Sprintf("%d", timestamp),
|
||||
}
|
||||
|
||||
// 插入到数据库
|
||||
err = dborm.DefaultDB().Table("nbi_cm").Create(&nbiCM).Error
|
||||
if err != nil {
|
||||
log.Errorf("Failed to insert AmfFunction record: %v", err)
|
||||
continue
|
||||
}
|
||||
|
||||
// 可以继续添加其他AMF相关对象,如EpRpDynN8Amf、IPResource等
|
||||
// 这里仅展示了基本结构,可根据实际需求扩展
|
||||
}
|
||||
|
||||
log.Info("AMF NBI CM synchronization completed")
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user