This commit is contained in:
2023-08-25 09:51:54 +08:00
parent 07804d627b
commit 4f48fc1211
5 changed files with 76 additions and 147 deletions

View File

@@ -8,9 +8,9 @@ logger:
count: 90 count: 90
omc: omc:
name: RJ_OMC_S001 name: BJ_OMC01
hosturi: http://127.0.0.1:3030 hosturi: http://127.0.0.1:3030
hostno: S001 hostno: R001
province: BJ province: BJ
netabbr: HX netabbr: HX
vendor: RJ vendor: RJ
@@ -30,15 +30,15 @@ database:
# northbound interface, cm/pm # northbound interface, cm/pm
# duration(day): saved days # duration(day): saved days
# zipPeriods(day): periods of zip pm data file # zipPeriods(day): periods of zip pm data file
northbound: nbi:
cm: cm:
cfgfiledir: /usr/local/omc/etc/cm cfgfiledir: /usr/local/omc/etc/cm
xmlfiledir: /opt/omc/ftp/cm xmlfiledir: /opt/omc/ftp
version: V1.0.1 version: V1.0.1
duration: 30 duration: 30
pm: pm:
cfgfiledir: /usr/local/omc/etc/pm cfgfiledir: /usr/local/omc/etc/pm
xmlfiledir: /opt/omc/ftp/pm xmlfiledir: /opt/omc/ftp
version: V1.0.1 version: V1.0.1
duration: 30 duration: 30
zipPeriods: 1 zipPeriods: 1

View File

@@ -10,13 +10,11 @@ logger:
omc: omc:
name: BJ_OMC01 name: BJ_OMC01
hosturi: http://127.0.0.1:3040 hosturi: http://127.0.0.1:3040
hostno: S001 hostno: R001
province: BJ province: BJ
netabbr: HX netabbr: HX
vendor: RJ vendor: RJ
process:
tasks: tasks:
file: ./etc/tasks.yaml file: ./etc/tasks.yaml

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,22:27 at: 00:00,06:00,12:00,18:00,23:19
do: GenCmXmlFile do: GenCmXmlFile
- name: Task of Generate measure threshold alarm - name: Task of Generate measure threshold alarm
status: Inactive status: Inactive
@@ -160,7 +160,7 @@ crontab:
# params: # params:
- name: Generate PM xml file - name: Generate PM xml file
status: Active status: Active
tab: 5,20,35,50 * * * * tab: 5,22,34,50 * * * *
do: GenPmXmlFile do: GenPmXmlFile
uri: this is uri uri: this is uri
params: Generating PM xml file params: Generating PM xml file

View File

@@ -3,7 +3,6 @@ package main
import ( import (
"encoding/xml" "encoding/xml"
"fmt" "fmt"
"io/ioutil"
"os" "os"
"regexp" "regexp"
"strconv" "strconv"
@@ -30,7 +29,7 @@ func (t *TaskFunc) GenPmXmlFile(uri, params, body string) {
func (t *TaskFunc) ReadPmYaml(cmfile string) (map[string]interface{}, error) { func (t *TaskFunc) ReadPmYaml(cmfile string) (map[string]interface{}, error) {
log.Debug("cmfile:", cmfile) log.Debug("cmfile:", cmfile)
file, err := ioutil.ReadFile(cmfile) file, err := os.ReadFile(cmfile)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return nil, err return nil, err
@@ -52,6 +51,8 @@ func (t *TaskFunc) IsPseudoSubPmName(pmName string) bool {
} }
func (t *TaskFunc) GenNFPMXmlFile(neType string) error { func (t *TaskFunc) GenNFPMXmlFile(neType string) error {
log.Info("GenNFPMXmlFile processing...")
var nes []NeInfo var nes []NeInfo
_, err := XormGetNeInfoByType(neType, &nes) _, err := XormGetNeInfoByType(neType, &nes)
if err != nil { if err != nil {
@@ -59,17 +60,14 @@ func (t *TaskFunc) GenNFPMXmlFile(neType string) error {
return err return err
} }
// cfile := fmt.Sprintf("%s/pm-%s.yaml", yamlConfig.NBI.PM.CfgFileDir, strings.ToLower(neType))
// resultMap, _ := t.ReadPmYaml(cfile)
ti := time.Now() ti := time.Now()
var startTime string var startTime string
timestamp := ti.Format("2006-01-02 15:04:05") timestamp := ti.Format("2006-01-02 15:04:05")
index := global.GetCurrentTimeSliceIndexByPeriod(ti, 15) index := global.GetCurrentTimeSliceIndexByPeriod(ti, 15)
date := time.Now().Format("2006-01-02") date := ti.Format("2006-01-02")
log.Debugf("date: %s index:%d", date, index) dateHour := ti.Format("2006010215")
log.Debugf("date: %s index:%d dateHour:%s", date, index, dateHour)
_, offset := ti.Zone() _, offset := ti.Zone()
var tzOffset string var tzOffset string
@@ -81,56 +79,45 @@ func (t *TaskFunc) GenNFPMXmlFile(neType string) error {
pmFile := new(pmschema.PmFile) pmFile := new(pmschema.PmFile)
var pms []NorthboundPm var pmResults []NorthboundPm
_, err = XormGetNorthboundPm(date, index, neType, &pms) _, err = XormGetNorthboundPm(date, index, neType, &pmResults)
if err != nil { if err != nil {
log.Error("Failed to get northbound_pm:", err) log.Error("Failed to get northbound_pm:", err)
return err return err
} }
if len(pms) == 0 { if len(pmResults) == 0 {
log.Errorf("%s:%v", neType, global.ErrPMNotFoundData) log.Errorf("%s:%v", neType, global.ErrPMNotFoundData)
return global.ErrPMNotFoundData return global.ErrPMNotFoundData
} }
pmFile.XsAttr = "http://www.w3.org/2001/XMLSchema" pmFile.XsAttr = "http://www.w3.org/2001/XMLSchema"
pmFile.XsiAttr = "http://www.w3.org/2001/XMLSchema-instance" pmFile.XsiAttr = "http://www.w3.org/2001/XMLSchema-instance"
/*
objectTypes := make([]string, 0) //创建目录
sortValues := make(map[string]interface{}) path := fmt.Sprintf("%s/HX/%s/%s/PM/%s", yamlConfig.OMC.Province, yamlConfig.OMC.Vendor, yamlConfig.OMC.Name, dateHour)
keys := make([]string, 0) folderPath := global.CreateDir(path, yamlConfig.NBI.PM.XmlFileDir)
if len(pms) > 0 {
for _, data := range pms[0].Datas { var objectType string
for _, pmData := range data.PmDatas {
sortValues[pmData.PmName] = pmData.SubDatas
keys = append(keys, pmData.PmName)
}
objectTypes = append(objectTypes, data.ObjectType)
}
sort.Strings(keys)
sort.Strings(objectTypes)
}
log.Debug("objectTypes:", objectTypes)
log.Debug("keys:", keys)
*/
var measurement pmschema.Measurements var measurement pmschema.Measurements
for _, pm := range pms { for _, pmResult := range pmResults {
for _, pdata := range pm.Datas { for _, pmData := range pmResult.Datas {
measurement = pmschema.Measurements{ObjectType: pdata.ObjectType} objectType = pmData.ObjectType
measurement.PmData.Object.RmUIDAttr = pm.RmUID measurement = pmschema.Measurements{ObjectType: objectType}
measurement.PmData.Object.DnAttr = pm.Dn measurement.PmData.Object.RmUIDAttr = pmResult.RmUID
measurement.PmData.Object.UserLabelAttr = pm.NeName measurement.PmData.Object.DnAttr = pmResult.Dn
startTime = pm.StartTime measurement.PmData.Object.UserLabelAttr = pmResult.NeName
startTime = pmResult.StartTime
i := 1 i := 1
for _, pmData := range pdata.KPIs { for _, pmKPI := range pmData.KPIs {
measurement.PmName.N = append(measurement.PmName.N, pmschema.N{IAttr: i, Value: pmData.KPIID}) measurement.PmName.N = append(measurement.PmName.N, pmschema.N{IAttr: i, Value: pmKPI.KPIID})
cv := pmschema.CV{IAttr: i} cv := pmschema.CV{IAttr: i}
isPseudo := true isPseudo := true
value := "0" value := "0"
reg := regexp.MustCompile(`_\w+`) reg := regexp.MustCompile(`_\w+`)
//sns := strings.Split(pmData.KPIID, "_") //sns := strings.Split(pmData.KPIID, "_")
for _, v := range pmData.KPIValues { for _, v := range pmKPI.KPIValues {
if fmt.Sprintf("%v", v.Name) == "Total" { if fmt.Sprintf("%v", v.Name) == "Total" {
isPseudo = false isPseudo = false
value = fmt.Sprintf("%v", v.Value) value = fmt.Sprintf("%v", v.Value)
@@ -140,7 +127,7 @@ func (t *TaskFunc) GenNFPMXmlFile(neType string) error {
//if len(sns) > 1 { //if len(sns) > 1 {
// sns := strings.Split(sns[1], ".") // sns := strings.Split(sns[1], ".")
//} //}
sn := reg.ReplaceAllString(pmData.KPIID, v.Name) sn := reg.ReplaceAllString(pmKPI.KPIID, v.Name)
//sn := sns[0] + v.Name //sn := sns[0] + v.Name
// cv.NV = append(cv.NV, pmschema.NV{SN: sn, SV: fmt.Sprintf("%v", v.Value)}) // cv.NV = append(cv.NV, pmschema.NV{SN: sn, SV: fmt.Sprintf("%v", v.Value)})
cv.SN = append(cv.SN, sn) cv.SN = append(cv.SN, sn)
@@ -159,109 +146,52 @@ func (t *TaskFunc) GenNFPMXmlFile(neType string) error {
} }
pmFile.Measurements = append(pmFile.Measurements, measurement) pmFile.Measurements = append(pmFile.Measurements, measurement)
} pmFile.FileHeader = pmschema.FileHeader{
} TimeStamp: timestamp,
TimeZone: tzOffset,
pmFile.FileHeader = pmschema.FileHeader{ Period: 15,
TimeStamp: timestamp, VendorName: yamlConfig.OMC.Vendor,
TimeZone: tzOffset, ElementType: neType,
Period: 15, PmVersion: yamlConfig.NBI.PM.Version,
VendorName: "Ruijie Network", StartTime: startTime,
ElementType: neType,
PmVersion: global.Version,
StartTime: startTime,
}
/*
for _, obj := range objectTypes {
measurement := pmschema.Measurements{ObjectType: obj}
for _, pm := range pms {
measurement.PmData.Object.RmUIDAttr = pm.RmUID
measurement.PmData.Object.DnAttr = pm.Dn
measurement.PmData.Object.UserLabelAttr = pm.NeName
for _, pdata := range pm.Datas {
measurement := pmschema.Measurements{ObjectType: pdata.ObjectType}
if pdata.ObjectType == obj {
i := 1
for _, pmName := range keys {
measurement.PmName.N = append(measurement.PmName.N, pmschema.N{IAttr: i, Value: pmName})
measurement.PmData.Object.V = append(measurement.PmData.Object.V, pmschema.V{IAttr: i, Value: "1"})
i++
//measurement.PmData.Object.V = append(measurement.PmData.Object.V, pmschema.V{IAttr: i, Value: sortValues[pmName].Value})
//measurement.PmData.Object.CV = sortValues[pmName].Value
}
}
}
} }
pmFile.Measurements = append(pmFile.Measurements, measurement)
}
*/
/* x, _ := xml.MarshalIndent(pmFile, "", " ")
for k, pm := range pms { x = append([]byte(xml.Header), x...)
measurement := pmschema.Measurements{ObjectType: "gold_kpi"}
for s, ne := range nes { //folderName := global.GetFmtTimeString(global.DateTime, startTime, global.DateHour)
rmUID := fmt.Sprintf("01000HX%sBJ0D0%d", neType, s+1) //folderPath := global.CreateDir(folderName, yamlConfig.NBI.PM.XmlFileDir)
vmId := fmt.Sprintf("kylin10.0-00%d-%s", s+1, neType)
measurement.PmName.
vnfInstanceID := fmt.Sprintf("2%xd55b4-%d018-41f4-af%d5-28b%d828788", s+10, s+6, s+4, s+3)
object := pmschema.Object{RmUIDAttr: rmUID,
DnAttr: "DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325",
UserLabelAttr: ne.NeName, PVFlagAttr: ne.PvFlag, VMIDAttr: vmId, VNFInstanceIDAttr: vnfInstanceID}
i := 1 startTime = startTime[:len("2006-01-02 15:04:05")]
for _, p := range keys { log.Debug("startTime:", startTime)
if s == 0 { timefile := global.GetFmtTimeString(time.DateTime, startTime, global.DateData)
objects.FieldName.N = append(objects.FieldName.N, pmschema.N{IAttr: i, Value: p})
} xmlfile := fmt.Sprintf("%s/%s-PM-%s-%s-%s-%s-%s-15-001.xml",
var v string folderPath, yamlConfig.OMC.Province, neType, objectType, yamlConfig.OMC.HostNo, yamlConfig.NBI.PM.Version, timefile)
switch p { tmpXmlfile := xmlfile + ".tmp"
case "Id": err = os.WriteFile(tmpXmlfile, x, 0664)
v = ne.NeId if err != nil {
case "UserLabel": log.Error("Failed to WriteFile xml file:", err)
v = ne.NeName continue
case "VendorName": }
v = "Ruijie Network" err = os.Rename(tmpXmlfile, xmlfile)
case "SwVersion": if err != nil {
v = global.Version log.Error("Failed to Rename xml file:", err)
case "PatchInfo": continue
v = "-" }
case "AdministrativeState": zipFile := xmlfile + ".zip"
v = AdminStateUnlocked err = global.ZipOneFile(xmlfile, zipFile, false)
case "OperationalState": if err != nil {
v = OperationStateEnabled log.Error("Failed to ZipOneFile:", err)
case "VnfInstanceId": continue
v = vnfInstanceID }
default: err = os.Remove(xmlfile)
if sortResult[p] == "" { if err != nil {
v = "-" log.Error("Failed to delete file:", err)
} else { continue
v = fmt.Sprintf("%s", sortResult[p])
}
}
object.V = append(object.V, cmschema.V{IAttr: i, Value: v})
i++
}
objects.FieldValue.Object = append(objects.FieldValue.Object, object)
} }
pmFile.Measurements = append(pmFile.Measurements, measurement)
} }
*/
x, _ := xml.MarshalIndent(pmFile, "", " ")
x = append([]byte(xml.Header), x...)
folderName := global.GetFmtTimeString(global.DateTime, startTime, global.DateHour)
folderPath := global.CreateDir(folderName, yamlConfig.NBI.PM.XmlFileDir)
timefile := global.GetFmtTimeString(global.DateTime, startTime, global.DateData)
xmlfile := fmt.Sprintf("%s/PM-%s-%s-%s-15-001.xml", folderPath, neType, global.Version, timefile)
log.Debugf("folderPath:%s, xmlfile:%s", folderPath, xmlfile)
err = os.WriteFile(xmlfile, x, 0664)
if err != nil {
log.Error("Failed to write xml file:", err)
return err
} }
return nil return nil
} }

View File

@@ -14,6 +14,7 @@ const (
DateTime = "2006-01-02 15:04:05" DateTime = "2006-01-02 15:04:05"
DateData = "20060102150405" DateData = "20060102150405"
DateHour = "2006010215" DateHour = "2006010215"
DateZone = "2006-01-02 15:04:05 +0000 UTC"
) )
const ( const (