feat: support nbi cm task

This commit is contained in:
zhangsz
2025-04-25 10:44:24 +08:00
parent 8705ac68c1
commit d973c8af49
11 changed files with 717 additions and 1 deletions

View 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
}