This commit is contained in:
2023-08-24 21:23:55 +08:00
parent 8ac572b215
commit 486f1163e8
8 changed files with 266 additions and 77 deletions

View File

@@ -14,3 +14,132 @@
"OperationalState": "Enabled" "OperationalState": "Enabled"
} }
[
{
0 2023-08-24 11: 30: 20 +0800 CST UTC+8 Ruijie Network SMF 16.1.1 1101RJHX1SMF01 001 SMF_001 ManagedElement PNF Original
} {
0 2023-08-24 11: 30: 20 +0800 CST UTC+8 Ruijie Network SMF 16.1.1 1101RJHX1SMF01 001 SMF_001 SmfFunction PNF {
"AdministrativeState": "Unlocked",
"Id": "cm sz",
"MaxPduSessions": 100000,
"MaxQfi": 600,
"OperationalState": "Enabled",
"SbiServiceList": [
"nsmf-pdusession"
],
"UpfList": [
"upf-1:192.168.4.136:8805",
"upf-2:192.168.5.19:8805"
],
"UserLabel": "SMF_SZ_01",
"VnfInstanceId": "074fc555-1096-11ec-aa4b-000c298b5bde"
} Original
} {
0 2023-08-24 11: 30: 20 +0800 CST UTC+8 Ruijie Network SMF 16.1.1 1101RJHX1SMF01 001 SMF_001 IPResource PNF {} Original
} {
0 2023-08-24 11: 30: 20 +0800 CST UTC+8 Ruijie Network SMF 16.1.1 1101RJHX1SMF01 001 SMF_001 EpRpDynN10Smf PNF {
"FarIpSubnetworkList": {
"Ipv4": [
{
"Mask": "255.255.255.255",
"Subnetwork": "192.168.4.139"
}
],
"Ipv6": null
},
"Id": "cm sz",
"LocIpAddrList": [
"192.168.4.134"
],
"UserLabel": "SMF_SZ_01"
} Original
} {
0 2023-08-24 11: 30: 20 +0800 CST UTC+8 Ruijie Network SMF 16.1.1 1101RJHX1SMF01 001 SMF_001 EpRpDynN7Smf PNF {
"FarIpSubnetworkList": {
"Ipv4": [
{
"Mask": "255.255.255.255",
"Subnetwork": "192.168.4.139"
}
],
"Ipv6": null
},
"Id": "cm sz",
"LocIpAddrList": [
"192.168.4.134"
],
"UserLabel": "SMF_SZ_01"
} Original
} {
0 2023-08-24 11: 30: 20 +0800 CST UTC+8 Ruijie Network SMF 16.1.1 1101RJHX1SMF01 001 SMF_001 ManagedElement PNF {
"FarIpSubnetworkList": {
"Ipv4": [
{
"Mask": "255.255.255.255",
"Subnetwork": "192.168.4.139"
}
],
"Ipv6": null
},
"Id": "cm sz",
"LocIpAddrList": [
"192.168.4.134"
],
"UserLabel": "SMF_SZ_01"
} Original
} {
0 2023-08-24 11: 30: 20 +0800 CST UTC+8 Ruijie Network SMF 16.1.1 1101RJHX1SMF01 001 SMF_001 SmfFunction PNF {
"AdministrativeState": "Unlocked",
"Id": "cm sz",
"MaxPduSessions": 100000,
"MaxQfi": 600,
"OperationalState": "Enabled",
"SbiServiceList": [
"nsmf-pdusession"
],
"UpfList": [
"upf-1:192.168.4.136:8805",
"upf-2:192.168.5.19:8805"
],
"UserLabel": "SMF_SZ_01",
"VnfInstanceId": "074fc555-1096-11ec-aa4b-000c298b5bde"
} Original
} {
0 2023-08-24 11: 30: 20 +0800 CST UTC+8 Ruijie Network SMF 16.1.1 1101RJHX1SMF01 001 SMF_001 IPResource PNF {} Original
} {
0 2023-08-24 11: 30: 20 +0800 CST UTC+8 Ruijie Network SMF 16.1.1 1101RJHX1SMF01 001 SMF_001 EpRpDynN10Smf PNF {
"FarIpSubnetworkList": {
"Ipv4": [
{
"Mask": "255.255.255.255",
"Subnetwork": "192.168.4.139"
}
],
"Ipv6": null
},
"Id": "cm sz",
"LocIpAddrList": [
"192.168.4.134"
],
"UserLabel": "SMF_SZ_01"
} Original
} {
0 2023-08-24 11: 30: 20 +0800 CST UTC+8 Ruijie Network SMF 16.1.1 1101RJHX1SMF01 001 SMF_001 EpRpDynN7Smf PNF {
"FarIpSubnetworkList": {
"Ipv4": [
{
"Mask": "255.255.255.255",
"Subnetwork": "192.168.4.139"
}
],
"Ipv6": null
},
"Id": "cm sz",
"LocIpAddrList": [
"192.168.4.134"
],
"UserLabel": "SMF_SZ_01"
} Original
}
]

View File

@@ -43,7 +43,7 @@ type FieldValue struct {
} }
// Objects ... // Objects ...
type Objects struct { type ObjectData struct {
ObjectType string `xml:"ObjectType"` ObjectType string `xml:"ObjectType"`
FieldName FieldName `xml:"FieldName"` FieldName FieldName `xml:"FieldName"`
FieldValue FieldValue `xml:"FieldValue"` FieldValue FieldValue `xml:"FieldValue"`
@@ -52,7 +52,8 @@ type Objects struct {
// DataFile ... // DataFile ...
type DataFile struct { type DataFile struct {
FileHeader FileHeader `xml:"FileHeader"` FileHeader FileHeader `xml:"FileHeader"`
Objects []Objects `xml:"Objects"` //Objects []Objects `xml:"Objects"`
ObjectData ObjectData `xml:"objectData"`
XsiAttr string `xml:"xmlns:xsi,attr"` XsiAttr string `xml:"xmlns:xsi,attr"`
XsiLoc string `xml:"xsi:noNamespaceSchemaLocation,attr"` XsiLoc string `xml:"xsi:noNamespaceSchemaLocation,attr"`
} }

View File

@@ -24,7 +24,7 @@ database:
type: mysql type: mysql
user: root user: root
password: 1000omc@kp! password: 1000omc@kp!
host: 127.0.0.1 host: 172.25.97.150
port: 33066 port: 33066
name: omc_db name: omc_db
backup: d:/local.git/ems.agt/restagent/database backup: d:/local.git/ems.agt/restagent/database
@@ -35,10 +35,10 @@ nbi:
cm: cm:
cfgfiledir: ./etc/cm cfgfiledir: ./etc/cm
xmlfiledir: ./ftp/cm xmlfiledir: ./ftp/cm
version: V1.0.1 version: V2.5.0
duration: 30 duration: 30
pm: pm:
cfgfiledir: ./etc/pm cfgfiledir: ./etc/pm
xmlfiledir: ./ftp/pm xmlfiledir: ./ftp/pm
version: V1.0.1 version: V2.5.0
duration: 30 duration: 30

View File

@@ -97,7 +97,7 @@ tasks:
params: params:
interval: 1 interval: 1
unit: Day unit: Day
at: 00:00,06:00,12:00,18:00 at: 00:00,06:00,12:00,18:00,20:43
do: GenCmXmlFile do: GenCmXmlFile
- name: Task of Generate measure threshold alarm - name: Task of Generate measure threshold alarm
status: Inactive status: Inactive

View File

@@ -1,6 +1,7 @@
package main package main
import ( import (
"encoding/json"
"encoding/xml" "encoding/xml"
"fmt" "fmt"
"os" "os"
@@ -70,9 +71,6 @@ func (t *TaskFunc) GenNFXmlFile(neType string) error {
resultMap, _ := t.ReadCmYaml(cmfile) resultMap, _ := t.ReadCmYaml(cmfile)
var cmResults []dborm.NorthboundCm
err = dborm.XormGetNorthboundCm(neType, &cmResults)
ti := time.Now() ti := time.Now()
timestamp := ti.Format("2006-01-02 15:04:05") timestamp := ti.Format("2006-01-02 15:04:05")
timefile := ti.Format("20060102150405") timefile := ti.Format("20060102150405")
@@ -86,20 +84,24 @@ func (t *TaskFunc) GenNFXmlFile(neType string) error {
} }
nrmFile := new(cmschema.DataFile) nrmFile := new(cmschema.DataFile)
//创建目录
path := fmt.Sprintf("%s/HX/%s/%s/CM/%s", yamlConfig.OMC.Province, yamlConfig.OMC.Vendor, yamlConfig.OMC.Name, date)
folderPath := global.CreateDir(path, yamlConfig.NBI.CM.XmlFileDir)
nrmFile.FileHeader = cmschema.FileHeader{ nrmFile.FileHeader = cmschema.FileHeader{
TimeStamp: timestamp, TimeStamp: timestamp,
TimeZone: tzOffset, TimeZone: tzOffset,
VendorName: "RJ", VendorName: yamlConfig.OMC.Vendor,
ElementType: neType, ElementType: neType,
CmVersion: global.Version, CmVersion: yamlConfig.NBI.CM.Version,
} }
nrmFile.XsiAttr = "http://www.w3.org/2001/XMLSchema-instance" nrmFile.XsiAttr = "http://www.w3.org/2001/XMLSchema-instance"
nrmFile.XsiLoc = "file:///usr/loal/omc/etc/schema/cm-schema.xsd" nrmFile.XsiLoc = "file:///usr/loal/omc/etc/schema/cm-schema.xsd"
for k, e := range resultMap { for objectType, e := range resultMap {
objects := cmschema.Objects{ObjectType: k} //objects := cmschema.Objects{ObjectType: objectType}
objectData := cmschema.ObjectData{ObjectType: objectType}
sortResult := make(map[string]string) sortResult := make(map[string]string)
keys := make([]string, 0) keys := make([]string, 0)
@@ -109,61 +111,99 @@ func (t *TaskFunc) GenNFXmlFile(neType string) error {
} }
sort.Strings(keys) sort.Strings(keys)
for s, ne := range nes { for s, ne := range nes {
rmUID := fmt.Sprintf("01000HX%sBJ0D0%d", neType, s+1) cmResult, err := dborm.XormGetNorthboundCmLatestObject(neType, ne.NeId, objectType)
if err != nil {
log.Error("Failed to XormGetNorthboundCmLatestObject:", err)
continue
}
log.Trace("cmResult:", cmResult)
valueMap := make(map[string]interface{})
if cmResult.ValueJSON != "" {
err = json.Unmarshal([]byte(cmResult.ValueJSON), &valueMap)
if err != nil {
log.Error("Failed to json.Unmarshal:", err)
continue
}
}
log.Trace("valueMap:", valueMap)
rmUID := ne.RmUID
var object cmschema.Object
if ne.PvFlag == "VNF" {
vmId := fmt.Sprintf("kylin10.0-00%d-%s", s+1, neType) vmId := fmt.Sprintf("kylin10.0-00%d-%s", s+1, neType)
vnfInstanceID := fmt.Sprintf("2%xd55b4-%d018-41f4-af%d5-28b%d828788", s+10, s+6, s+4, s+3) vnfInstanceID := fmt.Sprintf("2%xd55b4-%d018-41f4-af%d5-28b%d828788", s+10, s+6, s+4, s+3)
object := cmschema.Object{RmUIDAttr: rmUID, object = cmschema.Object{RmUIDAttr: rmUID,
DnAttr: "DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325", DnAttr: "DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325",
UserLabelAttr: ne.NeName, PVFlagAttr: ne.PvFlag, VMIDAttr: vmId, VNFInstanceIDAttr: vnfInstanceID} UserLabelAttr: ne.NeName, PVFlagAttr: ne.PvFlag, VMIDAttr: vmId, VNFInstanceIDAttr: vnfInstanceID}
} else {
object = cmschema.Object{RmUIDAttr: rmUID,
DnAttr: "DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325",
UserLabelAttr: ne.NeName, PVFlagAttr: ne.PvFlag}
}
i := 1 i := 1
for _, p := range keys { for _, p := range keys {
if s == 0 { if s == 0 {
objects.FieldName.N = append(objects.FieldName.N, cmschema.N{IAttr: i, Value: p}) //objects.FieldName.N = append(objects.FieldName.N, cmschema.N{IAttr: i, Value: p})
objectData.FieldName.N = append(objectData.FieldName.N, cmschema.N{IAttr: i, Value: p})
} }
var v string // var v string
switch p { // switch p {
case "Id": // case "Id":
v = ne.NeId // v = ne.RmUID
case "UserLabel": // case "UserLabel":
v = ne.NeName // v = ne.NeName
case "VendorName": // case "VendorName":
v = "RJ" // v = ne.VendorName
case "SwVersion": // case "SwVersion":
v = global.Version // v = cmResult.CmVersion
case "PatchInfo": // case "PatchInfo":
v = "-" // v = "-"
case "AdministrativeState": // case "AdministrativeState":
v = AdminStateUnlocked // v = AdminStateUnlocked
case "OperationalState": // case "OperationalState":
v = OperationStateEnabled // v = OperationStateEnabled
case "VnfInstanceId": // case "VnfInstanceId":
v = vnfInstanceID // v = "" //vnfInstanceID
default: // default:
if sortResult[p] == "" { // if sortResult[p] == "" {
v = "-" // v = "-"
} else { // } else {
v = fmt.Sprintf("%s", sortResult[p]) // v = fmt.Sprintf("%s", sortResult[p])
} // }
} // }
object.V = append(object.V, cmschema.V{IAttr: i, Value: v}) object.V = append(object.V, cmschema.V{IAttr: i, Value: fmt.Sprintf("%v", valueMap[p])})
i++ i++
} }
objects.FieldValue.Object = append(objects.FieldValue.Object, object) //objects.FieldValue.Object = append(objects.FieldValue.Object, object)
} objectData.FieldValue.Object = append(objectData.FieldValue.Object, object)
nrmFile.Objects = append(nrmFile.Objects, objects)
} }
//nrmFile.Objects = append(nrmFile.Objects, objects)
nrmFile.ObjectData = objectData
folderPath := global.CreateDir(date, yamlConfig.NBI.CM.XmlFileDir)
x, _ := xml.MarshalIndent(nrmFile, "", " ") x, _ := xml.MarshalIndent(nrmFile, "", " ")
x = append([]byte(xml.Header), x...) x = append([]byte(xml.Header), x...)
xmlfile := fmt.Sprintf("%s/CM-HX-%s-%s-%s.xml", folderPath, neType, global.Version, timefile)
err = os.WriteFile(xmlfile, x, 0664) xmlfile := fmt.Sprintf("%s/%s-CM-%s-%s-%s-%s-%s-001.xml",
folderPath, yamlConfig.OMC.Province, neType, objectType, yamlConfig.OMC.HostNo, yamlConfig.NBI.CM.Version, timefile)
tmpXmlfile := xmlfile + ".tmp"
err := os.WriteFile(tmpXmlfile, x, 0664)
if err != nil { if err != nil {
log.Error("Failed to write xml file:", err) log.Error("Failed to WriteFile xml file:", err)
return err continue
} }
// err := os.Create(tmpXmlfile)
// if err != nil {
// log.Error("Failed to WriteFile xml file:", err)
// continue
// }
err = os.Rename(tmpXmlfile, xmlfile)
if err != nil {
log.Error("Failed to Rename xml file:", err)
continue
}
}
return nil return nil
} }

View File

@@ -1375,7 +1375,7 @@ func (t *TaskFunc) TaskWriteSystemLog(uri, params, body string) {
} }
sysLogs := &[]dborm.SystemLog{} sysLogs := &[]dborm.SystemLog{}
sysLog := &dborm.SystemLog{ sysLog := &dborm.SystemLog{
User: userName, UserName: userName,
ProcessName: newProcInfo.Name, ProcessName: newProcInfo.Name,
ProcessID: newProcInfo.Pid, ProcessID: newProcInfo.Pid,
Operation: operation, Operation: operation,

View File

@@ -1541,7 +1541,7 @@ func XormInsertAlarmForwardLog(logData *AlarmForwardLog) (int64, error) {
type SystemLog struct { type SystemLog struct {
ID int `json:"-" xorm:"pk 'id' autoincr"` ID int `json:"-" xorm:"pk 'id' autoincr"`
User string `json:"user" xorm:"user"` UserName string `json:"user_name" xorm:"user_name"`
ProcessName string `json:"process_name" xorm:"process_name"` ProcessName string `json:"process_name" xorm:"process_name"`
ProcessID int32 `json:"process_id" xorm:"process_id"` ProcessID int32 `json:"process_id" xorm:"process_id"`
Operation string `json:"operation" xorm:"operation"` Operation string `json:"operation" xorm:"operation"`
@@ -1624,7 +1624,7 @@ func XormUpdateNeLicense(neType, neID string, capcity int) (int64, error) {
} }
type NorthboundCm struct { type NorthboundCm struct {
ID int `json:"-" xorm:"pk 'id' autoincr"` ID int `json:"-" xorm:"pk '-' autoincr"`
Timestamp string `json:"timestamp" xorm:"timestamp"` Timestamp string `json:"timestamp" xorm:"timestamp"`
TimeZone string `json:"timeZone" xorm:"time_zone"` TimeZone string `json:"timeZone" xorm:"time_zone"`
VendorName string `json:"vendorName" xorm:"vendor_name"` VendorName string `json:"vendorName" xorm:"vendor_name"`
@@ -1637,7 +1637,7 @@ type NorthboundCm struct {
PvFlag string `json:"pvFlag" xorm:"pv_flag"` PvFlag string `json:"pvFlag" xorm:"pv_flag"`
VMID string `json:"vmID" xorm:"vm_id"` VMID string `json:"vmID" xorm:"vm_id"`
VnfInstanceID string `json:"vnf_instance_id"` VnfInstanceID string `json:"vnf_instance_id"`
ValueJSON interface{} `json:"valueJson" xorm:"value_json"` ValueJSON string `json:"valueJson" xorm:"value_json"`
Status string `json:"status" xorm:"status"` Status string `json:"status" xorm:"status"`
} }
@@ -1646,9 +1646,10 @@ func XormGetNorthboundCm(neType string, cmResults *[]NorthboundCm) error {
cmResult := new(NorthboundCm) cmResult := new(NorthboundCm)
rows, err := xEngine.Table("northbound_cm"). rows, err := xEngine.Table("northbound_cm").
Where("`ne_type` = ?", neType).
Distinct("object_type"). Distinct("object_type").
Where("`ne_type` = ?", neType).
Desc("timestamp"). Desc("timestamp").
Cols("*").
Rows(cmResult) Rows(cmResult)
if err != nil { if err != nil {
log.Error("Failed to get table northbound_cm:", err) log.Error("Failed to get table northbound_cm:", err)
@@ -1665,3 +1666,21 @@ func XormGetNorthboundCm(neType string, cmResults *[]NorthboundCm) error {
} }
return nil return nil
} }
func XormGetNorthboundCmLatestObject(neType, neID, objectType string) (*NorthboundCm, error) {
log.Info("XormGetNorthboundCmLatestObject processing... ")
cmResult := new(NorthboundCm)
_, err := xEngine.Table("northbound_cm").
Where("`ne_type`=? and `ne_id`=? and `object_type`=?", neType, neID, objectType).
Desc("timestamp").
Cols("*").
Limit(1).
Get(cmResult)
if err != nil {
log.Error("Failed to get table northbound_cm:", err)
return nil, err
}
return cmResult, nil
}

View File

@@ -313,7 +313,7 @@ func CreateDir(folderName string, path string) string {
folderPath := filepath.Join(path, folderName) folderPath := filepath.Join(path, folderName)
if _, err := os.Stat(folderPath); os.IsNotExist(err) { if _, err := os.Stat(folderPath); os.IsNotExist(err) {
// 必须分成两步:先创建文件夹、再修改权限 // 必须分成两步:先创建文件夹、再修改权限
os.Mkdir(folderPath, 0664) //0644也可以os.ModePerm os.MkdirAll(folderPath, 0664) //0644也可以os.ModePerm
os.Chmod(folderPath, 0664) os.Chmod(folderPath, 0664)
} }
return folderPath return folderPath