pm
This commit is contained in:
1 parent
07804d627b
commit
4f48fc1211
5 files changed
+76
-147
No files matched your search
@@ -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
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
+67
-137
@@ -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
|
||||||
}
|
}
|
||||||
@@ -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 (
|
||||||
|
|||||||
Reference in new issue
Block a user