add: 提交
This commit is contained in:
3
.vscode/extensions.json
vendored
Normal file
3
.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"recommendations": []
|
||||
}
|
||||
16
.vscode/launch.json
vendored
Normal file
16
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
// 使用 IntelliSense 了解相关属性。
|
||||
// 悬停以查看现有属性的描述。
|
||||
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "调试模式",
|
||||
"type": "go",
|
||||
"request": "launch",
|
||||
"mode": "debug",
|
||||
"program": "./restagent/restagent.go",
|
||||
"console": "integratedTerminal"
|
||||
}
|
||||
]
|
||||
}
|
||||
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"commentTranslate.hover.enabled": true
|
||||
}
|
||||
BIN
4a_agent/bin/4a_agent
Normal file
BIN
4a_agent/bin/4a_agent
Normal file
Binary file not shown.
14
4a_agent/etc/4a_agent.yaml
Normal file
14
4a_agent/etc/4a_agent.yaml
Normal file
@@ -0,0 +1,14 @@
|
||||
http:
|
||||
ipv4: 0.0.0.0
|
||||
ipv6: ::0
|
||||
port: 4040
|
||||
db:
|
||||
dbuser: "root"
|
||||
dbpwd: "1000omc@kp!"
|
||||
dbip: "127.0.0.1"
|
||||
dbport: "33066"
|
||||
dbname: "omc_db"
|
||||
logger:
|
||||
file: /usr/local/omc/log/4a/4a_agent.log
|
||||
level: debug
|
||||
duration: 30
|
||||
64
crontask/cm/schema/cm-schema.go
Normal file
64
crontask/cm/schema/cm-schema.go
Normal file
@@ -0,0 +1,64 @@
|
||||
package cmschema
|
||||
|
||||
// FileHeader ...
|
||||
type FileHeader struct {
|
||||
TimeStamp string `xml:"TimeStamp"`
|
||||
TimeZone string `xml:"TimeZone"`
|
||||
VendorName string `xml:"VendorName"`
|
||||
ElementType string `xml:"ElementType"`
|
||||
CmVersion string `xml:"CmVersion"`
|
||||
}
|
||||
|
||||
// N ...
|
||||
type N struct {
|
||||
IAttr int `xml:"i,attr"`
|
||||
Value string `xml:",chardata"`
|
||||
}
|
||||
|
||||
// FieldName ...
|
||||
type FieldName struct {
|
||||
N []N `xml:"N"`
|
||||
}
|
||||
|
||||
// V ...
|
||||
type V struct {
|
||||
IAttr int `xml:"i,attr"`
|
||||
Value string `xml:",chardata"`
|
||||
}
|
||||
|
||||
// Object ...
|
||||
type Object struct {
|
||||
RmUIDAttr string `xml:"rmUID,attr"`
|
||||
DnAttr string `xml:"Dn,attr,omitempty"`
|
||||
UserLabelAttr string `xml:"UserLabel,attr,omitempty"`
|
||||
PVFlagAttr string `xml:"PVFlag,attr"`
|
||||
VMIDAttr string `xml:"VMID,attr,omitempty"`
|
||||
VNFInstanceIDAttr string `xml:"VNFInstanceID,attr,omitempty"`
|
||||
V []V `xml:"V"`
|
||||
}
|
||||
|
||||
// FieldValue ...
|
||||
type FieldValue struct {
|
||||
Object []Object `xml:"Object"`
|
||||
}
|
||||
|
||||
// Objects ...
|
||||
type Objects struct {
|
||||
ObjectType string `xml:"ObjectType"`
|
||||
FieldName FieldName `xml:"FieldName"`
|
||||
FieldValue FieldValue `xml:"FieldValue"`
|
||||
}
|
||||
|
||||
// DataFile ...
|
||||
type DataFile struct {
|
||||
FileHeader FileHeader `xml:"FileHeader"`
|
||||
Objects []Objects `xml:"Objects"`
|
||||
XsiAttr string `xml:"xmlns:xsi,attr"`
|
||||
XsiLoc string `xml:"xsi:noNamespaceSchemaLocation,attr"`
|
||||
}
|
||||
|
||||
// NRM xml file
|
||||
type NRMXmlFile struct {
|
||||
Header string `xml:"Header"`
|
||||
DataFile DataFile `xml:"xmlns:xsi"`
|
||||
}
|
||||
296
crontask/cm/yaml/cm-yaml.go
Normal file
296
crontask/cm/yaml/cm-yaml.go
Normal file
@@ -0,0 +1,296 @@
|
||||
package cmyaml
|
||||
|
||||
type UdmCm struct {
|
||||
ManagedElement ManagedElement `yaml:"ManagedElement"`
|
||||
UdmFunction UdmFunction `yaml:"UdmFunction"`
|
||||
UdrFunction UdrFunction `yaml:"UdrFunction"`
|
||||
AusfFunction AusfFunction `yaml:"AusfFunction"`
|
||||
IPResource IPResource `yaml:"IPResource"`
|
||||
}
|
||||
|
||||
type UdmFunction struct {
|
||||
Id string `yaml:"Id"`
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
AdministrativeState string `yaml:"AdministrativeState"`
|
||||
OperationalState string `yaml:"OperationalState"`
|
||||
VnfInstanceId string `yaml:"VnfInstanceId"`
|
||||
Fqdn string `yaml:"Fqdn"`
|
||||
SbiServiceList string `yaml:"SbiServiceList"`
|
||||
}
|
||||
|
||||
type UdrFunction struct {
|
||||
Id string `yaml:"Id"`
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
AddrType string `yaml:"AddrType"`
|
||||
IpVersion string `yaml:"IpVersion"`
|
||||
AddrSegList string `yaml:"AddrSegList"`
|
||||
}
|
||||
|
||||
type AusfFunction struct {
|
||||
Id string `yaml:"Id"`
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
LocIpAddrList string `yaml:"LocIpAddrList"`
|
||||
FarIpSubnetworkList string `yaml:"FarIpSubnetworkList"`
|
||||
}
|
||||
|
||||
type IPResource struct {
|
||||
Id string `yaml:"Id"`
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
InterfaceType string `yaml:"InterfaceType"`
|
||||
LocIpV4AddrList string `yaml:"LocIpV4AddrList"`
|
||||
LocIpV6AddrList string `yaml:"LocIpV6AddrList"`
|
||||
}
|
||||
|
||||
type ManagedElement struct {
|
||||
Id string `yaml:"Id"`
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
VendorName string `yaml:"VendorName"`
|
||||
ManagedBy string `yaml:"ManagedBy"`
|
||||
ManagementIpAddress string `yaml:"ManagementIpAddress"`
|
||||
SwVersion string `yaml:"SwVersion"`
|
||||
PatchInfo string `yaml:"PatchInfo"`
|
||||
AdministrativeState string `yaml:"AdministrativeState"`
|
||||
OperationalState string `yaml:"OperationalState"`
|
||||
}
|
||||
|
||||
type AmfCm struct {
|
||||
ManagedElement ManagedElement `yaml:"ManagedElement"`
|
||||
AmfFunction AmfFunction `yaml:"AmfFunction"`
|
||||
EpRpDynN8Amf EpRpDynN8Amf `yaml:"EpRpDynN8Amf"`
|
||||
EpRpDynN11Amf EpRpDynN11Amf `yaml:"EpRpDynN11Amf"`
|
||||
EpRpDynN12Amf EpRpDynN12Amf `yaml:"EpRpDynN12Amf"`
|
||||
IPResource IPResource `yaml:"IPResource"`
|
||||
}
|
||||
|
||||
type EpRpDynN11Amf struct {
|
||||
Id string `yaml:"Id"`
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
LocIpAddrList string `yaml:"LocIpAddrList"`
|
||||
FarIpSubnetworkList string `yaml:"FarIpSubnetworkList"`
|
||||
}
|
||||
|
||||
type EpRpDynN12Amf struct {
|
||||
Id string `yaml:"Id"`
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
LocIpAddrList string `yaml:"LocIpAddrList"`
|
||||
FarIpSubnetworkList string `yaml:"FarIpSubnetworkList"`
|
||||
}
|
||||
|
||||
type AmfFunction struct {
|
||||
Id string `yaml:"Id"`
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
AdministrativeState string `yaml:"AdministrativeState"`
|
||||
Fqdn string `yaml:"Fqdn"`
|
||||
SbiServiceList string `yaml:"SbiServiceList"`
|
||||
AmfGuamiList string `yaml:"AmfGuamiList"`
|
||||
OperationalState string `yaml:"OperationalState"`
|
||||
VnfInstanceId string `yaml:"VnfInstanceId"`
|
||||
SnssaiList string `yaml:"SnssaiList"`
|
||||
MaxUser string `yaml:"MaxUser"`
|
||||
RelativeCapacity string `yaml:"RelativeCapacity"`
|
||||
MaxGnbNum string `yaml:"MaxGnbNum"`
|
||||
}
|
||||
|
||||
type EpRpDynN8Amf struct {
|
||||
Id string `yaml:"Id"`
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
LocIpAddrList string `yaml:"LocIpAddrList"`
|
||||
FarIpSubnetworkList string `yaml:"FarIpSubnetworkList"`
|
||||
}
|
||||
|
||||
type SmfCm struct {
|
||||
ManagedElement ManagedElement `yaml:"ManagedElement"`
|
||||
SmfFunction SmfFunction `yaml:"SmfFunction"`
|
||||
AddrPool AddrPool `yaml:"AddrPool"`
|
||||
EpRpDynN7Smf EpRpDynN7Smf `yaml:"EpRpDynN7Smf"`
|
||||
EpRpDynN10Smf EpRpDynN10Smf `yaml:"EpRpDynN10Smf"`
|
||||
IPResource IPResource `yaml:"IPResource"`
|
||||
}
|
||||
|
||||
type SmfFunction struct {
|
||||
Id string `yaml:"Id"`
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
VnfInstanceId string `yaml:"VnfInstanceId"`
|
||||
MaxQfi string `yaml:"MaxQfi"`
|
||||
MaxPduSessions string `yaml:"MaxPduSessions"`
|
||||
UpfList string `yaml:"UpfList"`
|
||||
AdministrativeState string `yaml:"AdministrativeState"`
|
||||
OperationalState string `yaml:"OperationalState"`
|
||||
Fqdn string `yaml:"Fqdn"`
|
||||
SbiServiceList string `yaml:"SbiServiceList"`
|
||||
}
|
||||
|
||||
type AddrPool struct {
|
||||
Id string `yaml:"Id"`
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
AddrType string `yaml:"AddrType"`
|
||||
IpVersion string `yaml:"IpVersion"`
|
||||
AddrSegList string `yaml:"AddrSegList"`
|
||||
}
|
||||
|
||||
type EpRpDynN7Smf struct {
|
||||
Id string `yaml:"Id"`
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
LocIpAddrList string `yaml:"LocIpAddrList"`
|
||||
FarIpSubnetworkList string `yaml:"FarIpSubnetworkList"`
|
||||
}
|
||||
|
||||
type EpRpDynN10Smf struct {
|
||||
Id string `yaml:"Id"`
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
LocIpAddrList string `yaml:"LocIpAddrList"`
|
||||
FarIpSubnetworkList string `yaml:"FarIpSubnetworkList"`
|
||||
}
|
||||
|
||||
type UpfCm struct {
|
||||
IPResource IPResource `yaml:"IPResource"`
|
||||
InventoryUnitHost InventoryUnitHost `yaml:"InventoryUnitHost"`
|
||||
InventoryUnitAccessory InventoryUnitAccessory `yaml:"InventoryUnitAccessory"`
|
||||
UdrFunction UpfUdrFunction `yaml:"UdrFunction"`
|
||||
InventoryUnitRack InventoryUnitRack `yaml:"InventoryUnitRack"`
|
||||
EpRpDynN9Upf EpRpDynN9Upf `yaml:"EpRpDynN9Upf"`
|
||||
AusfFunction UpfAusfFunction `yaml:"AusfFunction"`
|
||||
SmfFunction UpfSmfFunction `yaml:"SmfFunction"`
|
||||
InventoryUnitPack InventoryUnitPack `yaml:"InventoryUnitPack"`
|
||||
UpfFunction UpfFunction `yaml:"UpfFunction"`
|
||||
AmfFunction UpfAmfFunction `yaml:"AmfFunction"`
|
||||
ManagedElement ManagedElement `yaml:"ManagedElement"`
|
||||
InventoryUnitShelf InventoryUnitShelf `yaml:"InventoryUnitShelf"`
|
||||
EpRpDynN3Upf EpRpDynN3Upf `yaml:"EpRpDynN3Upf"`
|
||||
}
|
||||
|
||||
type InventoryUnitRack struct {
|
||||
SbiServiceList string `yaml:"SbiServiceList"`
|
||||
Fqdn string `yaml:"Fqdn"`
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
AdministrativeState string `yaml:"AdministrativeState"`
|
||||
OperationalState string `yaml:"OperationalState"`
|
||||
VnfInstanceId string `yaml:"VnfInstanceId"`
|
||||
MaxPduSessions string `yaml:"MaxPduSessions"`
|
||||
MaxQfi string `yaml:"MaxQfi"`
|
||||
UpfList string `yaml:"UpfList"`
|
||||
Id string `yaml:"Id"`
|
||||
}
|
||||
|
||||
type UpfAusfFunction struct {
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
AdministrativeState string `yaml:"AdministrativeState"`
|
||||
OperationalState string `yaml:"OperationalState"`
|
||||
VnfInstanceId string `yaml:"VnfInstanceId"`
|
||||
Fqdn string `yaml:"Fqdn"`
|
||||
Id string `yaml:"Id"`
|
||||
}
|
||||
|
||||
type EpRpDynN3Upf struct {
|
||||
LocIpAddrList string `yaml:"LocIpAddrList"`
|
||||
FarIpSubnetworkList string `yaml:"FarIpSubnetworkList"`
|
||||
Id string `yaml:"Id"`
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
}
|
||||
|
||||
type InventoryUnitHost struct {
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
VendorName string `yaml:"VendorName"`
|
||||
DateOfLastService string `yaml:"DateOfLastService"`
|
||||
ManufacturerData string `yaml:"ManufacturerData"`
|
||||
VendorUnitTypeNumber string `yaml:"VendorUnitTypeNumber"`
|
||||
HostPosition string `yaml:"HostPosition"`
|
||||
MemSize string `yaml:"MemSize"`
|
||||
HardDiskSize string `yaml:"HardDiskSize"`
|
||||
NumberOfCpu string `yaml:"NumberOfCpu"`
|
||||
Id string `yaml:"Id"`
|
||||
VendorUnitFamilyType string `yaml:"VendorUnitFamilyType"`
|
||||
SerialNumber string `yaml:"SerialNumber"`
|
||||
VersionNumber string `yaml:"VersionNumber"`
|
||||
DateOfManufacture string `yaml:"DateOfManufacture"`
|
||||
}
|
||||
|
||||
type InventoryUnitAccessory struct {
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
VendorName string `yaml:"VendorName"`
|
||||
SerialNumber string `yaml:"SerialNumber"`
|
||||
ManufacturerData string `yaml:"ManufacturerData"`
|
||||
DateOfLastService string `yaml:"DateOfLastService"`
|
||||
AccessoryPosition string `yaml:"AccessoryPosition"`
|
||||
AccessoryType string `yaml:"AccessoryType"`
|
||||
Id string `yaml:"Id"`
|
||||
VendorUnitFamilyType string `yaml:"VendorUnitFamilyType"`
|
||||
VendorUnitTypeNumber string `yaml:"VendorUnitTypeNumber"`
|
||||
VersionNumber string `yaml:"VersionNumber"`
|
||||
DateOfManufacture string `yaml:"DateOfManufacture"`
|
||||
AddtionalInformation string `yaml:"AddtionalInformation"`
|
||||
}
|
||||
|
||||
type EpRpDynN9Upf struct {
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
LocIpAddrList string `yaml:"LocIpAddrList"`
|
||||
FarIpSubnetworkList string `yaml:"FarIpSubnetworkList"`
|
||||
Id string `yaml:"Id"`
|
||||
}
|
||||
|
||||
type UpfSmfFunction struct {
|
||||
Id string `yaml:"Id"`
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
AdministrativeState string `yaml:"AdministrativeState"`
|
||||
OperationalState string `yaml:"OperationalState"`
|
||||
VnfInstanceId string `yaml:"VnfInstanceId"`
|
||||
Fqdn string `yaml:"Fqdn"`
|
||||
}
|
||||
|
||||
type InventoryUnitPack struct {
|
||||
VendorUnitFamilyType string `yaml:"VendorUnitFamilyType"`
|
||||
VendorName string `yaml:"VendorName"`
|
||||
VersionNumber string `yaml:"VersionNumber"`
|
||||
DateOfManufacture string `yaml:"DateOfManufacture"`
|
||||
DateOfLastService string `yaml:"DateOfLastService"`
|
||||
ManufacturerData string `yaml:"ManufacturerData"`
|
||||
Id string `yaml:"Id"`
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
PortsInformation string `yaml:"PortsInformation"`
|
||||
PackPosition string `yaml:"PackPosition"`
|
||||
SlotsOccupied string `yaml:"SlotsOccupied"`
|
||||
VendorUnitTypeNumber string `yaml:"VendorUnitTypeNumber"`
|
||||
SerialNumber string `yaml:"SerialNumber"`
|
||||
}
|
||||
|
||||
type UpfAmfFunction struct {
|
||||
VnfInstanceId string `yaml:"VnfInstanceId"`
|
||||
Fqdn string `yaml:"Fqdn"`
|
||||
Id string `yaml:"Id"`
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
AdministrativeState string `yaml:"AdministrativeState"`
|
||||
OperationalState string `yaml:"OperationalState"`
|
||||
}
|
||||
|
||||
type InventoryUnitShelf struct {
|
||||
ManufacturerData string `yaml:"ManufacturerData"`
|
||||
RackPosition string `yaml:"RackPosition"`
|
||||
SerialNumber string `yaml:"SerialNumber"`
|
||||
VersionNumber string `yaml:"VersionNumber"`
|
||||
VendorUnitFamilyType string `yaml:"VendorUnitFamilyType"`
|
||||
VendorUnitTypeNumber string `yaml:"VendorUnitTypeNumber"`
|
||||
VendorName string `yaml:"VendorName"`
|
||||
DateOfManufacture string `yaml:"DateOfManufacture"`
|
||||
DateOfLastService string `yaml:"DateOfLastService"`
|
||||
Id string `yaml:"Id"`
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
}
|
||||
|
||||
type UpfUdrFunction struct {
|
||||
OperationalState string `yaml:"OperationalState"`
|
||||
VnfInstanceId string `yaml:"VnfInstanceId"`
|
||||
Fqdn string `yaml:"Fqdn"`
|
||||
Id string `yaml:"Id"`
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
AdministrativeState string `yaml:"AdministrativeState"`
|
||||
}
|
||||
|
||||
type UpfFunction struct {
|
||||
MaxThroughput string `yaml:"MaxThroughput"`
|
||||
Id string `yaml:"Id"`
|
||||
UserLabel string `yaml:"UserLabel"`
|
||||
AdministrativeState string `yaml:"AdministrativeState"`
|
||||
OperationalState string `yaml:"OperationalState"`
|
||||
VnfInstanceId string `yaml:"VnfInstanceId"`
|
||||
MaxQosFlows string `yaml:"MaxQosFlows"`
|
||||
}
|
||||
186
crontask/config.go
Normal file
186
crontask/config.go
Normal file
@@ -0,0 +1,186 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
// Yaml struct of config
|
||||
type YamlConfig struct {
|
||||
Logger struct {
|
||||
File string `yaml:"file"`
|
||||
Level string `yaml:"level"`
|
||||
Duration int `yaml:"duration"`
|
||||
Count int `yaml:"count"`
|
||||
} `yaml:"logger"`
|
||||
|
||||
OMC struct {
|
||||
Name string `yaml:"name"`
|
||||
HostUri string `yaml:"hosturi"`
|
||||
HostNo string `yaml:"hostno"`
|
||||
Province string `yaml:"province"`
|
||||
NetAbbr string `yaml:"netabbr"`
|
||||
Vendor string `yaml:"vendor"`
|
||||
} `yaml:"omc"`
|
||||
|
||||
Database struct {
|
||||
Type string `yaml:"type"`
|
||||
User string `yaml:"user"`
|
||||
Password string `yaml:"password"`
|
||||
Host string `yaml:"host"`
|
||||
Port string `yaml:"port"`
|
||||
Name string `yaml:"name"`
|
||||
Backup string `yaml:"backup"`
|
||||
} `yaml:"database"`
|
||||
|
||||
Tasks struct {
|
||||
File string `yaml:"file"`
|
||||
} `yaml:"tasks"`
|
||||
|
||||
NBI struct {
|
||||
CM struct {
|
||||
CfgFileDir string `yaml:"cfgfiledir"`
|
||||
XmlFileDir string `yaml:"xmlfiledir"`
|
||||
Version string `yaml:"version"`
|
||||
} `yaml:"cm"`
|
||||
PM struct {
|
||||
CfgFileDir string `yaml:"cfgfiledir"`
|
||||
XmlFileDir string `yaml:"xmlfiledir"`
|
||||
Version string `yaml:"version"`
|
||||
} `yaml:"pm"`
|
||||
} `yaml:"nbi"`
|
||||
}
|
||||
|
||||
var yamlConfig YamlConfig
|
||||
|
||||
func ReadConfig(configFile string) error {
|
||||
yamlFile, err := os.ReadFile(configFile)
|
||||
if err != nil {
|
||||
fmt.Println("Read yaml config file error:", err)
|
||||
return err
|
||||
}
|
||||
|
||||
err = yaml.Unmarshal(yamlFile, &yamlConfig)
|
||||
if err != nil {
|
||||
fmt.Println("Unmarshal error:", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetYamlConfig() *YamlConfig {
|
||||
return &yamlConfig
|
||||
}
|
||||
|
||||
func GetLogLevel() log.LogLevel {
|
||||
var logLevel log.LogLevel
|
||||
switch strings.ToLower(yamlConfig.Logger.Level) {
|
||||
case "trace":
|
||||
logLevel = log.LOG_TRACE
|
||||
case "info":
|
||||
logLevel = log.LOG_INFO
|
||||
case "debug":
|
||||
logLevel = log.LOG_DEBUG
|
||||
case "warn":
|
||||
logLevel = log.LOG_WARN
|
||||
case "error":
|
||||
logLevel = log.LOG_ERROR
|
||||
case "fatal":
|
||||
logLevel = log.LOG_FATAL
|
||||
case "off":
|
||||
logLevel = log.LOG_OFF
|
||||
default:
|
||||
logLevel = log.LOG_DEBUG
|
||||
}
|
||||
return logLevel
|
||||
}
|
||||
|
||||
type Task struct {
|
||||
Name string `yaml:"name"`
|
||||
Status string `yaml:"status" default:"Active"`
|
||||
Uri string `yaml:"uri"`
|
||||
Params string `yaml:"params"`
|
||||
Body string `yaml:"body"`
|
||||
Interval uint64 `yaml:"interval"`
|
||||
Unit string `yaml:"unit"`
|
||||
At string `yaml:"at"`
|
||||
From int `yaml:"from"`
|
||||
Do string `yaml:"do"`
|
||||
}
|
||||
|
||||
type Crontab struct {
|
||||
Name string `yaml:"name"`
|
||||
Status string `yaml:"status" default:"Active"`
|
||||
Tab string `yaml:"tab"`
|
||||
Do string `yaml:"do"`
|
||||
Uri string `yaml:"uri"`
|
||||
Params string `yaml:"params"`
|
||||
Body string `yaml:"body"`
|
||||
}
|
||||
|
||||
type Tasks struct {
|
||||
Tasks []Task `yaml:"tasks"`
|
||||
Crontabs []Crontab `yaml:"crontab"`
|
||||
}
|
||||
|
||||
const (
|
||||
TaskStatusActive = "active"
|
||||
TaskStatusInactive = "inactive"
|
||||
)
|
||||
|
||||
var taskSet Tasks
|
||||
|
||||
func ReadTasksYaml(pfile string) (ret error) {
|
||||
log.Debug("pfile:", pfile)
|
||||
file, err := os.ReadFile(pfile)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
|
||||
err = yaml.Unmarshal(file, &taskSet)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
|
||||
log.Trace("tasks:", taskSet)
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetDefaultUserAgent() string {
|
||||
return "OMC-crontask/" + global.Version
|
||||
}
|
||||
|
||||
const defaultConfigFile = "./etc/crontask.yaml"
|
||||
|
||||
var ConfigFile *string
|
||||
|
||||
func init() {
|
||||
ConfigFile = flag.String("c", defaultConfigFile, "config file")
|
||||
pv := flag.Bool("v", false, "print version")
|
||||
ph := flag.Bool("h", false, "print help")
|
||||
|
||||
flag.Parse()
|
||||
if *pv {
|
||||
fmt.Printf("OMC crontask version: %s\n%s\n%s\n\n", global.Version, global.BuildTime, global.GoVer)
|
||||
os.Exit(0)
|
||||
}
|
||||
if *ph {
|
||||
flag.Usage()
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
err := ReadConfig(*ConfigFile)
|
||||
if err != nil {
|
||||
fmt.Println("Failed to ReadConfig:", err)
|
||||
os.Exit(3)
|
||||
}
|
||||
}
|
||||
32
crontask/config_linux.go
Normal file
32
crontask/config_linux.go
Normal file
@@ -0,0 +1,32 @@
|
||||
//go:build linux
|
||||
// +build linux
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"ems.agt/lib/log"
|
||||
)
|
||||
|
||||
// 启动一个 goroutine 监听信号量
|
||||
func ReloadRoutine() {
|
||||
sigCh := make(chan os.Signal, 1)
|
||||
|
||||
signal.Notify(sigCh, syscall.SIGUSR1)
|
||||
|
||||
for {
|
||||
<-sigCh
|
||||
log.Info("Received reload signal, reloading config...")
|
||||
|
||||
err := ReadConfig(*ConfigFile)
|
||||
if err != nil {
|
||||
log.Error("Failed to ReadConfig:", err)
|
||||
continue
|
||||
}
|
||||
|
||||
log.Info("Config reloaded successfully.")
|
||||
}
|
||||
}
|
||||
34
crontask/config_windows.go
Normal file
34
crontask/config_windows.go
Normal file
@@ -0,0 +1,34 @@
|
||||
//go:build windows
|
||||
// +build windows
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"ems.agt/lib/log"
|
||||
)
|
||||
|
||||
// 启动一个 goroutine 监听信号量
|
||||
func ReloadRoutine() {
|
||||
sigCh := make(chan os.Signal, 1)
|
||||
|
||||
//signal.Notify(sigCh, syscall.SIGUSR1)
|
||||
|
||||
signal.Notify(sigCh, syscall.SIGTRAP)
|
||||
|
||||
for {
|
||||
<-sigCh
|
||||
log.Info("Received reload signal, reloading config...")
|
||||
|
||||
err := ReadConfig(*ConfigFile)
|
||||
if err != nil {
|
||||
log.Error("Failed to ReadConfig:", err)
|
||||
continue
|
||||
}
|
||||
|
||||
log.Info("Config reloaded successfully.")
|
||||
}
|
||||
}
|
||||
BIN
crontask/crontask
Normal file
BIN
crontask/crontask
Normal file
Binary file not shown.
41
crontask/crontask.go
Normal file
41
crontask/crontask.go
Normal file
@@ -0,0 +1,41 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
log.InitLogger(yamlConfig.Logger.File, yamlConfig.Logger.Duration, yamlConfig.Logger.Count, "omc:crontask", GetLogLevel())
|
||||
fmt.Printf("OMC crontask version: %s\n", global.Version)
|
||||
log.Infof("========================= OMC crontask startup =========================")
|
||||
log.Infof("OMC crontask version: %s %s %s", global.Version, global.BuildTime, global.GoVer)
|
||||
|
||||
err := dborm.InitDbClient(yamlConfig.Database.Type, yamlConfig.Database.User, yamlConfig.Database.Password,
|
||||
yamlConfig.Database.Host, yamlConfig.Database.Port, yamlConfig.Database.Name)
|
||||
if err != nil {
|
||||
fmt.Println("dborm.initDbClient err:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
err = initDbClient()
|
||||
if err != nil {
|
||||
fmt.Println("initDBClient error:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
ReadTasksYaml(yamlConfig.Tasks.File)
|
||||
|
||||
//go ReloadRoutine()
|
||||
|
||||
go initCronTasks()
|
||||
|
||||
go initCronTabs()
|
||||
|
||||
select {}
|
||||
}
|
||||
526
crontask/db.go
Normal file
526
crontask/db.go
Normal file
@@ -0,0 +1,526 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/log"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"xorm.io/xorm"
|
||||
)
|
||||
|
||||
type NullTime sql.NullTime
|
||||
|
||||
type DBClient struct {
|
||||
dbType string
|
||||
dbUrl string
|
||||
dbConnMaxLifetime time.Duration
|
||||
dbMaxIdleConns int
|
||||
dbMaxOpenConns int
|
||||
IsShowSQL bool
|
||||
|
||||
xEngine *xorm.Engine
|
||||
}
|
||||
|
||||
var dbClient DBClient
|
||||
|
||||
func initDbClient() error {
|
||||
db := yamlConfig.Database
|
||||
dbClient.dbUrl = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=true&loc=Local",
|
||||
db.User, db.Password, db.Host, db.Port, db.Name)
|
||||
dbClient.dbType = db.Type
|
||||
dbClient.dbConnMaxLifetime = 0
|
||||
dbClient.dbMaxIdleConns = 0
|
||||
dbClient.dbMaxOpenConns = 0
|
||||
if log.GetLevel() == log.LOG_TRACE {
|
||||
dbClient.IsShowSQL = true
|
||||
}
|
||||
|
||||
var err error
|
||||
dbClient.xEngine, err = xorm.NewEngine(dbClient.dbType, dbClient.dbUrl)
|
||||
if err != nil {
|
||||
log.Error("Failed to connect database:", err)
|
||||
return err
|
||||
}
|
||||
//dbClient.xEngine.Ping() // 可以判断是否能连接
|
||||
//if err != nil {
|
||||
// log.Error("Failed to ping database:", err)
|
||||
// return err
|
||||
//}
|
||||
// defer dbClient.xEngine.Close() // 退出后关闭
|
||||
|
||||
if dbClient.IsShowSQL == true {
|
||||
dbClient.xEngine.ShowSQL(true)
|
||||
}
|
||||
dbClient.xEngine.SetConnMaxLifetime(dbClient.dbConnMaxLifetime)
|
||||
dbClient.xEngine.SetMaxIdleConns(dbClient.dbMaxIdleConns)
|
||||
dbClient.xEngine.SetMaxOpenConns(dbClient.dbMaxOpenConns)
|
||||
return nil
|
||||
}
|
||||
|
||||
var xEngine *xorm.Engine
|
||||
|
||||
func XormConnectDatabaseWithUri(sql string) (*xorm.Engine, error) {
|
||||
sqlStr := fmt.Sprintf("%s?charset=utf8&parseTime=true&loc=Local", sql)
|
||||
var err error
|
||||
xEngine, err = xorm.NewEngine("mysql", sqlStr) //1、Create xorm engine
|
||||
if err != nil {
|
||||
fmt.Println("Failed to connect database:", err)
|
||||
return nil, err
|
||||
}
|
||||
xEngine.ShowSQL(true)
|
||||
return xEngine, nil
|
||||
}
|
||||
|
||||
type NeInfo struct {
|
||||
Id int `json:"-" xorm:"pk 'id' autoincr"`
|
||||
NeType string `json:"neType" xorm:"ne_type"`
|
||||
NeId string `json:"neId" xorm:"ne_id"` // neUID/rmUID 网元唯一标识
|
||||
RmUID string `json:"rmUID" xorm:"rm_uid"` // neUID/rmUID网元UID
|
||||
NeName string `json:"neName" xorm:"ne_name"` // NeName/UserLabel 网元名称/网元设备友好名称
|
||||
Ip string `json:"ip" xorm:"ip"`
|
||||
Port string `json:"port" xorm:"port"`
|
||||
PvFlag string `json:"pvFlag" xorm:"pv_flag"` // 网元虚实性标识 VNF/PNF: 虚拟/物理
|
||||
NeAddress string `json:"neAddress" xorm:"ne_address"` // 只对PNF
|
||||
Province string `json:"province" xorm:"province"` // 网元所在省份
|
||||
VendorName string `json:"vendorName" xorm:"vendor_name"` // 厂商名称
|
||||
Dn string `json:"dn" xorm:"dn"` // 网络标识
|
||||
Status int `json:"status" xorm:"status"`
|
||||
UpdateTime string `json:"-" xorm:"-"`
|
||||
}
|
||||
|
||||
func XormGetNeInfoByType(neType string, nes *[]NeInfo) (*[]NeInfo, error) {
|
||||
log.Debug("XormGetNeInfoByType processing... ")
|
||||
|
||||
ne := new(NeInfo)
|
||||
rows, err := dbClient.xEngine.Table("ne_info").Where("status=0 and ne_type =?", neType).Rows(ne)
|
||||
if err != nil {
|
||||
log.Error("Failed to get table ne_info from database:", err)
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
err := rows.Scan(ne)
|
||||
if err != nil {
|
||||
log.Error("Failed to get table ne_info from database:", err)
|
||||
return nil, err
|
||||
}
|
||||
*nes = append(*nes, *ne)
|
||||
}
|
||||
log.Debug("nes:", nes)
|
||||
return nes, nil
|
||||
}
|
||||
|
||||
func XormGetAllNeInfo(nes *[]NeInfo) (*[]NeInfo, error) {
|
||||
log.Debug("XormGetAllNeInfo processing... ")
|
||||
|
||||
ne := new(NeInfo)
|
||||
rows, err := dbClient.xEngine.Table("ne_info").Where("status='0'").Rows(ne)
|
||||
if err != nil {
|
||||
log.Error("Failed to get table ne_info from database:", err)
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
err := rows.Scan(ne)
|
||||
if err != nil {
|
||||
log.Error("Failed to get table ne_info from database:", err)
|
||||
return nil, err
|
||||
}
|
||||
*nes = append(*nes, *ne)
|
||||
}
|
||||
log.Debug("nes:", nes)
|
||||
return nes, nil
|
||||
}
|
||||
|
||||
type NeState struct {
|
||||
Id int `json:"id" xorm:"pk 'id' autoincr"`
|
||||
NeType string `json:"neType" xorm:"ne_type"`
|
||||
NeId string `json:"neId" xorm:"ne_id"`
|
||||
Version string `json:"version" xorm:"version"`
|
||||
Capability uint32 `json:"capability" xorm:"capability"`
|
||||
SerialNum string `json:"serialNum" xorm:"serial_num"`
|
||||
ExpiryDate string `json:"expiryDate" xorm:"expiry_date"`
|
||||
CpuUsage string `json:"cpuUsage" xorm:"cpu_usage"`
|
||||
MemUsage string `json:"memUsage" xorm:"mem_usage"`
|
||||
DiskSpace string `json:"diskSpace" xorm:"disk_space"`
|
||||
Timestamp string `json:"timestamp" xorm:"-" `
|
||||
}
|
||||
|
||||
func XormInsertNeState(neState *NeState) (int64, error) {
|
||||
log.Debug("XormInsertNeState processing... ")
|
||||
|
||||
var affected int64 = 0
|
||||
|
||||
session := dbClient.xEngine.NewSession()
|
||||
defer session.Close()
|
||||
affected, err := session.InsertOne(neState)
|
||||
session.Commit()
|
||||
return affected, err
|
||||
}
|
||||
|
||||
type NorthboundPm struct {
|
||||
Id int `json:"-" xorm:"pk 'id' autoincr"`
|
||||
Date string `json:"Date" xorm:"date"`
|
||||
Index int `json:"Index" xorm:"index"` // 1天中测量时间粒度(如15分钟)的切片索引: 0~95
|
||||
Timestamp string `json:"-" xorm:"-"`
|
||||
NeName string `json:"NeName" xorm:"ne_name"` // UserLabel
|
||||
RmUID string `json:"RmUID" xorm:"rm_uid"`
|
||||
NeType string `json:"NeType" xorm:"ne_type"` // 网元类型
|
||||
PmVersion string `json:"PmVersion" xorm:"pm_version"` // 性能数据版本号
|
||||
Dn string `json:"Dn" xorm:"dn"` // (???)网元标识, 如:RJN-CMZJ-TZ,SubNetwork=5GC88,ManagedElement=SMF53456,SmfFunction=53456
|
||||
Period string `json:"Period" xorm:"period"` // 测量时间粒度选项:5/15/30/60
|
||||
TimeZone string `json:"TimeZone" xorm:"time_zone"`
|
||||
StartTime string `json:"StartTime" xorm:"start_time"`
|
||||
|
||||
Datas []struct {
|
||||
ObjectType string `json:"ObjectType" xorm:"object_type"` // 网络资源类别名称, Pm指标项列表中为空间粒度 如:SmfFunction
|
||||
KPIs []struct {
|
||||
KPIID string `json:"KPIID" xorm:"pm_name"` // 指标项, 如: SMF.AttCreatePduSession._Dnn
|
||||
KPIValues []struct {
|
||||
Name string `json:"Name" xorm:"name"` // 单个的写"Total", 或者指标项有多个测量项,如Dnn的名称写对应的Dnn"cmnet"/"ims"
|
||||
Value int `json:"Value" xorm:"value"`
|
||||
} `json:"KPIValues" xorm:"sub_datas"`
|
||||
} `json:"KPIs" xorm:"pm_datas"`
|
||||
} `json:"Datas" xorm:"datas"`
|
||||
}
|
||||
|
||||
func XormInsertNorthboundPm(pm *NorthboundPm) (int64, error) {
|
||||
log.Debug("XormInsertNorthboundPm processing... ")
|
||||
|
||||
var affected int64 = 0
|
||||
|
||||
session := dbClient.xEngine.NewSession()
|
||||
defer session.Close()
|
||||
affected, err := session.InsertOne(pm)
|
||||
session.Commit()
|
||||
return affected, err
|
||||
}
|
||||
|
||||
func XormGetNorthboundPm(date string, index int, neType string, pms *[]NorthboundPm) (*[]NorthboundPm, error) {
|
||||
log.Debug("XormGetNorthboundPm processing... ")
|
||||
|
||||
pm := new(NorthboundPm)
|
||||
rows, err := dbClient.xEngine.Table("northbound_pm").
|
||||
Where("`ne_type` = ? AND `date` = ? AND `index` = ?", neType, date, index).
|
||||
Rows(pm)
|
||||
if err != nil {
|
||||
log.Error("Failed to get table northbound_pm from database:", err)
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
err := rows.Scan(pm)
|
||||
if err != nil {
|
||||
log.Error("Failed to get table northbound_pm from database:", err)
|
||||
return nil, err
|
||||
}
|
||||
*pms = append(*pms, *pm)
|
||||
}
|
||||
log.Debug("pms:", pms)
|
||||
return pms, nil
|
||||
}
|
||||
|
||||
func XormGetMeasureThreshold(tableName string, where string, datas *[]MeasureThreshold) (*[]MeasureThreshold, error) {
|
||||
log.Debug("XormGetMeasureThreshold processing... ")
|
||||
|
||||
row := new(MeasureThreshold)
|
||||
rows, err := dbClient.xEngine.Table(tableName).Where(where).Rows(row)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to get table %s from database: %v", tableName, err)
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
err := rows.Scan(row)
|
||||
if err != nil {
|
||||
log.Error("Failed to get table measure_threshold from database:", err)
|
||||
return nil, err
|
||||
}
|
||||
*datas = append(*datas, *row)
|
||||
}
|
||||
log.Debug("datas:", datas)
|
||||
|
||||
return datas, nil
|
||||
}
|
||||
|
||||
type MeasureThreshold struct {
|
||||
Id int `json:"id" xorm:"pk 'id' autoincr"`
|
||||
NeType string `json:"neType" xorm:"ne_type"`
|
||||
KpiSet string `json:"kpiSet" xorm:"kpi_set"`
|
||||
Threshold int64 `json:"threshold" xorm:"threshold"`
|
||||
Status string `json:"status" xorm:"Status"`
|
||||
OrigSeverity string `json:"origSeverity" xorm:"orig_severity"`
|
||||
AlarmId string `json:"alarmId" xorm:"alarm_id"`
|
||||
AlarmFlag bool `json:"alarmFlag" xorm:"alarm_flag"`
|
||||
}
|
||||
|
||||
type MeasureData struct {
|
||||
// Id int `json:"id" xorm:"pk 'id' autoincr"`
|
||||
Id int `json:"id" xorm:"-"`
|
||||
Date string `json:"date" xorm:"date"`
|
||||
TaskId int `json:"taskId"`
|
||||
NeType string `json:"neType" xorm:"ne_type"`
|
||||
NeName string `json:"neName" xorm:"ne_name"`
|
||||
RmUid string `json:"rmUid" xorm:"rm_uid"`
|
||||
GranulOption string `json:"granulOption" xorm:"granul_option"`
|
||||
StartTime string `json:"startTime"`
|
||||
EndTime string `json:"endTime"`
|
||||
KpiCode string `json:"kpiCode" xorm:"kpi_code"`
|
||||
KpiId string `json:"kpiId" xorm:"kpi_id"`
|
||||
KpiExt string `json:"kpiExt" xorm:"kpi_ext"`
|
||||
Value int64 `json:"value"`
|
||||
Timestamp string `json:"timestamp"`
|
||||
}
|
||||
|
||||
func XormGetMeasureData(where string, datas *[]MeasureData) (*[]MeasureData, error) {
|
||||
log.Debug("XormGetMeasureData processing... ")
|
||||
|
||||
row := new(MeasureData)
|
||||
rows, err := dbClient.xEngine.Where(where).Rows(row)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to get table measure_data from database: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
err := rows.Scan(row)
|
||||
if err != nil {
|
||||
log.Error("Failed to get table measure_data from database:", err)
|
||||
return nil, err
|
||||
}
|
||||
*datas = append(*datas, *row)
|
||||
}
|
||||
log.Debug("datas:", datas)
|
||||
|
||||
return datas, nil
|
||||
}
|
||||
|
||||
func XormGetMeasureDataLastOne(neType, rmUID string, taskId int) (*MeasureData, error) {
|
||||
log.Debug("XormGetMeasureDataOneByKpi processing... ")
|
||||
|
||||
measureData := new(MeasureData)
|
||||
_, err := dbClient.xEngine.
|
||||
SQL("select * from measure_data where ne_type=? and rm_uid=? and task_id=? order by start_time desc limit 1", neType, rmUID, taskId).
|
||||
Get(measureData)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to get measure_data: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return measureData, nil
|
||||
}
|
||||
|
||||
func XormGetMeasureDataOneByKpi(kpi string) (*MeasureData, error) {
|
||||
log.Debug("XormGetMeasureDataOneByKpi processing... ")
|
||||
|
||||
measureData := new(MeasureData)
|
||||
_, err := dbClient.xEngine.
|
||||
SQL("select * from measure_data where kpi_id = ? order by timestamp desc limit 1", kpi).
|
||||
Get(measureData)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to get table measure_data from database: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
log.Debug("measureData:", measureData)
|
||||
|
||||
return measureData, nil
|
||||
}
|
||||
|
||||
type AlarmDefine struct {
|
||||
AlarmId string `json:"alarmId" xorm:"alarm_id"`
|
||||
AlarmCode int `json:"alarmCode" xorm:"alarm_code"`
|
||||
AlarmTitle string `json:"alarmTitle" xorm:"alarm_title"`
|
||||
NeType string `json:"neType" xorm:"ne_type"`
|
||||
AlarmType string `json:"alarmType" xorm:"alarm_type"`
|
||||
OrigSeverity string `json:"origSeverity" xorm:"orig_severity"`
|
||||
ObjectUid string `json:"objectUid" xorm:"object_uid"`
|
||||
ObjectName string `json:"objectName" xorm:"object_name"`
|
||||
ObjectType string `json:"objectType" xorm:"object_type"`
|
||||
LocationInfo string `json:"locationInfo"`
|
||||
SpecificProblem string `json:"specificProblem"`
|
||||
SpecificProblemId string `json:"specificProblemId" xorm:"specific_problem_id"`
|
||||
AddInfo string `json:"addInfo" xorm:"add_info"`
|
||||
Threshold int64 `json:"threshold" xorm:"threshold"`
|
||||
Status string `json:"status" xorm:"status"`
|
||||
}
|
||||
|
||||
func XormGetAlarmDefine(alarmId string) (*AlarmDefine, error) {
|
||||
log.Debug("XormGetAlarmDefine processing... ")
|
||||
|
||||
alarmDefine := new(AlarmDefine)
|
||||
_, err := dbClient.xEngine.
|
||||
Where("alarm_id=? and status='Active'", alarmId).
|
||||
Get(alarmDefine)
|
||||
if err != nil {
|
||||
log.Error("Failed to get table alarm_define from database:", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return alarmDefine, nil
|
||||
}
|
||||
|
||||
const (
|
||||
AlarmStatusClear = 0
|
||||
AlarmStatusActive = 1
|
||||
AlarmStatusClearString = "0"
|
||||
AlarmStatusActiveString = "1"
|
||||
)
|
||||
|
||||
const (
|
||||
ClearTypeUnclear = 0
|
||||
ClearTypeAutoClear = 1
|
||||
ClearTypeManualClear = 2
|
||||
)
|
||||
|
||||
type Alarm struct {
|
||||
Id int `json:"-" xorm:"pk 'id' autoincr"`
|
||||
AlarmSeq int `json:"alarmSeq"`
|
||||
AlarmId string `json:"alarmId" xorm:"alarm_id"`
|
||||
NeId string `json:"neId"`
|
||||
AlarmCode int `json:"alarmCode"`
|
||||
AlarmTitle string `json:"alarmTitle"`
|
||||
EventTime string `json:"eventTime"`
|
||||
AlarmType string `json:"alarmType"`
|
||||
OrigSeverity string `json:"origSeverity"`
|
||||
PerceivedSeverity string `json:"perceivedSeverity"`
|
||||
PVFlag string `json:"pvFlag" xorm:"pv_flag"`
|
||||
NeName string `json:"neName"`
|
||||
NeType string `json:"neType"`
|
||||
ObjectUid string `json:"objectUid" xorm:"object_uid"`
|
||||
ObjectName string `json:"objectName" xorm:"object_name"`
|
||||
ObjectType string `json:"objectType" xorm:"object_type"`
|
||||
LocationInfo string `json:"locationInfo"`
|
||||
Province string `json:"province"`
|
||||
AlarmStatus int `json:"alarmStatus" xorm:"alarm_status"`
|
||||
SpecificProblem string `json:"specificProblem"`
|
||||
SpecificProblemID string `json:"specificProblemID" xorm:"specific_problem_id"`
|
||||
AddInfo string `json:"addInfo"`
|
||||
|
||||
// ClearType int `json:"-" xorm:"clear_type"` // 0: Unclear, 1: Auto clear, 2: Manual clear
|
||||
// ClearTime sql.NullTime `json:"-" xorm:"clear_time"`
|
||||
}
|
||||
|
||||
type AlarmLog struct {
|
||||
NeType string `json:"neType" xorm:"ne_type"`
|
||||
NeId string `json:"neId" xorm:"ne_id"`
|
||||
AlarmSeq string `json:"alarmSeq" xorm:"alarm_seq"`
|
||||
AlarmId string `json:"alarmId" xorm:"alarm_id"`
|
||||
AlarmCode int `json:"alarmCode" xorm:"alarm_code"`
|
||||
AlarmStatus int `json:"alarmStatus" xorm:"alarm_status"`
|
||||
EventTime string `json:"eventTime" xorm:"event_time"`
|
||||
// ClearTime sql.NullTime `json:"clearTime" xorm:"clear_time"`
|
||||
LogTime string `json:"logTime" xorm:"-"`
|
||||
}
|
||||
|
||||
func XormInsertAlarm(alarm *Alarm) (int64, error) {
|
||||
log.Debug("XormInsertAlarm processing... ")
|
||||
|
||||
var affected int64 = 0
|
||||
|
||||
session := dbClient.xEngine.NewSession()
|
||||
defer session.Close()
|
||||
affected, err := session.InsertOne(alarm)
|
||||
session.Commit()
|
||||
return affected, err
|
||||
}
|
||||
|
||||
func XormInsertTalbeOne(tbInfo interface{}) (int64, error) {
|
||||
log.Debug("XormInsertTalbeOne processing... ")
|
||||
|
||||
var affected int64 = 0
|
||||
|
||||
session := dbClient.xEngine.NewSession()
|
||||
defer session.Close()
|
||||
affected, err := session.InsertOne(tbInfo)
|
||||
session.Commit()
|
||||
return affected, err
|
||||
}
|
||||
|
||||
func XormGetDataBySQL(sql string) (*[]map[string]string, error) {
|
||||
log.Debug("XormGetDataBySQL processing... ")
|
||||
|
||||
rows := make([]map[string]string, 0)
|
||||
rows, err := dbClient.xEngine.QueryString(sql)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to QueryString:", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &rows, nil
|
||||
}
|
||||
|
||||
func XormGetTableOneByWhere(where string, tableName string) (*[]interface{}, error) {
|
||||
log.Debug("XormGetTableOneByWhere processing... ")
|
||||
|
||||
row := new([]interface{})
|
||||
|
||||
tb, err := dbClient.xEngine.TableInfo(tableName)
|
||||
if err != nil {
|
||||
log.Error("Failed to get TableInfo:", err)
|
||||
return nil, err
|
||||
}
|
||||
columns := tb.Columns()
|
||||
log.Debug("columns:", columns)
|
||||
has, err := dbClient.xEngine.Table(tableName).Where(where).Get(row)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to get table %s from database:%v", tableName, err)
|
||||
return nil, err
|
||||
} else if has == false {
|
||||
log.Infof("Not found data from %s where=%s", tableName, where)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
log.Debugf("%s:%v", tableName, row)
|
||||
return row, nil
|
||||
}
|
||||
|
||||
func XormGetTableOneById(id int, tableName string) (*[]interface{}, error) {
|
||||
log.Debug("XormGetTableOneById processing... ")
|
||||
|
||||
rows := new([]interface{})
|
||||
has, err := dbClient.xEngine.Table(tableName).ID(id).Get(rows)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to get table %s from database:id=%d, %v", tableName, id, err)
|
||||
return nil, err
|
||||
} else if has == false {
|
||||
log.Infof("Not found table %s from database:id=%d", tableName, id)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
log.Debugf("%s:%v", tableName, rows)
|
||||
return rows, nil
|
||||
}
|
||||
|
||||
func XormUpdateTableById(id int, tableName string, tbInfo interface{}, cols ...string) (int64, error) {
|
||||
log.Debug("XormUpdateTableById processing... ")
|
||||
|
||||
session := dbClient.xEngine.NewSession()
|
||||
defer session.Close()
|
||||
affected, err := session.Table(tableName).ID(id).MustCols(cols...).Update(tbInfo)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to update table %s from database:%v", tableName, err)
|
||||
return 0, err
|
||||
}
|
||||
session.Commit()
|
||||
|
||||
return affected, nil
|
||||
}
|
||||
|
||||
func XormUpdateTableByWhere(where string, tableName string, tbInfo interface{}) (int64, error) {
|
||||
log.Debug("XormUpdateTableByWhere processing... ")
|
||||
|
||||
session := dbClient.xEngine.NewSession()
|
||||
defer session.Close()
|
||||
affected, err := session.Table(tableName).Where(where).Update(tbInfo)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to update table %s from database:%v", tableName, err)
|
||||
return 0, err
|
||||
}
|
||||
session.Commit()
|
||||
|
||||
return affected, nil
|
||||
}
|
||||
49
crontask/etc/cm/cm-amf.yaml
Normal file
49
crontask/etc/cm/cm-amf.yaml
Normal file
@@ -0,0 +1,49 @@
|
||||
ManagedElement:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
VendorName: ""
|
||||
ManagedBy: ""
|
||||
ManagementIpAddress: ""
|
||||
SwVersion: ""
|
||||
PatchInfo: ""
|
||||
AdministrativeState: ""
|
||||
OperationalState: ""
|
||||
|
||||
AmfFunction:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
AdministrativeState: ""
|
||||
OperationalState: ""
|
||||
VnfInstanceId: ""
|
||||
Fqdn: ""
|
||||
SbiServiceList: ""
|
||||
AmfGuamiList: ""
|
||||
SnssaiList: ""
|
||||
MaxUser: ""
|
||||
RelativeCapacity: ""
|
||||
MaxGnbNum: ""
|
||||
|
||||
EpRpDynN8Amf:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
LocIpAddrList: ""
|
||||
FarIpSubnetworkList: ""
|
||||
|
||||
EpRpDynN11Amf:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
LocIpAddrList: ""
|
||||
FarIpSubnetworkList: ""
|
||||
|
||||
EpRpDynN12Amf:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
LocIpAddrList: ""
|
||||
FarIpSubnetworkList: ""
|
||||
|
||||
IPResource:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
InterfaceType: ""
|
||||
LocIpV4AddrList: ""
|
||||
LocIpV6AddrList: ""
|
||||
48
crontask/etc/cm/cm-smf.yaml
Normal file
48
crontask/etc/cm/cm-smf.yaml
Normal file
@@ -0,0 +1,48 @@
|
||||
ManagedElement:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
VendorName: ""
|
||||
ManagedBy: ""
|
||||
ManagementIpAddress: ""
|
||||
SwVersion: ""
|
||||
PatchInfo: ""
|
||||
AdministrativeState: ""
|
||||
OperationalState: ""
|
||||
|
||||
SmfFunction:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
AdministrativeState: ""
|
||||
OperationalState: ""
|
||||
VnfInstanceId: ""
|
||||
Fqdn: ""
|
||||
SbiServiceList: ""
|
||||
MaxPduSessions: ""
|
||||
MaxQfi: ""
|
||||
UpfList: ""
|
||||
|
||||
AddrPool:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
AddrType: "Static"
|
||||
IpVersion: ""
|
||||
AddrSegList: ""
|
||||
|
||||
EpRpDynN7Smf:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
LocIpAddrList: ""
|
||||
FarIpSubnetworkList: ""
|
||||
|
||||
EpRpDynN10Smf:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
LocIpAddrList: ""
|
||||
FarIpSubnetworkList: ""
|
||||
|
||||
IPResource:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
InterfaceType: ""
|
||||
LocIpV4AddrList: ""
|
||||
LocIpV6AddrList: ""
|
||||
39
crontask/etc/cm/cm-udm.yaml
Normal file
39
crontask/etc/cm/cm-udm.yaml
Normal file
@@ -0,0 +1,39 @@
|
||||
ManagedElement:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
VendorName: ""
|
||||
ManagedBy: ""
|
||||
ManagementIpAddress: ""
|
||||
SwVersion: ""
|
||||
PatchInfo: ""
|
||||
AdministrativeState: ""
|
||||
OperationalState: ""
|
||||
|
||||
UdmFunction:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
AdministrativeState: ""
|
||||
OperationalState: ""
|
||||
VnfInstanceId: ""
|
||||
Fqdn: ""
|
||||
SbiServiceList: ""
|
||||
|
||||
UdrFunction:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
AddrType: "Static"
|
||||
IpVersion: ""
|
||||
AddrSegList: ""
|
||||
|
||||
AusfFunction:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
LocIpAddrList: ""
|
||||
FarIpSubnetworkList: ""
|
||||
|
||||
IPResource:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
InterfaceType: ""
|
||||
LocIpV4AddrList: ""
|
||||
LocIpV6AddrList: ""
|
||||
141
crontask/etc/cm/cm-upf.yaml
Normal file
141
crontask/etc/cm/cm-upf.yaml
Normal file
@@ -0,0 +1,141 @@
|
||||
ManagedElement:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
VendorName: ""
|
||||
ManagedBy: ""
|
||||
ManagementIpAddress: ""
|
||||
SwVersion: ""
|
||||
PatchInfo: ""
|
||||
AdministrativeState: ""
|
||||
OperationalState: ""
|
||||
|
||||
InventoryUnitRack:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
AdministrativeState: ""
|
||||
OperationalState: ""
|
||||
VnfInstanceId: ""
|
||||
Fqdn: ""
|
||||
SbiServiceList: ""
|
||||
MaxPduSessions: ""
|
||||
MaxQfi: ""
|
||||
UpfList: ""
|
||||
|
||||
InventoryUnitShelf:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
VendorUnitFamilyType: ""
|
||||
VendorUnitTypeNumber: ""
|
||||
VendorName: ""
|
||||
SerialNumber: ""
|
||||
VersionNumber: ""
|
||||
DateOfManufacture: ""
|
||||
DateOfLastService: ""
|
||||
ManufacturerData: ""
|
||||
RackPosition: ""
|
||||
|
||||
InventoryUnitPack:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
VendorUnitFamilyType: ""
|
||||
VendorUnitTypeNumber: ""
|
||||
VendorName: ""
|
||||
SerialNumber: ""
|
||||
VersionNumber: ""
|
||||
DateOfManufacture: ""
|
||||
DateOfLastService: ""
|
||||
ManufacturerData: ""
|
||||
PortsInformation: ""
|
||||
PackPosition: ""
|
||||
SlotsOccupied: ""
|
||||
|
||||
InventoryUnitHost:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
VendorUnitFamilyType: ""
|
||||
VendorUnitTypeNumber: ""
|
||||
VendorName: ""
|
||||
SerialNumber: ""
|
||||
VersionNumber: ""
|
||||
DateOfManufacture: ""
|
||||
DateOfLastService: ""
|
||||
ManufacturerData: ""
|
||||
HostPosition: ""
|
||||
NumberOfCpu: ""
|
||||
MemSize: ""
|
||||
HardDiskSize: ""
|
||||
|
||||
InventoryUnitAccessory:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
VendorUnitFamilyType: ""
|
||||
VendorUnitTypeNumber: ""
|
||||
VendorName: ""
|
||||
SerialNumber: ""
|
||||
VersionNumber: ""
|
||||
DateOfManufacture: ""
|
||||
DateOfLastService: ""
|
||||
ManufacturerData: ""
|
||||
AccessoryPosition: ""
|
||||
AccessoryType: ""
|
||||
AddtionalInformation: ""
|
||||
|
||||
UpfFunction:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
AdministrativeState: ""
|
||||
OperationalState: ""
|
||||
VnfInstanceId: ""
|
||||
MaxQosFlows: ""
|
||||
MaxThroughput: ""
|
||||
|
||||
EpRpDynN9Upf:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
LocIpAddrList: ""
|
||||
FarIpSubnetworkList: ""
|
||||
|
||||
EpRpDynN3Upf:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
LocIpAddrList: ""
|
||||
FarIpSubnetworkList: ""
|
||||
|
||||
AmfFunction:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
AdministrativeState: ""
|
||||
OperationalState: ""
|
||||
VnfInstanceId: ""
|
||||
Fqdn: ""
|
||||
|
||||
SmfFunction:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
AdministrativeState: ""
|
||||
OperationalState: ""
|
||||
VnfInstanceId: ""
|
||||
Fqdn: ""
|
||||
|
||||
UdrFunction:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
AdministrativeState: ""
|
||||
OperationalState: ""
|
||||
VnfInstanceId: ""
|
||||
Fqdn: ""
|
||||
|
||||
AusfFunction:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
AdministrativeState: ""
|
||||
OperationalState: ""
|
||||
VnfInstanceId: ""
|
||||
Fqdn: ""
|
||||
|
||||
IPResource:
|
||||
Id: ""
|
||||
UserLabel: ""
|
||||
InterfaceType: ""
|
||||
LocIpV4AddrList: ""
|
||||
LocIpV6AddrList: ""
|
||||
41
crontask/etc/crontask.yaml
Normal file
41
crontask/etc/crontask.yaml
Normal file
@@ -0,0 +1,41 @@
|
||||
# file: log file name
|
||||
# level: /trace/debug/info/error/warn/error/fatal, default: debug
|
||||
# duration: saved days, default is 30 days
|
||||
logger:
|
||||
file: d:/goprojects/ems.agt/crontask/log/crontask.log
|
||||
level: trace
|
||||
duration: 24
|
||||
count: 10
|
||||
|
||||
omc:
|
||||
name: SZOMC1
|
||||
hosturi: http://127.0.0.1:3040
|
||||
hostno: S001
|
||||
province: GD
|
||||
netabbr: HX
|
||||
vendor: RJ
|
||||
|
||||
process:
|
||||
|
||||
tasks:
|
||||
file: ./etc/tasks.yaml
|
||||
|
||||
database:
|
||||
type: mysql
|
||||
user: root
|
||||
password: 1000omc@kp!
|
||||
host: 127.0.0.1
|
||||
port: 33066
|
||||
name: omc_db
|
||||
backup: d:/goprojects/ems.agt/restagent/database
|
||||
|
||||
# northbound interface, cm/pm
|
||||
nbi:
|
||||
cm:
|
||||
cfgfiledir: ./etc/cm
|
||||
xmlfiledir: ./ftp/cm
|
||||
version: V1.0.1
|
||||
pm:
|
||||
cfgfiledir: ./etc/pm
|
||||
xmlfiledir: ./ftp/pm
|
||||
version: V1.0.1
|
||||
150
crontask/etc/tasks.yaml
Normal file
150
crontask/etc/tasks.yaml
Normal file
@@ -0,0 +1,150 @@
|
||||
# example:
|
||||
# tasks:
|
||||
# - name: test # task comment
|
||||
# uri: # restful uri
|
||||
# params: # params of url
|
||||
# interval: 30 # do sometion in the interval
|
||||
# unit: Seconds #Seconds/Minutes/Hours/Days/Weeks, Monday/Tuesday/.../Sunday,
|
||||
# at: 00:10:00 # do at time such as xx:xx:xx
|
||||
# do: HelloWorldTask # (Do what: callback function)
|
||||
#
|
||||
# Attention: must restart crontask after modified this file
|
||||
#
|
||||
tasks:
|
||||
- name: test # task comment
|
||||
status: Active #active/inactive
|
||||
uri: # restful uri
|
||||
params: # params of http url
|
||||
body: # body of http request
|
||||
interval: 60 # do sometion in the interval
|
||||
unit: Seconds #Seconds/Minutes/Hours/Days/Weeks, Monday/Tuesday/.../Sunday,
|
||||
at: 00:10:00 # do at time such as xx:xx:xx when unit such as Day/Days/Mondays...
|
||||
do: TaskHelloWorld # (Do what: callback function)
|
||||
- name: clear expired history alarm
|
||||
uri: /api/rest/databaseManagement/v1/omc_db/alarm
|
||||
params: WHERE=now()+>+ADDDATE(event_time,+interval+(SELECT+`value`+FROM+config+WHERE+config_tag='historyDuration')+day)+and+alarm_status='0'
|
||||
interval: 1
|
||||
unit: Days
|
||||
at: 00:10:00
|
||||
do: TaskDeleteExpiredRecord
|
||||
- name: clear deleted custom pm kpi
|
||||
uri: /api/rest/databaseManagement/v1/omc_db/pm_custom_title
|
||||
params: WHERE=now()+>+ADDDATE(update_time,+interval+(SELECT+`value`+FROM+config+WHERE+config_tag='keepPMCKpi')+day)+and+status='Deleted'
|
||||
interval: 1
|
||||
unit: Days
|
||||
at: 00:15:00
|
||||
do: TaskDeleteExpiredRecord
|
||||
- name: update expired user session
|
||||
uri: /api/rest/databaseManagement/v1/omc_db/session
|
||||
params: WHERE=NOW()+>+ADDDATE(shake_time,+interval+expires+second)+and+status='online'
|
||||
body: '{"session":{"status":"offline"}}'
|
||||
interval: 30
|
||||
unit: Seconds
|
||||
at:
|
||||
do: TaskUpdateTable
|
||||
- name: clear expired log
|
||||
uri:
|
||||
params:
|
||||
interval: 1
|
||||
unit: Days
|
||||
at: 00:50:00
|
||||
do: TaskDeleteExpiredRecord
|
||||
- name: Backup measure data
|
||||
uri: /api/rest/databaseManagement/v1/omc_db/measure_data
|
||||
params: SQL=select+*+into+outfile+'%s'+fields+terminated+by+','+escaped+by+''+optionally+enclosed+by+''+lines+terminated+by+'\n'+from+(select+'id','date','task_id','ne_name','rm_uid','ne_type','granul_option','kpi_code','kpi_id','kpi_ext','start_time','end_time','value','timestamp'+union+select+id,date,task_id,ne_name,rm_uid,ne_type,granul_option,kpi_code,kpi_id,kpi_ext,start_time,end_time,value,timestamp+from+measure_data)+b
|
||||
interval: 1
|
||||
unit: Days
|
||||
at: 00:20:00
|
||||
do: TaskDBBackupCSVGetBySQL
|
||||
- name: Backup operation log
|
||||
uri: /api/rest/databaseManagement/v1/omc_db/operation_log
|
||||
params: SQL=select+*+into+outfile+'%s'+fields+terminated+by+','+escaped+by+''+optionally+enclosed+by+''+lines+terminated+by+'\n'+from+(select+'op_id','account_name','op_ip','subsys_tag','op_type','op_content','op_result','begin_time','end_time','vnf_flag','log_time'+union+select+op_id,account_name,op_ip,subsys_tag,op_type,op_content,op_result,begin_time,end_time,vnf_flag,log_time+from+operation_log)+b
|
||||
interval: 1
|
||||
unit: Days
|
||||
at: 00:25:00
|
||||
do: TaskDBBackupCSVGetBySQL
|
||||
- name: handshake to NF
|
||||
status: Active
|
||||
uri: /api/rest/systemManagement/v1/elementType/%s/objectType/systemState
|
||||
params:
|
||||
interval: 10
|
||||
unit: Seconds
|
||||
at:
|
||||
do: TaskHandShakeToNF
|
||||
- name: Export CM from NF
|
||||
uri: /api/rest/systemManagement/v1/elementType/%s/objectType/cm
|
||||
params: ne_id=%s
|
||||
interval: 1
|
||||
unit: Days
|
||||
at: 00:15
|
||||
do: TaskExportCmFromNF
|
||||
- name: Generate NRM xml file
|
||||
uri:
|
||||
params:
|
||||
interval: 1
|
||||
unit: Day
|
||||
at: 00:00,06:00,12:00,18:00
|
||||
do: GenCmXmlFile
|
||||
- name: Task of Generate measure threshold alarm
|
||||
status: Inactive
|
||||
uri: /api/rest/faultManagement/v1/elementType/%s/objectType/alarms
|
||||
params: RJHXEMSPM10200
|
||||
interval: 10
|
||||
unit: Seconds
|
||||
at:
|
||||
do: TaskGenMeasureThresholdAlarm
|
||||
- name: Task of Generate license alarm
|
||||
status: Inactive
|
||||
uri: /api/rest/faultManagement/v1/elementType/%s/objectType/alarms
|
||||
params: RJHXEMSCM10100
|
||||
interval: 1
|
||||
unit: Days
|
||||
at: 20:01
|
||||
do: TaskGenLicenseAlarm
|
||||
- name: Task of Generate NE system state alarm
|
||||
status: Active
|
||||
uri: /api/rest/faultManagement/v1/elementType/%s/objectType/alarms
|
||||
params: RJHXEMSSM10000
|
||||
interval: 5
|
||||
unit: Seconds
|
||||
at:
|
||||
do: TaskGenNeStateAlarm
|
||||
- name: Task of Generate Measure Report Timeout
|
||||
status: Active
|
||||
uri: /api/rest/faultManagement/v1/elementType/%s/objectType/alarms
|
||||
params: RJHXEMSPM10201
|
||||
interval: 10
|
||||
unit: Seconds
|
||||
at:
|
||||
do: TaskGenMeasureReportTimeoutAlarm
|
||||
- name: Monitor proces list and write system log
|
||||
uri: /api/rest/databaseManagement/v1/omc_db/system_log
|
||||
params:
|
||||
body:
|
||||
interval: 5
|
||||
unit: Seconds
|
||||
at:
|
||||
do: TaskWriteSystemLog
|
||||
# - name: Import CM to NF
|
||||
# uri: /api/rest/systemManagement/v1/elementType/udm/objectType/cm
|
||||
# params: ne_id=SZ_01
|
||||
# interval: 15
|
||||
# unit: Seconds
|
||||
# at:
|
||||
# do: TaskImportCmToNF
|
||||
crontab:
|
||||
# - name: 每隔1分钟执行
|
||||
# tab: 0 */1 * * * ? // crontab: rule like linux crontab
|
||||
# do: CronHelloWorldTask // function name to call
|
||||
# params:
|
||||
- name: Generate PM xml file
|
||||
status: Active
|
||||
tab: 5,20,35,50 * * * *
|
||||
do: GenPmXmlFile
|
||||
uri: this is uri
|
||||
params: Generating PM xml file
|
||||
# - name: Import CM to NF
|
||||
# tab: 0 * * * * *
|
||||
# do: TaskImportCmToNF
|
||||
# uri: /api/rest/systemManagement/v1/elementType/udm/objectType/cm
|
||||
# params: ne_id=SZ_01
|
||||
BIN
crontask/export/smf-sz_01-etc-20230611001500.zip
Normal file
BIN
crontask/export/smf-sz_01-etc-20230611001500.zip
Normal file
Binary file not shown.
BIN
crontask/export/smf-sz_01-etc-20230612001500.zip
Normal file
BIN
crontask/export/smf-sz_01-etc-20230612001500.zip
Normal file
Binary file not shown.
BIN
crontask/export/smf-sz_01-etc-20230615001500.zip
Normal file
BIN
crontask/export/smf-sz_01-etc-20230615001500.zip
Normal file
Binary file not shown.
BIN
crontask/export/udm-sz_01-etc-20230611002024.zip
Normal file
BIN
crontask/export/udm-sz_01-etc-20230611002024.zip
Normal file
Binary file not shown.
BIN
crontask/export/udm-sz_01-etc-20230615001514.zip
Normal file
BIN
crontask/export/udm-sz_01-etc-20230615001514.zip
Normal file
Binary file not shown.
140
crontask/ftp/cm/20230806/CM-HX-AMF-16.1.1-20230806000000.xml
Normal file
140
crontask/ftp/cm/20230806/CM-HX-AMF-16.1.1-20230806000000.xml
Normal file
@@ -0,0 +1,140 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-06 00:00:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>AMF</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN8Amf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_T01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">AMF_SZ_T01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN11Amf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_T01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">AMF_SZ_T01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN12Amf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_T01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">AMF_SZ_T01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>IPResource</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">Id</N>
|
||||
<N i="2">InterfaceType</N>
|
||||
<N i="3">LocIpV4AddrList</N>
|
||||
<N i="4">LocIpV6AddrList</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">SZ_T01</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">AMF_SZ_T01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">ManagedBy</N>
|
||||
<N i="4">ManagementIpAddress</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">PatchInfo</N>
|
||||
<N i="7">SwVersion</N>
|
||||
<N i="8">UserLabel</N>
|
||||
<N i="9">VendorName</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_T01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">AMF_SZ_T01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AmfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">AmfGuamiList</N>
|
||||
<N i="3">Fqdn</N>
|
||||
<N i="4">Id</N>
|
||||
<N i="5">MaxGnbNum</N>
|
||||
<N i="6">MaxUser</N>
|
||||
<N i="7">OperationalState</N>
|
||||
<N i="8">RelativeCapacity</N>
|
||||
<N i="9">SbiServiceList</N>
|
||||
<N i="10">SnssaiList</N>
|
||||
<N i="11">UserLabel</N>
|
||||
<N i="12">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">SZ_T01</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">Enabled</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">-</V>
|
||||
<V i="11">AMF_SZ_T01</V>
|
||||
<V i="12">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
</DataFile>
|
||||
140
crontask/ftp/cm/20230806/CM-HX-AMF-16.1.1-20230806060000.xml
Normal file
140
crontask/ftp/cm/20230806/CM-HX-AMF-16.1.1-20230806060000.xml
Normal file
@@ -0,0 +1,140 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-06 06:00:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>AMF</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN12Amf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_T01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">AMF_SZ_T01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>IPResource</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">Id</N>
|
||||
<N i="2">InterfaceType</N>
|
||||
<N i="3">LocIpV4AddrList</N>
|
||||
<N i="4">LocIpV6AddrList</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">SZ_T01</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">AMF_SZ_T01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">ManagedBy</N>
|
||||
<N i="4">ManagementIpAddress</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">PatchInfo</N>
|
||||
<N i="7">SwVersion</N>
|
||||
<N i="8">UserLabel</N>
|
||||
<N i="9">VendorName</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_T01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">AMF_SZ_T01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AmfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">AmfGuamiList</N>
|
||||
<N i="3">Fqdn</N>
|
||||
<N i="4">Id</N>
|
||||
<N i="5">MaxGnbNum</N>
|
||||
<N i="6">MaxUser</N>
|
||||
<N i="7">OperationalState</N>
|
||||
<N i="8">RelativeCapacity</N>
|
||||
<N i="9">SbiServiceList</N>
|
||||
<N i="10">SnssaiList</N>
|
||||
<N i="11">UserLabel</N>
|
||||
<N i="12">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">SZ_T01</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">Enabled</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">-</V>
|
||||
<V i="11">AMF_SZ_T01</V>
|
||||
<V i="12">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN8Amf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_T01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">AMF_SZ_T01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN11Amf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_T01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">AMF_SZ_T01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
</DataFile>
|
||||
140
crontask/ftp/cm/20230806/CM-HX-AMF-16.1.1-20230806120000.xml
Normal file
140
crontask/ftp/cm/20230806/CM-HX-AMF-16.1.1-20230806120000.xml
Normal file
@@ -0,0 +1,140 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-06 12:00:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>AMF</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN8Amf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_T01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">AMF_SZ_T01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN11Amf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_T01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">AMF_SZ_T01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN12Amf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_T01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">AMF_SZ_T01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>IPResource</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">Id</N>
|
||||
<N i="2">InterfaceType</N>
|
||||
<N i="3">LocIpV4AddrList</N>
|
||||
<N i="4">LocIpV6AddrList</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">SZ_T01</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">AMF_SZ_T01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">ManagedBy</N>
|
||||
<N i="4">ManagementIpAddress</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">PatchInfo</N>
|
||||
<N i="7">SwVersion</N>
|
||||
<N i="8">UserLabel</N>
|
||||
<N i="9">VendorName</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_T01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">AMF_SZ_T01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AmfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">AmfGuamiList</N>
|
||||
<N i="3">Fqdn</N>
|
||||
<N i="4">Id</N>
|
||||
<N i="5">MaxGnbNum</N>
|
||||
<N i="6">MaxUser</N>
|
||||
<N i="7">OperationalState</N>
|
||||
<N i="8">RelativeCapacity</N>
|
||||
<N i="9">SbiServiceList</N>
|
||||
<N i="10">SnssaiList</N>
|
||||
<N i="11">UserLabel</N>
|
||||
<N i="12">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">SZ_T01</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">Enabled</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">-</V>
|
||||
<V i="11">AMF_SZ_T01</V>
|
||||
<V i="12">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
</DataFile>
|
||||
140
crontask/ftp/cm/20230806/CM-HX-AMF-16.1.1-20230806180000.xml
Normal file
140
crontask/ftp/cm/20230806/CM-HX-AMF-16.1.1-20230806180000.xml
Normal file
@@ -0,0 +1,140 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-06 18:00:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>AMF</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
<Objects>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">ManagedBy</N>
|
||||
<N i="4">ManagementIpAddress</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">PatchInfo</N>
|
||||
<N i="7">SwVersion</N>
|
||||
<N i="8">UserLabel</N>
|
||||
<N i="9">VendorName</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_T01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">AMF_SZ_T01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AmfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">AmfGuamiList</N>
|
||||
<N i="3">Fqdn</N>
|
||||
<N i="4">Id</N>
|
||||
<N i="5">MaxGnbNum</N>
|
||||
<N i="6">MaxUser</N>
|
||||
<N i="7">OperationalState</N>
|
||||
<N i="8">RelativeCapacity</N>
|
||||
<N i="9">SbiServiceList</N>
|
||||
<N i="10">SnssaiList</N>
|
||||
<N i="11">UserLabel</N>
|
||||
<N i="12">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">SZ_T01</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">Enabled</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">-</V>
|
||||
<V i="11">AMF_SZ_T01</V>
|
||||
<V i="12">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN8Amf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_T01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">AMF_SZ_T01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN11Amf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_T01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">AMF_SZ_T01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN12Amf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_T01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">AMF_SZ_T01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>IPResource</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">Id</N>
|
||||
<N i="2">InterfaceType</N>
|
||||
<N i="3">LocIpV4AddrList</N>
|
||||
<N i="4">LocIpV6AddrList</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">SZ_T01</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">AMF_SZ_T01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
</DataFile>
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-06 00:00:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>AUSF</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
</DataFile>
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-06 06:00:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>AUSF</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
</DataFile>
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-06 12:00:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>AUSF</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
</DataFile>
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-06 18:00:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>AUSF</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
</DataFile>
|
||||
138
crontask/ftp/cm/20230806/CM-HX-SMF-16.1.1-20230806000000.xml
Normal file
138
crontask/ftp/cm/20230806/CM-HX-SMF-16.1.1-20230806000000.xml
Normal file
@@ -0,0 +1,138 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-06 00:00:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>SMF</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
<Objects>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">ManagedBy</N>
|
||||
<N i="4">ManagementIpAddress</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">PatchInfo</N>
|
||||
<N i="7">SwVersion</N>
|
||||
<N i="8">UserLabel</N>
|
||||
<N i="9">VendorName</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">SMF_SZ_01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>SmfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">MaxPduSessions</N>
|
||||
<N i="5">MaxQfi</N>
|
||||
<N i="6">OperationalState</N>
|
||||
<N i="7">SbiServiceList</N>
|
||||
<N i="8">UpfList</N>
|
||||
<N i="9">UserLabel</N>
|
||||
<N i="10">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">Enabled</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">SMF_SZ_01</V>
|
||||
<V i="10">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AddrPool</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AddrSegList</N>
|
||||
<N i="2">AddrType</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">IpVersion</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">SMF_SZ_01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN7Smf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">SMF_SZ_01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN10Smf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">SMF_SZ_01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>IPResource</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">Id</N>
|
||||
<N i="2">InterfaceType</N>
|
||||
<N i="3">LocIpV4AddrList</N>
|
||||
<N i="4">LocIpV6AddrList</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">SZ_01</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">SMF_SZ_01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
</DataFile>
|
||||
138
crontask/ftp/cm/20230806/CM-HX-SMF-16.1.1-20230806060000.xml
Normal file
138
crontask/ftp/cm/20230806/CM-HX-SMF-16.1.1-20230806060000.xml
Normal file
@@ -0,0 +1,138 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-06 06:00:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>SMF</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN7Smf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">SMF_SZ_01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN10Smf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">SMF_SZ_01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>IPResource</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">Id</N>
|
||||
<N i="2">InterfaceType</N>
|
||||
<N i="3">LocIpV4AddrList</N>
|
||||
<N i="4">LocIpV6AddrList</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">SZ_01</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">SMF_SZ_01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">ManagedBy</N>
|
||||
<N i="4">ManagementIpAddress</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">PatchInfo</N>
|
||||
<N i="7">SwVersion</N>
|
||||
<N i="8">UserLabel</N>
|
||||
<N i="9">VendorName</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">SMF_SZ_01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>SmfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">MaxPduSessions</N>
|
||||
<N i="5">MaxQfi</N>
|
||||
<N i="6">OperationalState</N>
|
||||
<N i="7">SbiServiceList</N>
|
||||
<N i="8">UpfList</N>
|
||||
<N i="9">UserLabel</N>
|
||||
<N i="10">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">Enabled</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">SMF_SZ_01</V>
|
||||
<V i="10">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AddrPool</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AddrSegList</N>
|
||||
<N i="2">AddrType</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">IpVersion</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">SMF_SZ_01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
</DataFile>
|
||||
138
crontask/ftp/cm/20230806/CM-HX-SMF-16.1.1-20230806120000.xml
Normal file
138
crontask/ftp/cm/20230806/CM-HX-SMF-16.1.1-20230806120000.xml
Normal file
@@ -0,0 +1,138 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-06 12:00:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>SMF</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
<Objects>
|
||||
<ObjectType>SmfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">MaxPduSessions</N>
|
||||
<N i="5">MaxQfi</N>
|
||||
<N i="6">OperationalState</N>
|
||||
<N i="7">SbiServiceList</N>
|
||||
<N i="8">UpfList</N>
|
||||
<N i="9">UserLabel</N>
|
||||
<N i="10">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">Enabled</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">SMF_SZ_01</V>
|
||||
<V i="10">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AddrPool</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AddrSegList</N>
|
||||
<N i="2">AddrType</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">IpVersion</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">SMF_SZ_01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN7Smf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">SMF_SZ_01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN10Smf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">SMF_SZ_01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>IPResource</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">Id</N>
|
||||
<N i="2">InterfaceType</N>
|
||||
<N i="3">LocIpV4AddrList</N>
|
||||
<N i="4">LocIpV6AddrList</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">SZ_01</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">SMF_SZ_01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">ManagedBy</N>
|
||||
<N i="4">ManagementIpAddress</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">PatchInfo</N>
|
||||
<N i="7">SwVersion</N>
|
||||
<N i="8">UserLabel</N>
|
||||
<N i="9">VendorName</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">SMF_SZ_01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
</DataFile>
|
||||
138
crontask/ftp/cm/20230806/CM-HX-SMF-16.1.1-20230806180000.xml
Normal file
138
crontask/ftp/cm/20230806/CM-HX-SMF-16.1.1-20230806180000.xml
Normal file
@@ -0,0 +1,138 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-06 18:00:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>SMF</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN10Smf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">SMF_SZ_01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>IPResource</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">Id</N>
|
||||
<N i="2">InterfaceType</N>
|
||||
<N i="3">LocIpV4AddrList</N>
|
||||
<N i="4">LocIpV6AddrList</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">SZ_01</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">SMF_SZ_01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">ManagedBy</N>
|
||||
<N i="4">ManagementIpAddress</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">PatchInfo</N>
|
||||
<N i="7">SwVersion</N>
|
||||
<N i="8">UserLabel</N>
|
||||
<N i="9">VendorName</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">SMF_SZ_01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>SmfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">MaxPduSessions</N>
|
||||
<N i="5">MaxQfi</N>
|
||||
<N i="6">OperationalState</N>
|
||||
<N i="7">SbiServiceList</N>
|
||||
<N i="8">UpfList</N>
|
||||
<N i="9">UserLabel</N>
|
||||
<N i="10">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">Enabled</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">SMF_SZ_01</V>
|
||||
<V i="10">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AddrPool</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AddrSegList</N>
|
||||
<N i="2">AddrType</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">IpVersion</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">SMF_SZ_01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN7Smf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">SMF_SZ_01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
</DataFile>
|
||||
235
crontask/ftp/cm/20230806/CM-HX-UDM-16.1.1-20230806000000.xml
Normal file
235
crontask/ftp/cm/20230806/CM-HX-UDM-16.1.1-20230806000000.xml
Normal file
@@ -0,0 +1,235 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-06 00:00:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>UDM</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
<Objects>
|
||||
<ObjectType>UdmFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">SbiServiceList</N>
|
||||
<N i="6">UserLabel</N>
|
||||
<N i="7">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_011</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UDM_SZ_01</V>
|
||||
<V i="7">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_02</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UDM_SZ_02</V>
|
||||
<V i="7">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_03</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UDM_SZ_03</V>
|
||||
<V i="7">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_R01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UDM_SZ_R01</V>
|
||||
<V i="7">2dd55b4-9018-41f4-af75-28b6828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>UdrFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AddrSegList</N>
|
||||
<N i="2">AddrType</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">IpVersion</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_011</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_02</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_02</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_03</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_03</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_R01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_R01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AusfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_011</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UDM_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_02</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UDM_SZ_02</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_03</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UDM_SZ_03</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_R01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UDM_SZ_R01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>IPResource</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">Id</N>
|
||||
<N i="2">InterfaceType</N>
|
||||
<N i="3">LocIpV4AddrList</N>
|
||||
<N i="4">LocIpV6AddrList</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">SZ_011</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">SZ_02</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_02</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">SZ_03</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_03</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">SZ_R01</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_R01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">ManagedBy</N>
|
||||
<N i="4">ManagementIpAddress</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">PatchInfo</N>
|
||||
<N i="7">SwVersion</N>
|
||||
<N i="8">UserLabel</N>
|
||||
<N i="9">VendorName</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_011</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UDM_SZ_01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_02</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UDM_SZ_02</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_03</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UDM_SZ_03</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_R01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UDM_SZ_R01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
</DataFile>
|
||||
235
crontask/ftp/cm/20230806/CM-HX-UDM-16.1.1-20230806060000.xml
Normal file
235
crontask/ftp/cm/20230806/CM-HX-UDM-16.1.1-20230806060000.xml
Normal file
@@ -0,0 +1,235 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-06 06:00:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>UDM</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
<Objects>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">ManagedBy</N>
|
||||
<N i="4">ManagementIpAddress</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">PatchInfo</N>
|
||||
<N i="7">SwVersion</N>
|
||||
<N i="8">UserLabel</N>
|
||||
<N i="9">VendorName</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_011</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UDM_SZ_01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_02</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UDM_SZ_02</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_03</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UDM_SZ_03</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_R01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UDM_SZ_R01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>UdmFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">SbiServiceList</N>
|
||||
<N i="6">UserLabel</N>
|
||||
<N i="7">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_011</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UDM_SZ_01</V>
|
||||
<V i="7">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_02</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UDM_SZ_02</V>
|
||||
<V i="7">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_03</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UDM_SZ_03</V>
|
||||
<V i="7">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_R01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UDM_SZ_R01</V>
|
||||
<V i="7">2dd55b4-9018-41f4-af75-28b6828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>UdrFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AddrSegList</N>
|
||||
<N i="2">AddrType</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">IpVersion</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_011</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_02</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_02</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_03</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_03</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_R01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_R01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AusfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_011</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UDM_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_02</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UDM_SZ_02</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_03</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UDM_SZ_03</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_R01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UDM_SZ_R01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>IPResource</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">Id</N>
|
||||
<N i="2">InterfaceType</N>
|
||||
<N i="3">LocIpV4AddrList</N>
|
||||
<N i="4">LocIpV6AddrList</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">SZ_011</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">SZ_02</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_02</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">SZ_03</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_03</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">SZ_R01</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_R01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
</DataFile>
|
||||
235
crontask/ftp/cm/20230806/CM-HX-UDM-16.1.1-20230806120000.xml
Normal file
235
crontask/ftp/cm/20230806/CM-HX-UDM-16.1.1-20230806120000.xml
Normal file
@@ -0,0 +1,235 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-06 12:00:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>UDM</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
<Objects>
|
||||
<ObjectType>UdrFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AddrSegList</N>
|
||||
<N i="2">AddrType</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">IpVersion</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_011</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_02</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_02</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_03</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_03</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_R01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_R01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AusfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_011</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UDM_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_02</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UDM_SZ_02</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_03</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UDM_SZ_03</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_R01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UDM_SZ_R01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>IPResource</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">Id</N>
|
||||
<N i="2">InterfaceType</N>
|
||||
<N i="3">LocIpV4AddrList</N>
|
||||
<N i="4">LocIpV6AddrList</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">SZ_011</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">SZ_02</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_02</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">SZ_03</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_03</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">SZ_R01</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_R01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">ManagedBy</N>
|
||||
<N i="4">ManagementIpAddress</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">PatchInfo</N>
|
||||
<N i="7">SwVersion</N>
|
||||
<N i="8">UserLabel</N>
|
||||
<N i="9">VendorName</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_011</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UDM_SZ_01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_02</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UDM_SZ_02</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_03</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UDM_SZ_03</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_R01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UDM_SZ_R01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>UdmFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">SbiServiceList</N>
|
||||
<N i="6">UserLabel</N>
|
||||
<N i="7">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_011</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UDM_SZ_01</V>
|
||||
<V i="7">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_02</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UDM_SZ_02</V>
|
||||
<V i="7">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_03</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UDM_SZ_03</V>
|
||||
<V i="7">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_R01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UDM_SZ_R01</V>
|
||||
<V i="7">2dd55b4-9018-41f4-af75-28b6828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
</DataFile>
|
||||
235
crontask/ftp/cm/20230806/CM-HX-UDM-16.1.1-20230806180000.xml
Normal file
235
crontask/ftp/cm/20230806/CM-HX-UDM-16.1.1-20230806180000.xml
Normal file
@@ -0,0 +1,235 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-06 18:00:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>UDM</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
<Objects>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">ManagedBy</N>
|
||||
<N i="4">ManagementIpAddress</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">PatchInfo</N>
|
||||
<N i="7">SwVersion</N>
|
||||
<N i="8">UserLabel</N>
|
||||
<N i="9">VendorName</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_011</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UDM_SZ_01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_02</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UDM_SZ_02</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_03</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UDM_SZ_03</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_R01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UDM_SZ_R01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>UdmFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">SbiServiceList</N>
|
||||
<N i="6">UserLabel</N>
|
||||
<N i="7">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_011</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UDM_SZ_01</V>
|
||||
<V i="7">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_02</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UDM_SZ_02</V>
|
||||
<V i="7">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_03</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UDM_SZ_03</V>
|
||||
<V i="7">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_R01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UDM_SZ_R01</V>
|
||||
<V i="7">2dd55b4-9018-41f4-af75-28b6828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>UdrFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AddrSegList</N>
|
||||
<N i="2">AddrType</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">IpVersion</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_011</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_02</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_02</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_03</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_03</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_R01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_R01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AusfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_011</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UDM_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_02</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UDM_SZ_02</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_03</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UDM_SZ_03</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_R01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UDM_SZ_R01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>IPResource</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">Id</N>
|
||||
<N i="2">InterfaceType</N>
|
||||
<N i="3">LocIpV4AddrList</N>
|
||||
<N i="4">LocIpV6AddrList</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">SZ_011</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">SZ_02</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_02</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">SZ_03</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_03</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">SZ_R01</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_R01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
</DataFile>
|
||||
648
crontask/ftp/cm/20230806/CM-HX-UPF-16.1.1-20230806000000.xml
Normal file
648
crontask/ftp/cm/20230806/CM-HX-UPF-16.1.1-20230806000000.xml
Normal file
@@ -0,0 +1,648 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-06 00:00:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>UPF</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
<Objects>
|
||||
<ObjectType>UpfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">MaxQosFlows</N>
|
||||
<N i="4">MaxThroughput</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">UserLabel</N>
|
||||
<N i="7">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">UPF_SZ_01</V>
|
||||
<V i="7">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">UPF_SZ_RD_109</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">UPF_SZ_RD109</V>
|
||||
<V i="7">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">UPF_SZ_TEST_239</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">UPF_SZ_TEST_239</V>
|
||||
<V i="7">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN9Upf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">UPF_SZ_RD_109</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_RD109</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">UPF_SZ_TEST_239</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_TEST_239</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitRack</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">MaxPduSessions</N>
|
||||
<N i="5">MaxQfi</N>
|
||||
<N i="6">OperationalState</N>
|
||||
<N i="7">SbiServiceList</N>
|
||||
<N i="8">UpfList</N>
|
||||
<N i="9">UserLabel</N>
|
||||
<N i="10">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">Enabled</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_01</V>
|
||||
<V i="10">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">Enabled</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_RD109</V>
|
||||
<V i="10">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">Enabled</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_TEST_239</V>
|
||||
<V i="10">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitHost</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">DateOfLastService</N>
|
||||
<N i="2">DateOfManufacture</N>
|
||||
<N i="3">HardDiskSize</N>
|
||||
<N i="4">HostPosition</N>
|
||||
<N i="5">Id</N>
|
||||
<N i="6">ManufacturerData</N>
|
||||
<N i="7">MemSize</N>
|
||||
<N i="8">NumberOfCpu</N>
|
||||
<N i="9">SerialNumber</N>
|
||||
<N i="10">UserLabel</N>
|
||||
<N i="11">VendorName</N>
|
||||
<N i="12">VendorUnitFamilyType</N>
|
||||
<N i="13">VendorUnitTypeNumber</N>
|
||||
<N i="14">VersionNumber</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">SZ_01</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">UPF_SZ_01</V>
|
||||
<V i="11">Ruijie Network</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
<V i="14">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_RD_109</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">UPF_SZ_RD109</V>
|
||||
<V i="11">Ruijie Network</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
<V i="14">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">UPF_SZ_TEST_239</V>
|
||||
<V i="11">Ruijie Network</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
<V i="14">-</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN3Upf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">UPF_SZ_RD_109</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_RD109</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">UPF_SZ_TEST_239</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_TEST_239</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AmfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">UserLabel</N>
|
||||
<N i="6">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
<V i="6">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
<V i="6">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>UdrFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">UserLabel</N>
|
||||
<N i="6">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
<V i="6">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
<V i="6">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitPack</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">DateOfLastService</N>
|
||||
<N i="2">DateOfManufacture</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">ManufacturerData</N>
|
||||
<N i="5">PackPosition</N>
|
||||
<N i="6">PortsInformation</N>
|
||||
<N i="7">SerialNumber</N>
|
||||
<N i="8">SlotsOccupied</N>
|
||||
<N i="9">UserLabel</N>
|
||||
<N i="10">VendorName</N>
|
||||
<N i="11">VendorUnitFamilyType</N>
|
||||
<N i="12">VendorUnitTypeNumber</N>
|
||||
<N i="13">VersionNumber</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_01</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_RD109</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_TEST_239</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitAccessory</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AccessoryPosition</N>
|
||||
<N i="2">AccessoryType</N>
|
||||
<N i="3">AddtionalInformation</N>
|
||||
<N i="4">DateOfLastService</N>
|
||||
<N i="5">DateOfManufacture</N>
|
||||
<N i="6">Id</N>
|
||||
<N i="7">ManufacturerData</N>
|
||||
<N i="8">SerialNumber</N>
|
||||
<N i="9">UserLabel</N>
|
||||
<N i="10">VendorName</N>
|
||||
<N i="11">VendorUnitFamilyType</N>
|
||||
<N i="12">VendorUnitTypeNumber</N>
|
||||
<N i="13">VersionNumber</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">SZ_01</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_01</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UPF_SZ_RD_109</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_RD109</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UPF_SZ_TEST_239</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_TEST_239</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>SmfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">UserLabel</N>
|
||||
<N i="6">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
<V i="6">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
<V i="6">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AusfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">UserLabel</N>
|
||||
<N i="6">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
<V i="6">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
<V i="6">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>IPResource</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">Id</N>
|
||||
<N i="2">InterfaceType</N>
|
||||
<N i="3">LocIpV4AddrList</N>
|
||||
<N i="4">LocIpV6AddrList</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">SZ_01</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">UPF_SZ_RD_109</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">UPF_SZ_TEST_239</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">ManagedBy</N>
|
||||
<N i="4">ManagementIpAddress</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">PatchInfo</N>
|
||||
<N i="7">SwVersion</N>
|
||||
<N i="8">UserLabel</N>
|
||||
<N i="9">VendorName</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UPF_SZ_01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">UPF_SZ_RD_109</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UPF_SZ_RD109</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">UPF_SZ_TEST_239</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UPF_SZ_TEST_239</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitShelf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">DateOfLastService</N>
|
||||
<N i="2">DateOfManufacture</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">ManufacturerData</N>
|
||||
<N i="5">RackPosition</N>
|
||||
<N i="6">SerialNumber</N>
|
||||
<N i="7">UserLabel</N>
|
||||
<N i="8">VendorName</N>
|
||||
<N i="9">VendorUnitFamilyType</N>
|
||||
<N i="10">VendorUnitTypeNumber</N>
|
||||
<N i="11">VersionNumber</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">UPF_SZ_01</V>
|
||||
<V i="8">Ruijie Network</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">-</V>
|
||||
<V i="11">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">UPF_SZ_RD109</V>
|
||||
<V i="8">Ruijie Network</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">-</V>
|
||||
<V i="11">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">UPF_SZ_TEST_239</V>
|
||||
<V i="8">Ruijie Network</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">-</V>
|
||||
<V i="11">-</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
</DataFile>
|
||||
648
crontask/ftp/cm/20230806/CM-HX-UPF-16.1.1-20230806060000.xml
Normal file
648
crontask/ftp/cm/20230806/CM-HX-UPF-16.1.1-20230806060000.xml
Normal file
@@ -0,0 +1,648 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-06 06:00:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>UPF</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
<Objects>
|
||||
<ObjectType>UdrFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">UserLabel</N>
|
||||
<N i="6">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
<V i="6">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
<V i="6">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitPack</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">DateOfLastService</N>
|
||||
<N i="2">DateOfManufacture</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">ManufacturerData</N>
|
||||
<N i="5">PackPosition</N>
|
||||
<N i="6">PortsInformation</N>
|
||||
<N i="7">SerialNumber</N>
|
||||
<N i="8">SlotsOccupied</N>
|
||||
<N i="9">UserLabel</N>
|
||||
<N i="10">VendorName</N>
|
||||
<N i="11">VendorUnitFamilyType</N>
|
||||
<N i="12">VendorUnitTypeNumber</N>
|
||||
<N i="13">VersionNumber</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_01</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_RD109</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_TEST_239</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN9Upf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">UPF_SZ_RD_109</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_RD109</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">UPF_SZ_TEST_239</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_TEST_239</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>SmfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">UserLabel</N>
|
||||
<N i="6">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
<V i="6">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
<V i="6">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitRack</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">MaxPduSessions</N>
|
||||
<N i="5">MaxQfi</N>
|
||||
<N i="6">OperationalState</N>
|
||||
<N i="7">SbiServiceList</N>
|
||||
<N i="8">UpfList</N>
|
||||
<N i="9">UserLabel</N>
|
||||
<N i="10">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">Enabled</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_01</V>
|
||||
<V i="10">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">Enabled</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_RD109</V>
|
||||
<V i="10">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">Enabled</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_TEST_239</V>
|
||||
<V i="10">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN3Upf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">UPF_SZ_RD_109</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_RD109</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">UPF_SZ_TEST_239</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_TEST_239</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">ManagedBy</N>
|
||||
<N i="4">ManagementIpAddress</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">PatchInfo</N>
|
||||
<N i="7">SwVersion</N>
|
||||
<N i="8">UserLabel</N>
|
||||
<N i="9">VendorName</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UPF_SZ_01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">UPF_SZ_RD_109</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UPF_SZ_RD109</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">UPF_SZ_TEST_239</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UPF_SZ_TEST_239</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>UpfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">MaxQosFlows</N>
|
||||
<N i="4">MaxThroughput</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">UserLabel</N>
|
||||
<N i="7">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">UPF_SZ_01</V>
|
||||
<V i="7">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">UPF_SZ_RD_109</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">UPF_SZ_RD109</V>
|
||||
<V i="7">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">UPF_SZ_TEST_239</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">UPF_SZ_TEST_239</V>
|
||||
<V i="7">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AusfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">UserLabel</N>
|
||||
<N i="6">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
<V i="6">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
<V i="6">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AmfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">UserLabel</N>
|
||||
<N i="6">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
<V i="6">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
<V i="6">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>IPResource</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">Id</N>
|
||||
<N i="2">InterfaceType</N>
|
||||
<N i="3">LocIpV4AddrList</N>
|
||||
<N i="4">LocIpV6AddrList</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">SZ_01</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">UPF_SZ_RD_109</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">UPF_SZ_TEST_239</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitShelf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">DateOfLastService</N>
|
||||
<N i="2">DateOfManufacture</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">ManufacturerData</N>
|
||||
<N i="5">RackPosition</N>
|
||||
<N i="6">SerialNumber</N>
|
||||
<N i="7">UserLabel</N>
|
||||
<N i="8">VendorName</N>
|
||||
<N i="9">VendorUnitFamilyType</N>
|
||||
<N i="10">VendorUnitTypeNumber</N>
|
||||
<N i="11">VersionNumber</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">UPF_SZ_01</V>
|
||||
<V i="8">Ruijie Network</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">-</V>
|
||||
<V i="11">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">UPF_SZ_RD109</V>
|
||||
<V i="8">Ruijie Network</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">-</V>
|
||||
<V i="11">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">UPF_SZ_TEST_239</V>
|
||||
<V i="8">Ruijie Network</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">-</V>
|
||||
<V i="11">-</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitHost</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">DateOfLastService</N>
|
||||
<N i="2">DateOfManufacture</N>
|
||||
<N i="3">HardDiskSize</N>
|
||||
<N i="4">HostPosition</N>
|
||||
<N i="5">Id</N>
|
||||
<N i="6">ManufacturerData</N>
|
||||
<N i="7">MemSize</N>
|
||||
<N i="8">NumberOfCpu</N>
|
||||
<N i="9">SerialNumber</N>
|
||||
<N i="10">UserLabel</N>
|
||||
<N i="11">VendorName</N>
|
||||
<N i="12">VendorUnitFamilyType</N>
|
||||
<N i="13">VendorUnitTypeNumber</N>
|
||||
<N i="14">VersionNumber</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">SZ_01</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">UPF_SZ_01</V>
|
||||
<V i="11">Ruijie Network</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
<V i="14">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_RD_109</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">UPF_SZ_RD109</V>
|
||||
<V i="11">Ruijie Network</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
<V i="14">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">UPF_SZ_TEST_239</V>
|
||||
<V i="11">Ruijie Network</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
<V i="14">-</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitAccessory</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AccessoryPosition</N>
|
||||
<N i="2">AccessoryType</N>
|
||||
<N i="3">AddtionalInformation</N>
|
||||
<N i="4">DateOfLastService</N>
|
||||
<N i="5">DateOfManufacture</N>
|
||||
<N i="6">Id</N>
|
||||
<N i="7">ManufacturerData</N>
|
||||
<N i="8">SerialNumber</N>
|
||||
<N i="9">UserLabel</N>
|
||||
<N i="10">VendorName</N>
|
||||
<N i="11">VendorUnitFamilyType</N>
|
||||
<N i="12">VendorUnitTypeNumber</N>
|
||||
<N i="13">VersionNumber</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">SZ_01</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_01</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UPF_SZ_RD_109</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_RD109</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UPF_SZ_TEST_239</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_TEST_239</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
</DataFile>
|
||||
648
crontask/ftp/cm/20230806/CM-HX-UPF-16.1.1-20230806120000.xml
Normal file
648
crontask/ftp/cm/20230806/CM-HX-UPF-16.1.1-20230806120000.xml
Normal file
@@ -0,0 +1,648 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-06 12:00:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>UPF</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitHost</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">DateOfLastService</N>
|
||||
<N i="2">DateOfManufacture</N>
|
||||
<N i="3">HardDiskSize</N>
|
||||
<N i="4">HostPosition</N>
|
||||
<N i="5">Id</N>
|
||||
<N i="6">ManufacturerData</N>
|
||||
<N i="7">MemSize</N>
|
||||
<N i="8">NumberOfCpu</N>
|
||||
<N i="9">SerialNumber</N>
|
||||
<N i="10">UserLabel</N>
|
||||
<N i="11">VendorName</N>
|
||||
<N i="12">VendorUnitFamilyType</N>
|
||||
<N i="13">VendorUnitTypeNumber</N>
|
||||
<N i="14">VersionNumber</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">SZ_01</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">UPF_SZ_01</V>
|
||||
<V i="11">Ruijie Network</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
<V i="14">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_RD_109</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">UPF_SZ_RD109</V>
|
||||
<V i="11">Ruijie Network</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
<V i="14">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">UPF_SZ_TEST_239</V>
|
||||
<V i="11">Ruijie Network</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
<V i="14">-</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitRack</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">MaxPduSessions</N>
|
||||
<N i="5">MaxQfi</N>
|
||||
<N i="6">OperationalState</N>
|
||||
<N i="7">SbiServiceList</N>
|
||||
<N i="8">UpfList</N>
|
||||
<N i="9">UserLabel</N>
|
||||
<N i="10">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">Enabled</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_01</V>
|
||||
<V i="10">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">Enabled</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_RD109</V>
|
||||
<V i="10">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">Enabled</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_TEST_239</V>
|
||||
<V i="10">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN9Upf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">UPF_SZ_RD_109</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_RD109</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">UPF_SZ_TEST_239</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_TEST_239</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN3Upf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">UPF_SZ_RD_109</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_RD109</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">UPF_SZ_TEST_239</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_TEST_239</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AmfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">UserLabel</N>
|
||||
<N i="6">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
<V i="6">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
<V i="6">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AusfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">UserLabel</N>
|
||||
<N i="6">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
<V i="6">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
<V i="6">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>IPResource</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">Id</N>
|
||||
<N i="2">InterfaceType</N>
|
||||
<N i="3">LocIpV4AddrList</N>
|
||||
<N i="4">LocIpV6AddrList</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">SZ_01</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">UPF_SZ_RD_109</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">UPF_SZ_TEST_239</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitShelf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">DateOfLastService</N>
|
||||
<N i="2">DateOfManufacture</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">ManufacturerData</N>
|
||||
<N i="5">RackPosition</N>
|
||||
<N i="6">SerialNumber</N>
|
||||
<N i="7">UserLabel</N>
|
||||
<N i="8">VendorName</N>
|
||||
<N i="9">VendorUnitFamilyType</N>
|
||||
<N i="10">VendorUnitTypeNumber</N>
|
||||
<N i="11">VersionNumber</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">UPF_SZ_01</V>
|
||||
<V i="8">Ruijie Network</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">-</V>
|
||||
<V i="11">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">UPF_SZ_RD109</V>
|
||||
<V i="8">Ruijie Network</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">-</V>
|
||||
<V i="11">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">UPF_SZ_TEST_239</V>
|
||||
<V i="8">Ruijie Network</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">-</V>
|
||||
<V i="11">-</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitPack</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">DateOfLastService</N>
|
||||
<N i="2">DateOfManufacture</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">ManufacturerData</N>
|
||||
<N i="5">PackPosition</N>
|
||||
<N i="6">PortsInformation</N>
|
||||
<N i="7">SerialNumber</N>
|
||||
<N i="8">SlotsOccupied</N>
|
||||
<N i="9">UserLabel</N>
|
||||
<N i="10">VendorName</N>
|
||||
<N i="11">VendorUnitFamilyType</N>
|
||||
<N i="12">VendorUnitTypeNumber</N>
|
||||
<N i="13">VersionNumber</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_01</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_RD109</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_TEST_239</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitAccessory</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AccessoryPosition</N>
|
||||
<N i="2">AccessoryType</N>
|
||||
<N i="3">AddtionalInformation</N>
|
||||
<N i="4">DateOfLastService</N>
|
||||
<N i="5">DateOfManufacture</N>
|
||||
<N i="6">Id</N>
|
||||
<N i="7">ManufacturerData</N>
|
||||
<N i="8">SerialNumber</N>
|
||||
<N i="9">UserLabel</N>
|
||||
<N i="10">VendorName</N>
|
||||
<N i="11">VendorUnitFamilyType</N>
|
||||
<N i="12">VendorUnitTypeNumber</N>
|
||||
<N i="13">VersionNumber</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">SZ_01</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_01</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UPF_SZ_RD_109</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_RD109</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UPF_SZ_TEST_239</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_TEST_239</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>UdrFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">UserLabel</N>
|
||||
<N i="6">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
<V i="6">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
<V i="6">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">ManagedBy</N>
|
||||
<N i="4">ManagementIpAddress</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">PatchInfo</N>
|
||||
<N i="7">SwVersion</N>
|
||||
<N i="8">UserLabel</N>
|
||||
<N i="9">VendorName</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UPF_SZ_01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">UPF_SZ_RD_109</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UPF_SZ_RD109</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">UPF_SZ_TEST_239</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UPF_SZ_TEST_239</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>UpfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">MaxQosFlows</N>
|
||||
<N i="4">MaxThroughput</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">UserLabel</N>
|
||||
<N i="7">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">UPF_SZ_01</V>
|
||||
<V i="7">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">UPF_SZ_RD_109</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">UPF_SZ_RD109</V>
|
||||
<V i="7">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">UPF_SZ_TEST_239</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">UPF_SZ_TEST_239</V>
|
||||
<V i="7">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>SmfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">UserLabel</N>
|
||||
<N i="6">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
<V i="6">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
<V i="6">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
</DataFile>
|
||||
648
crontask/ftp/cm/20230806/CM-HX-UPF-16.1.1-20230806180000.xml
Normal file
648
crontask/ftp/cm/20230806/CM-HX-UPF-16.1.1-20230806180000.xml
Normal file
@@ -0,0 +1,648 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-06 18:00:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>UPF</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
<Objects>
|
||||
<ObjectType>IPResource</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">Id</N>
|
||||
<N i="2">InterfaceType</N>
|
||||
<N i="3">LocIpV4AddrList</N>
|
||||
<N i="4">LocIpV6AddrList</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">SZ_01</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">UPF_SZ_RD_109</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">UPF_SZ_TEST_239</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitRack</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">MaxPduSessions</N>
|
||||
<N i="5">MaxQfi</N>
|
||||
<N i="6">OperationalState</N>
|
||||
<N i="7">SbiServiceList</N>
|
||||
<N i="8">UpfList</N>
|
||||
<N i="9">UserLabel</N>
|
||||
<N i="10">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">Enabled</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_01</V>
|
||||
<V i="10">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">Enabled</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_RD109</V>
|
||||
<V i="10">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">Enabled</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_TEST_239</V>
|
||||
<V i="10">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN9Upf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">UPF_SZ_RD_109</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_RD109</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">UPF_SZ_TEST_239</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_TEST_239</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitPack</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">DateOfLastService</N>
|
||||
<N i="2">DateOfManufacture</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">ManufacturerData</N>
|
||||
<N i="5">PackPosition</N>
|
||||
<N i="6">PortsInformation</N>
|
||||
<N i="7">SerialNumber</N>
|
||||
<N i="8">SlotsOccupied</N>
|
||||
<N i="9">UserLabel</N>
|
||||
<N i="10">VendorName</N>
|
||||
<N i="11">VendorUnitFamilyType</N>
|
||||
<N i="12">VendorUnitTypeNumber</N>
|
||||
<N i="13">VersionNumber</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_01</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_RD109</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_TEST_239</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>UdrFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">UserLabel</N>
|
||||
<N i="6">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
<V i="6">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
<V i="6">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitAccessory</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AccessoryPosition</N>
|
||||
<N i="2">AccessoryType</N>
|
||||
<N i="3">AddtionalInformation</N>
|
||||
<N i="4">DateOfLastService</N>
|
||||
<N i="5">DateOfManufacture</N>
|
||||
<N i="6">Id</N>
|
||||
<N i="7">ManufacturerData</N>
|
||||
<N i="8">SerialNumber</N>
|
||||
<N i="9">UserLabel</N>
|
||||
<N i="10">VendorName</N>
|
||||
<N i="11">VendorUnitFamilyType</N>
|
||||
<N i="12">VendorUnitTypeNumber</N>
|
||||
<N i="13">VersionNumber</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">SZ_01</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_01</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UPF_SZ_RD_109</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_RD109</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UPF_SZ_TEST_239</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_TEST_239</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>UpfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">MaxQosFlows</N>
|
||||
<N i="4">MaxThroughput</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">UserLabel</N>
|
||||
<N i="7">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">UPF_SZ_01</V>
|
||||
<V i="7">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">UPF_SZ_RD_109</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">UPF_SZ_RD109</V>
|
||||
<V i="7">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">UPF_SZ_TEST_239</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">UPF_SZ_TEST_239</V>
|
||||
<V i="7">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN3Upf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">UPF_SZ_RD_109</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_RD109</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">UPF_SZ_TEST_239</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_TEST_239</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AmfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">UserLabel</N>
|
||||
<N i="6">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
<V i="6">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
<V i="6">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AusfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">UserLabel</N>
|
||||
<N i="6">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
<V i="6">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
<V i="6">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">ManagedBy</N>
|
||||
<N i="4">ManagementIpAddress</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">PatchInfo</N>
|
||||
<N i="7">SwVersion</N>
|
||||
<N i="8">UserLabel</N>
|
||||
<N i="9">VendorName</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UPF_SZ_01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">UPF_SZ_RD_109</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UPF_SZ_RD109</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">UPF_SZ_TEST_239</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UPF_SZ_TEST_239</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitHost</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">DateOfLastService</N>
|
||||
<N i="2">DateOfManufacture</N>
|
||||
<N i="3">HardDiskSize</N>
|
||||
<N i="4">HostPosition</N>
|
||||
<N i="5">Id</N>
|
||||
<N i="6">ManufacturerData</N>
|
||||
<N i="7">MemSize</N>
|
||||
<N i="8">NumberOfCpu</N>
|
||||
<N i="9">SerialNumber</N>
|
||||
<N i="10">UserLabel</N>
|
||||
<N i="11">VendorName</N>
|
||||
<N i="12">VendorUnitFamilyType</N>
|
||||
<N i="13">VendorUnitTypeNumber</N>
|
||||
<N i="14">VersionNumber</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">SZ_01</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">UPF_SZ_01</V>
|
||||
<V i="11">Ruijie Network</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
<V i="14">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_RD_109</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">UPF_SZ_RD109</V>
|
||||
<V i="11">Ruijie Network</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
<V i="14">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">UPF_SZ_TEST_239</V>
|
||||
<V i="11">Ruijie Network</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
<V i="14">-</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitShelf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">DateOfLastService</N>
|
||||
<N i="2">DateOfManufacture</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">ManufacturerData</N>
|
||||
<N i="5">RackPosition</N>
|
||||
<N i="6">SerialNumber</N>
|
||||
<N i="7">UserLabel</N>
|
||||
<N i="8">VendorName</N>
|
||||
<N i="9">VendorUnitFamilyType</N>
|
||||
<N i="10">VendorUnitTypeNumber</N>
|
||||
<N i="11">VersionNumber</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">UPF_SZ_01</V>
|
||||
<V i="8">Ruijie Network</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">-</V>
|
||||
<V i="11">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">UPF_SZ_RD109</V>
|
||||
<V i="8">Ruijie Network</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">-</V>
|
||||
<V i="11">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">UPF_SZ_TEST_239</V>
|
||||
<V i="8">Ruijie Network</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">-</V>
|
||||
<V i="11">-</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>SmfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">UserLabel</N>
|
||||
<N i="6">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
<V i="6">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
<V i="6">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
</DataFile>
|
||||
140
crontask/ftp/cm/20230810/CM-HX-AMF-16.1.1-20230810000001.xml
Normal file
140
crontask/ftp/cm/20230810/CM-HX-AMF-16.1.1-20230810000001.xml
Normal file
@@ -0,0 +1,140 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-10 00:00:01</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>AMF</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
<Objects>
|
||||
<ObjectType>IPResource</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">Id</N>
|
||||
<N i="2">InterfaceType</N>
|
||||
<N i="3">LocIpV4AddrList</N>
|
||||
<N i="4">LocIpV6AddrList</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">SZ_T01</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">AMF_SZ_T01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">ManagedBy</N>
|
||||
<N i="4">ManagementIpAddress</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">PatchInfo</N>
|
||||
<N i="7">SwVersion</N>
|
||||
<N i="8">UserLabel</N>
|
||||
<N i="9">VendorName</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_T01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">AMF_SZ_T01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AmfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">AmfGuamiList</N>
|
||||
<N i="3">Fqdn</N>
|
||||
<N i="4">Id</N>
|
||||
<N i="5">MaxGnbNum</N>
|
||||
<N i="6">MaxUser</N>
|
||||
<N i="7">OperationalState</N>
|
||||
<N i="8">RelativeCapacity</N>
|
||||
<N i="9">SbiServiceList</N>
|
||||
<N i="10">SnssaiList</N>
|
||||
<N i="11">UserLabel</N>
|
||||
<N i="12">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">SZ_T01</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">Enabled</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">-</V>
|
||||
<V i="11">AMF_SZ_T01</V>
|
||||
<V i="12">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN8Amf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_T01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">AMF_SZ_T01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN11Amf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_T01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">AMF_SZ_T01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN12Amf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXAMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="AMF_SZ_T01" PVFlag="PNF" VMID="kylin10.0-001-AMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_T01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">AMF_SZ_T01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
</DataFile>
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-10 00:00:01</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>AUSF</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
</DataFile>
|
||||
138
crontask/ftp/cm/20230810/CM-HX-SMF-16.1.1-20230810000001.xml
Normal file
138
crontask/ftp/cm/20230810/CM-HX-SMF-16.1.1-20230810000001.xml
Normal file
@@ -0,0 +1,138 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-10 00:00:01</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>SMF</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
<Objects>
|
||||
<ObjectType>SmfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">MaxPduSessions</N>
|
||||
<N i="5">MaxQfi</N>
|
||||
<N i="6">OperationalState</N>
|
||||
<N i="7">SbiServiceList</N>
|
||||
<N i="8">UpfList</N>
|
||||
<N i="9">UserLabel</N>
|
||||
<N i="10">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">Enabled</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">SMF_SZ_01</V>
|
||||
<V i="10">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AddrPool</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AddrSegList</N>
|
||||
<N i="2">AddrType</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">IpVersion</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">SMF_SZ_01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN7Smf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">SMF_SZ_01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN10Smf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">SMF_SZ_01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>IPResource</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">Id</N>
|
||||
<N i="2">InterfaceType</N>
|
||||
<N i="3">LocIpV4AddrList</N>
|
||||
<N i="4">LocIpV6AddrList</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">SZ_01</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">SMF_SZ_01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">ManagedBy</N>
|
||||
<N i="4">ManagementIpAddress</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">PatchInfo</N>
|
||||
<N i="7">SwVersion</N>
|
||||
<N i="8">UserLabel</N>
|
||||
<N i="9">VendorName</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXSMFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="SMF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-SMF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">SMF_SZ_01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
</DataFile>
|
||||
235
crontask/ftp/cm/20230810/CM-HX-UDM-16.1.1-20230810000001.xml
Normal file
235
crontask/ftp/cm/20230810/CM-HX-UDM-16.1.1-20230810000001.xml
Normal file
@@ -0,0 +1,235 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-10 00:00:01</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>UDM</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
<Objects>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">ManagedBy</N>
|
||||
<N i="4">ManagementIpAddress</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">PatchInfo</N>
|
||||
<N i="7">SwVersion</N>
|
||||
<N i="8">UserLabel</N>
|
||||
<N i="9">VendorName</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_011</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UDM_SZ_01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_02</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UDM_SZ_02</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_03</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UDM_SZ_03</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_R01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UDM_SZ_R01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>UdmFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">SbiServiceList</N>
|
||||
<N i="6">UserLabel</N>
|
||||
<N i="7">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_011</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UDM_SZ_01</V>
|
||||
<V i="7">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_02</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UDM_SZ_02</V>
|
||||
<V i="7">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_03</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UDM_SZ_03</V>
|
||||
<V i="7">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_R01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UDM_SZ_R01</V>
|
||||
<V i="7">2dd55b4-9018-41f4-af75-28b6828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>UdrFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AddrSegList</N>
|
||||
<N i="2">AddrType</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">IpVersion</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_011</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_02</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_02</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_03</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_03</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">Static</V>
|
||||
<V i="3">SZ_R01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_R01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AusfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_011</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UDM_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_02</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UDM_SZ_02</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_03</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UDM_SZ_03</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_R01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UDM_SZ_R01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>IPResource</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">Id</N>
|
||||
<N i="2">InterfaceType</N>
|
||||
<N i="3">LocIpV4AddrList</N>
|
||||
<N i="4">LocIpV6AddrList</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUDMBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_01" PVFlag="VNF" VMID="kylin10.0-001-UDM" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">SZ_011</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_02" PVFlag="PNF" VMID="kylin10.0-002-UDM" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">SZ_02</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_02</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_03" PVFlag="PNF" VMID="kylin10.0-003-UDM" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">SZ_03</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_03</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUDMBJ0D04" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UDM_SZ_R01" PVFlag="PNF" VMID="kylin10.0-004-UDM" VNFInstanceID="2dd55b4-9018-41f4-af75-28b6828788">
|
||||
<V i="1">SZ_R01</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UDM_SZ_R01</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
</DataFile>
|
||||
648
crontask/ftp/cm/20230810/CM-HX-UPF-16.1.1-20230810000001.xml
Normal file
648
crontask/ftp/cm/20230810/CM-HX-UPF-16.1.1-20230810000001.xml
Normal file
@@ -0,0 +1,648 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<DataFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///usr/loal/omc/etc/schema/cm-schema.xsd">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-10 00:00:01</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>UPF</ElementType>
|
||||
<CmVersion>16.1.1</CmVersion>
|
||||
</FileHeader>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitPack</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">DateOfLastService</N>
|
||||
<N i="2">DateOfManufacture</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">ManufacturerData</N>
|
||||
<N i="5">PackPosition</N>
|
||||
<N i="6">PortsInformation</N>
|
||||
<N i="7">SerialNumber</N>
|
||||
<N i="8">SlotsOccupied</N>
|
||||
<N i="9">UserLabel</N>
|
||||
<N i="10">VendorName</N>
|
||||
<N i="11">VendorUnitFamilyType</N>
|
||||
<N i="12">VendorUnitTypeNumber</N>
|
||||
<N i="13">VersionNumber</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_01</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_RD109</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_TEST_239</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitAccessory</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AccessoryPosition</N>
|
||||
<N i="2">AccessoryType</N>
|
||||
<N i="3">AddtionalInformation</N>
|
||||
<N i="4">DateOfLastService</N>
|
||||
<N i="5">DateOfManufacture</N>
|
||||
<N i="6">Id</N>
|
||||
<N i="7">ManufacturerData</N>
|
||||
<N i="8">SerialNumber</N>
|
||||
<N i="9">UserLabel</N>
|
||||
<N i="10">VendorName</N>
|
||||
<N i="11">VendorUnitFamilyType</N>
|
||||
<N i="12">VendorUnitTypeNumber</N>
|
||||
<N i="13">VersionNumber</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">SZ_01</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_01</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UPF_SZ_RD_109</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_RD109</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">UPF_SZ_TEST_239</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_TEST_239</V>
|
||||
<V i="10">Ruijie Network</V>
|
||||
<V i="11">-</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>SmfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">UserLabel</N>
|
||||
<N i="6">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
<V i="6">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
<V i="6">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>UdrFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">UserLabel</N>
|
||||
<N i="6">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
<V i="6">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
<V i="6">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>IPResource</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">Id</N>
|
||||
<N i="2">InterfaceType</N>
|
||||
<N i="3">LocIpV4AddrList</N>
|
||||
<N i="4">LocIpV6AddrList</N>
|
||||
<N i="5">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">SZ_01</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">UPF_SZ_RD_109</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">UPF_SZ_TEST_239</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN9Upf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">UPF_SZ_RD_109</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_RD109</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">UPF_SZ_TEST_239</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_TEST_239</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AusfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">UserLabel</N>
|
||||
<N i="6">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
<V i="6">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
<V i="6">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">ManagedBy</N>
|
||||
<N i="4">ManagementIpAddress</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">PatchInfo</N>
|
||||
<N i="7">SwVersion</N>
|
||||
<N i="8">UserLabel</N>
|
||||
<N i="9">VendorName</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UPF_SZ_01</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">UPF_SZ_RD_109</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UPF_SZ_RD109</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">UPF_SZ_TEST_239</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">16.1.1</V>
|
||||
<V i="8">UPF_SZ_TEST_239</V>
|
||||
<V i="9">Ruijie Network</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitRack</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">MaxPduSessions</N>
|
||||
<N i="5">MaxQfi</N>
|
||||
<N i="6">OperationalState</N>
|
||||
<N i="7">SbiServiceList</N>
|
||||
<N i="8">UpfList</N>
|
||||
<N i="9">UserLabel</N>
|
||||
<N i="10">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">Enabled</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_01</V>
|
||||
<V i="10">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">Enabled</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_RD109</V>
|
||||
<V i="10">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">Enabled</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">UPF_SZ_TEST_239</V>
|
||||
<V i="10">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>UpfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">MaxQosFlows</N>
|
||||
<N i="4">MaxThroughput</N>
|
||||
<N i="5">OperationalState</N>
|
||||
<N i="6">UserLabel</N>
|
||||
<N i="7">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">UPF_SZ_01</V>
|
||||
<V i="7">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">UPF_SZ_RD_109</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">UPF_SZ_RD109</V>
|
||||
<V i="7">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">UPF_SZ_TEST_239</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">Enabled</V>
|
||||
<V i="6">UPF_SZ_TEST_239</V>
|
||||
<V i="7">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>EpRpDynN3Upf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">FarIpSubnetworkList</N>
|
||||
<N i="2">Id</N>
|
||||
<N i="3">LocIpAddrList</N>
|
||||
<N i="4">UserLabel</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">SZ_01</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_01</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">UPF_SZ_RD_109</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_RD109</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">UPF_SZ_TEST_239</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">UPF_SZ_TEST_239</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitShelf</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">DateOfLastService</N>
|
||||
<N i="2">DateOfManufacture</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">ManufacturerData</N>
|
||||
<N i="5">RackPosition</N>
|
||||
<N i="6">SerialNumber</N>
|
||||
<N i="7">UserLabel</N>
|
||||
<N i="8">VendorName</N>
|
||||
<N i="9">VendorUnitFamilyType</N>
|
||||
<N i="10">VendorUnitTypeNumber</N>
|
||||
<N i="11">VersionNumber</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">UPF_SZ_01</V>
|
||||
<V i="8">Ruijie Network</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">-</V>
|
||||
<V i="11">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">UPF_SZ_RD109</V>
|
||||
<V i="8">Ruijie Network</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">-</V>
|
||||
<V i="11">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">-</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">UPF_SZ_TEST_239</V>
|
||||
<V i="8">Ruijie Network</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">-</V>
|
||||
<V i="11">-</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>InventoryUnitHost</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">DateOfLastService</N>
|
||||
<N i="2">DateOfManufacture</N>
|
||||
<N i="3">HardDiskSize</N>
|
||||
<N i="4">HostPosition</N>
|
||||
<N i="5">Id</N>
|
||||
<N i="6">ManufacturerData</N>
|
||||
<N i="7">MemSize</N>
|
||||
<N i="8">NumberOfCpu</N>
|
||||
<N i="9">SerialNumber</N>
|
||||
<N i="10">UserLabel</N>
|
||||
<N i="11">VendorName</N>
|
||||
<N i="12">VendorUnitFamilyType</N>
|
||||
<N i="13">VendorUnitTypeNumber</N>
|
||||
<N i="14">VersionNumber</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">SZ_01</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">UPF_SZ_01</V>
|
||||
<V i="11">Ruijie Network</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
<V i="14">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_RD_109</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">UPF_SZ_RD109</V>
|
||||
<V i="11">Ruijie Network</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
<V i="14">-</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">-</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">-</V>
|
||||
<V i="4">-</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">-</V>
|
||||
<V i="7">-</V>
|
||||
<V i="8">-</V>
|
||||
<V i="9">-</V>
|
||||
<V i="10">UPF_SZ_TEST_239</V>
|
||||
<V i="11">Ruijie Network</V>
|
||||
<V i="12">-</V>
|
||||
<V i="13">-</V>
|
||||
<V i="14">-</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
<Objects>
|
||||
<ObjectType>AmfFunction</ObjectType>
|
||||
<FieldName>
|
||||
<N i="1">AdministrativeState</N>
|
||||
<N i="2">Fqdn</N>
|
||||
<N i="3">Id</N>
|
||||
<N i="4">OperationalState</N>
|
||||
<N i="5">UserLabel</N>
|
||||
<N i="6">VnfInstanceId</N>
|
||||
</FieldName>
|
||||
<FieldValue>
|
||||
<Object rmUID="01000HXUPFBJ0D01" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_01" PVFlag="PNF" VMID="kylin10.0-001-UPF" VNFInstanceID="2ad55b4-6018-41f4-af45-28b3828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">SZ_01</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_01</V>
|
||||
<V i="6">2ad55b4-6018-41f4-af45-28b3828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D02" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_RD109" PVFlag="PNF" VMID="kylin10.0-002-UPF" VNFInstanceID="2bd55b4-7018-41f4-af55-28b4828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_RD_109</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_RD109</V>
|
||||
<V i="6">2bd55b4-7018-41f4-af55-28b4828788</V>
|
||||
</Object>
|
||||
<Object rmUID="01000HXUPFBJ0D03" Dn="DC=www.ruijie.com.cn,SubNetwork=10001,SubNetwork=114214,ManagedElement=325" UserLabel="UPF_SZ_TEST_239" PVFlag="PNF" VMID="kylin10.0-003-UPF" VNFInstanceID="2cd55b4-8018-41f4-af65-28b5828788">
|
||||
<V i="1">Unlocked</V>
|
||||
<V i="2">-</V>
|
||||
<V i="3">UPF_SZ_TEST_239</V>
|
||||
<V i="4">Enabled</V>
|
||||
<V i="5">UPF_SZ_TEST_239</V>
|
||||
<V i="6">2cd55b4-8018-41f4-af65-28b5828788</V>
|
||||
</Object>
|
||||
</FieldValue>
|
||||
</Objects>
|
||||
</DataFile>
|
||||
@@ -0,0 +1,243 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<PmFile xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-10 02:20:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<Period>15</Period>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>SMF</ElementType>
|
||||
<PmVersion>16.1.1</PmVersion>
|
||||
<StartTime>2023-08-10 02:00:00 +0800 CST</StartTime>
|
||||
</FileHeader>
|
||||
<Measurements>
|
||||
<ObjectType>SmfFunction</ObjectType>
|
||||
<PmName>
|
||||
<N i="1">SMF.FailCreatePduSession._Ns.46</N>
|
||||
<N i="2">SMF.FailCreatePduSession._Dnn.46</N>
|
||||
<N i="3">SMF.FailCreatePduSession._Dnn.82</N>
|
||||
<N i="4">SMF.AttSmfModifyPduSession._Ns</N>
|
||||
<N i="5">SMF.AttCreatePduSession._Ns</N>
|
||||
<N i="6">SMF.FailCreatePduSession.46</N>
|
||||
<N i="7">SMF.FailCreatePduSession._Ns</N>
|
||||
<N i="8">SMF.FailCreatePduSession._Ns.28</N>
|
||||
<N i="9">SMF.FailCreatePduSession._Ns.27</N>
|
||||
<N i="10">SMF.FailCreatePduSession._Ns.33</N>
|
||||
<N i="11">SMF.SuccSmfModifyPduSession._Dnn</N>
|
||||
<N i="12">SMF.SuccSmfModifyBearerResponse.Epsfb</N>
|
||||
<N i="13">SMF.SuccCreatePduSession._Ns</N>
|
||||
<N i="14">SMF.FailCreatePduSession</N>
|
||||
<N i="15">SMF.FailCreatePduSession.29</N>
|
||||
<N i="16">SMF.FailCreatePduSession._Dnn</N>
|
||||
<N i="17">SMF.FailCreatePduSession._Dnn.29</N>
|
||||
<N i="18">SMF.FailCreatePduSession._Dnn.33</N>
|
||||
<N i="19">SMF.FailCreatePduSession.68</N>
|
||||
<N i="20">SMF.FailCreatePduSession._Ns.82</N>
|
||||
<N i="21">SMF.SuccSmfModifyPduSession._Ns</N>
|
||||
<N i="22">SMF.AttSmfModifyPduSession.Epsfb</N>
|
||||
<N i="23">SMF.FailSmfModifyPduSession._Dnn</N>
|
||||
<N i="24">SMF.FailCreatePduSession._Cause</N>
|
||||
<N i="25">SMF.FailCreatePduSession.33</N>
|
||||
<N i="26">SMF.FailCreatePduSession.26</N>
|
||||
<N i="27">SMF.FailCreatePduSession._Dnn.68</N>
|
||||
<N i="28">SMF.AttCreatePduSession._Dnn</N>
|
||||
<N i="29">SMF.SuccCreatePduSession</N>
|
||||
<N i="30">SMF.FailCreatePduSession._Ns.29</N>
|
||||
<N i="31">SMF.FailCreatePduSession._Dnn.28</N>
|
||||
<N i="32">SMF.AttSmfModifyPduSession</N>
|
||||
<N i="33">SMF.FailSmfModifyPduSession</N>
|
||||
<N i="34">SMF.FailSmfModifyPduSession._Ns</N>
|
||||
<N i="35">SMF.AttCreatePduSession</N>
|
||||
<N i="36">SMF.FailCreatePduSession._Ns.68</N>
|
||||
<N i="37">SMF.AttSmfModifyPduSession._Dnn</N>
|
||||
<N i="38">SMF.SuccCreatePduSession._Dnn</N>
|
||||
<N i="39">SMF.FailCreatePduSession.82</N>
|
||||
<N i="40">SMF.FailCreatePduSession.28</N>
|
||||
<N i="41">SMF.FailCreatePduSession.27</N>
|
||||
<N i="42">SMF.SuccSmfModifyPduSession</N>
|
||||
</PmName>
|
||||
<PmData>
|
||||
<Object rmUID="" Dn="" UserLabel="">
|
||||
<V i="6">0</V>
|
||||
<V i="12">0</V>
|
||||
<V i="14">0</V>
|
||||
<V i="15">0</V>
|
||||
<V i="19">0</V>
|
||||
<V i="22">0</V>
|
||||
<V i="25">0</V>
|
||||
<V i="26">0</V>
|
||||
<V i="29">0</V>
|
||||
<V i="32">0</V>
|
||||
<V i="33">0</V>
|
||||
<V i="35">0</V>
|
||||
<V i="39">0</V>
|
||||
<V i="40">0</V>
|
||||
<V i="41">0</V>
|
||||
<V i="42">0</V>
|
||||
<CV i="1"></CV>
|
||||
<CV i="2"></CV>
|
||||
<CV i="3"></CV>
|
||||
<CV i="4"></CV>
|
||||
<CV i="5"></CV>
|
||||
<CV i="7"></CV>
|
||||
<CV i="8"></CV>
|
||||
<CV i="9"></CV>
|
||||
<CV i="10"></CV>
|
||||
<CV i="11"></CV>
|
||||
<CV i="13"></CV>
|
||||
<CV i="16"></CV>
|
||||
<CV i="17"></CV>
|
||||
<CV i="18"></CV>
|
||||
<CV i="20"></CV>
|
||||
<CV i="21"></CV>
|
||||
<CV i="23"></CV>
|
||||
<CV i="24"></CV>
|
||||
<CV i="27"></CV>
|
||||
<CV i="28"></CV>
|
||||
<CV i="30"></CV>
|
||||
<CV i="31"></CV>
|
||||
<CV i="34"></CV>
|
||||
<CV i="36"></CV>
|
||||
<CV i="37"></CV>
|
||||
<CV i="38"></CV>
|
||||
</Object>
|
||||
</PmData>
|
||||
</Measurements>
|
||||
<Measurements>
|
||||
<ObjectType>EpRpDynN7Smf</ObjectType>
|
||||
<PmName>
|
||||
<N i="1">SMF.SmPlcyCtrlCreateSucc</N>
|
||||
<N i="2">SMF.SmPlcyCtrlDeleteReq</N>
|
||||
<N i="3">SMF.SmPlcyCtrlUpdateReq</N>
|
||||
<N i="4">SMF.SmPlcyCtrlUpdateSucc</N>
|
||||
<N i="5">SMF.SmPlcyCtrlDeleteSucc</N>
|
||||
<N i="6">SMF.SmPlcyCtrlCreateReq</N>
|
||||
</PmName>
|
||||
<PmData>
|
||||
<Object rmUID="" Dn="" UserLabel="">
|
||||
<V i="1">0</V>
|
||||
<V i="2">0</V>
|
||||
<V i="3">0</V>
|
||||
<V i="4">0</V>
|
||||
<V i="5">0</V>
|
||||
<V i="6">0</V>
|
||||
</Object>
|
||||
</PmData>
|
||||
</Measurements>
|
||||
<Measurements>
|
||||
<ObjectType>EpRpDynN10Smf</ObjectType>
|
||||
<PmName>
|
||||
<N i="1">SMF.UecmRegFail.Unknown5GSub</N>
|
||||
<N i="2">SMF.UecmRegFail.RoamNotAllowed</N>
|
||||
<N i="3">SMF.UecmRegReq</N>
|
||||
<N i="4">SMF.UecmDeregReq</N>
|
||||
<N i="5">SMF.UecmRegFail._Cause</N>
|
||||
<N i="6">SMF.UecmRegFail.DnnNotAllowed</N>
|
||||
<N i="7">SMF.UecmDeregSucc</N>
|
||||
<N i="8">SMF.UecmRegSucc</N>
|
||||
<N i="9">SMF.UecmRegFail</N>
|
||||
</PmName>
|
||||
<PmData>
|
||||
<Object rmUID="" Dn="" UserLabel="">
|
||||
<V i="1">0</V>
|
||||
<V i="2">0</V>
|
||||
<V i="3">0</V>
|
||||
<V i="4">0</V>
|
||||
<V i="6">0</V>
|
||||
<V i="7">0</V>
|
||||
<V i="8">0</V>
|
||||
<V i="9">0</V>
|
||||
<CV i="5"></CV>
|
||||
</Object>
|
||||
</PmData>
|
||||
</Measurements>
|
||||
<Measurements>
|
||||
<ObjectType>SmfFunction</ObjectType>
|
||||
<PmName>
|
||||
<N i="1">SMF.MeanPduSession</N>
|
||||
<N i="2">SMF.MeanPduSession._Ns</N>
|
||||
<N i="3">SMF.MeanPduSession._Dnn</N>
|
||||
<N i="4">SMF.MeanQf</N>
|
||||
<N i="5">SMF.MeanQf._Ns</N>
|
||||
<N i="6">SMF.MeanQf._Dnn</N>
|
||||
</PmName>
|
||||
<PmData>
|
||||
<Object rmUID="" Dn="" UserLabel="">
|
||||
<V i="1">0</V>
|
||||
<V i="4">0</V>
|
||||
<CV i="2"></CV>
|
||||
<CV i="3"></CV>
|
||||
<CV i="5"></CV>
|
||||
<CV i="6"></CV>
|
||||
</Object>
|
||||
</PmData>
|
||||
</Measurements>
|
||||
<Measurements>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<PmName>
|
||||
<N i="1">ME.MeanMeLoad</N>
|
||||
</PmName>
|
||||
<PmData>
|
||||
<Object rmUID="" Dn="" UserLabel="">
|
||||
<V i="1">0</V>
|
||||
</Object>
|
||||
</PmData>
|
||||
</Measurements>
|
||||
<Measurements>
|
||||
<ObjectType>AddrPool</ObjectType>
|
||||
<PmName>
|
||||
<N i="1">SMF.MeanAllcAddr</N>
|
||||
<N i="2">SMF.MeanAllcAddr._Ns</N>
|
||||
</PmName>
|
||||
<PmData>
|
||||
<Object rmUID="" Dn="" UserLabel="">
|
||||
<V i="1">0</V>
|
||||
<CV i="2"></CV>
|
||||
</Object>
|
||||
</PmData>
|
||||
</Measurements>
|
||||
<Measurements>
|
||||
<ObjectType>SmfFunction</ObjectType>
|
||||
<PmName>
|
||||
<N i="1">SMF.MaxPduSession._Dnn</N>
|
||||
<N i="2">SMF.MaxQf</N>
|
||||
<N i="3">SMF.MaxQf._Ns</N>
|
||||
<N i="4">SMF.MaxQf._Dnn</N>
|
||||
<N i="5">SMF.MaxPduSession</N>
|
||||
<N i="6">SMF.MaxPduSession._Ns</N>
|
||||
</PmName>
|
||||
<PmData>
|
||||
<Object rmUID="" Dn="" UserLabel="">
|
||||
<V i="2">0</V>
|
||||
<V i="5">0</V>
|
||||
<CV i="1"></CV>
|
||||
<CV i="3"></CV>
|
||||
<CV i="4"></CV>
|
||||
<CV i="6"></CV>
|
||||
</Object>
|
||||
</PmData>
|
||||
</Measurements>
|
||||
<Measurements>
|
||||
<ObjectType>AddrPool</ObjectType>
|
||||
<PmName>
|
||||
<N i="1">SMF.MaxAllcAddr</N>
|
||||
<N i="2">SMF.MaxAllcAddr._Ns</N>
|
||||
</PmName>
|
||||
<PmData>
|
||||
<Object rmUID="" Dn="" UserLabel="">
|
||||
<V i="1">0</V>
|
||||
<CV i="2"></CV>
|
||||
</Object>
|
||||
</PmData>
|
||||
</Measurements>
|
||||
<Measurements>
|
||||
<ObjectType>SmfFunction</ObjectType>
|
||||
<PmName>
|
||||
<N i="1">SMF.PduSessionCreateTime</N>
|
||||
</PmName>
|
||||
<PmData>
|
||||
<Object rmUID="" Dn="" UserLabel="">
|
||||
<V i="1">0</V>
|
||||
</Object>
|
||||
</PmData>
|
||||
</Measurements>
|
||||
</PmFile>
|
||||
@@ -0,0 +1,240 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<PmFile xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<FileHeader>
|
||||
<TimeStamp>2023-08-10 02:20:00</TimeStamp>
|
||||
<TimeZone>UTC+8</TimeZone>
|
||||
<Period>15</Period>
|
||||
<VendorName>Ruijie Network</VendorName>
|
||||
<ElementType>UPF</ElementType>
|
||||
<PmVersion>16.1.1</PmVersion>
|
||||
<StartTime>2023-08-10 01:45:00 +0800 CST</StartTime>
|
||||
</FileHeader>
|
||||
<Measurements>
|
||||
<ObjectType>UpfFunction</ObjectType>
|
||||
<PmName>
|
||||
<N i="1">upf.pfcpsessionestabreq</N>
|
||||
<N i="2">upf.pfcpsessionestabsucc</N>
|
||||
<N i="3">upf.pfcpsessionestabfail</N>
|
||||
<N i="4">upf.pfcpsessionmodifyreq</N>
|
||||
<N i="5">upf.pfcpsessionmodifysucc</N>
|
||||
<N i="6">upf.pfcpsessionmodifyfail</N>
|
||||
<N i="7">upf.meanqosflows</N>
|
||||
<N i="8">upf.maxqosflows</N>
|
||||
<N i="9">upf.n6incpkt</N>
|
||||
<N i="10">upf.n6incpktipv6</N>
|
||||
<N i="11">upf.n6incpktipv6._dnn</N>
|
||||
<N i="12">upf.n6ogpkt</N>
|
||||
<N i="13">upf.n6ogpktipv6</N>
|
||||
<N i="14">upf.n6ogpktipv6._dnn</N>
|
||||
<N i="15">upf.n6incoct</N>
|
||||
<N i="16">upf.n6incoctipv6</N>
|
||||
<N i="17">upf.n6incoctipv6._dnn</N>
|
||||
<N i="18">upf.n6ogoct</N>
|
||||
<N i="19">upf.n6ogoctipv6</N>
|
||||
<N i="20">upf.n6ogoctipv6._dnn</N>
|
||||
<N i="21">upf.n6discpkt</N>
|
||||
<N i="22">upf.n6discpktipv6</N>
|
||||
<N i="23">upf.n6discpktipv6._dnn</N>
|
||||
</PmName>
|
||||
<PmData>
|
||||
<Object rmUID="239UPF" Dn="TEST239" UserLabel="UPF_SZ_TEST_239">
|
||||
<V i="1">0</V>
|
||||
<V i="2">0</V>
|
||||
<V i="3">0</V>
|
||||
<V i="4">0</V>
|
||||
<V i="5">0</V>
|
||||
<V i="6">0</V>
|
||||
<V i="7">0</V>
|
||||
<V i="8">0</V>
|
||||
<V i="9">0</V>
|
||||
<V i="10">0</V>
|
||||
<V i="11">0</V>
|
||||
<V i="12">0</V>
|
||||
<V i="13">0</V>
|
||||
<V i="14">0</V>
|
||||
<V i="15">0</V>
|
||||
<V i="16">0</V>
|
||||
<V i="17">0</V>
|
||||
<V i="18">0</V>
|
||||
<V i="19">0</V>
|
||||
<V i="20">0</V>
|
||||
<V i="21">0</V>
|
||||
<V i="22">0</V>
|
||||
<V i="23">0</V>
|
||||
</Object>
|
||||
</PmData>
|
||||
</Measurements>
|
||||
<Measurements>
|
||||
<ObjectType>EpRpDynN3Upf</ObjectType>
|
||||
<PmName>
|
||||
<N i="1">upf.n3incpkt</N>
|
||||
<N i="2">upf.n3ogpkt</N>
|
||||
<N i="3">upf.n3incoct</N>
|
||||
<N i="4">upf.n3ogoct</N>
|
||||
<N i="5">upf.n3discpkt</N>
|
||||
</PmName>
|
||||
<PmData>
|
||||
<Object rmUID="239UPF" Dn="TEST239" UserLabel="UPF_SZ_TEST_239">
|
||||
<V i="1">0</V>
|
||||
<V i="2">0</V>
|
||||
<V i="3">0</V>
|
||||
<V i="4">0</V>
|
||||
<V i="5">0</V>
|
||||
</Object>
|
||||
</PmData>
|
||||
</Measurements>
|
||||
<Measurements>
|
||||
<ObjectType>EpRpDynN9Upf</ObjectType>
|
||||
<PmName>
|
||||
<N i="1">upf.n9aincpkt</N>
|
||||
<N i="2">upf.n9aogpkt</N>
|
||||
<N i="3">upf.n9aincoct</N>
|
||||
<N i="4">upf.n9aogoct</N>
|
||||
<N i="5">upf.n9adiscpkt</N>
|
||||
<N i="6">upf.n9cincpkt</N>
|
||||
<N i="7">upf.n9cogpkt</N>
|
||||
<N i="8">upf.n9cincoct</N>
|
||||
<N i="9">upf.n9cogoct</N>
|
||||
<N i="10">upf.n9cdiscpkt</N>
|
||||
</PmName>
|
||||
<PmData>
|
||||
<Object rmUID="239UPF" Dn="TEST239" UserLabel="UPF_SZ_TEST_239">
|
||||
<V i="1">0</V>
|
||||
<V i="2">0</V>
|
||||
<V i="3">0</V>
|
||||
<V i="4">0</V>
|
||||
<V i="5">0</V>
|
||||
<V i="6">0</V>
|
||||
<V i="7">0</V>
|
||||
<V i="8">0</V>
|
||||
<V i="9">0</V>
|
||||
<V i="10">0</V>
|
||||
</Object>
|
||||
</PmData>
|
||||
</Measurements>
|
||||
<Measurements>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<PmName>
|
||||
<N i="1">me.meanmeload</N>
|
||||
</PmName>
|
||||
<PmData>
|
||||
<Object rmUID="239UPF" Dn="TEST239" UserLabel="UPF_SZ_TEST_239">
|
||||
<V i="1">0</V>
|
||||
</Object>
|
||||
</PmData>
|
||||
</Measurements>
|
||||
<Measurements>
|
||||
<ObjectType>UpfFunction</ObjectType>
|
||||
<PmName>
|
||||
<N i="1">upf.pfcpsessionestabreq</N>
|
||||
<N i="2">upf.pfcpsessionestabsucc</N>
|
||||
<N i="3">upf.pfcpsessionestabfail</N>
|
||||
<N i="4">upf.pfcpsessionmodifyreq</N>
|
||||
<N i="5">upf.pfcpsessionmodifysucc</N>
|
||||
<N i="6">upf.pfcpsessionmodifyfail</N>
|
||||
<N i="7">upf.meanqosflows</N>
|
||||
<N i="8">upf.maxqosflows</N>
|
||||
<N i="9">upf.n6incpkt</N>
|
||||
<N i="10">upf.n6incpktipv6</N>
|
||||
<N i="11">upf.n6incpktipv6._dnn</N>
|
||||
<N i="12">upf.n6ogpkt</N>
|
||||
<N i="13">upf.n6ogpktipv6</N>
|
||||
<N i="14">upf.n6ogpktipv6._dnn</N>
|
||||
<N i="15">upf.n6incoct</N>
|
||||
<N i="16">upf.n6incoctipv6</N>
|
||||
<N i="17">upf.n6incoctipv6._dnn</N>
|
||||
<N i="18">upf.n6ogoct</N>
|
||||
<N i="19">upf.n6ogoctipv6</N>
|
||||
<N i="20">upf.n6ogoctipv6._dnn</N>
|
||||
<N i="21">upf.n6discpkt</N>
|
||||
<N i="22">upf.n6discpktipv6</N>
|
||||
<N i="23">upf.n6discpktipv6._dnn</N>
|
||||
</PmName>
|
||||
<PmData>
|
||||
<Object rmUID="upf1" Dn="5gc" UserLabel="upf1">
|
||||
<V i="1">0</V>
|
||||
<V i="2">0</V>
|
||||
<V i="3">0</V>
|
||||
<V i="4">0</V>
|
||||
<V i="5">0</V>
|
||||
<V i="6">0</V>
|
||||
<V i="7">0</V>
|
||||
<V i="8">0</V>
|
||||
<V i="9">0</V>
|
||||
<V i="10">0</V>
|
||||
<V i="11">0</V>
|
||||
<V i="12">0</V>
|
||||
<V i="13">0</V>
|
||||
<V i="14">0</V>
|
||||
<V i="15">0</V>
|
||||
<V i="16">0</V>
|
||||
<V i="17">0</V>
|
||||
<V i="18">0</V>
|
||||
<V i="19">0</V>
|
||||
<V i="20">0</V>
|
||||
<V i="21">0</V>
|
||||
<V i="22">0</V>
|
||||
<V i="23">0</V>
|
||||
</Object>
|
||||
</PmData>
|
||||
</Measurements>
|
||||
<Measurements>
|
||||
<ObjectType>EpRpDynN3Upf</ObjectType>
|
||||
<PmName>
|
||||
<N i="1">upf.n3incpkt</N>
|
||||
<N i="2">upf.n3ogpkt</N>
|
||||
<N i="3">upf.n3incoct</N>
|
||||
<N i="4">upf.n3ogoct</N>
|
||||
<N i="5">upf.n3discpkt</N>
|
||||
</PmName>
|
||||
<PmData>
|
||||
<Object rmUID="upf1" Dn="5gc" UserLabel="upf1">
|
||||
<V i="1">0</V>
|
||||
<V i="2">0</V>
|
||||
<V i="3">0</V>
|
||||
<V i="4">0</V>
|
||||
<V i="5">0</V>
|
||||
</Object>
|
||||
</PmData>
|
||||
</Measurements>
|
||||
<Measurements>
|
||||
<ObjectType>EpRpDynN9Upf</ObjectType>
|
||||
<PmName>
|
||||
<N i="1">upf.n9aincpkt</N>
|
||||
<N i="2">upf.n9aogpkt</N>
|
||||
<N i="3">upf.n9aincoct</N>
|
||||
<N i="4">upf.n9aogoct</N>
|
||||
<N i="5">upf.n9adiscpkt</N>
|
||||
<N i="6">upf.n9cincpkt</N>
|
||||
<N i="7">upf.n9cogpkt</N>
|
||||
<N i="8">upf.n9cincoct</N>
|
||||
<N i="9">upf.n9cogoct</N>
|
||||
<N i="10">upf.n9cdiscpkt</N>
|
||||
</PmName>
|
||||
<PmData>
|
||||
<Object rmUID="upf1" Dn="5gc" UserLabel="upf1">
|
||||
<V i="1">0</V>
|
||||
<V i="2">0</V>
|
||||
<V i="3">0</V>
|
||||
<V i="4">0</V>
|
||||
<V i="5">0</V>
|
||||
<V i="6">0</V>
|
||||
<V i="7">0</V>
|
||||
<V i="8">0</V>
|
||||
<V i="9">0</V>
|
||||
<V i="10">0</V>
|
||||
</Object>
|
||||
</PmData>
|
||||
</Measurements>
|
||||
<Measurements>
|
||||
<ObjectType>ManagedElement</ObjectType>
|
||||
<PmName>
|
||||
<N i="1">me.meanmeload</N>
|
||||
</PmName>
|
||||
<PmData>
|
||||
<Object rmUID="upf1" Dn="5gc" UserLabel="upf1">
|
||||
<V i="1">0</V>
|
||||
</Object>
|
||||
</PmData>
|
||||
</Measurements>
|
||||
</PmFile>
|
||||
165
crontask/gencmxml.go
Normal file
165
crontask/gencmxml.go
Normal file
@@ -0,0 +1,165 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
"fmt"
|
||||
"os"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
cmschema "ems.agt/crontask/cm/schema"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
const (
|
||||
// Header is a generic XML header suitable for use with the output of Marshal.
|
||||
// This is not automatically added to any output of this package,
|
||||
// it is provided as a convenience.
|
||||
Header = `<?xml version="1.0" encoding="UTF-8"?>` + "\n"
|
||||
)
|
||||
|
||||
const (
|
||||
AdminStateLocked = "Locked"
|
||||
AdminStateUnlocked = "Unlocked"
|
||||
AdminStateShuttingdown = "ShuttingDown"
|
||||
OperationStateDisabled = "Disabled"
|
||||
OperationStateEnabled = "Enabled"
|
||||
)
|
||||
|
||||
func (t *TaskFunc) GenCmXmlFile(uri, params, body string) {
|
||||
log.Debug("GenCmXmlFile processing ...")
|
||||
for _, neType := range neTypes {
|
||||
t.GenNFXmlFile(neType)
|
||||
}
|
||||
}
|
||||
|
||||
func (t *TaskFunc) ReadCmYaml(cmfile string) (map[string]interface{}, error) {
|
||||
log.Debug("cmfile:", cmfile)
|
||||
file, err := os.ReadFile(cmfile)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
return nil, err
|
||||
}
|
||||
log.Debug("file:", file)
|
||||
resultMap := make(map[string]interface{})
|
||||
err = yaml.Unmarshal(file, resultMap)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
log.Debug("resultMap:", resultMap)
|
||||
return resultMap, nil
|
||||
}
|
||||
|
||||
func (t *TaskFunc) GenNFXmlFile(neType string) error {
|
||||
var nes []NeInfo
|
||||
_, err := XormGetNeInfoByType(neType, &nes)
|
||||
if err != nil {
|
||||
log.Error("Failed to get all ne info:", err)
|
||||
return err
|
||||
}
|
||||
|
||||
cmfile := fmt.Sprintf("%s/cm-%s.yaml", yamlConfig.NBI.CM.CfgFileDir, strings.ToLower(neType))
|
||||
|
||||
resultMap, _ := t.ReadCmYaml(cmfile)
|
||||
|
||||
ti := time.Now()
|
||||
timestamp := ti.Format("2006-01-02 15:04:05")
|
||||
timefile := ti.Format("20060102150405")
|
||||
date := ti.Format("20060102")
|
||||
_, offset := ti.Zone()
|
||||
var tzOffset string
|
||||
if offset >= 0 {
|
||||
tzOffset = "UTC+" + strconv.Itoa(offset/3600)
|
||||
} else {
|
||||
tzOffset = "UTC" + strconv.Itoa(offset/3600)
|
||||
}
|
||||
|
||||
nrmFile := new(cmschema.DataFile)
|
||||
|
||||
nrmFile.FileHeader = cmschema.FileHeader{
|
||||
TimeStamp: timestamp,
|
||||
TimeZone: tzOffset,
|
||||
VendorName: "Ruijie Network",
|
||||
ElementType: neType,
|
||||
CmVersion: global.Version,
|
||||
}
|
||||
|
||||
nrmFile.XsiAttr = "http://www.w3.org/2001/XMLSchema-instance"
|
||||
nrmFile.XsiLoc = "file:///usr/loal/omc/etc/schema/cm-schema.xsd"
|
||||
|
||||
for k, e := range resultMap {
|
||||
objects := cmschema.Objects{ObjectType: k}
|
||||
|
||||
sortResult := make(map[string]string)
|
||||
keys := make([]string, 0)
|
||||
for key, value := range e.(map[string]interface{}) {
|
||||
sortResult[key] = fmt.Sprintf("%v", value)
|
||||
keys = append(keys, key)
|
||||
}
|
||||
|
||||
sort.Strings(keys)
|
||||
|
||||
for s, ne := range nes {
|
||||
rmUID := fmt.Sprintf("01000HX%sBJ0D0%d", neType, s+1)
|
||||
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)
|
||||
object := cmschema.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
|
||||
for _, p := range keys {
|
||||
if s == 0 {
|
||||
objects.FieldName.N = append(objects.FieldName.N, cmschema.N{IAttr: i, Value: p})
|
||||
}
|
||||
var v string
|
||||
switch p {
|
||||
case "Id":
|
||||
v = ne.NeId
|
||||
case "UserLabel":
|
||||
v = ne.NeName
|
||||
case "VendorName":
|
||||
v = "Ruijie Network"
|
||||
case "SwVersion":
|
||||
v = global.Version
|
||||
case "PatchInfo":
|
||||
v = "-"
|
||||
case "AdministrativeState":
|
||||
v = AdminStateUnlocked
|
||||
case "OperationalState":
|
||||
v = OperationStateEnabled
|
||||
case "VnfInstanceId":
|
||||
v = vnfInstanceID
|
||||
default:
|
||||
if sortResult[p] == "" {
|
||||
v = "-"
|
||||
} else {
|
||||
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)
|
||||
}
|
||||
nrmFile.Objects = append(nrmFile.Objects, objects)
|
||||
}
|
||||
|
||||
folderPath := global.CreateDir(date, yamlConfig.NBI.CM.XmlFileDir)
|
||||
x, _ := xml.MarshalIndent(nrmFile, "", " ")
|
||||
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)
|
||||
if err != nil {
|
||||
log.Error("Failed to write xml file:", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
267
crontask/genpmxml.go
Normal file
267
crontask/genpmxml.go
Normal file
@@ -0,0 +1,267 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
pmschema "ems.agt/crontask/pm/schema"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
var (
|
||||
neTypes = []string{"AMF", "SMF", "UDM", "UPF", "AUSF"}
|
||||
)
|
||||
|
||||
func (t *TaskFunc) GenPmXmlFile(uri, params, body string) {
|
||||
for _, neType := range neTypes {
|
||||
log.Debugf("GenPmXmlFile process %s xml file", neType)
|
||||
t.GenNFPMXmlFile(neType)
|
||||
}
|
||||
}
|
||||
|
||||
func (t *TaskFunc) ReadPmYaml(cmfile string) (map[string]interface{}, error) {
|
||||
log.Debug("cmfile:", cmfile)
|
||||
file, err := ioutil.ReadFile(cmfile)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
return nil, err
|
||||
}
|
||||
log.Debug("file:", file)
|
||||
resultMap := make(map[string]interface{})
|
||||
err = yaml.Unmarshal(file, resultMap)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
log.Debug("resultMap:", resultMap)
|
||||
return resultMap, nil
|
||||
}
|
||||
|
||||
func (t *TaskFunc) IsPseudoSubPmName(pmName string) bool {
|
||||
return strings.Contains(pmName, "._")
|
||||
}
|
||||
|
||||
func (t *TaskFunc) GenNFPMXmlFile(neType string) error {
|
||||
var nes []NeInfo
|
||||
_, err := XormGetNeInfoByType(neType, &nes)
|
||||
if err != nil {
|
||||
log.Error("Failed to get all ne info:", err)
|
||||
return err
|
||||
}
|
||||
|
||||
// cfile := fmt.Sprintf("%s/pm-%s.yaml", yamlConfig.NBI.PM.CfgFileDir, strings.ToLower(neType))
|
||||
|
||||
// resultMap, _ := t.ReadPmYaml(cfile)
|
||||
|
||||
ti := time.Now()
|
||||
var startTime string
|
||||
timestamp := ti.Format("2006-01-02 15:04:05")
|
||||
|
||||
index := global.GetCurrentTimeSliceIndexByPeriod(ti, 15)
|
||||
date := time.Now().Format("2006-01-02")
|
||||
log.Debugf("date: %s index:%d", date, index)
|
||||
|
||||
_, offset := ti.Zone()
|
||||
var tzOffset string
|
||||
if offset >= 0 {
|
||||
tzOffset = "UTC+" + strconv.Itoa(offset/3600)
|
||||
} else {
|
||||
tzOffset = "UTC" + strconv.Itoa(offset/3600)
|
||||
}
|
||||
|
||||
pmFile := new(pmschema.PmFile)
|
||||
|
||||
var pms []NorthboundPm
|
||||
_, err = XormGetNorthboundPm(date, index, neType, &pms)
|
||||
if err != nil {
|
||||
log.Error("Failed to get northbound_pm:", err)
|
||||
return err
|
||||
}
|
||||
|
||||
if len(pms) == 0 {
|
||||
log.Errorf("%s:%v", neType, global.ErrPMNotFoundData)
|
||||
return global.ErrPMNotFoundData
|
||||
}
|
||||
|
||||
pmFile.XsAttr = "http://www.w3.org/2001/XMLSchema"
|
||||
pmFile.XsiAttr = "http://www.w3.org/2001/XMLSchema-instance"
|
||||
/*
|
||||
objectTypes := make([]string, 0)
|
||||
sortValues := make(map[string]interface{})
|
||||
keys := make([]string, 0)
|
||||
if len(pms) > 0 {
|
||||
for _, data := range pms[0].Datas {
|
||||
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
|
||||
for _, pm := range pms {
|
||||
for _, pdata := range pm.Datas {
|
||||
measurement = pmschema.Measurements{ObjectType: pdata.ObjectType}
|
||||
measurement.PmData.Object.RmUIDAttr = pm.RmUID
|
||||
measurement.PmData.Object.DnAttr = pm.Dn
|
||||
measurement.PmData.Object.UserLabelAttr = pm.NeName
|
||||
startTime = pm.StartTime
|
||||
|
||||
i := 1
|
||||
for _, pmData := range pdata.KPIs {
|
||||
measurement.PmName.N = append(measurement.PmName.N, pmschema.N{IAttr: i, Value: pmData.KPIID})
|
||||
cv := pmschema.CV{IAttr: i}
|
||||
isPseudo := true
|
||||
value := "0"
|
||||
reg := regexp.MustCompile(`_\w+`)
|
||||
//sns := strings.Split(pmData.KPIID, "_")
|
||||
for _, v := range pmData.KPIValues {
|
||||
if fmt.Sprintf("%v", v.Name) == "Total" {
|
||||
isPseudo = false
|
||||
value = fmt.Sprintf("%v", v.Value)
|
||||
break
|
||||
} else {
|
||||
isPseudo = true
|
||||
//if len(sns) > 1 {
|
||||
// sns := strings.Split(sns[1], ".")
|
||||
//}
|
||||
sn := reg.ReplaceAllString(pmData.KPIID, v.Name)
|
||||
//sn := sns[0] + v.Name
|
||||
// cv.NV = append(cv.NV, pmschema.NV{SN: sn, SV: fmt.Sprintf("%v", v.Value)})
|
||||
cv.SN = append(cv.SN, sn)
|
||||
cv.SV = append(cv.SV, fmt.Sprintf("%v", v.Value))
|
||||
}
|
||||
}
|
||||
if isPseudo == false {
|
||||
measurement.PmData.Object.V = append(measurement.PmData.Object.V, pmschema.V{IAttr: i, Value: value})
|
||||
} else {
|
||||
measurement.PmData.Object.CV = append(measurement.PmData.Object.CV, cv)
|
||||
}
|
||||
|
||||
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)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
pmFile.FileHeader = pmschema.FileHeader{
|
||||
TimeStamp: timestamp,
|
||||
TimeZone: tzOffset,
|
||||
Period: 15,
|
||||
VendorName: "Ruijie Network",
|
||||
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)
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
for k, pm := range pms {
|
||||
measurement := pmschema.Measurements{ObjectType: "gold_kpi"}
|
||||
|
||||
for s, ne := range nes {
|
||||
rmUID := fmt.Sprintf("01000HX%sBJ0D0%d", neType, s+1)
|
||||
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
|
||||
for _, p := range keys {
|
||||
if s == 0 {
|
||||
objects.FieldName.N = append(objects.FieldName.N, pmschema.N{IAttr: i, Value: p})
|
||||
}
|
||||
var v string
|
||||
switch p {
|
||||
case "Id":
|
||||
v = ne.NeId
|
||||
case "UserLabel":
|
||||
v = ne.NeName
|
||||
case "VendorName":
|
||||
v = "Ruijie Network"
|
||||
case "SwVersion":
|
||||
v = global.Version
|
||||
case "PatchInfo":
|
||||
v = "-"
|
||||
case "AdministrativeState":
|
||||
v = AdminStateUnlocked
|
||||
case "OperationalState":
|
||||
v = OperationStateEnabled
|
||||
case "VnfInstanceId":
|
||||
v = vnfInstanceID
|
||||
default:
|
||||
if sortResult[p] == "" {
|
||||
v = "-"
|
||||
} else {
|
||||
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
|
||||
}
|
||||
18
crontask/makefile
Normal file
18
crontask/makefile
Normal file
@@ -0,0 +1,18 @@
|
||||
# Makefile for OMC-OMC-crontask project
|
||||
|
||||
PROJECT = OMC
|
||||
VERSION = 16.1.1
|
||||
LIBDIR = ems.agt/lib
|
||||
BINNAME = crontask
|
||||
|
||||
.PHONY: build $(BINNAME)
|
||||
build $(BINNAME):
|
||||
go build -o $(BINNAME) -v -ldflags "-X '$(LIBDIR)/global.Version=$(VERSION)' \
|
||||
-X '$(LIBDIR)/global.BuildTime=`date`' \
|
||||
-X '$(LIBDIR)/global.GoVer=`go version`'"
|
||||
|
||||
run: $(BINNAME)
|
||||
./$(BINNAME)
|
||||
|
||||
clean:
|
||||
rm ./$(BINNAME)
|
||||
77
crontask/pm/schema/pm-schema.go
Normal file
77
crontask/pm/schema/pm-schema.go
Normal file
@@ -0,0 +1,77 @@
|
||||
// Code generated by xgen. DO NOT EDIT.
|
||||
|
||||
package pmschema
|
||||
|
||||
import "encoding/xml"
|
||||
|
||||
// FileHeader ...
|
||||
type FileHeader struct {
|
||||
TimeStamp string `xml:"TimeStamp"`
|
||||
TimeZone string `xml:"TimeZone"`
|
||||
Period int `xml:"Period"`
|
||||
VendorName string `xml:"VendorName"`
|
||||
ElementType string `xml:"ElementType"`
|
||||
PmVersion string `xml:"PmVersion"`
|
||||
StartTime string `xml:"StartTime"`
|
||||
}
|
||||
|
||||
// N ...
|
||||
type N struct {
|
||||
IAttr int `xml:"i,attr"`
|
||||
Value string `xml:",chardata"`
|
||||
}
|
||||
|
||||
// PmName ...
|
||||
type PmName struct {
|
||||
N []N `xml:"N"`
|
||||
}
|
||||
|
||||
// V ...
|
||||
type V struct {
|
||||
IAttr int `xml:"i,attr"`
|
||||
Value string `xml:",chardata"`
|
||||
}
|
||||
|
||||
// NV ...
|
||||
type NV struct {
|
||||
XMLName xml.Name `xml:"-"`
|
||||
SN string `xml:"SN"`
|
||||
SV string `xml:"SV"`
|
||||
}
|
||||
|
||||
// CV ...
|
||||
type CV struct {
|
||||
IAttr int `xml:"i,attr"`
|
||||
// NV []NV `xml:"NV"`
|
||||
SN []string `xml:"SN"`
|
||||
SV []string `xml:"SV"`
|
||||
}
|
||||
|
||||
// Object ...
|
||||
type Object struct {
|
||||
RmUIDAttr string `xml:"rmUID,attr"`
|
||||
DnAttr string `xml:"Dn,attr"`
|
||||
UserLabelAttr string `xml:"UserLabel,attr"`
|
||||
V []V `xml:"V"`
|
||||
CV []CV `xml:"CV"`
|
||||
}
|
||||
|
||||
// PmData ...
|
||||
type PmData struct {
|
||||
Object Object `xml:"Object"`
|
||||
}
|
||||
|
||||
// Measurements ...
|
||||
type Measurements struct {
|
||||
ObjectType string `xml:"ObjectType"`
|
||||
PmName PmName `xml:"PmName"`
|
||||
PmData PmData `xml:"PmData"`
|
||||
}
|
||||
|
||||
// PmFile ...
|
||||
type PmFile struct {
|
||||
FileHeader FileHeader `xml:"FileHeader"`
|
||||
Measurements []Measurements `xml:"Measurements"`
|
||||
XsAttr string `xml:"xmlns:xs,attr"`
|
||||
XsiAttr string `xml:"xmlns:xsi,attr"`
|
||||
}
|
||||
65
crontask/pm/schema/pm-schema.go.bak
Normal file
65
crontask/pm/schema/pm-schema.go.bak
Normal file
@@ -0,0 +1,65 @@
|
||||
// Code generated by xgen. DO NOT EDIT.
|
||||
|
||||
package pmschema
|
||||
|
||||
// FileHeader ...
|
||||
type FileHeader struct {
|
||||
TimeStamp string `xml:"TimeStamp"`
|
||||
TimeZone string `xml:"TimeZone"`
|
||||
Period int `xml:"Period"`
|
||||
VendorName string `xml:"VendorName"`
|
||||
ElementType string `xml:"ElementType"`
|
||||
PmVersion string `xml:"PmVersion"`
|
||||
StartTime string `xml:"StartTime"`
|
||||
}
|
||||
|
||||
// N ...
|
||||
type N struct {
|
||||
IAttr int `xml:"i,attr"`
|
||||
Value string `xml:",chardata"`
|
||||
}
|
||||
|
||||
// PmName ...
|
||||
type PmName struct {
|
||||
N *N `xml:"N"`
|
||||
}
|
||||
|
||||
// V ...
|
||||
type V struct {
|
||||
IAttr int `xml:"i,attr"`
|
||||
Value string `xml:",chardata"`
|
||||
}
|
||||
|
||||
// CV ...
|
||||
type CV struct {
|
||||
IAttr int `xml:"i,attr"`
|
||||
SN []string `xml:"SN"`
|
||||
SV []string `xml:"SV"`
|
||||
}
|
||||
|
||||
// Object ...
|
||||
type Object struct {
|
||||
RmUIDAttr string `xml:"rmUID,attr"`
|
||||
DnAttr string `xml:"Dn,attr"`
|
||||
UserLabelAttr string `xml:"UserLabel,attr"`
|
||||
V []*V `xml:"V"`
|
||||
CV []*CV `xml:"CV"`
|
||||
}
|
||||
|
||||
// PmData ...
|
||||
type PmData struct {
|
||||
Object *Object `xml:"Object"`
|
||||
}
|
||||
|
||||
// Measurements ...
|
||||
type Measurements struct {
|
||||
ObjectType string `xml:"ObjectType"`
|
||||
PmName *PmName `xml:"PmName"`
|
||||
PmData *PmData `xml:"PmData"`
|
||||
}
|
||||
|
||||
// PmFile ...
|
||||
type PmFile struct {
|
||||
FileHeader FileHeader `xml:"FileHeader"`
|
||||
Measurements []*Measurements `xml:"Measurements"`
|
||||
}
|
||||
1389
crontask/tasks.go
Normal file
1389
crontask/tasks.go
Normal file
File diff suppressed because it is too large
Load Diff
129
crontask/xml.go.org
Normal file
129
crontask/xml.go.org
Normal file
@@ -0,0 +1,129 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
"io/ioutil"
|
||||
)
|
||||
|
||||
const (
|
||||
// Header is a generic XML header suitable for use with the output of Marshal.
|
||||
// This is not automatically added to any output of this package,
|
||||
// it is provided as a convenience.
|
||||
Header = `<?xml version="1.0" encoding="UTF-8"?>` + "\n"
|
||||
)
|
||||
|
||||
type Attribute struct {
|
||||
Text string `xml:",chardata"`
|
||||
Name string `xml:"name,attr"`
|
||||
Type string `xml:"type,attr"`
|
||||
Use string `xml:"use,attr"`
|
||||
}
|
||||
|
||||
type Schema struct {
|
||||
XMLName xml.Name `xml:"schema"`
|
||||
Text string `xml:",chardata"`
|
||||
Xs string `xml:"xs,attr"`
|
||||
Xsi string `xml:"xsi,attr"`
|
||||
ElementFormDefault string `xml:"elementFormDefault,attr"`
|
||||
AttributeFormDefault string `xml:"attributeFormDefault,attr"`
|
||||
Element struct {
|
||||
Text string `xml:",chardata"`
|
||||
Name string `xml:"name,attr"`
|
||||
ComplexType struct {
|
||||
Text string `xml:",chardata"`
|
||||
Sequence struct {
|
||||
Text string `xml:",chardata"`
|
||||
Element []struct {
|
||||
Text string `xml:",chardata"`
|
||||
Name string `xml:"name,attr"`
|
||||
MaxOccurs string `xml:"maxOccurs,attr"`
|
||||
ComplexType struct {
|
||||
Text string `xml:",chardata"`
|
||||
Sequence struct {
|
||||
Text string `xml:",chardata"`
|
||||
Element []struct {
|
||||
Text string `xml:",chardata"`
|
||||
Name string `xml:"name,attr"`
|
||||
Type string `xml:"type,attr"`
|
||||
MinOccurs string `xml:"minOccurs,attr"`
|
||||
ComplexType struct {
|
||||
Text string `xml:",chardata"`
|
||||
Sequence struct {
|
||||
Text string `xml:",chardata"`
|
||||
MinOccurs string `xml:"minOccurs,attr"`
|
||||
MaxOccurs string `xml:"maxOccurs,attr"`
|
||||
Element struct {
|
||||
Text string `xml:",chardata"`
|
||||
Name string `xml:"name,attr"`
|
||||
ComplexType struct {
|
||||
Text string `xml:",chardata"`
|
||||
SimpleContent struct {
|
||||
Text string `xml:",chardata"`
|
||||
Extension struct {
|
||||
Text string `xml:",chardata"`
|
||||
Base string `xml:"base,attr"`
|
||||
Attribute struct {
|
||||
Text string `xml:",chardata"`
|
||||
Name string `xml:"name,attr"`
|
||||
Type string `xml:"type,attr"`
|
||||
Use string `xml:"use,attr"`
|
||||
} `xml:"attribute"`
|
||||
} `xml:"extension"`
|
||||
} `xml:"simpleContent"`
|
||||
Sequence struct {
|
||||
Text string `xml:",chardata"`
|
||||
MinOccurs string `xml:"minOccurs,attr"`
|
||||
MaxOccurs string `xml:"maxOccurs,attr"`
|
||||
Element struct {
|
||||
Text string `xml:",chardata"`
|
||||
Name string `xml:"name,attr"`
|
||||
ComplexType struct {
|
||||
Text string `xml:",chardata"`
|
||||
SimpleContent struct {
|
||||
Text string `xml:",chardata"`
|
||||
Extension struct {
|
||||
Text string `xml:",chardata"`
|
||||
Base string `xml:"base,attr"`
|
||||
Attribute struct {
|
||||
Text string `xml:",chardata"`
|
||||
Name string `xml:"name,attr"`
|
||||
Type string `xml:"type,attr"`
|
||||
Use string `xml:"use,attr"`
|
||||
} `xml:"attribute"`
|
||||
} `xml:"extension"`
|
||||
} `xml:"simpleContent"`
|
||||
} `xml:"complexType"`
|
||||
} `xml:"element"`
|
||||
} `xml:"sequence"`
|
||||
Attribute []struct {
|
||||
Text string `xml:",chardata"`
|
||||
Name string `xml:"name,attr"`
|
||||
Type string `xml:"type,attr"`
|
||||
Use string `xml:"use,attr"`
|
||||
} `xml:"attribute"`
|
||||
} `xml:"complexType"`
|
||||
} `xml:"element"`
|
||||
} `xml:"sequence"`
|
||||
} `xml:"complexType"`
|
||||
} `xml:"element"`
|
||||
} `xml:"sequence"`
|
||||
} `xml:"complexType"`
|
||||
} `xml:"element"`
|
||||
} `xml:"sequence"`
|
||||
} `xml:"complexType"`
|
||||
} `xml:"element"`
|
||||
}
|
||||
|
||||
func GenNRMXmlFile() {
|
||||
nrmFile := Schema{
|
||||
Xs: "http://www.w3.org/2001/XMLSchema",
|
||||
Xsi: "http://www.w3.org/2001/XMLSchema-instance",
|
||||
ElementFormDefault: "qualified",
|
||||
AttributeFormDefault: "unqualified",
|
||||
Element: struct{}{Name: "DataFile"},
|
||||
}
|
||||
|
||||
b, _ := xml.MarshalIndent(nrmFile, "", " ")
|
||||
b = append([]byte(xml.Header), b...)
|
||||
ioutil.WriteFile("D:/nrm-demo.xml", b, 0664)
|
||||
}
|
||||
117
features/aaaa/aaaa.go
Normal file
117
features/aaaa/aaaa.go
Normal file
@@ -0,0 +1,117 @@
|
||||
package aaaa
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/go-resty/resty/v2"
|
||||
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
)
|
||||
|
||||
var (
|
||||
UriAAAASSO = config.UriPrefix + "/aaaa/{apiVersion}/security/sso" // for external
|
||||
)
|
||||
|
||||
var client = resty.New()
|
||||
|
||||
func init() {
|
||||
/*
|
||||
client.
|
||||
SetTimeout(10 * time.Second).
|
||||
SetRetryCount(1).
|
||||
SetRetryWaitTime(1 * time.Second).
|
||||
SetRetryMaxWaitTime(2 * time.Second).
|
||||
SetRetryAfter(func(client *resty.Client, resp *resty.Response) (time.Duration, error) {
|
||||
return 0, errors.New("quota exceeded")
|
||||
})
|
||||
*/
|
||||
client.SetTimeout(3 * time.Second)
|
||||
}
|
||||
|
||||
type AAAATicket struct {
|
||||
Ticket string `json:"ticket"`
|
||||
}
|
||||
|
||||
type SSOResult struct {
|
||||
SSO struct {
|
||||
Result string `json:"result"`
|
||||
ResultMsg string `json:"result_msg"`
|
||||
Ticket string `json:"ticket"`
|
||||
ResultMsgcode string `json:"result_msgcode"`
|
||||
Account []struct {
|
||||
Accid string `json:"accid"`
|
||||
} `json:"account"`
|
||||
} `json:"sso"`
|
||||
}
|
||||
|
||||
// Get system state from NF/NFs
|
||||
func GetSSOFromAAAA(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("GetSSOFromAAAA processing... ")
|
||||
|
||||
vars := r.URL.Query()
|
||||
ticket := vars["ticket"]
|
||||
if len(ticket) == 0 {
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
log.Debug("ticket:", ticket)
|
||||
|
||||
log.Debugf("r.RemoteAddr:%s r.Host: %s", r.RemoteAddr, r.Host)
|
||||
|
||||
var aaaaIp, omcIp string
|
||||
addr := strings.Split(r.RemoteAddr, ":")
|
||||
if len(addr) > 0 {
|
||||
//aaaaIp := r.RemoteAddr[:strings.Index(r.Host, ":")]
|
||||
aaaaIp = addr[0]
|
||||
}
|
||||
addr = strings.Split(r.Host, ":")
|
||||
if len(addr) > 0 {
|
||||
//omcIp := r.Host[:strings.Index(r.Host, ":")]
|
||||
omcIp = addr[0]
|
||||
}
|
||||
log.Debugf("aaaaIp=%s omcIp=%s", aaaaIp, omcIp)
|
||||
requestURI2NF := fmt.Sprintf("http://%s:8080/qryUserByTicket", aaaaIp)
|
||||
|
||||
log.Debug("requestURI2NF:", requestURI2NF)
|
||||
|
||||
aaaaTicket := &AAAATicket{
|
||||
Ticket: ticket[0],
|
||||
}
|
||||
|
||||
body, err := json.Marshal(aaaaTicket)
|
||||
|
||||
response, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
SetBody(body).
|
||||
Post(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Get system state from NF is failed:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
log.Debug("response:", response)
|
||||
|
||||
switch response.StatusCode() {
|
||||
case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted:
|
||||
ssoResult := new(SSOResult)
|
||||
json.Unmarshal(response.Body(), ssoResult)
|
||||
var accid string
|
||||
if len(ssoResult.SSO.Account) != 0 {
|
||||
accid = ssoResult.SSO.Account[0].Accid
|
||||
}
|
||||
redirectUrl := fmt.Sprintf("http://%s:8888/home.html?user=%s", omcIp, accid)
|
||||
services.ResponseRedirect(w, redirectUrl)
|
||||
return
|
||||
default:
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
}
|
||||
66
features/cm/exec_linux.go
Normal file
66
features/cm/exec_linux.go
Normal file
@@ -0,0 +1,66 @@
|
||||
//go:build linux
|
||||
// +build linux
|
||||
|
||||
package cm
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"os/exec"
|
||||
|
||||
"ems.agt/lib/log"
|
||||
)
|
||||
|
||||
func ExecCmd(command string) error {
|
||||
log.Debug("Exec command:", command)
|
||||
|
||||
cmd := exec.Command("/bin/bash", "-c", command)
|
||||
out, err := cmd.CombinedOutput()
|
||||
log.Tracef("Exec output: %v", string(out))
|
||||
if err != nil {
|
||||
log.Error("exe cmd error: ", err)
|
||||
return err
|
||||
}
|
||||
/*
|
||||
if err := cmd.Start(); err != nil {
|
||||
log.Error("Start error: ", err)
|
||||
return err
|
||||
}
|
||||
if err := cmd.Wait(); err != nil {
|
||||
log.Error("Wait error: ", err)
|
||||
return err
|
||||
}
|
||||
*/
|
||||
return nil
|
||||
}
|
||||
|
||||
func ExecShell(command string) error {
|
||||
in := bytes.NewBuffer(nil)
|
||||
cmd := exec.Command("sh")
|
||||
cmd.Stdin = in
|
||||
in.WriteString(command)
|
||||
in.WriteString("exit\n")
|
||||
if err := cmd.Start(); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ExecOsCmd(command, os string) error {
|
||||
log.Debugf("Exec %s command:%s", os, command)
|
||||
|
||||
var cmd *exec.Cmd
|
||||
switch os {
|
||||
case "Linux":
|
||||
cmd = exec.Command(command)
|
||||
case "Windows":
|
||||
cmd = exec.Command("cmd", "/C", command)
|
||||
}
|
||||
|
||||
out, err := cmd.CombinedOutput()
|
||||
log.Tracef("Exec output: %v", string(out))
|
||||
if err != nil {
|
||||
log.Error("exe cmd error: ", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
53
features/cm/exec_windows.go
Normal file
53
features/cm/exec_windows.go
Normal file
@@ -0,0 +1,53 @@
|
||||
//go:build windows
|
||||
// +build windows
|
||||
|
||||
package cm
|
||||
|
||||
import (
|
||||
"os/exec"
|
||||
|
||||
"ems.agt/lib/log"
|
||||
)
|
||||
|
||||
func ExecCmd(command string) error {
|
||||
log.Debug("Exec command:", command)
|
||||
|
||||
cmd := exec.Command("cmd", "/C", command)
|
||||
out, err := cmd.CombinedOutput()
|
||||
log.Tracef("Exec output: %v", string(out))
|
||||
if err != nil {
|
||||
log.Error("exe cmd error: ", err)
|
||||
return err
|
||||
}
|
||||
/*
|
||||
if err := cmd.Start(); err != nil {
|
||||
log.Error("Start error: ", err)
|
||||
return err
|
||||
}
|
||||
if err := cmd.Wait(); err != nil {
|
||||
log.Error("Wait error: ", err)
|
||||
return err
|
||||
}
|
||||
*/
|
||||
return nil
|
||||
}
|
||||
|
||||
func ExecOsCmd(command, os string) error {
|
||||
log.Debugf("Exec %s command:%s", os, command)
|
||||
|
||||
var cmd *exec.Cmd
|
||||
switch os {
|
||||
case "Linux":
|
||||
cmd = exec.Command(command)
|
||||
case "Windows":
|
||||
cmd = exec.Command("cmd", "/C", command)
|
||||
}
|
||||
|
||||
out, err := cmd.CombinedOutput()
|
||||
log.Tracef("Exec output: %v", string(out))
|
||||
if err != nil {
|
||||
log.Error("exe cmd error: ", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
148
features/cm/license.go
Normal file
148
features/cm/license.go
Normal file
@@ -0,0 +1,148 @@
|
||||
package cm
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
|
||||
var (
|
||||
// License
|
||||
LicenseUri = config.UriPrefix + "/systemManagement/{apiVersion}/{neType}/license"
|
||||
NeLicenseUri = config.UriPrefix + "/systemManagement/{apiVersion}/{neType}/license/{neId}"
|
||||
)
|
||||
|
||||
func UploadLicenseFile(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("UploadLicenseFile processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Http request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["neType"]
|
||||
if neType == "" {
|
||||
log.Error("neType is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
// neTypeUpper := strings.ToUpper(neType)
|
||||
// neTypeLower := strings.ToLower(neType)
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
}
|
||||
|
||||
func DownloadLicenseFile(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("DownloadLicenseFile processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["neType"]
|
||||
if neType == "" {
|
||||
log.Error("neType is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
// // neTypeUpper := strings.ToUpper(neType)
|
||||
// //neTypeLower := strings.ToLower(neType)
|
||||
|
||||
// version := vars["version"]
|
||||
// if version == "" {
|
||||
// log.Error("version is empty")
|
||||
// services.ResponseNotFound404UriNotExist(w, r)
|
||||
// return
|
||||
// }
|
||||
|
||||
// sql := fmt.Sprintf("select * from ne_software where ne_type='%s' and version='%s'", neTypeUpper, version)
|
||||
// neSoftware, err := dborm.XormGetDataBySQL(sql)
|
||||
// if err != nil {
|
||||
// log.Error("Faile to XormGetDataBySQL:", err)
|
||||
// services.ResponseInternalServerError500ProcessError(w, err)
|
||||
// return
|
||||
// } else if len(*neSoftware) == 0 {
|
||||
// err := global.ErrCMNotFoundTargetSoftware
|
||||
// log.Error(err)
|
||||
// services.ResponseInternalServerError500ProcessError(w, err)
|
||||
// return
|
||||
// }
|
||||
|
||||
// fileName := (*neSoftware)[0]["file_name"]
|
||||
// path := (*neSoftware)[0]["path"]
|
||||
// md5Sum := (*neSoftware)[0]["md5_sum"]
|
||||
|
||||
// services.ResponseFileWithNameAndMD5(w, http.StatusOK, fileName, path, md5Sum)
|
||||
return
|
||||
}
|
||||
|
||||
func DeleteLcenseFile(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("DeleteLcenseFile processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["neType"]
|
||||
if neType == "" {
|
||||
log.Error("neType is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
// neTypeUpper := strings.ToUpper(neType)
|
||||
// //neTypeLower := strings.ToLower(neType)
|
||||
|
||||
// version := vars["version"]
|
||||
// if version == "" {
|
||||
// log.Error("version is empty")
|
||||
// services.ResponseNotFound404UriNotExist(w, r)
|
||||
// return
|
||||
// }
|
||||
|
||||
// sql := fmt.Sprintf("select * from ne_software where ne_type='%s' and version='%s'", neTypeUpper, version)
|
||||
// neSoftware, err := dborm.XormGetDataBySQL(sql)
|
||||
// if err != nil {
|
||||
// log.Error("Faile to XormGetDataBySQL:", err)
|
||||
// services.ResponseInternalServerError500ProcessError(w, err)
|
||||
// return
|
||||
// } else if len(*neSoftware) == 0 {
|
||||
// err := global.ErrCMNotFoundTargetSoftware
|
||||
// log.Error(err)
|
||||
// services.ResponseInternalServerError500ProcessError(w, err)
|
||||
// return
|
||||
// }
|
||||
|
||||
// where := fmt.Sprintf("ne_type='%s' and version='%s'", neTypeUpper, version)
|
||||
// affected, err := dborm.XormDeleteDataByWhere(where, "ne_software")
|
||||
// if err != nil || affected == 0 {
|
||||
// log.Error("Faile to XormGetDataBySQL:", err)
|
||||
// services.ResponseInternalServerError500ProcessError(w, err)
|
||||
// return
|
||||
// }
|
||||
|
||||
// fileName := (*neSoftware)[0]["file_name"]
|
||||
// path := (*neSoftware)[0]["path"]
|
||||
// filePath := fmt.Sprintf("%s/%s", path, fileName)
|
||||
// err = os.Remove(filePath)
|
||||
// if err != nil {
|
||||
// log.Error("Faile to Remove:", err)
|
||||
// services.ResponseInternalServerError500ProcessError(w, err)
|
||||
// return
|
||||
// }
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
}
|
||||
676
features/cm/ne.go
Normal file
676
features/cm/ne.go
Normal file
@@ -0,0 +1,676 @@
|
||||
package cm
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
|
||||
"github.com/go-resty/resty/v2"
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
|
||||
var (
|
||||
UriParamOmcNeConfig = config.UriPrefix + "/systemManagement/v1/elementType/%s/objectType/config/omcNeConfig"
|
||||
// NE CM export/import
|
||||
NeCmUri = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/cm"
|
||||
// NE info
|
||||
UriNeInfo = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/neInfo"
|
||||
// NE backup file
|
||||
UriNeCmFile = config.UriPrefix + "/systemManagement/{apiVersion}/{neType}/neBackup/{fileName}"
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
||||
}
|
||||
|
||||
func GetNeInfo(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("GetNeInfo processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["elementTypeValue"]
|
||||
if neType == "" {
|
||||
log.Error("elementTypeValue is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
neId := services.GetUriParamString(r, "ne_id", ",", false, false)
|
||||
|
||||
// no, _ := strconv.ParseInt(neId, 10, 64)
|
||||
neInfo, err := dborm.XormGetNeInfo(neType, neId)
|
||||
if err != nil {
|
||||
log.Error("dborm.XormGetNeInfo is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
|
||||
var response services.DataResponse
|
||||
response.Data = neInfo
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
}
|
||||
|
||||
type OmcNeConfig struct {
|
||||
NeId string `json:"neId" xorm:"ne_id"` // 网元标识(内部),
|
||||
RmUID string `json:"rmUID" xorm:"rm_uid"` // rmUID 网元唯一标识
|
||||
NeName string `json:"neName" xorm:"ne_name"` // 网元名称(内部)/友好名称(北向资源/性能等使用)
|
||||
PvFlag string `json:"pvFlag" xorm:"pv_flag"` // 网元虚实性标识 VNF/PNF: 虚拟/物理
|
||||
Province string `json:"province" xorm:"province"` // 网元所在省份
|
||||
VendorName string `json:"vendorName" xorm:"vendor_name"` // 厂商名称
|
||||
// ManagedBy string `json:"managedBy" xorm:"managed_by"` // 管理ManagedElement的ManagementNode对象类的DN值
|
||||
Dn string `json:"dn" xorm:"dn"` // 资源里边的ManagedBy,性能的Dn,网络唯一标识
|
||||
}
|
||||
|
||||
func PostNeInfo(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("PostNeInfo processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["elementTypeValue"]
|
||||
if neType == "" {
|
||||
log.Error("elementTypeValue is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
|
||||
if err != nil {
|
||||
log.Error("io.ReadAll is failed:", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
log.Debug("Body:", string(body))
|
||||
|
||||
neInfo := new(dborm.NeInfo)
|
||||
_ = json.Unmarshal(body, neInfo)
|
||||
neInfo.UpdateTime = time.Now().Format(time.DateTime)
|
||||
log.Debug("NE info:", neInfo)
|
||||
|
||||
hostUri := global.CombineHostUri(neInfo.Ip, neInfo.Port)
|
||||
//hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port)
|
||||
apiUri := fmt.Sprintf(UriParamOmcNeConfig, strings.ToLower(neInfo.NeType))
|
||||
requestURI2NF := fmt.Sprintf("%s%s", hostUri, apiUri)
|
||||
log.Debug("requestURI2NF:", requestURI2NF)
|
||||
|
||||
omcNeConfig := &OmcNeConfig{
|
||||
NeId: neInfo.NeId,
|
||||
RmUID: neInfo.RmUID,
|
||||
NeName: neInfo.NeName,
|
||||
PvFlag: neInfo.PvFlag,
|
||||
Province: neInfo.Province,
|
||||
VendorName: neInfo.VendorName,
|
||||
Dn: neInfo.Dn,
|
||||
}
|
||||
body, _ = json.Marshal(omcNeConfig)
|
||||
client := resty.New()
|
||||
response, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
SetBody(body).
|
||||
Put(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Failed to Put:", err)
|
||||
services.ResponseInternalServerError500NFConnectRefused(w)
|
||||
return
|
||||
}
|
||||
log.Info("StatusCode: ", response.StatusCode())
|
||||
|
||||
if config.GetYamlConfig().OMC.Chk2Ne == false {
|
||||
affected, err := dborm.XormInsertNeInfo(neInfo)
|
||||
if err != nil {
|
||||
log.Error("Failed to insert Ne info:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
|
||||
mapRow := make(map[string]interface{})
|
||||
row := map[string]interface{}{"affectedRows": affected}
|
||||
mapRow["data"] = row
|
||||
services.ResponseWithJson(w, http.StatusOK, mapRow)
|
||||
return
|
||||
} else {
|
||||
respMsg := make(map[string]interface{})
|
||||
switch response.StatusCode() {
|
||||
case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted:
|
||||
affected, err := dborm.XormInsertNeInfo(neInfo)
|
||||
if err != nil {
|
||||
log.Error("Failed to dborm.XormInsertNeInfo:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
} else if affected <= 0 {
|
||||
log.Infof("Not record affected to insert ne_info")
|
||||
}
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
default:
|
||||
log.Info("response body:", string(response.Body()))
|
||||
body := new(map[string]interface{})
|
||||
_ = json.Unmarshal(response.Body(), &body)
|
||||
respMsg["error"] = body
|
||||
}
|
||||
|
||||
services.ResponseWithJson(w, response.StatusCode(), respMsg)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func PutNeInfo(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("PutNeInfo processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["elementTypeValue"]
|
||||
if neType == "" {
|
||||
log.Error("elementTypeValue is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
|
||||
if err != nil {
|
||||
log.Error("io.ReadAll is failed:", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
neInfo := new(dborm.NeInfo)
|
||||
_ = json.Unmarshal(body, neInfo)
|
||||
neInfo.NeType = strings.ToUpper(neType)
|
||||
neInfo.UpdateTime = time.Now().Format(time.DateTime)
|
||||
log.Debug("NE info:", neInfo)
|
||||
|
||||
hostUri := global.CombineHostUri(neInfo.Ip, neInfo.Port)
|
||||
//hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port)
|
||||
apiUri := fmt.Sprintf(UriParamOmcNeConfig, strings.ToLower(neType))
|
||||
requestURI2NF := fmt.Sprintf("%s%s", hostUri, apiUri)
|
||||
log.Debug("requestURI2NF:", requestURI2NF)
|
||||
|
||||
omcNeConfig := &OmcNeConfig{
|
||||
NeId: neInfo.NeId,
|
||||
RmUID: neInfo.RmUID,
|
||||
NeName: neInfo.NeName,
|
||||
PvFlag: neInfo.PvFlag,
|
||||
Province: neInfo.Province,
|
||||
VendorName: neInfo.VendorName,
|
||||
Dn: neInfo.Dn,
|
||||
}
|
||||
body, _ = json.Marshal(omcNeConfig)
|
||||
client := resty.New()
|
||||
response, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
SetBody(body).
|
||||
Put(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Failed to Put:", err)
|
||||
services.ResponseInternalServerError500NFConnectRefused(w)
|
||||
return
|
||||
}
|
||||
log.Info("StatusCode: ", response.StatusCode())
|
||||
|
||||
if config.GetYamlConfig().OMC.Chk2Ne == false {
|
||||
affected, err := dborm.XormUpdateNeInfo(neInfo)
|
||||
if err != nil {
|
||||
log.Error("Failed to update Ne info:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
|
||||
mapRow := make(map[string]interface{})
|
||||
row := map[string]interface{}{"affectedRows": affected}
|
||||
mapRow["data"] = row
|
||||
services.ResponseWithJson(w, http.StatusOK, mapRow)
|
||||
return
|
||||
} else {
|
||||
respMsg := make(map[string]interface{})
|
||||
switch response.StatusCode() {
|
||||
case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted:
|
||||
affected, err := dborm.XormUpdateNeInfo(neInfo)
|
||||
if err != nil {
|
||||
log.Error("Failed to dborm.XormUpdateNeInfo:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
} else if affected <= 0 {
|
||||
log.Infof("Not record affected to insert ne_info")
|
||||
}
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
default:
|
||||
log.Info("response body:", string(response.Body()))
|
||||
body := new(map[string]interface{})
|
||||
_ = json.Unmarshal(response.Body(), &body)
|
||||
respMsg["error"] = body
|
||||
}
|
||||
|
||||
services.ResponseWithJson(w, response.StatusCode(), respMsg)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func DeleteNeInfo(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("DeleteNeInfo processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["elementTypeValue"]
|
||||
if neType == "" {
|
||||
log.Error("elementTypeValue is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
|
||||
if err != nil {
|
||||
log.Error("io.ReadAll is failed:", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
neInfo := new(dborm.NeInfo)
|
||||
_ = json.Unmarshal(body, neInfo)
|
||||
neInfo.NeType = strings.ToUpper(neType)
|
||||
neInfo.NeId = services.GetUriParamString(r, "ne_id", ",", false, false)
|
||||
neInfo, err = dborm.XormGetNeInfo(neInfo.NeType, neInfo.NeId)
|
||||
if err != nil || neInfo == nil {
|
||||
log.Error("Failed to delete Ne info:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
log.Debug("NE info:", neInfo)
|
||||
|
||||
// if NE in active status, can't delete NE
|
||||
if IsActiveNF(neInfo) == false {
|
||||
affected, err := dborm.XormDeleteNeInfo(neInfo)
|
||||
if err != nil {
|
||||
log.Error("Failed to delete Ne info:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
|
||||
mapRow := make(map[string]interface{})
|
||||
row := map[string]interface{}{"affectedRows": affected}
|
||||
mapRow["data"] = row
|
||||
services.ResponseWithJson(w, http.StatusOK, mapRow)
|
||||
return
|
||||
}
|
||||
err = global.ErrCMCannotDeleteActiveNE
|
||||
log.Error(err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
func IsActiveNF(neInfo *dborm.NeInfo) bool {
|
||||
log.Debug("IsActiveNF processing... ")
|
||||
|
||||
hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port)
|
||||
requestURI := fmt.Sprintf(config.UriPrefix+"/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
strings.ToLower(neInfo.NeType))
|
||||
|
||||
client := resty.New()
|
||||
response, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Get(hostUri + requestURI)
|
||||
if err != nil {
|
||||
log.Error("Failed to Get:", err)
|
||||
}
|
||||
|
||||
switch response.StatusCode() {
|
||||
case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted:
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func ExportCmFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("ExportCmFromNF processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["elementTypeValue"]
|
||||
if neType == "" {
|
||||
log.Error("elementTypeValue is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
neTypeUpper := strings.ToUpper(neType)
|
||||
neTypeLower := strings.ToLower(neType)
|
||||
|
||||
neId := services.GetUriParamString(r, "ne_id", ",", false, false)
|
||||
|
||||
// neInfo := new(dborm.NeInfo)
|
||||
neInfo, err := dborm.XormGetNeInfo(neType, neId)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to get ne_info:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
log.Debug("neInfo:", neInfo)
|
||||
nePath := fmt.Sprintf("%s/etc/%s", config.GetYamlConfig().OMC.Backup, neTypeLower)
|
||||
isExist, err := global.PathExists(nePath)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to stat:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
if isExist {
|
||||
err = os.RemoveAll(nePath)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to RemoveAll:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
err = os.MkdirAll(nePath, os.ModePerm)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to MkdirAll:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
var scpCmd string
|
||||
ipType := global.ParseIPAddr(neInfo.Ip)
|
||||
if ipType == global.IsIPv4 {
|
||||
scpCmd = fmt.Sprintf("scp -r %s@%s:%s/%s/*.yaml %s/etc/%s", config.GetYamlConfig().NE.User,
|
||||
neInfo.Ip, config.GetYamlConfig().NE.EtcDir,
|
||||
neTypeLower, config.GetYamlConfig().OMC.Backup, neTypeLower)
|
||||
} else {
|
||||
scpCmd = fmt.Sprintf("scp -r %s@[%s]:%s/%s/*.yaml %s/etc/%s", config.GetYamlConfig().NE.User,
|
||||
neInfo.Ip, config.GetYamlConfig().NE.EtcDir,
|
||||
neTypeLower, config.GetYamlConfig().OMC.Backup, neTypeLower)
|
||||
}
|
||||
|
||||
zipFile := fmt.Sprintf("%s-%s-etc-%s.zip", neTypeLower, strings.ToLower(neInfo.NeId), time.Now().Format(global.DateData))
|
||||
zipCmd := fmt.Sprintf("cd %s && zip -r %s etc/%s/*", config.GetYamlConfig().OMC.Backup, zipFile, neTypeLower)
|
||||
|
||||
command := fmt.Sprintf("%s&&%s", scpCmd, zipCmd)
|
||||
|
||||
log.Debug("command:", command)
|
||||
err = ExecCmd(command)
|
||||
if err != nil {
|
||||
log.Error("Faile to exec command:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
zipFilePath := fmt.Sprintf("%s/%s", config.GetYamlConfig().OMC.Backup, zipFile)
|
||||
md5Sum, err := global.GetFileMD5Sum(zipFilePath)
|
||||
if err != nil {
|
||||
log.Error("Faile to md5sum:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
//log.Debug("md5Str:", md5Sum)
|
||||
path := config.GetYamlConfig().OMC.Backup
|
||||
neBackup := dborm.NeBackup{NeType: neTypeUpper, NeId: neId, FileName: zipFile, Path: path, Md5Sum: md5Sum}
|
||||
_, err = dborm.XormInsertTableOne("ne_backup", neBackup)
|
||||
if err != nil {
|
||||
log.Error("Faile to XormInsertTableOne:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
//services.ResponseFileWithNameAndMD5(w, http.StatusOK, zipFile, path, md5Sum)
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
}
|
||||
|
||||
type ImportCMJson struct {
|
||||
FileName string `json:"fileName"`
|
||||
}
|
||||
|
||||
func ImportCmToNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("ImportCmToNF processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["elementTypeValue"]
|
||||
if neType == "" {
|
||||
log.Error("elementTypeValue is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
neTypeUpper := strings.ToUpper(neType)
|
||||
neTypeLower := strings.ToLower(neType)
|
||||
|
||||
neId := services.GetUriParamString(r, "ne_id", ",", false, false)
|
||||
|
||||
var fileName, path string
|
||||
if services.IsJsonContentType(r) {
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
|
||||
if err != nil {
|
||||
log.Error("io.ReadAll is failed:", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
log.Debug("Body:", string(body))
|
||||
|
||||
importCMJson := new(ImportCMJson)
|
||||
_ = json.Unmarshal(body, importCMJson)
|
||||
fileName = importCMJson.FileName
|
||||
path = config.GetYamlConfig().OMC.Backup
|
||||
} else {
|
||||
path = config.GetYamlConfig().OMC.Upload
|
||||
fileName, err = services.HandleUploadFile(r, path, "")
|
||||
if err != nil {
|
||||
log.Error("Faile to HandleUploadFile:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
filePath := fmt.Sprintf("%s/%s", path, fileName)
|
||||
|
||||
// neInfo := new(dborm.NeInfo)
|
||||
neInfo, err := dborm.XormGetNeInfo(neType, neId)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to get ne_info:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
log.Debug("neInfo:", neInfo)
|
||||
|
||||
md5Sum, err := global.GetFileMD5Sum(filePath)
|
||||
if err != nil {
|
||||
log.Error("Faile to GetFileMD5Sum:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
//neBackup := dborm.NeBackup{NeType: neType, NeId: neId, Md5Sum: md5Sum}
|
||||
//log.Debug("neBackup:", neBackup)
|
||||
where := fmt.Sprintf("ne_type='%s' and ne_id='%s' and md5_sum='%s'", neTypeUpper, neId, md5Sum)
|
||||
has, err := dborm.XormExistTableOne("ne_backup", where)
|
||||
if err != nil {
|
||||
log.Error("Faile to XormInsertTableOne:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
} else if has == false {
|
||||
err = global.ErrCMInvalidBackupFile
|
||||
log.Error(err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
nePath := fmt.Sprintf("%s/etc/%s", config.GetYamlConfig().OMC.Upload, neTypeLower)
|
||||
isExist, err := global.PathExists(nePath)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to stat:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
if isExist {
|
||||
err = os.RemoveAll(nePath)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to remove:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
unzipCmd := fmt.Sprintf("unzip -o %s -d %s", filePath, config.GetYamlConfig().OMC.Upload)
|
||||
|
||||
var scpCmd string
|
||||
ipType := global.ParseIPAddr(neInfo.Ip)
|
||||
if ipType == global.IsIPv4 {
|
||||
scpCmd = fmt.Sprintf("scp -r %s/etc/%s %s@%s:%s", config.GetYamlConfig().OMC.Upload,
|
||||
neTypeLower, config.GetYamlConfig().NE.User, neInfo.Ip, config.GetYamlConfig().NE.EtcDir)
|
||||
} else {
|
||||
scpCmd = fmt.Sprintf("scp -r %s/etc/%s %s@[%s]:%s", config.GetYamlConfig().OMC.Upload,
|
||||
neTypeLower, config.GetYamlConfig().NE.User, neInfo.Ip, config.GetYamlConfig().NE.EtcDir)
|
||||
}
|
||||
|
||||
err = ExecCmd(fmt.Sprintf("%s && %s", unzipCmd, scpCmd))
|
||||
if err != nil {
|
||||
log.Errorf("Faile to scp NF: neType=%s, neId=%s, ip=%s", neType, neId, neInfo.Ip)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
}
|
||||
|
||||
func DownloadNeBackupFile(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("DownloadNeBackupFile processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["neType"]
|
||||
if neType == "" {
|
||||
log.Error("neType is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
neTypeUpper := strings.ToUpper(neType)
|
||||
//neTypeLower := strings.ToLower(neType)
|
||||
|
||||
fileName := vars["fileName"]
|
||||
if fileName == "" {
|
||||
log.Error("fileName is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
sql := fmt.Sprintf("select * from ne_backup where ne_type='%s' and file_name='%s'", neTypeUpper, fileName)
|
||||
neBackup, err := dborm.XormGetDataBySQL(sql)
|
||||
if err != nil {
|
||||
log.Error("Faile to XormGetDataBySQL:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
} else if len(*neBackup) == 0 {
|
||||
err := global.ErrCMNotFoundTargetBackupFile
|
||||
log.Error(err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
path := (*neBackup)[0]["path"]
|
||||
md5Sum := (*neBackup)[0]["md5_sum"]
|
||||
|
||||
services.ResponseFileWithNameAndMD5(w, http.StatusOK, fileName, path, md5Sum)
|
||||
return
|
||||
}
|
||||
|
||||
func DeleteNeBackupFile(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("DeleteNeBackupFile processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["neType"]
|
||||
if neType == "" {
|
||||
log.Error("neType is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
neTypeUpper := strings.ToUpper(neType)
|
||||
//neTypeLower := strings.ToLower(neType)
|
||||
|
||||
fileName := vars["fileName"]
|
||||
if fileName == "" {
|
||||
log.Error("fileName is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
sql := fmt.Sprintf("select * from ne_backup where ne_type='%s' and file_name='%s'", neTypeUpper, fileName)
|
||||
neBackup, err := dborm.XormGetDataBySQL(sql)
|
||||
if err != nil {
|
||||
log.Error("Faile to XormGetDataBySQL:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
} else if len(*neBackup) == 0 {
|
||||
err := global.ErrCMNotFoundTargetBackupFile
|
||||
log.Error(err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
where := fmt.Sprintf("ne_type='%s' and file_name='%s'", neTypeUpper, fileName)
|
||||
affected, err := dborm.XormDeleteDataByWhere(where, "ne_backup")
|
||||
if err != nil || affected == 0 {
|
||||
log.Error("Faile to XormGetDataBySQL:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
path := (*neBackup)[0]["path"]
|
||||
filePath := fmt.Sprintf("%s/%s", path, fileName)
|
||||
err = os.Remove(filePath)
|
||||
if err != nil {
|
||||
log.Error("Faile to Remove:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
}
|
||||
241
features/cm/param.go
Normal file
241
features/cm/param.go
Normal file
@@ -0,0 +1,241 @@
|
||||
package cm
|
||||
|
||||
import (
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
|
||||
"github.com/go-resty/resty/v2"
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
|
||||
var (
|
||||
// parameter config management
|
||||
ParamConfigUri = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/config/{paraName}"
|
||||
ParamConfigUrl = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/config/{paraName}"
|
||||
)
|
||||
|
||||
func GetParamConfigFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("GetParamConfigFromNF processing... ")
|
||||
|
||||
// data := make([]map[string]interface{}, 1)
|
||||
var response services.DataResponse
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["elementTypeValue"]
|
||||
if neType == "" {
|
||||
log.Error("elementTypeValue is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
token, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
restHostPort := fmt.Sprintf("http://127.0.0.1:%d", config.GetYamlConfig().Rest[0].Port)
|
||||
getNeInfoPattern := fmt.Sprintf(config.UriPrefix+"/databaseManagement/v1/%s/ne_info", config.GetYamlConfig().Database.Name)
|
||||
getNeInfoURI := restHostPort + getNeInfoPattern
|
||||
neId := services.GetUriParamString(r, "ne_id", ",", true, false)
|
||||
if neId == "" {
|
||||
getNeInfoURI = getNeInfoURI + fmt.Sprintf("?WHERE=status='0'+and+ne_type='%s'", neType)
|
||||
} else {
|
||||
getNeInfoURI = getNeInfoURI + fmt.Sprintf("?WHERE=status='0'+and+ne_type='%v'+and+ne_id+in+%v", neType, neId)
|
||||
}
|
||||
log.Debug("getNeInfoURI:", getNeInfoURI)
|
||||
|
||||
client := resty.New()
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"accessToken": token}).
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Get(getNeInfoURI)
|
||||
if err != nil {
|
||||
log.Error("Get from database is failure!")
|
||||
services.ResponseInternalServerError500NFConnectRefused(w)
|
||||
return
|
||||
}
|
||||
log.Debug("NE info:", string(resp.Body()))
|
||||
|
||||
// var neList []dborm.NeInfo
|
||||
neList, _ := dborm.XormParseResult(resp.Body())
|
||||
|
||||
if len(neList) >= 1 {
|
||||
s := neList[0]
|
||||
requestURI2NF := fmt.Sprintf("http://%s:%v%s", s.Ip, s.Port, r.RequestURI)
|
||||
log.Debug("requestURI2NF:", requestURI2NF)
|
||||
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Get(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Get from NF is failure:", err)
|
||||
services.ResponseInternalServerError500NFConnectRefused(w)
|
||||
return
|
||||
} else {
|
||||
_ = json.Unmarshal(resp.Body(), &response)
|
||||
}
|
||||
log.Debug("response:", response)
|
||||
}
|
||||
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
}
|
||||
|
||||
func PostParamConfigToNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("PostParamConfigToNF processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["elementTypeValue"]
|
||||
if neType == "" {
|
||||
log.Error("elementTypeValue is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
neId := services.GetUriParamString(r, "ne_id", ",", false, false)
|
||||
|
||||
// no, _ := strconv.ParseInt(neId, 10, 64)
|
||||
neInfo, err := dborm.XormGetNeInfo(neType, neId)
|
||||
if err != nil {
|
||||
log.Error("dborm.XormGetNeInfo is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
|
||||
requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.Ip, neInfo.Port, r.RequestURI)
|
||||
log.Debug("requestURI2NF: POST ", requestURI2NF)
|
||||
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) //io.LimitReader限制大小
|
||||
if err != nil {
|
||||
log.Error("io.ReadAll is failed:", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
client := resty.New()
|
||||
response, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
SetBody(body).
|
||||
Post(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Failed to POST to NF:", err)
|
||||
services.ResponseInternalServerError500NFConnectRefused(w)
|
||||
return
|
||||
}
|
||||
|
||||
services.ResponseWithJson(w, response.StatusCode(), response)
|
||||
}
|
||||
|
||||
func PutParamConfigToNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("PutParamConfigToNF processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["elementTypeValue"]
|
||||
if neType == "" {
|
||||
log.Error("elementTypeValue is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
neId := services.GetUriParamString(r, "ne_id", ",", false, false)
|
||||
|
||||
// no, _ := strconv.ParseInt(neId, 10, 64)
|
||||
neInfo, err := dborm.XormGetNeInfo(neType, neId)
|
||||
if err != nil {
|
||||
log.Error("dborm.XormGetNeInfo is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
|
||||
requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.Ip, neInfo.Port, r.RequestURI)
|
||||
log.Debug("requestURI2NF: PUT ", requestURI2NF)
|
||||
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) //io.LimitReader限制大小
|
||||
if err != nil {
|
||||
log.Error("io.ReadAll is failed:", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
client := resty.New()
|
||||
response, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
SetBody(body).
|
||||
Put(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Put to NF failed:", err)
|
||||
services.ResponseInternalServerError500NFConnectRefused(w)
|
||||
return
|
||||
}
|
||||
|
||||
services.ResponseWithJson(w, response.StatusCode(), response)
|
||||
}
|
||||
|
||||
func DeleteParamConfigToNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("DeleteParamConfigToNF processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["elementTypeValue"]
|
||||
if neType == "" {
|
||||
log.Error("elementTypeValue is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
neId := services.GetUriParamString(r, "ne_id", ",", false, false)
|
||||
|
||||
// no, _ := strconv.ParseInt(neId, 10, 64)
|
||||
neInfo, err := dborm.XormGetNeInfo(neType, neId)
|
||||
if err != nil {
|
||||
log.Error("dborm.XormGetNeInfo is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
|
||||
requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.Ip, neInfo.Port, r.RequestURI)
|
||||
log.Debug("requestURI2NF: DELETE ", requestURI2NF)
|
||||
|
||||
client := resty.New()
|
||||
response, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Delete(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Failed to delete parameter:", err)
|
||||
services.ResponseInternalServerError500NFConnectRefused(w)
|
||||
return
|
||||
}
|
||||
|
||||
services.ResponseWithJson(w, response.StatusCode(), response)
|
||||
}
|
||||
575
features/cm/software.go
Normal file
575
features/cm/software.go
Normal file
@@ -0,0 +1,575 @@
|
||||
package cm
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
|
||||
const (
|
||||
SoftwareStatusUploaded = "Uploaded"
|
||||
SoftwareStatusInactive = "Inactive"
|
||||
SoftwareStatusActive = "Active"
|
||||
DigestsSignOkString = "digests signatures OK"
|
||||
)
|
||||
|
||||
var (
|
||||
UriSoftware = config.UriPrefix + "/systemManagement/{apiVersion}/{neType}/software/{version}"
|
||||
UriSoftwareNE = config.UriPrefix + "/systemManagement/{apiVersion}/{neType}/software/{version}/{neId}"
|
||||
)
|
||||
|
||||
func UploadSoftwareFile(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("UploadSoftwareFile processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Http request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["neType"]
|
||||
if neType == "" {
|
||||
log.Error("neType is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
neTypeUpper := strings.ToUpper(neType)
|
||||
neTypeLower := strings.ToLower(neType)
|
||||
|
||||
version := vars["version"]
|
||||
if version == "" {
|
||||
log.Error("version is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
md5Param := services.GetUriParamString(r, "md5Sum", ",", false, false)
|
||||
|
||||
// body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
|
||||
// if err != nil {
|
||||
// log.Error("io.ReadAll is failed:", err)
|
||||
// services.ResponseNotFound404UriNotExist(w, r)
|
||||
// return
|
||||
// }
|
||||
// neSWBody := new(dborm.NeSoftware)
|
||||
// _ = json.Unmarshal(body, neSWBody)
|
||||
// log.Trace("neSoftware:", neSWBody)
|
||||
|
||||
softwarePath := fmt.Sprintf("%s/%s", config.GetYamlConfig().OMC.Software, neTypeLower)
|
||||
fileName, err := services.HandleUploadFile(r, softwarePath, "")
|
||||
if err != nil {
|
||||
log.Error("Faile to HandleUploadFile:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
filePath := fmt.Sprintf("%s/%s", softwarePath, fileName)
|
||||
md5File, err := global.GetFileMD5Sum(filePath)
|
||||
if err != nil {
|
||||
log.Error("Faile to GetFileMD5Sum:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
if md5File != md5Param {
|
||||
err = global.ErrCMNotMatchMD5File
|
||||
log.Error(err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
if config.GetYamlConfig().OMC.CheckSign {
|
||||
cmd := exec.Command("rpm", "-K", filePath)
|
||||
out, err := cmd.CombinedOutput()
|
||||
log.Debugf("Exec outpout:%s", string(out))
|
||||
if err != nil {
|
||||
log.Error("Failed to execute rpm:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
if !strings.Contains(string(out), DigestsSignOkString) {
|
||||
err = global.ErrCMNotMatchSignFile
|
||||
log.Error(err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
//neBackup := dborm.NeBackup{NeType: neType, NeId: neId, Md5Sum: md5Sum}
|
||||
//log.Debug("neBackup:", neBackup)
|
||||
where := fmt.Sprintf("ne_type='%s' and version='%s'", neTypeUpper, version)
|
||||
has, err := dborm.XormExistTableOne("ne_software", where)
|
||||
if err != nil {
|
||||
log.Error("Faile to XormInsertTableOne:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
} else if has == true {
|
||||
err = global.ErrCMExistSoftwareFile
|
||||
log.Error(err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
neSoftware := dborm.NeSoftware{
|
||||
NeType: neTypeUpper,
|
||||
FileName: fileName,
|
||||
Path: softwarePath,
|
||||
Version: version,
|
||||
Md5Sum: md5Param,
|
||||
Comment: neType + " 5GC " + version,
|
||||
//Comment: neSWBody.Comment,
|
||||
}
|
||||
|
||||
_, err = dborm.XormInsertTableOne("ne_software", neSoftware)
|
||||
if err != nil {
|
||||
log.Error("Faile to XormInsertTableOne:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
}
|
||||
|
||||
func DownloadSoftwareFile(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("DownloadSoftwareFile processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["neType"]
|
||||
if neType == "" {
|
||||
log.Error("neType is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
neTypeUpper := strings.ToUpper(neType)
|
||||
//neTypeLower := strings.ToLower(neType)
|
||||
|
||||
version := vars["version"]
|
||||
if version == "" {
|
||||
log.Error("version is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
sql := fmt.Sprintf("select * from ne_software where ne_type='%s' and version='%s'", neTypeUpper, version)
|
||||
neSoftware, err := dborm.XormGetDataBySQL(sql)
|
||||
if err != nil {
|
||||
log.Error("Faile to XormGetDataBySQL:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
} else if len(*neSoftware) == 0 {
|
||||
err := global.ErrCMNotFoundTargetSoftware
|
||||
log.Error(err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
fileName := (*neSoftware)[0]["file_name"]
|
||||
path := (*neSoftware)[0]["path"]
|
||||
md5Sum := (*neSoftware)[0]["md5_sum"]
|
||||
|
||||
services.ResponseFileWithNameAndMD5(w, http.StatusOK, fileName, path, md5Sum)
|
||||
return
|
||||
}
|
||||
|
||||
func DeleteSoftwareFile(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("DeleteSoftwareFile processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["neType"]
|
||||
if neType == "" {
|
||||
log.Error("neType is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
neTypeUpper := strings.ToUpper(neType)
|
||||
//neTypeLower := strings.ToLower(neType)
|
||||
|
||||
version := vars["version"]
|
||||
if version == "" {
|
||||
log.Error("version is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
sql := fmt.Sprintf("select * from ne_software where ne_type='%s' and version='%s'", neTypeUpper, version)
|
||||
neSoftware, err := dborm.XormGetDataBySQL(sql)
|
||||
if err != nil {
|
||||
log.Error("Faile to XormGetDataBySQL:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
} else if len(*neSoftware) == 0 {
|
||||
err := global.ErrCMNotFoundTargetSoftware
|
||||
log.Error(err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
where := fmt.Sprintf("ne_type='%s' and version='%s'", neTypeUpper, version)
|
||||
affected, err := dborm.XormDeleteDataByWhere(where, "ne_software")
|
||||
if err != nil || affected == 0 {
|
||||
log.Error("Faile to XormGetDataBySQL:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
fileName := (*neSoftware)[0]["file_name"]
|
||||
path := (*neSoftware)[0]["path"]
|
||||
filePath := fmt.Sprintf("%s/%s", path, fileName)
|
||||
err = os.Remove(filePath)
|
||||
if err != nil {
|
||||
log.Error("Faile to Remove:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
}
|
||||
|
||||
func DistributeSoftwareToNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("DistributeSoftwareFile processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Http request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["neType"]
|
||||
if neType == "" {
|
||||
log.Error("neType is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
neTypeUpper := strings.ToUpper(neType)
|
||||
neTypeLower := strings.ToLower(neType)
|
||||
|
||||
version := vars["version"]
|
||||
if version == "" {
|
||||
log.Error("version is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
neId := vars["neId"]
|
||||
if version == "" {
|
||||
log.Error("neId is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
neInfo, err := dborm.XormGetNeInfo(neTypeUpper, neId)
|
||||
if err != nil {
|
||||
log.Error("dborm.XormGetNeInfo is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
|
||||
sql := fmt.Sprintf("select * from ne_software where ne_type='%s' and version='%s'", neTypeUpper, version)
|
||||
neSoftware, err := dborm.XormGetDataBySQL(sql)
|
||||
if err != nil {
|
||||
log.Error("Faile to XormGetDataBySQL:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
} else if len(*neSoftware) == 0 {
|
||||
err := global.ErrCMNotFoundTargetSoftware
|
||||
log.Error(err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
log.Debug("neSoftware:", neSoftware)
|
||||
|
||||
sql = fmt.Sprintf("select * from ne_version where ne_type='%s' and ne_id='%s'", neTypeUpper, neId)
|
||||
neVersion, err := dborm.XormGetDataBySQL(sql)
|
||||
if err != nil {
|
||||
log.Error("Faile to XormGetDataBySQL:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
log.Debug("neVersion:", neVersion)
|
||||
|
||||
sshHost := fmt.Sprintf("%s@%s", config.GetYamlConfig().NE.User, neInfo.Ip)
|
||||
mkdirCmd := fmt.Sprintf("mkdir -p %s/software/%s", config.GetYamlConfig().NE.OmcDir, neTypeLower)
|
||||
cmd := exec.Command("ssh", sshHost, mkdirCmd)
|
||||
out, err := cmd.CombinedOutput()
|
||||
log.Tracef("Exec output: %v", string(out))
|
||||
if err != nil {
|
||||
log.Error("Faile to exec cmd:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
fileName := (*neSoftware)[0]["file_name"]
|
||||
path := (*neSoftware)[0]["path"]
|
||||
srcFile := fmt.Sprintf("%s/%s", path, fileName)
|
||||
dstDir := fmt.Sprintf("%s@%s:%s/software/%s", config.GetYamlConfig().NE.User,
|
||||
neInfo.Ip, config.GetYamlConfig().NE.OmcDir, neTypeLower)
|
||||
cmd = exec.Command("scp", "-r", srcFile, dstDir)
|
||||
out, err = cmd.CombinedOutput()
|
||||
log.Tracef("Exec output: %v", string(out))
|
||||
if err != nil {
|
||||
log.Errorf("Faile to scp NF: neType=%s, neId=%s, ip=%s", neType, neId, neInfo.Ip)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
if len(*neVersion) == 0 {
|
||||
neVersionData := dborm.NeVersion{
|
||||
NeType: neTypeUpper,
|
||||
NeId: neInfo.NeId,
|
||||
Version: (*neSoftware)[0]["version"],
|
||||
FilePath: fmt.Sprintf("%s/software/%s/%s", config.GetYamlConfig().NE.OmcDir, neTypeLower, fileName),
|
||||
PreVersion: "",
|
||||
PreFile: "",
|
||||
Status: SoftwareStatusInactive,
|
||||
}
|
||||
|
||||
_, err = dborm.XormInsertTableOne("ne_version", neVersionData)
|
||||
if err != nil {
|
||||
log.Error("Faile to XormInsertTableOne:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
idNeVersion, err := strconv.Atoi((*neVersion)[0]["id"])
|
||||
neVersionData := dborm.NeVersion{
|
||||
NeType: neTypeUpper,
|
||||
NeId: neInfo.NeId,
|
||||
Version: (*neSoftware)[0]["version"],
|
||||
FilePath: fmt.Sprintf("%s/software/%s/%s", config.GetYamlConfig().NE.OmcDir, neTypeLower, fileName),
|
||||
PreVersion: (*neVersion)[0]["version"],
|
||||
PreFile: (*neVersion)[0]["file_path"],
|
||||
Status: SoftwareStatusInactive,
|
||||
}
|
||||
|
||||
_, err = dborm.XormUpdateTableById(idNeVersion, "ne_version", neVersionData)
|
||||
if err != nil {
|
||||
log.Error("Faile to UpdateTableById:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
}
|
||||
|
||||
func ActiveSoftwareToNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("ActiveSoftwareToNF processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Http request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["neType"]
|
||||
if neType == "" {
|
||||
log.Error("neType is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
neTypeUpper := strings.ToUpper(neType)
|
||||
//neTypeLower := strings.ToLower(neType)
|
||||
|
||||
version := vars["version"]
|
||||
if version == "" {
|
||||
log.Error("version is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
neId := vars["neId"]
|
||||
if version == "" {
|
||||
log.Error("neId is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
neInfo, err := dborm.XormGetNeInfo(neTypeUpper, neId)
|
||||
if err != nil {
|
||||
log.Error("dborm.XormGetNeInfo is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
|
||||
sql := fmt.Sprintf("select * from ne_software where ne_type='%s' and version='%s'", neTypeUpper, version)
|
||||
neSoftware, err := dborm.XormGetDataBySQL(sql)
|
||||
if err != nil {
|
||||
log.Error("Faile to XormGetDataBySQL:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
} else if len(*neSoftware) == 0 {
|
||||
err := global.ErrCMNotFoundTargetSoftware
|
||||
log.Error(err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
log.Debug("neVersion:", neSoftware)
|
||||
|
||||
sql = fmt.Sprintf("select * from ne_version where ne_type='%s' and ne_id='%s' and version='%s'", neTypeUpper, neId, version)
|
||||
neVersion, err := dborm.XormGetDataBySQL(sql)
|
||||
if err != nil {
|
||||
log.Error("Faile to XormGetDataBySQL:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
} else if len(*neVersion) == 0 {
|
||||
err := global.ErrCMNotFoundTargetNeVersion
|
||||
log.Error(err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
log.Debug("neVersion:", neVersion)
|
||||
|
||||
if config.GetYamlConfig().OMC.TestMode == false {
|
||||
filePath := (*neVersion)[0]["file_path"]
|
||||
sshHost := fmt.Sprintf("%s@%s", config.GetYamlConfig().NE.User, neInfo.Ip)
|
||||
rpmCmd := fmt.Sprintf("rpm -Uvh '%s'", filePath)
|
||||
cmd := exec.Command("ssh", sshHost, rpmCmd)
|
||||
out, err := cmd.CombinedOutput()
|
||||
log.Tracef("Exec output: %v", string(out))
|
||||
if err != nil {
|
||||
log.Error("Faile to execute rpm command:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
idNeVersion, err := strconv.Atoi((*neVersion)[0]["id"])
|
||||
neVersionData := dborm.NeVersion{
|
||||
Status: SoftwareStatusActive,
|
||||
}
|
||||
|
||||
_, err = dborm.XormUpdateTableById(idNeVersion, "ne_version", neVersionData)
|
||||
if err != nil {
|
||||
log.Error("Faile to UpdateTableById:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
}
|
||||
|
||||
func RollBackSoftwareToNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("ActiveSoftwareToNF processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Http request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["neType"]
|
||||
if neType == "" {
|
||||
log.Error("neType is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
neTypeUpper := strings.ToUpper(neType)
|
||||
//neTypeLower := strings.ToLower(neType)
|
||||
|
||||
version := vars["version"]
|
||||
if version == "" {
|
||||
log.Error("version is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
neId := vars["neId"]
|
||||
if version == "" {
|
||||
log.Error("neId is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
neInfo, err := dborm.XormGetNeInfo(neTypeUpper, neId)
|
||||
if err != nil {
|
||||
log.Error("dborm.XormGetNeInfo is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
|
||||
sql := fmt.Sprintf("select * from ne_version where ne_type='%s' and ne_id='%s'", neTypeUpper, neId)
|
||||
neVersion, err := dborm.XormGetDataBySQL(sql)
|
||||
if err != nil {
|
||||
log.Error("Faile to XormGetDataBySQL:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
} else if len(*neVersion) == 0 {
|
||||
err := global.ErrCMNotFoundTargetNeVersion
|
||||
log.Error(err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
log.Debug("neVersion:", neVersion)
|
||||
|
||||
filePath := (*neVersion)[0]["pre_file"]
|
||||
if filePath == "" {
|
||||
err := global.ErrCMNotFoundRollbackNeVersion
|
||||
log.Error(err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
if config.GetYamlConfig().OMC.TestMode == false {
|
||||
sshHost := fmt.Sprintf("%s@%s", config.GetYamlConfig().NE.User, neInfo.Ip)
|
||||
rpmCmd := fmt.Sprintf("rpm -Uvh --oldpackage '%s'", filePath)
|
||||
cmd := exec.Command("ssh", sshHost, rpmCmd)
|
||||
out, err := cmd.CombinedOutput()
|
||||
log.Tracef("Exec output: %v", string(out))
|
||||
if err != nil {
|
||||
log.Error("Faile to execute rpm command:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
idNeVersion, err := strconv.Atoi((*neVersion)[0]["id"])
|
||||
neVersionData := dborm.NeVersion{
|
||||
Version: (*neVersion)[0]["pre_version"],
|
||||
FilePath: (*neVersion)[0]["pre_file"],
|
||||
PreVersion: "-",
|
||||
PreFile: "-",
|
||||
NewVersion: (*neVersion)[0]["version"],
|
||||
NewFile: (*neVersion)[0]["file_path"],
|
||||
Status: SoftwareStatusActive,
|
||||
}
|
||||
|
||||
_, err = dborm.XormUpdateTableById(idNeVersion, "ne_version", neVersionData)
|
||||
if err != nil {
|
||||
log.Error("Faile to UpdateTableById:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
}
|
||||
671
features/dbrest/dbrest.go
Normal file
671
features/dbrest/dbrest.go
Normal file
@@ -0,0 +1,671 @@
|
||||
package dbrest
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"regexp"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
"xorm.io/xorm"
|
||||
)
|
||||
|
||||
type XormResponse struct {
|
||||
Data interface{} `json:"data"`
|
||||
}
|
||||
|
||||
type XormInsertResponse struct {
|
||||
Data interface{} `json:"data"`
|
||||
}
|
||||
|
||||
var (
|
||||
// database management rest pattern, discard
|
||||
XormGetDataUri = config.UriPrefix + "/databaseManagement/{apiVersion}/elementType/{databaseName}/objectType/{tableName}"
|
||||
XormSelectDataUri = config.UriPrefix + "/databaseManagement/{apiVersion}/select/{databaseName}/{tableName}"
|
||||
XormInsertDataUri = config.UriPrefix + "/databaseManagement/{apiVersion}/insert/{databaseName}/{tableName}"
|
||||
XormUpdateDataUri = config.UriPrefix + "/databaseManagement/{apiVersion}/update/{databaseName}/{tableName}"
|
||||
XormDeleteDataUri = config.UriPrefix + "/databaseManagement/{apiVersion}/delete/{databaseName}/{tableName}"
|
||||
|
||||
XormCommonUri = config.UriPrefix + "/databaseManagement/{apiVersion}/{databaseName}/{tableName}" // for internal
|
||||
XormExtDataUri = config.UriPrefix + "/dataManagement/{apiVersion}/{dataStorage}/{dataObject}" // for external
|
||||
XormDataSQLUri = config.UriPrefix + "/dataManagement/{apiVersion}/{dataStorage}/{dataObject}" // for external
|
||||
)
|
||||
|
||||
var xormResponse XormResponse
|
||||
|
||||
// func init() {
|
||||
// // database management
|
||||
// routes.Register("GET", XormGetDataUri, DatabaseGetData, nil)
|
||||
// routes.Register("GET", XormSelectDataUri, DatabaseGetData, nil)
|
||||
// routes.Register("POST", XormInsertDataUri, DatabaseInsertData, nil)
|
||||
// routes.Register("PUT", XormUpdateDataUri, DatabaseUpdateData, nil)
|
||||
// routes.Register("DELETE", XormDeleteDataUri, DatabaseDeleteData, nil)
|
||||
// // corss orgin domain
|
||||
// routes.Register("OPTIONS", XormGetDataUri, routes.OptionsProc, nil)
|
||||
// routes.Register("OPTIONS", XormSelectDataUri, routes.OptionsProc, nil)
|
||||
// routes.Register("OPTIONS", XormInsertDataUri, routes.OptionsProc, nil)
|
||||
// routes.Register("OPTIONS", XormUpdateDataUri, routes.OptionsProc, nil)
|
||||
// routes.Register("OPTIONS", XormDeleteDataUri, routes.OptionsProc, nil)
|
||||
|
||||
// routes.Register("GET", XormCommonUri, DatabaseGetData, nil)
|
||||
// routes.Register("POST", XormCommonUri, DatabaseInsertData, nil)
|
||||
// routes.Register("PUT", XormCommonUri, DatabaseUpdateData, nil)
|
||||
// routes.Register("DELETE", XormCommonUri, DatabaseDeleteData, nil)
|
||||
|
||||
// // corss orgin domain
|
||||
// routes.Register("OPTIONS", XormInsertDataUri, routes.OptionsProc, nil)
|
||||
// routes.Register("OPTIONS", XormUpdateDataUri, routes.OptionsProc, nil)
|
||||
// routes.Register("OPTIONS", XormDeleteDataUri, routes.OptionsProc, nil)
|
||||
|
||||
// routes.Register("OPTIONS", XormCommonUri, routes.OptionsProc, nil)
|
||||
// }
|
||||
|
||||
var XEngine *xorm.Engine
|
||||
|
||||
type DatabaseClient struct {
|
||||
dbType string
|
||||
dbUrl string
|
||||
dbConnMaxLifetime time.Duration
|
||||
dbMaxIdleConns int
|
||||
dbMaxOpenConns int
|
||||
IsShowSQL bool
|
||||
|
||||
XEngine *xorm.Engine
|
||||
}
|
||||
|
||||
var DbClient DatabaseClient
|
||||
|
||||
func InitDbClient(dbType, dbUser, dbPassword, dbHost, dbPort, dbName string) error {
|
||||
DbClient.dbUrl = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=true&loc=Local",
|
||||
dbUser, dbPassword, dbHost, dbPort, dbName)
|
||||
DbClient.dbType = dbType
|
||||
DbClient.dbConnMaxLifetime = 0
|
||||
DbClient.dbMaxIdleConns = 0
|
||||
DbClient.dbMaxOpenConns = 0
|
||||
if log.GetLevel() == log.LOG_TRACE {
|
||||
DbClient.IsShowSQL = true
|
||||
}
|
||||
log.Debugf("dbType:%s dbUrl:%s:******@tcp(%s:%s)/%s??charset=utf8&parseTime=true&loc=Local",
|
||||
dbType, dbUser, dbHost, dbPort, dbName)
|
||||
|
||||
var err error
|
||||
DbClient.XEngine, err = xorm.NewEngine(DbClient.dbType, DbClient.dbUrl)
|
||||
if err != nil {
|
||||
log.Error("Failed to connet database:", err)
|
||||
return err
|
||||
}
|
||||
DbClient.XEngine.SetConnMaxLifetime(DbClient.dbConnMaxLifetime)
|
||||
DbClient.XEngine.SetMaxIdleConns(DbClient.dbMaxIdleConns)
|
||||
DbClient.XEngine.SetMaxOpenConns(DbClient.dbMaxOpenConns)
|
||||
if DbClient.IsShowSQL {
|
||||
DbClient.XEngine.ShowSQL(true)
|
||||
}
|
||||
XEngine = DbClient.XEngine
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetUriSQLArray(r *http.Request) []string {
|
||||
vars := r.URL.Query()
|
||||
s, ok := vars["SQL"]
|
||||
if !ok {
|
||||
log.Info("SQL is not exist")
|
||||
return nil
|
||||
}
|
||||
|
||||
var sa []string
|
||||
for _, r := range s {
|
||||
if r != "" {
|
||||
sa = append(sa, r)
|
||||
}
|
||||
}
|
||||
|
||||
log.Debug("SQL array:", sa)
|
||||
return sa
|
||||
}
|
||||
|
||||
// Get table name from SQL
|
||||
func GetTableNameFromSQL(s string) string {
|
||||
ls := strings.ToLower(s)
|
||||
i1 := strings.Index(ls, "from")
|
||||
i2 := strings.Index(ls, "where")
|
||||
|
||||
var ts string
|
||||
if i1 > 0 {
|
||||
if i2 > 0 && i2 > i1 {
|
||||
ts = ls[i1+4 : i2]
|
||||
}
|
||||
if i2 < 0 {
|
||||
ts = ls[i1+4:]
|
||||
}
|
||||
}
|
||||
|
||||
tn := strings.Trim(ts, " ")
|
||||
log.Debug("i1:", i1, "i2:", i2, "tn:", tn)
|
||||
return tn
|
||||
}
|
||||
|
||||
func GetTableName(sql string) string {
|
||||
ls := strings.ToLower(sql)
|
||||
|
||||
re := regexp.MustCompile(`from\s+(\S+)`)
|
||||
matches := re.FindStringSubmatch(ls)
|
||||
if len(matches) < 2 {
|
||||
return ""
|
||||
}
|
||||
return matches[1]
|
||||
}
|
||||
|
||||
func IsQuerySQL(s string) bool {
|
||||
ts := strings.Trim(strings.ToLower(s), " ")
|
||||
if strings.Index(ts, "select") != 0 {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// xorm Get data from database
|
||||
func ExtDatabaseExecSQL(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("ExtDatabaseExecSQL processing... ")
|
||||
|
||||
var sql []string
|
||||
var err error
|
||||
|
||||
_, err = services.CheckExtValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
tblName := vars["dataObject"]
|
||||
sql = GetUriSQLArray(r)
|
||||
// select as must, todo ...
|
||||
|
||||
if sql == nil {
|
||||
wc := services.GetUriLocString(r)
|
||||
if wc == "" {
|
||||
sql = append(sql, fmt.Sprintf("select * from %s", tblName))
|
||||
} else {
|
||||
sql = append(sql, fmt.Sprintf("select * from %s where %s", tblName, wc))
|
||||
}
|
||||
}
|
||||
|
||||
ls := services.ExtGetUriPageLimitString(r)
|
||||
|
||||
// data := make([]map[string]interface{}, 0)
|
||||
// xormResponse := make([]map[string]interface{}, len(sql))
|
||||
var xormResponse XormResponse
|
||||
data := make([]map[string]interface{}, 0)
|
||||
for i, s := range sql {
|
||||
log.Tracef("SQL[%d]: %s", i, sql[i])
|
||||
|
||||
rows := make([]map[string]interface{}, 0)
|
||||
mapRows := make(map[string]interface{})
|
||||
|
||||
if s != "" {
|
||||
// err = XEngine.SQL(s).Find(&rows)
|
||||
// if IsQuerySQL(s) == false {
|
||||
// services.ResponseNotAcceptable406QuerySQLError(w)
|
||||
// return
|
||||
// }
|
||||
|
||||
querySQL := s
|
||||
if i == (len(sql) - 1) {
|
||||
querySQL = querySQL + " " + ls
|
||||
}
|
||||
log.Debug("querySQL:", querySQL)
|
||||
rows, err = DbClient.XEngine.QueryInterface(querySQL)
|
||||
if err != nil {
|
||||
log.Error("SQL failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
tableName := GetTableName(s)
|
||||
log.Debugf("s:%s tableName:%s", s, tableName)
|
||||
mapRows[tableName] = rows
|
||||
data = append(data, mapRows)
|
||||
log.Trace("data:", data)
|
||||
}
|
||||
i++
|
||||
}
|
||||
xormResponse.Data = data
|
||||
|
||||
services.ResponseWithJson(w, http.StatusOK, xormResponse)
|
||||
}
|
||||
|
||||
// xorm Get data from database
|
||||
func ExtDatabaseGetData(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("ExtDatabaseGetData processing... ")
|
||||
|
||||
var sql []string
|
||||
token, err := services.CheckExtValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
dbname := vars["dataStorage"]
|
||||
tbname := vars["dataObject"]
|
||||
|
||||
log.Debugf("token:%s, method:%s, dbname:%s, tbname:%s", token, r.Method, dbname, tbname)
|
||||
exist, err := dborm.IsPermissionDeny(token, strings.ToLower(r.Method), dbname, tbname)
|
||||
if err != nil {
|
||||
log.Error("Failed to get permission:", err)
|
||||
services.ResponseForbidden403NotPermission(w)
|
||||
return
|
||||
}
|
||||
if !exist {
|
||||
log.Error("Not permission!")
|
||||
services.ResponseForbidden403NotPermission(w)
|
||||
return
|
||||
}
|
||||
|
||||
sql = GetUriSQLArray(r)
|
||||
// select as must, todo ...
|
||||
if sql == nil {
|
||||
wc := services.GetUriLocString(r)
|
||||
if wc == "" {
|
||||
sql = append(sql, fmt.Sprintf("select * from %s", tbname))
|
||||
} else {
|
||||
sql = append(sql, fmt.Sprintf("select * from %s where %s", tbname, wc))
|
||||
}
|
||||
}
|
||||
|
||||
ls := services.ExtGetUriPageLimitString(r)
|
||||
|
||||
// data := make([]map[string]interface{}, 0)
|
||||
// xormResponse := make([]map[string]interface{}, len(sql))
|
||||
var xormResponse XormResponse
|
||||
data := make([]map[string]interface{}, 0)
|
||||
for i, s := range sql {
|
||||
log.Tracef("SQL[%d]: %s", i, sql[i])
|
||||
|
||||
rows := make([]map[string]interface{}, 0)
|
||||
mapRows := make(map[string]interface{})
|
||||
|
||||
if s != "" {
|
||||
// err = XEngine.SQL(s).Find(&rows)
|
||||
if IsQuerySQL(s) == false {
|
||||
services.ResponseNotAcceptable406QuerySQLError(w)
|
||||
return
|
||||
}
|
||||
|
||||
querySQL := s
|
||||
if i == (len(sql) - 1) {
|
||||
querySQL = querySQL + " " + ls
|
||||
}
|
||||
log.Debug("querySQL:", querySQL)
|
||||
rows, err = DbClient.XEngine.QueryInterface(querySQL)
|
||||
if err != nil {
|
||||
log.Error("SQL failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
tableName := GetTableName(s)
|
||||
log.Debugf("s:%s tableName:%s", s, tableName)
|
||||
mapRows[tableName] = rows
|
||||
data = append(data, mapRows)
|
||||
log.Trace("data:", data)
|
||||
}
|
||||
i++
|
||||
}
|
||||
xormResponse.Data = data
|
||||
|
||||
services.ResponseWithJson(w, http.StatusOK, xormResponse)
|
||||
}
|
||||
|
||||
func ExtDatabaseInsertData(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("ExtDatabaseInsertData processing... ")
|
||||
|
||||
token, err := services.CheckExtValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) //io.LimitReader限制大小
|
||||
if err != nil {
|
||||
log.Error("io.ReadAll failed:", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
dbname := vars["dataStorage"]
|
||||
tbname := vars["dataObject"]
|
||||
|
||||
log.Debugf("token:%s, method:%s, dbname:%s, tbname:%s", token, r.Method, dbname, tbname)
|
||||
exist, err := dborm.IsPermissionDeny(token, strings.ToLower(r.Method), dbname, tbname)
|
||||
if err != nil {
|
||||
log.Error("Failed to get permission:", err)
|
||||
services.ResponseForbidden403NotPermission(w)
|
||||
return
|
||||
}
|
||||
if !exist {
|
||||
log.Error("Not permission!")
|
||||
services.ResponseForbidden403NotPermission(w)
|
||||
return
|
||||
}
|
||||
|
||||
log.Debug("Request body:", string(body), "dataObject:", tbname)
|
||||
insertData := make(map[string]interface{})
|
||||
_ = json.Unmarshal(body, &insertData)
|
||||
|
||||
tn, sql := dborm.ConstructInsertSQL(tbname, insertData)
|
||||
log.Tracef("tn: %s sql :%s", tn, sql)
|
||||
xSession := DbClient.XEngine.NewSession()
|
||||
defer xSession.Close()
|
||||
var affected int64
|
||||
for _, s := range sql {
|
||||
res, err := xSession.Exec(s)
|
||||
if err != nil {
|
||||
log.Error("Insert failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
n, _ := res.RowsAffected()
|
||||
affected = affected + n
|
||||
}
|
||||
xSession.Commit()
|
||||
// affected, err := InsertDataWithJson(insertData)
|
||||
mapRow := make(map[string]interface{})
|
||||
row := map[string]interface{}{"affectedRows": affected}
|
||||
mapRow[tn] = row
|
||||
// xormResponse.Data = mapRow
|
||||
services.ResponseWithJson(w, http.StatusOK, mapRow)
|
||||
}
|
||||
|
||||
func ExtDatabaseUpdateData(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("ExtDatabaseUpdateData processing... ")
|
||||
|
||||
token, err := services.CheckExtValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
dbname := vars["dataStorage"]
|
||||
tbname := vars["dataObject"]
|
||||
|
||||
log.Debugf("token:%s, method:%s, dbname:%s, tbname:%s", token, r.Method, dbname, tbname)
|
||||
exist, err := dborm.IsPermissionDeny(token, strings.ToLower(r.Method), dbname, tbname)
|
||||
if err != nil {
|
||||
log.Error("Failed to get permission:", err)
|
||||
services.ResponseForbidden403NotPermission(w)
|
||||
return
|
||||
}
|
||||
if !exist {
|
||||
log.Error("Not permission!")
|
||||
services.ResponseForbidden403NotPermission(w)
|
||||
return
|
||||
}
|
||||
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
|
||||
if err != nil {
|
||||
log.Error("io.ReadAll is failed:", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
wc := services.GetUriLocString(r)
|
||||
|
||||
log.Debug("Request body:", string(body), "Tablename:", tbname, "wc:", wc)
|
||||
updateData := make(map[string]interface{})
|
||||
_ = json.Unmarshal(body, &updateData)
|
||||
|
||||
tn, sql := dborm.ConstructUpdateSQL(tbname, updateData, wc)
|
||||
log.Tracef("tn: %s sql :%s", tn, sql)
|
||||
xSession := DbClient.XEngine.NewSession()
|
||||
defer xSession.Close()
|
||||
var affected int64
|
||||
for _, s := range sql {
|
||||
res, err := xSession.Exec(s)
|
||||
if err != nil {
|
||||
log.Error("Update failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
n, _ := res.RowsAffected()
|
||||
affected = affected + n
|
||||
}
|
||||
xSession.Commit()
|
||||
mapRow := make(map[string]interface{})
|
||||
row := map[string]interface{}{"affectedRows": affected}
|
||||
mapRow[tn] = row
|
||||
services.ResponseWithJson(w, http.StatusOK, mapRow)
|
||||
}
|
||||
|
||||
func ExtDatabaseDeleteData(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("ExtDatabaseDeleteData processing... ")
|
||||
|
||||
token, err := services.CheckExtValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
dbname := vars["dataStorage"]
|
||||
tbname := vars["dataObject"]
|
||||
|
||||
log.Debugf("token:%s, method:%s, dbname:%s, tbname:%s", token, r.Method, dbname, tbname)
|
||||
exist, err := dborm.IsPermissionDeny(token, strings.ToLower(r.Method), dbname, tbname)
|
||||
if err != nil {
|
||||
log.Error("Failed to get permission:", err)
|
||||
services.ResponseForbidden403NotPermission(w)
|
||||
return
|
||||
}
|
||||
if !exist {
|
||||
log.Error("Not permission!")
|
||||
services.ResponseForbidden403NotPermission(w)
|
||||
return
|
||||
}
|
||||
|
||||
wc := services.GetUriLocString(r)
|
||||
|
||||
log.Debug("Table name:", tbname, "wc:", wc)
|
||||
|
||||
sql := dborm.ConstructDeleteSQL(tbname, wc)
|
||||
xSession := DbClient.XEngine.NewSession()
|
||||
defer xSession.Close()
|
||||
res, err := xSession.Exec(sql)
|
||||
if err != nil {
|
||||
log.Error("Update failed, err:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
affected, _ := res.RowsAffected()
|
||||
xSession.Commit()
|
||||
mapRow := make(map[string]interface{})
|
||||
row := map[string]interface{}{"affectedRows": affected}
|
||||
mapRow["data"] = row
|
||||
services.ResponseWithJson(w, http.StatusOK, mapRow)
|
||||
}
|
||||
|
||||
// xorm Get data from database
|
||||
func DatabaseGetData(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("DatabaseGetData processing... ")
|
||||
|
||||
var sql []string
|
||||
var err error
|
||||
|
||||
_, err = services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
tblName := vars["tableName"]
|
||||
sql = GetUriSQLArray(r)
|
||||
// select as must, todo ...
|
||||
|
||||
if sql == nil {
|
||||
wc := services.GetUriWhereString(r)
|
||||
if wc == "" {
|
||||
sql = append(sql, fmt.Sprintf("select * from %s", tblName))
|
||||
} else {
|
||||
sql = append(sql, fmt.Sprintf("select * from %s where %s", tblName, wc))
|
||||
}
|
||||
}
|
||||
|
||||
ls := services.GetUriPageLimitString(r)
|
||||
|
||||
// data := make([]map[string]interface{}, 0)
|
||||
// xormResponse := make([]map[string]interface{}, len(sql))
|
||||
var xormResponse XormResponse
|
||||
data := make([]map[string]interface{}, 0)
|
||||
for i, s := range sql {
|
||||
log.Tracef("SQL[%d]: %s", i, sql[i])
|
||||
|
||||
rows := make([]map[string]interface{}, 0)
|
||||
mapRows := make(map[string]interface{})
|
||||
|
||||
if s != "" {
|
||||
// err = XEngine.SQL(s).Find(&rows)
|
||||
if IsQuerySQL(s) == false {
|
||||
services.ResponseNotAcceptable406QuerySQLError(w)
|
||||
return
|
||||
}
|
||||
|
||||
querySQL := s
|
||||
if i == (len(sql) - 1) {
|
||||
querySQL = querySQL + " " + ls
|
||||
}
|
||||
log.Debug("querySQL:", querySQL)
|
||||
rows, err = DbClient.XEngine.QueryInterface(querySQL)
|
||||
if err != nil {
|
||||
log.Error("SQL failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
tableName := GetTableName(s)
|
||||
log.Debugf("s:%s tableName:%s", s, tableName)
|
||||
mapRows[tableName] = rows
|
||||
data = append(data, mapRows)
|
||||
log.Trace("data:", data)
|
||||
}
|
||||
i++
|
||||
}
|
||||
xormResponse.Data = data
|
||||
|
||||
services.ResponseWithJson(w, http.StatusOK, xormResponse)
|
||||
}
|
||||
|
||||
func DatabaseInsertData(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("DatabaseInsertData processing... ")
|
||||
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) //io.LimitReader限制大小
|
||||
if err != nil {
|
||||
log.Error("io.ReadAll failed:", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
tableName := vars["tableName"]
|
||||
log.Debug("Request body:", string(body), "tableName:", tableName)
|
||||
insertData := make(map[string]interface{})
|
||||
_ = json.Unmarshal(body, &insertData)
|
||||
|
||||
tn, sql := dborm.ConstructInsertSQL(tableName, insertData)
|
||||
log.Tracef("tn: %s sql :%s", tn, sql)
|
||||
xSession := DbClient.XEngine.NewSession()
|
||||
defer xSession.Close()
|
||||
var affected int64
|
||||
for _, s := range sql {
|
||||
res, err := xSession.Exec(s)
|
||||
if err != nil {
|
||||
log.Error("Insert failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
n, _ := res.RowsAffected()
|
||||
affected = affected + n
|
||||
}
|
||||
xSession.Commit()
|
||||
// affected, err := InsertDataWithJson(insertData)
|
||||
mapRow := make(map[string]interface{})
|
||||
row := map[string]interface{}{"affectedRows": affected}
|
||||
mapRow[tn] = row
|
||||
// xormResponse.Data = mapRow
|
||||
services.ResponseWithJson(w, http.StatusOK, mapRow)
|
||||
}
|
||||
|
||||
func DatabaseUpdateData(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("DatabaseUpdateData processing... ")
|
||||
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
|
||||
if err != nil {
|
||||
log.Error("io.ReadAll is failed:", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
tblName := vars["tableName"]
|
||||
wc := services.GetUriWhereString(r)
|
||||
|
||||
log.Debug("Request body:", string(body), "Table name:", tblName, "wc:", wc)
|
||||
updateData := make(map[string]interface{})
|
||||
_ = json.Unmarshal(body, &updateData)
|
||||
|
||||
tn, sql := dborm.ConstructUpdateSQL(tblName, updateData, wc)
|
||||
log.Tracef("tn: %s sql :%s", tn, sql)
|
||||
xSession := DbClient.XEngine.NewSession()
|
||||
defer xSession.Close()
|
||||
var affected int64
|
||||
for _, s := range sql {
|
||||
res, err := xSession.Exec(s)
|
||||
if err != nil {
|
||||
log.Error("Update failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
n, _ := res.RowsAffected()
|
||||
affected = affected + n
|
||||
}
|
||||
xSession.Commit()
|
||||
mapRow := make(map[string]interface{})
|
||||
row := map[string]interface{}{"affectedRows": affected}
|
||||
mapRow[tn] = row
|
||||
services.ResponseWithJson(w, http.StatusOK, mapRow)
|
||||
}
|
||||
|
||||
func DatabaseDeleteData(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("DatabaseDeleteData processing... ")
|
||||
|
||||
vars := mux.Vars(r)
|
||||
tblName := vars["tableName"]
|
||||
wc := services.GetUriWhereString(r)
|
||||
|
||||
log.Debug("Table name:", tblName, "wc:", wc)
|
||||
|
||||
sql := dborm.ConstructDeleteSQL(tblName, wc)
|
||||
xSession := DbClient.XEngine.NewSession()
|
||||
defer xSession.Close()
|
||||
res, err := xSession.Exec(sql)
|
||||
if err != nil {
|
||||
log.Error("Update failed, err:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
affected, _ := res.RowsAffected()
|
||||
xSession.Commit()
|
||||
mapRow := make(map[string]interface{})
|
||||
row := map[string]interface{}{"affectedRows": affected}
|
||||
mapRow["data"] = row
|
||||
services.ResponseWithJson(w, http.StatusOK, mapRow)
|
||||
}
|
||||
126
features/file/file.go
Normal file
126
features/file/file.go
Normal file
@@ -0,0 +1,126 @@
|
||||
package file
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
|
||||
var (
|
||||
// parameter config management
|
||||
UriFile = config.UriPrefix + "/fileManagement/{apiVersion}/{location}/file"
|
||||
)
|
||||
|
||||
// func init() {
|
||||
// routes.Register("POST", UriFile, UploadFile, nil)
|
||||
// routes.Register("GET", UriFile, DownloadFile, nil)
|
||||
// routes.Register("DELETE", UriFile, DeleteFile, nil)
|
||||
// }
|
||||
|
||||
func UploadFile(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("UploadFile processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Http request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
location := vars["location"]
|
||||
if location == "" {
|
||||
log.Error("location is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
params := r.URL.Query()
|
||||
rename, ok := params["rename"]
|
||||
if !ok {
|
||||
log.Info("rename parameter is not exist")
|
||||
}
|
||||
log.Debug("rename:", rename)
|
||||
|
||||
var path, fileName string
|
||||
if len(rename) > 0 {
|
||||
fileName = rename[0]
|
||||
}
|
||||
if location == "upload" {
|
||||
path = config.GetYamlConfig().OMC.Upload
|
||||
fileName, err = services.HandleUploadFile(r, path, fileName)
|
||||
if err != nil {
|
||||
log.Error("Faile to HandleUploadFile:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
path = config.GetYamlConfig().OMC.FrontUpload
|
||||
fileName, err = services.HandleUploadFile(r, path, fileName)
|
||||
if err != nil {
|
||||
log.Error("Faile to HandleUploadFile:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
log.Debugf("upload file=%s to path=%s", fileName, path)
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
}
|
||||
|
||||
func DownloadFile(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("DownloadFile processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
location := vars["location"]
|
||||
if location == "" {
|
||||
log.Error("location is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
params := r.URL.Query()
|
||||
fileNames, ok := params["loc"]
|
||||
if !ok {
|
||||
log.Info("loc parameter is not exist")
|
||||
}
|
||||
var path string
|
||||
if location == "upload" {
|
||||
path = config.GetYamlConfig().OMC.Upload
|
||||
} else {
|
||||
path = config.GetYamlConfig().OMC.FrontUpload
|
||||
}
|
||||
for _, fileName := range fileNames {
|
||||
services.ResponseFileWithNameAndMD5(w, http.StatusOK, fileName, path, "")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func DeleteFile(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("DeleteFile processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["neType"]
|
||||
if neType == "" {
|
||||
log.Error("neType is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
}
|
||||
669
features/fm/alarm.go
Normal file
669
features/fm/alarm.go
Normal file
@@ -0,0 +1,669 @@
|
||||
package fm
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"xorm.io/xorm"
|
||||
|
||||
"github.com/go-resty/resty/v2"
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
|
||||
const (
|
||||
AlarmStatusClear = 0
|
||||
AlarmStatusActive = 1
|
||||
)
|
||||
|
||||
const (
|
||||
ClearTypeUnclear = 0
|
||||
ClearTypeAutoClear = 1
|
||||
ClearTypeManualClear = 2
|
||||
)
|
||||
|
||||
const (
|
||||
AckStateUnacked = 0
|
||||
AckStateAcked = 1
|
||||
)
|
||||
|
||||
const (
|
||||
AlarmTypeCommunicationAlarm = 1
|
||||
AlarmTypeEquipmentAlarm = 2
|
||||
AlarmTypeProcessingFailure = 3
|
||||
AlarmTypeEnvironmentalAlarm = 4
|
||||
AlarmTypeQualityOfServiceAlarm = 5
|
||||
)
|
||||
|
||||
const (
|
||||
AlarmPerceivedSeverityCritical = 1
|
||||
AlarmPerceivedSeverityMajor = 2
|
||||
AlarmPerceivedSeverityMinor = 3
|
||||
AlarmPerceivedSeverityWarning = 4
|
||||
AlarmPerceivedSeverityEvent = 5
|
||||
)
|
||||
|
||||
const (
|
||||
AlarmSeqBeginNumber = 1
|
||||
)
|
||||
|
||||
type Response struct {
|
||||
Data interface{} `json:"data"`
|
||||
}
|
||||
|
||||
type Alarm struct {
|
||||
AlarmSeq int `json:"alarmSeq"`
|
||||
AlarmId string `json:"alarmId" xorm:"alarm_id"`
|
||||
NeId string `json:"neId"`
|
||||
AlarmCode int `json:"alarmCode"`
|
||||
AlarmTitle string `json:"alarmTitle"`
|
||||
EventTime string `json:"eventTime"`
|
||||
AlarmType string `json:"alarmType"`
|
||||
OrigSeverity string `json:"origSeverity"`
|
||||
PerceivedSeverity string `json:"perceivedSeverity"`
|
||||
PVFlag string `json:"pvFlag" xorm:"pv_flag"`
|
||||
NeName string `json:"neName"`
|
||||
NeType string `json:"neType"`
|
||||
ObjectUid string `json:"objectUid" xorm:"object_uid"`
|
||||
ObjectName string `json:"objectName" xorm:"object_name"`
|
||||
ObjectType string `json:"objectType" xorm:"object_type"`
|
||||
LocationInfo string `json:"locationInfo"`
|
||||
Province string `json:"province"`
|
||||
AlarmStatus int `json:"alarmStatus"`
|
||||
SpecificProblem string `json:"specificProblem"`
|
||||
SpecificProblemID string `json:"specificProblemID" xorm:"specific_problem_id"`
|
||||
AddInfo string `json:"addInfo"`
|
||||
|
||||
AckState int `json:"ackState"`
|
||||
AckTime sql.NullTime `json:"ackTime"`
|
||||
AckUser string `json:"ackUser"`
|
||||
ClearType int `json:"clearType"` // 0: Unclear, 1: Auto clear, 2: Manual clear
|
||||
ClearTime sql.NullTime `json:"clearTime"`
|
||||
}
|
||||
|
||||
type AlarmLog struct {
|
||||
NeType string `json:"neType" xorm:"ne_type"`
|
||||
NeId string `json:"neId" xorm:"ne_id"`
|
||||
AlarmSeq int `json:"alarmSeq" xorm:"alarm_seq"`
|
||||
AlarmId string `json:"alarmId" xorm:"alarm_id"`
|
||||
AlarmCode int `json:"alarmCode" xorm:"alarm_code"`
|
||||
AlarmStatus int `json:"alarmStatus" xorm:"alarm_status"`
|
||||
EventTime string `json:"eventTime" xorm:"event_time"`
|
||||
// ClearTime sql.NullTime `json:"clearTime" xorm:"clear_time"`
|
||||
LogTime string `json:"logTime" xorm:"-"`
|
||||
}
|
||||
|
||||
var (
|
||||
// alarm management
|
||||
UriAlarms = config.UriPrefix + "/faultManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/alarms"
|
||||
UriAlarmsFmt = config.UriPrefix + "/faultManagement/v1/elementType/%s/objectType/alarms"
|
||||
)
|
||||
|
||||
var xEngine *xorm.Engine
|
||||
|
||||
type DatabaseClient struct {
|
||||
dbType string
|
||||
dbUrl string
|
||||
dbConnMaxLifetime time.Duration
|
||||
dbMaxIdleConns int
|
||||
dbMaxOpenConns int
|
||||
IsShowSQL bool
|
||||
|
||||
XEngine *xorm.Engine
|
||||
}
|
||||
|
||||
var DbClient DatabaseClient
|
||||
|
||||
func InitDbClient(dbType, dbUser, dbPassword, dbHost, dbPort, dbName string) error {
|
||||
DbClient.dbUrl = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=true&loc=Local",
|
||||
dbUser, dbPassword, dbHost, dbPort, dbName)
|
||||
DbClient.dbType = dbType
|
||||
DbClient.dbConnMaxLifetime = 0
|
||||
DbClient.dbMaxIdleConns = 0
|
||||
DbClient.dbMaxOpenConns = 0
|
||||
if log.GetLevel() == log.LOG_TRACE {
|
||||
DbClient.IsShowSQL = true
|
||||
}
|
||||
log.Debugf("dbType:%s dbUrl:%s:******@tcp(%s:%s)/%s??charset=utf8&parseTime=true&loc=Local",
|
||||
dbType, dbUser, dbHost, dbPort, dbName)
|
||||
|
||||
var err error
|
||||
DbClient.XEngine, err = xorm.NewEngine(DbClient.dbType, DbClient.dbUrl)
|
||||
if err != nil {
|
||||
log.Error("Failed to connet database:", err)
|
||||
return err
|
||||
}
|
||||
DbClient.XEngine.SetConnMaxLifetime(DbClient.dbConnMaxLifetime)
|
||||
DbClient.XEngine.SetMaxIdleConns(DbClient.dbMaxIdleConns)
|
||||
DbClient.XEngine.SetMaxOpenConns(DbClient.dbMaxOpenConns)
|
||||
if DbClient.IsShowSQL {
|
||||
DbClient.XEngine.ShowSQL(true)
|
||||
}
|
||||
xEngine = DbClient.XEngine
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func XormConnectDatabase(dbType, dbUser, dbPassword, dbHost, dbPort, dbName string) (*xorm.Engine, error) {
|
||||
sqlStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=true&loc=Local",
|
||||
dbUser, dbPassword, dbHost, dbPort, dbName)
|
||||
log.Debugf("dbType:%s Connect to:%s:******@tcp(%s:%s)/%s?charset=utf8&parseTime=true&loc=Local",
|
||||
dbType, dbUser, dbHost, dbPort, dbName)
|
||||
var err error
|
||||
xEngine, err = xorm.NewEngine(dbType, sqlStr) //1、Create xorm engine
|
||||
if err != nil {
|
||||
log.Error("Failed to connect database:", err)
|
||||
return nil, err
|
||||
}
|
||||
if log.GetLevel() == log.LOG_TRACE {
|
||||
xEngine.ShowSQL(true)
|
||||
}
|
||||
return xEngine, nil
|
||||
}
|
||||
|
||||
func IsNeedToAckAlarm(valueJson *dborm.ValueJson, alarm *Alarm) bool {
|
||||
log.Info("IsNeedToAckAlarm processing... ")
|
||||
if valueJson != nil {
|
||||
status, _ := strconv.Atoi(valueJson.AlarmStatus)
|
||||
log.Tracef("alarm.AlarmStatus=%d, alarm.AlarmType=%s, alarm.OrigSeverity=%s", alarm.AlarmStatus, alarm.AlarmType, alarm.OrigSeverity)
|
||||
log.Tracef("status=%d, valueJson.AlarmType=%s, valueJson.OrigSeverity=%s", status, valueJson.AlarmType, valueJson.OrigSeverity)
|
||||
|
||||
if alarm.AlarmStatus == status &&
|
||||
alarm.AlarmType == valueJson.AlarmType &&
|
||||
alarm.OrigSeverity == valueJson.OrigSeverity {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func SetAlarmAckInfo(valueJson *dborm.ValueJson, alarm *Alarm) {
|
||||
log.Info("SetAlarmAckInfo processing... ")
|
||||
alarm.AckState = AckStateAcked
|
||||
alarm.AckTime.Valid = true
|
||||
alarm.AckTime.Time = time.Now()
|
||||
alarm.AckUser = valueJson.AckUser
|
||||
}
|
||||
|
||||
// process alarm post message from NFs
|
||||
func PostAlarmFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("PostAlarmFromNF processing... ")
|
||||
|
||||
vars := mux.Vars(r)
|
||||
apiVer := vars["apiVersion"]
|
||||
if apiVer != global.ApiVersionV1 {
|
||||
log.Error("Uri api version is invalid. apiVersion:", apiVer)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
|
||||
if err != nil {
|
||||
log.Error("io.ReadAll is failed:", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
log.Debug("Request body:", string(body))
|
||||
alarmArray := new([]Alarm)
|
||||
|
||||
err = json.Unmarshal(body, &alarmArray)
|
||||
if err != nil {
|
||||
log.Error("Failed to Unmarshal:", err)
|
||||
services.ResponseBadRequest400InvalidJson(w)
|
||||
return
|
||||
}
|
||||
|
||||
valueJson, err := dborm.XormGetAAConfig()
|
||||
if err != nil {
|
||||
log.Error("Failed to XormGetAAConfig:", err)
|
||||
//services.ResponseInternalServerError500ProcessError(w, err)
|
||||
//return
|
||||
}
|
||||
log.Debug("valueJson:", valueJson)
|
||||
session := xEngine.NewSession()
|
||||
defer session.Close()
|
||||
for _, alarmData := range *alarmArray {
|
||||
log.Debug("alarmData:", alarmData)
|
||||
if alarmData.AlarmStatus == AlarmStatusClear {
|
||||
alarmData.ClearType = ClearTypeAutoClear
|
||||
alarmData.ClearTime.Valid = true
|
||||
tm, _ := time.Parse(time.RFC3339, alarmData.EventTime)
|
||||
log.Debugf("EventTime:%s tm:%d tm-datetime:%s", alarmData.EventTime, tm, tm.Local().Format(time.DateTime))
|
||||
alarmData.ClearTime.Time = tm
|
||||
if IsNeedToAckAlarm(valueJson, &alarmData) == true {
|
||||
SetAlarmAckInfo(valueJson, &alarmData)
|
||||
affected, err := session.Where("ne_type=? and ne_id=? and alarm_id=? and alarm_status=1", alarmData.NeType, alarmData.NeId, alarmData.AlarmId).
|
||||
Cols("alarm_status", "clear_type", "clear_time", "ack_state", "ack_time", "ack_user").
|
||||
Update(alarmData)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to update alarm data:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
continue
|
||||
}
|
||||
} else {
|
||||
affected, err := session.Where("ne_type=? and ne_id=? and alarm_id=? and alarm_status=1", alarmData.NeType, alarmData.NeId, alarmData.AlarmId).
|
||||
Cols("alarm_status", "clear_type", "clear_time").
|
||||
Update(alarmData)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to update alarm data:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
continue
|
||||
}
|
||||
}
|
||||
log.Debug("alarmData:", alarmData)
|
||||
var currentSeq string
|
||||
var seq int
|
||||
has, err := xEngine.Table("alarm").
|
||||
Where("ne_type=? and ne_id=?", alarmData.NeType, alarmData.NeId).
|
||||
Desc("alarm_seq").
|
||||
Cols("alarm_seq").
|
||||
Limit(1).
|
||||
Get(¤tSeq)
|
||||
if err != nil {
|
||||
log.Error("Failed to get alarm:", err)
|
||||
continue
|
||||
}
|
||||
if has == true {
|
||||
seq, _ = strconv.Atoi(currentSeq)
|
||||
}
|
||||
|
||||
eventTime := global.GetFmtTimeString(time.RFC3339, alarmData.EventTime, time.DateTime)
|
||||
alarmLog := new(AlarmLog)
|
||||
alarmLog.NeType = alarmData.NeType
|
||||
alarmLog.NeId = alarmData.NeId
|
||||
alarmLog.AlarmSeq = seq
|
||||
alarmLog.AlarmId = alarmData.AlarmId
|
||||
alarmLog.AlarmCode = alarmData.AlarmCode
|
||||
alarmLog.AlarmStatus = alarmData.AlarmStatus
|
||||
alarmLog.EventTime = eventTime
|
||||
log.Debug("alarmLog:", alarmLog)
|
||||
|
||||
affected, err := session.Insert(alarmLog)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to insert alarm_log:", err)
|
||||
}
|
||||
|
||||
// todo: PerceivedSeverity set color
|
||||
var severity string
|
||||
has, err = xEngine.Table("alarm").
|
||||
Where("ne_type=? and ne_id=? and event_time=? and alarm_status=1", alarmData.NeType, alarmData.NeId, alarmData.EventTime).
|
||||
//OrderBy("FIELD(orig_severity, 'Critical', 'Major', 'Minor', 'Warning', 'Event') ASC").
|
||||
Asc("orig_severity").
|
||||
Cols("orig_severity").
|
||||
Limit(1).
|
||||
Get(&severity)
|
||||
if err != nil {
|
||||
log.Error("Failed to get alarm:", err)
|
||||
continue
|
||||
}
|
||||
log.Debugf("neType=%s, neId=%s, eventTime=%s, severity=%s", alarmData.NeType, alarmData.NeId, alarmData.EventTime, severity)
|
||||
|
||||
if has == true && severity > alarmData.OrigSeverity {
|
||||
// update exist record
|
||||
_, err := session.Table("alarm").
|
||||
Where("ne_type=? and ne_id=? and event_time=? and alarm_status=1", alarmData.NeType, alarmData.NeId, alarmData.EventTime).
|
||||
Update(&Alarm{PerceivedSeverity: severity})
|
||||
if err != nil {
|
||||
log.Error("Failed to update alarm:", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
// for alarm forward time format
|
||||
alarmData.EventTime = eventTime
|
||||
} else {
|
||||
has, err := xEngine.Table("alarm").
|
||||
Where("alarm_id=? and ne_type=? and ne_id=? and alarm_status=1",
|
||||
alarmData.AlarmId, alarmData.NeType, alarmData.NeId).
|
||||
Exist()
|
||||
if err == nil && has == true {
|
||||
log.Warn("Exist the same alarm")
|
||||
continue
|
||||
}
|
||||
|
||||
var currentSeq string
|
||||
has, err = xEngine.Table("alarm").
|
||||
Where("ne_type=? and ne_id=?", alarmData.NeType, alarmData.NeId).
|
||||
Desc("alarm_seq").
|
||||
Cols("alarm_seq").
|
||||
Limit(1).
|
||||
Get(¤tSeq)
|
||||
if err != nil {
|
||||
log.Error("Failed to get alarm:", err)
|
||||
continue
|
||||
}
|
||||
log.Debugf("neType=%s, neId=%s, currentSeq=%s", alarmData.NeType, alarmData.NeId, currentSeq)
|
||||
|
||||
if has == true {
|
||||
seq, _ := strconv.Atoi(currentSeq)
|
||||
if seq+1 > global.MaxInt32Number {
|
||||
alarmData.AlarmSeq = AlarmSeqBeginNumber
|
||||
} else {
|
||||
alarmData.AlarmSeq = seq + 1
|
||||
}
|
||||
} else {
|
||||
alarmData.AlarmSeq = AlarmSeqBeginNumber
|
||||
}
|
||||
|
||||
// todo: PerceivedSeverity set color
|
||||
var severity string
|
||||
has, err = xEngine.Table("alarm").
|
||||
Where("ne_type=? and ne_id=? and event_time=? and alarm_status=1", alarmData.NeType, alarmData.NeId, alarmData.EventTime).
|
||||
//OrderBy("FIELD(orig_severity, 'Critical', 'Major', 'Minor', 'Warning', 'Event') ASC").
|
||||
Asc("orig_severity").
|
||||
Cols("orig_severity").
|
||||
Limit(1).
|
||||
Get(&severity)
|
||||
if err != nil {
|
||||
log.Error("Failed to get alarm:", err)
|
||||
continue
|
||||
}
|
||||
log.Debugf("neType=%s, neId=%s, eventTime=%s, severity=%s", alarmData.NeType, alarmData.NeId, alarmData.EventTime, severity)
|
||||
|
||||
if has == false || severity == alarmData.OrigSeverity {
|
||||
alarmData.PerceivedSeverity = alarmData.OrigSeverity
|
||||
} else if severity > alarmData.OrigSeverity {
|
||||
alarmData.PerceivedSeverity = alarmData.OrigSeverity
|
||||
} else {
|
||||
alarmData.PerceivedSeverity = severity
|
||||
// update exist record
|
||||
_, err := session.Table("alarm").
|
||||
Where("ne_type=? and ne_id=? and event_time=? and alarm_status=1", alarmData.NeType, alarmData.NeId, alarmData.EventTime).
|
||||
Update(&Alarm{PerceivedSeverity: alarmData.PerceivedSeverity})
|
||||
if err != nil {
|
||||
log.Error("Failed to update alarm:", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
eventTime := global.GetFmtTimeString(time.RFC3339, alarmData.EventTime, time.DateTime)
|
||||
alarmData.ObjectUid = alarmData.NeId
|
||||
alarmData.ObjectType = "VNFM"
|
||||
alarmData.EventTime = eventTime
|
||||
if IsNeedToAckAlarm(valueJson, &alarmData) == true {
|
||||
SetAlarmAckInfo(valueJson, &alarmData)
|
||||
}
|
||||
log.Debug("alarmData:", alarmData)
|
||||
affected, err := session.Insert(alarmData)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to insert alarm data:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
continue
|
||||
}
|
||||
alarmLog := new(AlarmLog)
|
||||
alarmLog.NeType = alarmData.NeType
|
||||
alarmLog.NeId = alarmData.NeId
|
||||
alarmLog.AlarmSeq = alarmData.AlarmSeq
|
||||
alarmLog.AlarmId = alarmData.AlarmId
|
||||
alarmLog.AlarmCode = alarmData.AlarmCode
|
||||
alarmLog.AlarmStatus = alarmData.AlarmStatus
|
||||
alarmLog.EventTime = eventTime
|
||||
log.Debug("alarmLog:", alarmLog)
|
||||
|
||||
affected, err = session.Insert(alarmLog)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to insert alarm_log:", err)
|
||||
}
|
||||
}
|
||||
if config.GetYamlConfig().Alarm.ForwardAlarm {
|
||||
if err = AlarmEmailForward(&alarmData); err != nil {
|
||||
log.Error("Failed to AlarmEmailForward:", err)
|
||||
}
|
||||
if err = AlarmForwardBySMS(&alarmData); err != nil {
|
||||
log.Error("Failed to AlarmForwardBySMS:", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
session.Commit()
|
||||
services.ResponseStatusOK200Null(w)
|
||||
}
|
||||
|
||||
// process alarm get from NFs
|
||||
func GetAlarmFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("GetAlarmFromNF processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
//var neInfo *dborm.NeInfo
|
||||
var nes []dborm.NeInfo
|
||||
_, err = dborm.XormGetAllNeInfo(&nes)
|
||||
if err != nil {
|
||||
log.Error("Failed to get all ne info:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
|
||||
for _, ne := range nes {
|
||||
hostUri := fmt.Sprintf("http://%s:%v", ne.Ip, ne.Port)
|
||||
apiUri := fmt.Sprintf(UriAlarmsFmt, strings.ToLower(ne.NeType))
|
||||
requestURI2NF := fmt.Sprintf("%s%s", hostUri, apiUri)
|
||||
log.Debug("requestURI2NF: Get ", requestURI2NF)
|
||||
client := resty.New()
|
||||
response, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Get(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Failed to Get:", err)
|
||||
//services.ResponseInternalServerError500ProcessError(w, err)
|
||||
continue
|
||||
}
|
||||
body := response.Body()
|
||||
log.Debug("Request body:", string(body))
|
||||
alarmArray := new([]Alarm)
|
||||
_ = json.Unmarshal(body, &alarmArray)
|
||||
|
||||
valueJson, err := dborm.XormGetAAConfig()
|
||||
if err != nil {
|
||||
log.Error("Failed to XormGetAAConfig:", err)
|
||||
//services.ResponseInternalServerError500ProcessError(w, err)
|
||||
continue
|
||||
}
|
||||
session := xEngine.NewSession()
|
||||
defer session.Close()
|
||||
for _, alarmData := range *alarmArray {
|
||||
log.Debug("alarmData:", alarmData)
|
||||
// todo: clear alarm ....
|
||||
if alarmData.AlarmStatus == AlarmStatusClear {
|
||||
exist, err := session.Table("alarm").
|
||||
Where("ne_type=? and ne_id=? and alarm_id=? and alarm_status=1", alarmData.NeType, alarmData.NeId, alarmData.AlarmId).
|
||||
Exist()
|
||||
if err == nil || exist == false {
|
||||
log.Info("Not found active alarm: ne_id=%s, alarm_id=%s", alarmData.NeId, alarmData.AlarmId)
|
||||
continue
|
||||
}
|
||||
alarmData.ClearType = ClearTypeAutoClear
|
||||
alarmData.ClearTime.Valid = true
|
||||
tm, _ := time.Parse(time.RFC3339, alarmData.EventTime)
|
||||
log.Debugf("EventTime:%s tm:%d tm-datetime:%s", alarmData.EventTime, tm, tm.Local().Format(time.DateTime))
|
||||
alarmData.ClearTime.Time = tm
|
||||
if IsNeedToAckAlarm(valueJson, &alarmData) == true {
|
||||
SetAlarmAckInfo(valueJson, &alarmData)
|
||||
log.Debug("alarmData:", alarmData)
|
||||
affected, err := session.
|
||||
Where("ne_type=? and ne_id=? and alarm_id=? and alarm_status=1", alarmData.NeType, alarmData.NeId, alarmData.AlarmId).
|
||||
Cols("alarm_status", "clear_type", "clear_time", "ack_state", "ack_time", "ack_user").
|
||||
Update(alarmData)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to update alarm data:", err)
|
||||
//services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
continue
|
||||
}
|
||||
} else {
|
||||
affected, err := session.
|
||||
Where("ne_type=? and ne_id=? and alarm_id=? and alarm_status=1", alarmData.NeType, alarmData.NeId, alarmData.AlarmId).
|
||||
Cols("alarm_status", "clear_type", "clear_time").
|
||||
Update(alarmData)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to update alarm data:", err)
|
||||
//services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
eventTime := global.GetFmtTimeString(time.RFC3339, alarmData.EventTime, time.DateTime)
|
||||
alarmLog := new(AlarmLog)
|
||||
alarmLog.NeType = alarmData.NeType
|
||||
alarmLog.NeId = alarmData.NeId
|
||||
alarmLog.AlarmSeq = alarmData.AlarmSeq
|
||||
alarmLog.AlarmId = alarmData.AlarmId
|
||||
alarmLog.AlarmCode = alarmData.AlarmCode
|
||||
alarmLog.AlarmStatus = alarmData.AlarmStatus
|
||||
alarmLog.EventTime = eventTime
|
||||
log.Debug("alarmLog:", alarmLog)
|
||||
|
||||
affected, err := session.Insert(alarmLog)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to insert alarm_log:", err)
|
||||
}
|
||||
|
||||
// todo: PerceivedSeverity set color
|
||||
var severity string
|
||||
has, err := xEngine.Table("alarm").
|
||||
Where("ne_type=? and ne_id=? and event_time=? and alarm_status=1", alarmData.NeType, alarmData.NeId, alarmData.EventTime).
|
||||
//OrderBy("FIELD(orig_severity, 'Critical', 'Major', 'Minor', 'Warning', 'Event') ASC").
|
||||
Asc("orig_severity").
|
||||
Cols("orig_severity").
|
||||
Limit(1).
|
||||
Get(&severity)
|
||||
if err != nil {
|
||||
log.Error("Failed to get alarm:", err)
|
||||
continue
|
||||
}
|
||||
log.Debugf("neType=%s, neId=%s, eventTime=%s, severity=%s", alarmData.NeType, alarmData.NeId, alarmData.EventTime, severity)
|
||||
|
||||
if has == true && severity > alarmData.OrigSeverity {
|
||||
// update exist record
|
||||
_, err := session.Table("alarm").
|
||||
Where("ne_type=? and ne_id=? and event_time=?", alarmData.NeType, alarmData.NeId, alarmData.EventTime).
|
||||
Update(&Alarm{PerceivedSeverity: severity})
|
||||
if err != nil {
|
||||
log.Error("Failed to update alarm:", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
// for alarm forward time format
|
||||
alarmData.EventTime = eventTime
|
||||
} else {
|
||||
has, err := xEngine.Table("alarm").
|
||||
Where("alarm_id=? and ne_type=? and ne_id=? and alarm_status=1",
|
||||
alarmData.AlarmId, alarmData.NeType, alarmData.NeId).
|
||||
Exist()
|
||||
if err == nil && has == true {
|
||||
log.Warn("Exist the same alarm")
|
||||
continue
|
||||
}
|
||||
|
||||
var currentSeq string
|
||||
has, err = xEngine.Table("alarm").
|
||||
Where("ne_type=? and ne_id=?", alarmData.NeType, alarmData.NeId).
|
||||
Desc("alarm_seq").
|
||||
Cols("alarm_seq").
|
||||
Limit(1).
|
||||
Get(¤tSeq)
|
||||
if err != nil {
|
||||
log.Error("Failed to get alarm:", err)
|
||||
continue
|
||||
}
|
||||
log.Debugf("neType=%s, neId=%s, currentSeq=%s", alarmData.NeType, alarmData.NeId, currentSeq)
|
||||
|
||||
if has == true {
|
||||
seq, _ := strconv.Atoi(currentSeq)
|
||||
if seq+1 > global.MaxInt32Number {
|
||||
alarmData.AlarmSeq = AlarmSeqBeginNumber
|
||||
} else {
|
||||
alarmData.AlarmSeq = seq + 1
|
||||
}
|
||||
} else {
|
||||
alarmData.AlarmSeq = AlarmSeqBeginNumber
|
||||
}
|
||||
|
||||
// todo: PerceivedSeverity set color
|
||||
var severity string
|
||||
has, err = xEngine.Table("alarm").
|
||||
Where("ne_type=? and ne_id=? and event_time=? and alarm_status=1", alarmData.NeType, alarmData.NeId, alarmData.EventTime).
|
||||
//OrderBy("FIELD(orig_severity, 'Critical', 'Major', 'Minor', 'Warning', 'Event') ASC").
|
||||
Asc("orig_severity").
|
||||
Cols("orig_severity").
|
||||
Limit(1).
|
||||
Get(&severity)
|
||||
if err != nil {
|
||||
log.Error("Failed to get alarm:", err)
|
||||
continue
|
||||
}
|
||||
log.Debugf("neType=%s, neId=%s, eventTime=%s, severity=%s", alarmData.NeType, alarmData.NeId, alarmData.EventTime, severity)
|
||||
|
||||
if has == false || severity == alarmData.OrigSeverity {
|
||||
alarmData.PerceivedSeverity = alarmData.OrigSeverity
|
||||
} else if severity > alarmData.OrigSeverity {
|
||||
alarmData.PerceivedSeverity = alarmData.OrigSeverity
|
||||
} else {
|
||||
alarmData.PerceivedSeverity = severity
|
||||
// update exist record
|
||||
_, err := session.Table("alarm").
|
||||
Where("ne_type=? and ne_id=? and event_time=?", alarmData.NeType, alarmData.NeId, alarmData.EventTime).
|
||||
Update(&Alarm{PerceivedSeverity: alarmData.PerceivedSeverity})
|
||||
if err != nil {
|
||||
log.Error("Failed to update alarm:", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
alarmData.ObjectUid = alarmData.NeId
|
||||
alarmData.ObjectType = "VNFM"
|
||||
alarmData.EventTime = global.GetFmtTimeString(time.RFC3339, alarmData.EventTime, time.DateTime)
|
||||
if IsNeedToAckAlarm(valueJson, &alarmData) == true {
|
||||
SetAlarmAckInfo(valueJson, &alarmData)
|
||||
}
|
||||
log.Debug("alarmData:", alarmData)
|
||||
affected, err := session.Insert(alarmData)
|
||||
if err == nil && affected > 0 {
|
||||
alarmLog := new(AlarmLog)
|
||||
alarmLog.NeType = alarmData.NeType
|
||||
alarmLog.NeId = alarmData.NeId
|
||||
alarmLog.AlarmSeq = alarmData.AlarmSeq
|
||||
alarmLog.AlarmId = alarmData.AlarmId
|
||||
alarmLog.AlarmCode = alarmData.AlarmCode
|
||||
alarmLog.AlarmStatus = alarmData.AlarmStatus
|
||||
alarmLog.EventTime = global.GetFmtTimeString(time.RFC3339, alarmData.EventTime, time.DateTime)
|
||||
log.Debug("alarmLog:", alarmLog)
|
||||
affected, err = session.Insert(alarmLog)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to insert data:", err)
|
||||
//services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
continue
|
||||
}
|
||||
session.Commit()
|
||||
if config.GetYamlConfig().Alarm.ForwardAlarm {
|
||||
if err = AlarmEmailForward(&alarmData); err != nil {
|
||||
log.Error("Failed to AlarmEmailForward:", err)
|
||||
}
|
||||
if err = AlarmForwardBySMS(&alarmData); err != nil {
|
||||
log.Error("Failed to AlarmForwardBySMS:", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
log.Warn("Failed to insert alarm data:", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
services.ResponseStatusOK200Null(w)
|
||||
}
|
||||
111
features/fm/email.go
Normal file
111
features/fm/email.go
Normal file
@@ -0,0 +1,111 @@
|
||||
package fm
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/restagent/config"
|
||||
|
||||
"gopkg.in/gomail.v2"
|
||||
)
|
||||
|
||||
func AlarmEmailForward(alarmData *Alarm) error {
|
||||
log.Info("AlarmEmailForward processing... ")
|
||||
|
||||
message := `
|
||||
<p> Hello information,</p>
|
||||
test, test
|
||||
<p style="text-indent:2em">Best Wishes!</p>
|
||||
`
|
||||
|
||||
// QQ 邮箱:
|
||||
// SMTP 服务器地址:smtp.qq.com(SSL协议端口:465/994 | 非SSL协议端口:25)
|
||||
// 163 邮箱:
|
||||
// SMTP 服务器地址:smtp.163.com(端口:25)
|
||||
// host := "mail.agrandtech.com"
|
||||
// port := 25
|
||||
// userName := "smtpext@agrandtech.com"
|
||||
// password := "1000smtp@omc!"
|
||||
|
||||
host := config.GetYamlConfig().Alarm.Email.Smtp
|
||||
port := int(config.GetYamlConfig().Alarm.Email.Port)
|
||||
userName := config.GetYamlConfig().Alarm.Email.User
|
||||
password := config.GetYamlConfig().Alarm.Email.Password
|
||||
|
||||
m := gomail.NewMessage()
|
||||
m.SetHeader("From", userName) // 发件人
|
||||
//m.SetHeader("From", "alias"+"<"+"aliastest"+">") // 增加发件人别名
|
||||
|
||||
emails, err := dborm.XormGetAlarmForward("Email")
|
||||
if err != nil {
|
||||
log.Error("Failed to XormGetAlarmForward:", err)
|
||||
return err
|
||||
} else if emails == nil || len(*emails) == 0 {
|
||||
err := errors.New("not found forward email list")
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
|
||||
forwardLog := &dborm.AlarmForwardLog{
|
||||
NeType: alarmData.NeType,
|
||||
NeID: alarmData.NeId,
|
||||
AlarmID: alarmData.AlarmId,
|
||||
AlarmTitle: alarmData.AlarmTitle,
|
||||
AlarmSeq: alarmData.AlarmSeq,
|
||||
EventTime: alarmData.EventTime,
|
||||
ToUser: strings.Join(*emails, ","),
|
||||
}
|
||||
for _, email := range *emails {
|
||||
m.SetHeader("To", email) // 收件人,可以多个收件人,但必须使用相同的 SMTP 连接
|
||||
}
|
||||
|
||||
//m.SetHeader("To", "zhangshuzhong@agrandtech.com", "simonzhangsz@outlook.com") // 收件人,可以多个收件人,但必须使用相同的 SMTP 连接
|
||||
//m.SetHeader("Cc", "******@qq.com") // 抄送,可以多个
|
||||
//m.SetHeader("Bcc", "******@qq.com") // 暗送,可以多个
|
||||
m.SetHeader("Subject", "Alarm from OMC!") // 邮件主题
|
||||
|
||||
// text/html 的意思是将文件的 content-type 设置为 text/html 的形式,浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理。
|
||||
// 可以通过 text/html 处理文本格式进行特殊处理,如换行、缩进、加粗等等
|
||||
//m.SetBody("text/html", fmt.Sprintf(message, *alarm))
|
||||
m.SetBody("text/html", message)
|
||||
|
||||
// text/plain的意思是将文件设置为纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理
|
||||
// m.SetBody("text/plain", "纯文本")
|
||||
// m.Attach("test.sh") // 附件文件,可以是文件,照片,视频等等
|
||||
// m.Attach("lolcatVideo.mp4") // 视频
|
||||
// m.Attach("lolcat.jpg") // 照片
|
||||
|
||||
d := gomail.NewDialer(
|
||||
host,
|
||||
port,
|
||||
userName,
|
||||
password,
|
||||
)
|
||||
// 关闭SSL协议认证
|
||||
d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
|
||||
|
||||
if err := d.DialAndSend(m); err != nil {
|
||||
operResult := fmt.Sprintf("Failed to DialAndSend:%v", err)
|
||||
log.Error(operResult)
|
||||
forwardLog.OperResult = operResult
|
||||
affected, err := dborm.XormInsertAlarmForwardLog(forwardLog)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to insert data:", err)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
operResult := fmt.Sprintf("Email sent successfully!:", err)
|
||||
log.Error(operResult)
|
||||
forwardLog.OperResult = operResult
|
||||
affected, err := dborm.XormInsertAlarmForwardLog(forwardLog)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to insert data:", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
103
features/fm/smsforward.go
Normal file
103
features/fm/smsforward.go
Normal file
@@ -0,0 +1,103 @@
|
||||
package fm
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/restagent/config"
|
||||
)
|
||||
|
||||
func AlarmForwardBySMS(alarmData *Alarm) error {
|
||||
log.Info("AlarmForwardBySMS processing... ")
|
||||
|
||||
SMSFforwardconfig := config.GetYamlConfig().Alarm.SMS
|
||||
// 阿里云短信API的请求地址
|
||||
apiURL := SMSFforwardconfig.ApiURL
|
||||
|
||||
// 阿里云短信API的AccessKey ID和AccessKey Secret
|
||||
//accessKeyID := SMSFforwardconfig.AccessKeyID
|
||||
accessKeySecret := SMSFforwardconfig.AccessKeySecret
|
||||
|
||||
toUsers, err := dborm.XormGetAlarmForward("SMS")
|
||||
if err != nil {
|
||||
log.Error("Failed to XormGetAlarmForward:", err)
|
||||
return err
|
||||
} else if toUsers == nil {
|
||||
err := errors.New("not found forward phone number")
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
|
||||
for _, toUser := range *toUsers {
|
||||
// 短信相关参数
|
||||
params := url.Values{}
|
||||
params.Set("PhoneNumbers", toUser)
|
||||
params.Set("SignName", SMSFforwardconfig.SignName)
|
||||
params.Set("TemplateCode", SMSFforwardconfig.TemplateCode)
|
||||
params.Set("TemplateParam", `{"message":"alarm"}`)
|
||||
|
||||
// 构建请求URL
|
||||
reqURL := apiURL + "?Action=SendSms&" + params.Encode()
|
||||
|
||||
// 创建HTTP请求
|
||||
req, err := http.NewRequest("GET", reqURL, nil)
|
||||
if err != nil {
|
||||
log.Error("Failed to create request:", err)
|
||||
return err
|
||||
}
|
||||
|
||||
// 添加请求头部
|
||||
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||||
req.Header.Set("Authorization", "APPCODE "+accessKeySecret)
|
||||
|
||||
forwardLog := &dborm.AlarmForwardLog{
|
||||
NeType: alarmData.NeType,
|
||||
NeID: alarmData.NeId,
|
||||
AlarmID: alarmData.AlarmId,
|
||||
AlarmTitle: alarmData.AlarmTitle,
|
||||
AlarmSeq: alarmData.AlarmSeq,
|
||||
EventTime: alarmData.EventTime,
|
||||
ToUser: toUser,
|
||||
}
|
||||
// 发送请求
|
||||
client := &http.Client{}
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
operResult := fmt.Sprintf("Failed to send request:%v", err)
|
||||
log.Error(operResult)
|
||||
forwardLog.OperResult = operResult
|
||||
affected, err := dborm.XormInsertAlarmForwardLog(forwardLog)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to insert data:", err)
|
||||
}
|
||||
continue
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
// 解析响应
|
||||
if resp.StatusCode == http.StatusOK {
|
||||
log.Info("SMS sent successfully!")
|
||||
operResult := fmt.Sprintf("SMS sent successfully!")
|
||||
forwardLog.OperResult = operResult
|
||||
affected, err := dborm.XormInsertAlarmForwardLog(forwardLog)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to insert data:", err)
|
||||
continue
|
||||
}
|
||||
} else {
|
||||
operResult := fmt.Sprintf("Failed to send SMS, StatusCode=%d", resp.StatusCode)
|
||||
log.Error(operResult)
|
||||
forwardLog.OperResult = operResult
|
||||
affected, err := dborm.XormInsertAlarmForwardLog(forwardLog)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to insert data:", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
586
features/handle/handle.go
Normal file
586
features/handle/handle.go
Normal file
@@ -0,0 +1,586 @@
|
||||
package handle
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"io"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
g "github.com/gosnmp/gosnmp"
|
||||
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/oauth"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/lib/session"
|
||||
"ems.agt/restagent/config"
|
||||
)
|
||||
|
||||
var TodoList []stTodo
|
||||
|
||||
type stTodo struct {
|
||||
No string
|
||||
Item string
|
||||
Value string
|
||||
}
|
||||
|
||||
type ErrorOAuthResponse struct {
|
||||
Error map[string]interface{}
|
||||
}
|
||||
|
||||
type FailOAuthResponse struct {
|
||||
Error struct {
|
||||
ErrorCode string
|
||||
ErrorInfo string
|
||||
}
|
||||
}
|
||||
|
||||
type ApiResponse struct {
|
||||
ResultCode string
|
||||
ResultMessage interface{}
|
||||
}
|
||||
|
||||
var globalSession = session.NewSessManager("restagent")
|
||||
|
||||
func init() {
|
||||
conf := config.GetYamlConfig()
|
||||
// Default is a pointer to a GoSNMP struct that contains sensible defaults
|
||||
// eg port 161, community public, etc
|
||||
g.Default.Target = conf.NE.Addr
|
||||
g.Default.Port = conf.NE.Port
|
||||
err := g.Default.Connect()
|
||||
if err != nil {
|
||||
log.Fatalf("Connect() err: %v", err)
|
||||
}
|
||||
//defer g.Default.Conn.Close()
|
||||
}
|
||||
|
||||
/*
|
||||
func IsValidOAuthInfo(oAuthBody OAuthBody) bool {
|
||||
log.Debug("IsValidOAuthInfo processing... ")
|
||||
|
||||
conf := config.GetYamlConfig()
|
||||
for _, o := range conf.Auth {
|
||||
if oAuthBody.GrantType == o.Type && oAuthBody.UserName == o.User && oAuthBody.Value == o.Password {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func IsWrongOAuthInfo(oAuthBody OAuthBody) bool {
|
||||
log.Debug("IsWrongOAuthInfo processing... ")
|
||||
|
||||
if oAuthBody.GrantType == "" || strings.ToLower(oAuthBody.GrantType) != "password" || oAuthBody.UserName == "" || oAuthBody.Value == "" {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
*/
|
||||
|
||||
func IsValidOAuthUri(r *http.Request) bool {
|
||||
vars := mux.Vars(r)
|
||||
Uri := vars["apiCategory"] + "/" + vars["apiVersion"] // 获取Uri
|
||||
if Uri != "securityManagement/v1" {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func IsVallidContentType(r *http.Request) bool {
|
||||
log.Debug("IsVallidContentType processing ...")
|
||||
|
||||
ctype := r.Header["Content-Type"]
|
||||
if len(ctype) != 0 && !strings.Contains(ctype[0], "application/json") {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func LoginFromOMC(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("LoginFromOMC processing... ")
|
||||
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) //io.LimitReader限制大小
|
||||
if err != nil {
|
||||
log.Debug(err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
// check media type(content type) only support "application/json"
|
||||
/* if !IsVallidContentType(r) {
|
||||
log.Debug("Invalid Content-Type")
|
||||
services.ResponseUnsupportedMediaType415(w)
|
||||
return
|
||||
}
|
||||
|
||||
// check extend uri, response 404
|
||||
if !IsValidOAuthUri(r) {
|
||||
log.Debug("Uri is invalid")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
*/
|
||||
// Error process ....
|
||||
// response 400-7
|
||||
if !json.Valid([]byte(body)) {
|
||||
log.Debug("Invalid Json Format")
|
||||
services.ResponseBadRequest400InvalidJson(w)
|
||||
return
|
||||
}
|
||||
|
||||
var oAuthBody oauth.OAuthBody
|
||||
_ = json.Unmarshal(body, &oAuthBody) //转为json
|
||||
log.Debug("body:", string(body), "oAuthBody:", oAuthBody)
|
||||
|
||||
defer r.Body.Close()
|
||||
// response 400-5
|
||||
if oauth.IsWrongOAuthInfo(oAuthBody) {
|
||||
log.Debug("Wrong parameter value")
|
||||
services.ResponseBadRequest400WrongParamValue(w)
|
||||
return
|
||||
}
|
||||
/*
|
||||
if oauth.IsValidOAuthInfo(oAuthBody) {
|
||||
plist := config.GetPermissionFromConfig(oAuthBody.UserName, oAuthBody.GrantType)
|
||||
log.Debug("Permission list:", plist)
|
||||
|
||||
token := globalSession.NewSession(w, r, plist)
|
||||
services.ResponseStatusOK200Login(w, token)
|
||||
} else {
|
||||
// response 400-4
|
||||
log.Debug("Authentication failed, mismatch user or password")
|
||||
|
||||
services.ResponseBadRequest400IncorrectLogin(w)
|
||||
}
|
||||
*/
|
||||
validUser, changePassword, _ := dborm.XormCheckLoginUser(oAuthBody.UserName,
|
||||
oAuthBody.Value, config.GetYamlConfig().Auth.Crypt)
|
||||
if validUser {
|
||||
// plist := config.GetPermissionFromConfig(oAuthBody.UserName, oAuthBody.GrantType)
|
||||
plist := []bool{true, true, true, true}
|
||||
log.Debug("Permission list:", plist)
|
||||
|
||||
token := globalSession.NewSession(w, r, plist)
|
||||
services.ResponseStatusOK200Login(w, token, changePassword)
|
||||
} else {
|
||||
// response 400-4
|
||||
log.Error("Authentication failed, mismatch user or password")
|
||||
|
||||
services.ResponseBadRequest400IncorrectLogin(w)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func LogoutFromOMC(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("LogoutFromOMC processing... ")
|
||||
|
||||
// check media type(content type) only support "application/json"
|
||||
if !IsVallidContentType(r) {
|
||||
log.Debug("Invalid Content-Type")
|
||||
services.ResponseUnsupportedMediaType415(w)
|
||||
return
|
||||
}
|
||||
|
||||
// check extend uri, response 404
|
||||
if !IsValidOAuthUri(r) {
|
||||
log.Debug("Uri is invalid")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
// error processing ...
|
||||
// 401-1 response
|
||||
token, ret := globalSession.IsCarriedToken(r)
|
||||
if ret == false {
|
||||
log.Debug("AccessToken is not carried")
|
||||
services.ResponseUnauthorized401AccessTokenNotCarried(w)
|
||||
return
|
||||
}
|
||||
|
||||
// 401-2 response
|
||||
if globalSession.IsValidToken(token) == false {
|
||||
log.Debug("AccessToken fails or does not exist")
|
||||
services.ResponseUnauthorized401AccessTokenNotExist(w)
|
||||
return
|
||||
}
|
||||
|
||||
globalSession.EndSession(w, r)
|
||||
services.ResponseStatusOK200Null(w)
|
||||
return
|
||||
}
|
||||
|
||||
func HandshakeFromOMC(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("HandshakeFromOMC processing... ")
|
||||
|
||||
// check media type(content type) only support "application/json"
|
||||
if !IsVallidContentType(r) {
|
||||
log.Debug("Invalid Content-Type")
|
||||
services.ResponseUnsupportedMediaType415(w)
|
||||
return
|
||||
}
|
||||
|
||||
// check extend uri, response 404
|
||||
if !IsValidOAuthUri(r) {
|
||||
log.Debug("Uri is invalid")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
// error processing ...
|
||||
// 401-1 response
|
||||
token, ret := globalSession.IsCarriedToken(r)
|
||||
if ret == false {
|
||||
log.Debug("AccessToken is not carried")
|
||||
services.ResponseUnauthorized401AccessTokenNotCarried(w)
|
||||
return
|
||||
}
|
||||
|
||||
if !globalSession.ShakeSession(token) {
|
||||
// 401-2 response
|
||||
log.Debug("AccessToken fails or does not exist")
|
||||
services.ResponseUnauthorized401AccessTokenNotExist(w)
|
||||
return
|
||||
}
|
||||
|
||||
// 200 response
|
||||
services.ResponseStatusOK200Null(w)
|
||||
return
|
||||
}
|
||||
|
||||
var (
|
||||
MAX_RMUID_NUM = config.GetRmUIDMaxNumFromConfig()
|
||||
MAX_ALARMID_NUM = config.GetAlarmIDMaxNumFromConfig()
|
||||
MAX_PMUID_NUM = config.GetPmIDMaxNumFromConfig()
|
||||
MAX_SUBID_NUM = config.GetSubIDMaxNumFromConfig()
|
||||
MAX_URI_LEN = config.GetUriMaxLenFromConfig()
|
||||
RMUID_REGEXP = config.GetRmUIDRegexpFromConfig()
|
||||
)
|
||||
|
||||
func CheckParameterName(r *http.Request) []string {
|
||||
var errorParams []string
|
||||
vars := r.URL.Query()
|
||||
for k, v := range vars {
|
||||
log.Debug("vars:", k, v)
|
||||
if k != "rmUIDs" && k != "fields" {
|
||||
errorParams = append(errorParams, k)
|
||||
}
|
||||
}
|
||||
|
||||
return errorParams
|
||||
}
|
||||
|
||||
func GetRmUIDArr(r *http.Request) []string {
|
||||
vars := r.URL.Query()
|
||||
rmUIDs, ok := vars["rmUIDs"]
|
||||
if !ok {
|
||||
log.Debug("rmUIDs is not exist")
|
||||
return nil
|
||||
}
|
||||
|
||||
var rmUIDValues []string
|
||||
for _, r := range rmUIDs {
|
||||
if r != "" {
|
||||
rmUIDValues = global.MergeStringArr(rmUIDValues, strings.Split(r, `,`))
|
||||
}
|
||||
}
|
||||
|
||||
return rmUIDValues
|
||||
}
|
||||
|
||||
func GetAttrNameArr(r *http.Request) []string {
|
||||
vars := r.URL.Query()
|
||||
fields, ok := vars["fields"]
|
||||
if !ok {
|
||||
log.Debug("attributeNames does not exist")
|
||||
return nil
|
||||
}
|
||||
var attrNames []string
|
||||
for _, a := range fields {
|
||||
if a != "" {
|
||||
attrNames = global.MergeStringArr(attrNames, strings.Split(a, `,`))
|
||||
}
|
||||
}
|
||||
|
||||
return attrNames
|
||||
}
|
||||
|
||||
func CheckValidRmUID(rmUIDs []string) []string {
|
||||
log.Debug("GetLocalRmUID processing... ")
|
||||
|
||||
var invalidRmUIDs []string
|
||||
for _, r := range rmUIDs {
|
||||
if !global.MatchRmUID(RMUID_REGEXP, r) {
|
||||
invalidRmUIDs = append(invalidRmUIDs, r)
|
||||
}
|
||||
}
|
||||
|
||||
return invalidRmUIDs
|
||||
}
|
||||
|
||||
func CheckLocalRmUID(rmUIDs []string) string {
|
||||
log.Debug("GetLocalRmUID processing... ")
|
||||
|
||||
rmUID := config.GetRmUIDFromConfig()
|
||||
for _, r := range rmUIDs {
|
||||
if r == rmUID {
|
||||
return rmUID
|
||||
}
|
||||
}
|
||||
|
||||
return ""
|
||||
}
|
||||
|
||||
func GetNRMByUri(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("GetNRMByUri processing... ")
|
||||
|
||||
// response 414-4 uri too long ? (optional)
|
||||
// todo ... ?
|
||||
if bytes.Count([]byte(r.RequestURI), nil) > MAX_URI_LEN {
|
||||
log.Debug("Request Uri too long:", bytes.Count([]byte(r.RequestURI), nil))
|
||||
services.ResponseRequestURITooLong414UriTooLong(w)
|
||||
return
|
||||
}
|
||||
|
||||
// check media type(content type) only support "application/json"
|
||||
// response 415-1
|
||||
if !IsVallidContentType(r) {
|
||||
log.Debug("Invalid Content-Type")
|
||||
services.ResponseUnsupportedMediaType415(w)
|
||||
return
|
||||
}
|
||||
|
||||
// error processing ...
|
||||
// 401-1 response
|
||||
token, ret := globalSession.IsCarriedToken(r)
|
||||
if ret == false {
|
||||
log.Debug("AccessToken is not carried")
|
||||
services.ResponseUnauthorized401AccessTokenNotCarried(w)
|
||||
return
|
||||
}
|
||||
|
||||
// 401-2 response
|
||||
if globalSession.IsValidToken(token) == false {
|
||||
log.Debug("AccessToken fails or does not exist")
|
||||
services.ResponseUnauthorized401AccessTokenNotExist(w)
|
||||
return
|
||||
}
|
||||
// response 403 Forbidden, permissions deny
|
||||
// todo...
|
||||
plist := globalSession.GetPermissionFromSession(token)
|
||||
log.Debug("permission list:", plist)
|
||||
if len(plist) == 0 || plist[0] == false {
|
||||
log.Debug("User permission deny")
|
||||
services.ResponseForbidden403NotPermission(w)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
qeuryUri := vars["apiCategory"] + "/" + vars["elementTypeValue"] + "/" + vars["objectTypeValue"]
|
||||
log.Debug("Get by Uri: ", qeuryUri)
|
||||
|
||||
apiVer := vars["apiVersion"]
|
||||
if apiVer != "v1" {
|
||||
log.Debug("Uri is invalid")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
// response 406-1
|
||||
rmUIDValues := GetRmUIDArr(r)
|
||||
if rmUIDValues == nil {
|
||||
log.Debug("missing parameter: rmUIDs")
|
||||
services.ResponseNotAcceptable406MissingParam(w)
|
||||
return
|
||||
}
|
||||
|
||||
// response 406-2
|
||||
errorParams := CheckParameterName(r)
|
||||
if errorParams != nil {
|
||||
log.Debug("parameter name error: ", errorParams)
|
||||
services.ResponseNotAcceptable406ParamError(w, errorParams)
|
||||
return
|
||||
}
|
||||
|
||||
// response 400-5
|
||||
if len(rmUIDValues) == 0 {
|
||||
log.Debug("rmUIDs is wrong or NULL")
|
||||
services.ResponseBadRequest400WrongParamValue(w)
|
||||
return
|
||||
}
|
||||
|
||||
// response 414-1
|
||||
if len(rmUIDValues) > MAX_RMUID_NUM {
|
||||
log.Debug("rmUID greater than", MAX_RMUID_NUM)
|
||||
services.ResponseRequestURITooLong414NRMNumExceed(w, MAX_RMUID_NUM)
|
||||
return
|
||||
}
|
||||
|
||||
// response 400-1
|
||||
// check rmUID is valid
|
||||
// todo ...
|
||||
invalidRmUIDs := CheckValidRmUID(rmUIDValues)
|
||||
if len(invalidRmUIDs) != 0 {
|
||||
log.Debug("rmUID is invalid")
|
||||
services.ResponseBadRequest400RmUIDsIsInvalid(w, invalidRmUIDs)
|
||||
return
|
||||
}
|
||||
|
||||
// response 404-2
|
||||
rmUID := CheckLocalRmUID(rmUIDValues)
|
||||
if rmUID == "" {
|
||||
log.Debug("rmUID does not exist")
|
||||
services.ResponseNotFound404NRMNotExist(w, rmUIDValues)
|
||||
return
|
||||
}
|
||||
|
||||
// response 404-1, uri is not exist in map
|
||||
attrNames := GetAttrNameArr(r)
|
||||
var Oids []string
|
||||
Oids = *config.GetOidByFileds(qeuryUri, attrNames, &Oids)
|
||||
if len(Oids) == 0 {
|
||||
log.Debug("Nothing of config map")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
// response 404-1, uri is not exist in map
|
||||
var nameOids []config.NameOid
|
||||
nameOids = *config.GetDataOidByFields(qeuryUri, attrNames, &nameOids)
|
||||
if len(nameOids) == 0 {
|
||||
log.Debug("Nothing of config map")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
result, err2 := g.Default.Get(Oids) // Get() accepts up to g.MAX_OIDS
|
||||
if err2 != nil {
|
||||
log.Fatalf("Get() err: %v", err2)
|
||||
|
||||
}
|
||||
|
||||
// var nameValues []config.NameValue
|
||||
var nameValue config.NameValue
|
||||
|
||||
nameValues := make(map[string]interface{})
|
||||
nameValues["rmUID"] = rmUID
|
||||
for i, variable := range result.Variables {
|
||||
nameValue.Name = nameOids[i].Name
|
||||
log.Debugf("%d: oid: %s name: %s\n", i, variable.Name, nameValue.Name)
|
||||
// if nameOids[i].Oid == variable.Name && global.IsContain(attributeNames, nameValue.Name) {
|
||||
if nameOids[i].Oid == variable.Name {
|
||||
// the Value of each variable returned by Get() implements
|
||||
// interface{}. You could do a type switch...
|
||||
switch variable.Type {
|
||||
case g.OctetString:
|
||||
bytes := variable.Value.([]byte)
|
||||
log.Debugf("string: %s\n", string(bytes))
|
||||
nameValue.Value = string(bytes)
|
||||
nameValues[nameValue.Name] = nameValue.Value
|
||||
case g.Integer:
|
||||
value := variable.Value.(int)
|
||||
log.Debugf("integer: %d\n", value)
|
||||
nameValue.Value = strconv.Itoa(value)
|
||||
nameValues[nameValue.Name] = nameValue.Value
|
||||
case g.IPAddress:
|
||||
value := variable.Value.(string)
|
||||
log.Debugf("IPAddress: %s\n", variable.Value)
|
||||
nameValue.Value = value
|
||||
nameValues[nameValue.Name] = nameValue.Value
|
||||
default:
|
||||
// ... or often you're just interested in numeric values.
|
||||
// ToBigInt() will return the Value as a BigInt, for plugging
|
||||
// into your calculations.
|
||||
log.Debugf("number: %d\n", g.ToBigInt(variable.Value))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
getResponse := services.DataResponse{nameValues}
|
||||
services.ResponseWithJson(w, http.StatusOK, getResponse)
|
||||
}
|
||||
|
||||
func RestfulPut(w http.ResponseWriter, r *http.Request) {
|
||||
vars := mux.Vars(r)
|
||||
queryNo := vars["no"]
|
||||
var targetTodo stTodo
|
||||
for _, Todo := range TodoList {
|
||||
if Todo.No == queryNo {
|
||||
targetTodo = Todo
|
||||
}
|
||||
}
|
||||
response := ApiResponse{"200", targetTodo}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
}
|
||||
|
||||
func RestfulHead(w http.ResponseWriter, r *http.Request) {
|
||||
var targetTodo stTodo
|
||||
|
||||
response := ApiResponse{"200", targetTodo}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
|
||||
}
|
||||
|
||||
func RemoveElement(TodoList []stTodo, No string) stTodo {
|
||||
// var targetTodo stTodo
|
||||
j := 0
|
||||
if len(TodoList) == 0 {
|
||||
return TodoList[j]
|
||||
}
|
||||
|
||||
for i := 0; i < len(TodoList); i++ {
|
||||
if TodoList[i].No != No {
|
||||
if i != j {
|
||||
TodoList[i], TodoList[j] = TodoList[j], TodoList[i]
|
||||
}
|
||||
j++
|
||||
}
|
||||
}
|
||||
log.Debug(TodoList[j].No, TodoList[j].Item)
|
||||
return TodoList[j]
|
||||
}
|
||||
|
||||
func RestfulDelete(w http.ResponseWriter, r *http.Request) {
|
||||
vars := mux.Vars(r)
|
||||
queryNo := vars["no"] //获取No
|
||||
|
||||
log.Debug("RestfulDelete processing... ")
|
||||
|
||||
targetTodo := RemoveElement(TodoList, queryNo)
|
||||
response := ApiResponse{"200", targetTodo}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
}
|
||||
|
||||
func RestfulOptions(w http.ResponseWriter, r *http.Request) {
|
||||
var targetTodo stTodo
|
||||
|
||||
response := ApiResponse{"200", targetTodo}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
|
||||
}
|
||||
|
||||
func RestfulTrace(w http.ResponseWriter, r *http.Request) {
|
||||
var targetTodo stTodo
|
||||
|
||||
response := ApiResponse{"200", targetTodo}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
|
||||
}
|
||||
|
||||
func RestfulPatch(w http.ResponseWriter, r *http.Request) {
|
||||
var targetTodo stTodo
|
||||
|
||||
response := ApiResponse{"200", targetTodo}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
|
||||
}
|
||||
322
features/maintenance/maintenance.go
Normal file
322
features/maintenance/maintenance.go
Normal file
@@ -0,0 +1,322 @@
|
||||
package maintenance
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path"
|
||||
"runtime"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"github.com/shirou/gopsutil/cpu"
|
||||
"github.com/shirou/gopsutil/disk"
|
||||
"github.com/shirou/gopsutil/mem"
|
||||
)
|
||||
|
||||
// (1) OMC能够对相关的文件系统资源、内存、CPU资源、数据存储空间、数据库空间等系统指标进行监控管理;
|
||||
// 对于虚拟化部署OMC系统,能够对虚机内存、虚机CPU、虚拟存储空间、文件系统资源、数据库空间等指标进行监控,提供界面截图 ;
|
||||
|
||||
// (2) 系统监控指标的采样时间和阈值可由用户设定,超过阈值将产生不同级别的告警,提供界面截图 ;
|
||||
|
||||
// (3) OMC能够方便的查询数据库连接情况;并可手工干预数据库的连接,能方便的终结非法的数据库连接 ;
|
||||
|
||||
// (4) 用户能方便的查询系统进程、应用进程等的进程名、进程类型、开始时间、运行主机等信息,提供界面截图
|
||||
// (5) 用户能方便的对系统进程、应用进程等做中断或者启动操作,提供界面截图
|
||||
|
||||
// (6) 对于文件系统资源、内存、CPU资源、数据存储空间、数据库空间等系统指标数据,要求OMC能够保存至少3个月,提供界面截图 ;
|
||||
// (7) 用户可以按照需求自定义报表模板并生成OMC系统维护数据报表,提供界面截图 ;
|
||||
|
||||
// (8) OMC具备自身告警管理功能,对于传统OMC系统,如:服务器单电源告警,存储硬盘告警、OMC系统软件故障等;
|
||||
// 对于虚拟化OMC系统,如虚机告警、虚拟硬盘告警等,提供界面截图 。
|
||||
|
||||
var (
|
||||
// parameter config management
|
||||
Uri = config.UriPrefix + "/maintenance/{apiVersion}/zz"
|
||||
|
||||
// (1) OMC能够对相关的文件系统资源、内存、CPU资源、数据存储空间、数据库空间等系统指标进行监控管理;
|
||||
UriPref = config.UriPrefix + "/maintenance/{apiVersion}/pref"
|
||||
|
||||
// (6) 对于文件系统资源、内存、CPU资源、数据存储空间、数据库空间等系统指标数据,要求OMC能够保存至少3个月,提供界面截图 ;
|
||||
UriPrefLog = config.UriPrefix + "/maintenance/{apiVersion}/prefLog"
|
||||
|
||||
// (2) 系统监控指标的采样时间和阈值可由用户设定,超过阈值将产生不同级别的告警,提供界面截图 ;
|
||||
UriConfig = config.UriPrefix + "/maintenance/{apiVersion}/config"
|
||||
|
||||
// (3) OMC能够方便的查询数据库连接情况;并可手工干预数据库的连接,能方便的终结非法的数据库连接
|
||||
UriSqlClient = config.UriPrefix + "/maintenance/{apiVersion}/sqlClient"
|
||||
|
||||
// (4) 用户能方便的查询系统进程、应用进程等的进程名、进程类型、开始时间、运行主机等信息,提供界面截图
|
||||
// (5) 用户能方便的对系统进程、应用进程等做中断或者启动操作,提供界面截图
|
||||
UriTop = config.UriPrefix + "/maintenance/{apiVersion}/top"
|
||||
)
|
||||
|
||||
func init() {
|
||||
// 定時收集 TODO
|
||||
prefLogSave("")
|
||||
}
|
||||
|
||||
func List(w http.ResponseWriter, r *http.Request) {
|
||||
fmt.Println("zz List")
|
||||
services.ResponseStatusOK200Null(w)
|
||||
}
|
||||
|
||||
// 性能指標
|
||||
func prefInfo(dirName string) map[string]any {
|
||||
data := make(map[string]any)
|
||||
|
||||
// 显示文件資源目录
|
||||
dirPath := "D://"
|
||||
if runtime.GOOS == "linux" {
|
||||
dirPath = "/home"
|
||||
}
|
||||
// 訪問下級
|
||||
if dirName != "" {
|
||||
dirPath = path.Join(dirPath, dirName)
|
||||
}
|
||||
dir_list, e := os.ReadDir(dirPath)
|
||||
if e != nil {
|
||||
log.Error(e)
|
||||
}
|
||||
list := make([]map[string]any, 0)
|
||||
for _, v := range dir_list {
|
||||
o, err := v.Info()
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
list = append(list, map[string]any{
|
||||
"name": o.Name(),
|
||||
"size": o.Size(),
|
||||
"mode": o.Mode().String(),
|
||||
"modTime": o.ModTime().Format("2006-01-02 15:04:05"),
|
||||
"isDir": o.IsDir(),
|
||||
})
|
||||
}
|
||||
data["dirList"] = list
|
||||
|
||||
// 文件資源使用率
|
||||
u, _ := disk.Usage(dirPath)
|
||||
usedGB := int(u.Used) / (1024 * 1024 * 1024 * 1)
|
||||
data["dirUse"] = fmt.Sprintf("%d", usedGB)
|
||||
|
||||
// CPU使用率
|
||||
percent, err := cpu.Percent(time.Second, false)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
}
|
||||
data["cpuUse"] = fmt.Sprintf("%.2f", percent[0])
|
||||
|
||||
// 内存使用率
|
||||
memInfo, err := mem.VirtualMemory()
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
}
|
||||
data["memUse"] = memInfo.UsedPercent
|
||||
|
||||
// 獲取數據庫占用空間
|
||||
if dborm.DbClient.XEngine != nil {
|
||||
conf := config.GetYamlConfig()
|
||||
result, err := dborm.DbClient.XEngine.QueryString(`SELECT
|
||||
CONCAT(TRUNCATE(SUM(data_length)/1024/1024,2),'MB') AS data_size,
|
||||
CONCAT(TRUNCATE(SUM(max_data_length)/1024/1024,2),'MB') AS max_data_size,
|
||||
CONCAT(TRUNCATE(SUM(data_free)/1024/1024,2),'MB') AS data_free,
|
||||
CONCAT(TRUNCATE(SUM(index_length)/1024/1024,2),'MB') AS index_size
|
||||
FROM information_schema.tables WHERE TABLE_SCHEMA = ?;
|
||||
`, conf.Database.Name)
|
||||
if err == nil {
|
||||
data["dbInfo"] = result[0]
|
||||
} else {
|
||||
data["dbInfo"] = map[string]string{}
|
||||
}
|
||||
}
|
||||
return data
|
||||
}
|
||||
|
||||
// 性能指標存入數據庫
|
||||
func prefLogSave(dirName string) {
|
||||
if dborm.DbClient.XEngine != nil {
|
||||
data := prefInfo(dirName)
|
||||
|
||||
dirListByte, err := json.Marshal(data["dirList"])
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
}
|
||||
dbInfoByte, err := json.Marshal(data["dbInfo"])
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
}
|
||||
rse, err := dborm.DbClient.XEngine.Exec(`INSERT INTO sys_perf_data
|
||||
(id, create_time, dir_used, dir_list, db_info, mem_used, cpu_used)
|
||||
VALUES(NULL, NOW(), ?, ?, ?, ?, ?);
|
||||
`, data["dirUse"], string(dirListByte), string(dbInfoByte), data["memUse"], data["cpuUse"])
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
}
|
||||
fmt.Println(rse.LastInsertId())
|
||||
}
|
||||
}
|
||||
|
||||
// GET http://192.168.21.183:3040/api/rest/maintenance/v1/pref?dir=true
|
||||
func Pref(w http.ResponseWriter, r *http.Request) {
|
||||
// 知道下級文件資源目录
|
||||
dirName := r.URL.Query().Get("dirName")
|
||||
data := prefInfo(dirName)
|
||||
services.ResponseWithJson(w, http.StatusOK, data)
|
||||
}
|
||||
|
||||
// GET http://192.168.21.183:3040/api/rest/maintenance/v1/prefLog?pageNum=1&pageSize=10
|
||||
func PrefLog(w http.ResponseWriter, r *http.Request) {
|
||||
pageNumb, pageSize := services.GetPageNumSize(r)
|
||||
result, err := dborm.DbClient.XEngine.QueryString("SELECT * FROM sys_perf_data limit ?,?", (pageNumb-1)*pageSize, pageSize)
|
||||
if err != nil {
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
}
|
||||
services.ResponseWithJson(w, http.StatusOK, result)
|
||||
}
|
||||
|
||||
// POST http://192.168.21.183:3040/api/rest/maintenance/v1/config
|
||||
func Config(w http.ResponseWriter, r *http.Request) {
|
||||
// json 請求參數獲取
|
||||
var bodyArgs struct {
|
||||
Key string `json:"key"`
|
||||
Value string `json:"value"`
|
||||
}
|
||||
err := services.JSONBody(r, &bodyArgs)
|
||||
if err != nil {
|
||||
log.Error("io.ReadAll is failed:", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
// 進行值更新
|
||||
if dborm.DbClient.XEngine != nil {
|
||||
result, err := dborm.DbClient.XEngine.QueryString("SELECT * FROM information_schema.processlist")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
fmt.Println(result)
|
||||
rse, err := dborm.DbClient.XEngine.Exec("UPDATE sys_config SET value = ? where id = ?", "true", 100)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
fmt.Println(rse)
|
||||
}
|
||||
|
||||
services.ResponseStatusOK200Null(w)
|
||||
}
|
||||
|
||||
// http://192.168.21.183:3040/api/rest/maintenance/v1/sqlClient?type=close
|
||||
// http://192.168.21.183:3040/api/rest/maintenance/v1/sqlClient?type=connet
|
||||
// http://192.168.21.183:3040/api/rest/maintenance/v1/sqlClient?type=user
|
||||
func SqlClient(w http.ResponseWriter, r *http.Request) {
|
||||
// 关闭
|
||||
isClose := r.URL.Query().Get("type")
|
||||
if isClose == "close" && dborm.DbClient.XEngine != nil {
|
||||
dborm.DbClient.XEngine.Close()
|
||||
}
|
||||
|
||||
// 重连
|
||||
isConnet := r.URL.Query().Get("type")
|
||||
if isConnet == "connet" && dborm.DbClient.XEngine == nil {
|
||||
conf := config.GetYamlConfig()
|
||||
err := dborm.InitDbClient(conf.Database.Type, conf.Database.User, conf.Database.Password,
|
||||
conf.Database.Host, conf.Database.Port, conf.Database.Name)
|
||||
if err != nil {
|
||||
fmt.Println("dborm.initDbClient err:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 查询实例
|
||||
isUser := r.URL.Query().Get("type")
|
||||
if isUser == "user" && dborm.DbClient.XEngine != nil {
|
||||
result, err := dborm.DbClient.XEngine.QueryString("SELECT * FROM information_schema.processlist")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
fmt.Println(result)
|
||||
rse, err := dborm.DbClient.XEngine.Exec("KILL CONNECTION CONNECTION_ID()")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
fmt.Println(rse)
|
||||
}
|
||||
|
||||
// 进行连接测试
|
||||
err := dborm.DbClient.XEngine.Ping()
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
services.ResponseStatusOK200Null(w)
|
||||
}
|
||||
|
||||
// GET http://192.168.21.183:3040/api/rest/maintenance/v1/top?grep=
|
||||
func Top(w http.ResponseWriter, r *http.Request) {
|
||||
// 過濾命令
|
||||
grep := r.URL.Query().Get("grep")
|
||||
// 命令拼接
|
||||
var cmd *exec.Cmd
|
||||
switch runtime.GOOS {
|
||||
case "linux":
|
||||
command := "ps -ef "
|
||||
if grep != "" {
|
||||
command += grep
|
||||
}
|
||||
cmd = exec.Command(command)
|
||||
case "windows":
|
||||
command := "wmic process list brief "
|
||||
if grep != "" {
|
||||
command += grep
|
||||
}
|
||||
cmd = exec.Command("cmd", "/C", command)
|
||||
}
|
||||
|
||||
out, err := cmd.CombinedOutput()
|
||||
fmt.Println(string(out))
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
services.ResponseWithJson(w, http.StatusOK, string(out))
|
||||
}
|
||||
|
||||
// PATCH http://192.168.21.183:3040/api/rest/maintenance/v1/top?ops=&name=
|
||||
func TopOps(w http.ResponseWriter, r *http.Request) {
|
||||
// json 請求參數獲取
|
||||
var bodyArgs struct {
|
||||
Ops string `json:"ops"`
|
||||
Pid string `json:"pid"`
|
||||
}
|
||||
err := services.JSONBody(r, &bodyArgs)
|
||||
if err != nil {
|
||||
log.Error("io.ReadAll is failed:", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
// 命令拼接
|
||||
var cmd *exec.Cmd
|
||||
switch runtime.GOOS {
|
||||
case "linux":
|
||||
switch bodyArgs.Ops {
|
||||
case "kill":
|
||||
cmd = exec.Command("kill", "-9", bodyArgs.Pid)
|
||||
}
|
||||
case "windows":
|
||||
switch bodyArgs.Ops {
|
||||
case "kill":
|
||||
cmd = exec.Command("cmd", "/C", "taskkill", "-PID", bodyArgs.Pid, "-F")
|
||||
}
|
||||
}
|
||||
|
||||
out, err := cmd.CombinedOutput()
|
||||
fmt.Println(string(out))
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
services.ResponseWithJson(w, http.StatusOK, string(out))
|
||||
}
|
||||
213
features/mml/mml.go
Normal file
213
features/mml/mml.go
Normal file
@@ -0,0 +1,213 @@
|
||||
package mml
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/mmlp"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
)
|
||||
|
||||
const (
|
||||
//经过测试,linux下,延时需要大于100ms
|
||||
TIME_DELAY_AFTER_WRITE = 200
|
||||
)
|
||||
|
||||
type Response struct {
|
||||
Data []string `json:"data"`
|
||||
}
|
||||
|
||||
type MMLRequest struct {
|
||||
MML []string `json:"mml"`
|
||||
}
|
||||
|
||||
var (
|
||||
// MML interface
|
||||
UriMML = config.UriPrefix + "/opeartionManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/mml"
|
||||
UriNeOmMml = config.UriPrefix + "/omManagement/{apiVersion}/mml/{netype}/{neid}"
|
||||
UriOmMmlExt = config.UriPrefix + "/opeartionManagement/{apiVersion}/elementType/OMC/objectType/mml"
|
||||
UriOmMmlInt = config.UriPrefix + "/omManagement/{apiVersion}/mml/{neType}/{neId}"
|
||||
)
|
||||
|
||||
func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("PostMMLToNF processing... ")
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["elementTypeValue"]
|
||||
params := r.URL.Query()
|
||||
neId := params["ne_id"]
|
||||
if len(neId) == 0 {
|
||||
log.Error("NOT FOUND ne_id")
|
||||
services.ResponseBadRequest400WrongParamValue(w)
|
||||
return
|
||||
}
|
||||
log.Debug("neType:", neType, "neId", neId)
|
||||
|
||||
if strings.ToLower(neType) == "omc" {
|
||||
PostMMLToOMC(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
_, err := services.CheckExtValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Failed to CheckMmlValidRequest:", err)
|
||||
return
|
||||
}
|
||||
|
||||
neInfo := new(dborm.NeInfo)
|
||||
neInfo, err = dborm.XormGetNeInfo(neType, neId[0])
|
||||
if err != nil {
|
||||
log.Error("dborm.XormGetNeInfo is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
|
||||
var buf [8192]byte
|
||||
var n int
|
||||
var mmlResult []string
|
||||
|
||||
if neInfo != nil {
|
||||
hostMML := fmt.Sprintf("%s:%d", neInfo.Ip, config.GetYamlConfig().MML.Port)
|
||||
conn, err := net.Dial("tcp", hostMML)
|
||||
if err != nil {
|
||||
errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err)
|
||||
log.Error(errMsg)
|
||||
mmlResult = append(mmlResult, errMsg)
|
||||
response := Response{mmlResult}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
return
|
||||
}
|
||||
|
||||
loginStr := fmt.Sprintf("%s\n%s\n", config.GetYamlConfig().MML.User, config.GetYamlConfig().MML.Password)
|
||||
n, err = conn.Write([]byte(loginStr))
|
||||
if err != nil {
|
||||
log.Errorf("Error: %s", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE)
|
||||
|
||||
n, err = conn.Read(buf[0:])
|
||||
if err != nil {
|
||||
log.Errorf("Error: %s", err.Error())
|
||||
return
|
||||
}
|
||||
log.Debug(string(buf[0:n]))
|
||||
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
|
||||
if err != nil {
|
||||
log.Error("io.ReadAll is failed:", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
log.Debug("Body:", string(body))
|
||||
|
||||
mmlRequest := new(MMLRequest)
|
||||
_ = json.Unmarshal(body, mmlRequest)
|
||||
|
||||
for _, mml := range mmlRequest.MML {
|
||||
mmlCommand := fmt.Sprintf("%s\n", mml)
|
||||
log.Debug("mml command:", mmlCommand)
|
||||
n, err = conn.Write([]byte(mmlCommand))
|
||||
if err != nil {
|
||||
log.Errorf("Error: %s", err.Error())
|
||||
return
|
||||
}
|
||||
time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE)
|
||||
|
||||
n, err = conn.Read(buf[0:])
|
||||
if err != nil {
|
||||
log.Errorf("Error: %s", err.Error())
|
||||
return
|
||||
}
|
||||
log.Debug(string(buf[0 : n-len(neType)-2]))
|
||||
mmlResult = append(mmlResult, string(buf[0:n-len(neType)-2]))
|
||||
}
|
||||
}
|
||||
|
||||
response := Response{mmlResult}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
}
|
||||
|
||||
func PostMMLToOMC(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("PostMMLToOMC processing... ")
|
||||
|
||||
token, err := services.CheckExtValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Failed to CheckMmlValidRequest:", err)
|
||||
return
|
||||
}
|
||||
|
||||
params := r.URL.Query()
|
||||
neId := params["ne_id"]
|
||||
if len(neId) == 0 {
|
||||
log.Error("NOT FOUND ne_id ")
|
||||
services.ResponseBadRequest400WrongParamValue(w)
|
||||
return
|
||||
}
|
||||
|
||||
neInfo := new(dborm.NeInfo)
|
||||
neInfo, err = dborm.XormGetNeInfo("OMC", neId[0])
|
||||
if err != nil {
|
||||
log.Error("dborm.XormGetNeInfo is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
log.Trace("neInfo:", neInfo)
|
||||
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
|
||||
if err != nil {
|
||||
log.Error("io.ReadAll is failed:", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
log.Debug("Body:", string(body))
|
||||
|
||||
hostUri := fmt.Sprintf("http://%s:%s", neInfo.Ip, neInfo.Port)
|
||||
|
||||
omcMmlVar := &mmlp.MmlVar{
|
||||
Version: "16.1.1",
|
||||
Output: mmlp.DefaultFormatType,
|
||||
Limit: 50,
|
||||
User: "",
|
||||
SessionToken: token,
|
||||
HttpUri: hostUri,
|
||||
UserAgent: config.GetDefaultUserAgent(),
|
||||
}
|
||||
mmlRequest := new(MMLRequest)
|
||||
_ = json.Unmarshal(body, mmlRequest)
|
||||
|
||||
var mmlResult []string
|
||||
mmlLine := strings.Join(mmlRequest.MML, ";")
|
||||
|
||||
var mmlCmds []mmlp.MmlCommand
|
||||
if err = mmlp.ParseMMLCommand(mmlLine, &mmlCmds); err != nil {
|
||||
response := fmt.Sprintf("parse command error: %v\n", err)
|
||||
mmlResult = append(mmlResult, response)
|
||||
}
|
||||
|
||||
for _, mmlCmd := range mmlCmds {
|
||||
output, err := mmlp.TransMml2HttpReq(omcMmlVar, &mmlCmd)
|
||||
if err != nil {
|
||||
response := fmt.Sprintf("translate MML command error: %v]\n", err)
|
||||
mmlResult = append(mmlResult, response)
|
||||
}
|
||||
mmlResult = append(mmlResult, string(*output))
|
||||
}
|
||||
|
||||
response := Response{mmlResult}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
}
|
||||
890
features/mml/parse.go.bak
Normal file
890
features/mml/parse.go.bak
Normal file
@@ -0,0 +1,890 @@
|
||||
package mml
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"math"
|
||||
"net/http"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"github.com/go-resty/resty/v2"
|
||||
)
|
||||
|
||||
type Param struct {
|
||||
Name string `json:"name"`
|
||||
Value string `json:"value"`
|
||||
}
|
||||
|
||||
type MmlCommand struct {
|
||||
Operation string `json:"operation"`
|
||||
Object string `json:"object"`
|
||||
Params []Param `json:"params"`
|
||||
PaList []string `json:"paList"`
|
||||
AaList []string `json:"aaList"`
|
||||
AaMap map[string]interface{} `json:"aaMap"`
|
||||
NaMap map[string]interface{} `json:"naMap"`
|
||||
AaUri []string `json:"aaUri"`
|
||||
AaLoc []string `json:"aaLoc"` // for loc parameter
|
||||
}
|
||||
|
||||
type MmlVar struct {
|
||||
Version string `json:"version"`
|
||||
Output string `json:"output"`
|
||||
Limit int `json:"limit"`
|
||||
}
|
||||
|
||||
var OmcMmlVar *MmlVar
|
||||
|
||||
func init() {
|
||||
OmcMmlVar = &MmlVar{Version: "16.1.1", Output: DefaultFormatType, Limit: 50}
|
||||
}
|
||||
|
||||
func SetOmcMmlVarOutput(output string) {
|
||||
OmcMmlVar.Output = output
|
||||
}
|
||||
|
||||
func SetOmcMmlVarLimit(limit int) {
|
||||
OmcMmlVar.Limit = limit
|
||||
}
|
||||
|
||||
func splitByColon(str string) []string {
|
||||
return splitBy(str, ':')
|
||||
}
|
||||
|
||||
func splitByComma(str string) []string {
|
||||
return splitBy(str, ',')
|
||||
}
|
||||
|
||||
func splitBy(str string, sep rune) []string {
|
||||
var result []string
|
||||
var stack []string
|
||||
var current []rune
|
||||
var quotes, apoFlag bool = false, false
|
||||
|
||||
for _, c := range str {
|
||||
if c == '{' || c == '[' || (c == '\'' && apoFlag == false) || (c == '"' && quotes == false) { // "'"
|
||||
apoFlag = true
|
||||
quotes = true
|
||||
stack = append(stack, string(c))
|
||||
} else if c == '}' || c == ']' || (c == '\'' && apoFlag == true) || (c == '"' && quotes == true) {
|
||||
apoFlag = false
|
||||
quotes = false
|
||||
if len(stack) > 0 {
|
||||
stack = stack[:len(stack)-1]
|
||||
}
|
||||
}
|
||||
|
||||
if c == sep && len(stack) == 0 {
|
||||
result = append(result, string(current))
|
||||
current = []rune{}
|
||||
} else {
|
||||
current = append(current, c)
|
||||
}
|
||||
}
|
||||
|
||||
result = append(result, string(current))
|
||||
return result
|
||||
}
|
||||
|
||||
func ParseMMLCommand(mmlStr string, mmlComms *[]MmlCommand) error {
|
||||
log.Info("ParseMMLCommand processing ...")
|
||||
log.Debug("mmlStr: ", mmlStr)
|
||||
|
||||
mc := new(MmlCommand)
|
||||
reg := regexp.MustCompile(`\s*;\s*`)
|
||||
mmls := reg.Split(mmlStr, -1)
|
||||
for _, mml := range mmls {
|
||||
log.Trace("mml:", mml)
|
||||
if len(mml) == 0 {
|
||||
continue
|
||||
}
|
||||
//reg := regexp.MustCompile(`\s*:\s*`)
|
||||
//ms := reg.Split(mml, -1)
|
||||
ms := splitByColon(mml)
|
||||
if len(ms) < 1 || len(ms) > 2 {
|
||||
err := global.ErrMmlInvalidCommandFormat
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
if len(ms) == 2 {
|
||||
cmd := strings.Trim(ms[0], " ")
|
||||
reg = regexp.MustCompile(`\s+`)
|
||||
cs := reg.Split(cmd, -1)
|
||||
//cs := strings.Split(cmd, " ")
|
||||
if len(cs) == 2 {
|
||||
mc.Operation = cs[0]
|
||||
mc.Object = cs[1]
|
||||
} else {
|
||||
err := global.ErrMmlInvalidCommandFormat
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
//reg = regexp.MustCompile(`\s*,\s*`)
|
||||
//reg = regexp.MustCompile(`(?U)(?<!\{[^{}]*),(?![^{}]*\})|(?<!\"[^\"]*),(?![^\"]*\")|(?<!\[[^\[\]]*),(?![^\[\]]*\])`)
|
||||
//reg = regexp.MustCompile(`,[^'"\(\)]+`)
|
||||
//params := reg.Split(ms[1], -1)
|
||||
params := splitByComma(strings.Trim(ms[1], " "))
|
||||
//params := strings.Split(ms[1], ",")
|
||||
for _, p := range params {
|
||||
log.Trace("p:", p)
|
||||
if p == "" {
|
||||
continue
|
||||
}
|
||||
mc.PaList = append(mc.PaList, p)
|
||||
reg = regexp.MustCompile(`\s*=\s*`)
|
||||
pvs := reg.Split(p, -1)
|
||||
log.Trace("pvs:", pvs)
|
||||
if len(pvs) == 2 {
|
||||
mc.Params = append(mc.Params, Param{Name: pvs[0], Value: pvs[1]})
|
||||
} else {
|
||||
err := global.ErrMmlInvalidCommandFormat
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else if len(ms) == 1 {
|
||||
cmd := ms[0]
|
||||
reg = regexp.MustCompile(`\s+`)
|
||||
cs := reg.Split(cmd, -1)
|
||||
//cs := strings.Split(cmd, " ")
|
||||
if len(cs) == 2 {
|
||||
mc.Operation = cs[0]
|
||||
mc.Object = cs[1]
|
||||
} else {
|
||||
err := global.ErrMmlInvalidCommandFormat
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
err := global.ErrMmlInvalidCommandFormat
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
err := ParseMMLAlias(mc)
|
||||
if err != nil {
|
||||
err := global.ErrMmlInvalidCommandFormat
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
*mmlComms = append(*mmlComms, *mc)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ParseMMLAlias(mml *MmlCommand) error {
|
||||
where := fmt.Sprintf("operation='%s' AND object='%s'", mml.Operation, mml.Object)
|
||||
mc, err := dborm.XormGetMmlCommand("mml_command", where)
|
||||
if err != nil {
|
||||
log.Error("Failed to XormGetMmlCommand: ", err)
|
||||
return err
|
||||
}
|
||||
if mc == nil {
|
||||
err := errors.New("Not found mml map")
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
log.Debug("mml command: ", mc)
|
||||
aaMap := make(map[string]interface{})
|
||||
naMap := make(map[string]interface{})
|
||||
for _, pn := range mml.Params {
|
||||
log.Trace("pn: ", pn)
|
||||
for _, param := range mc.ParamJson {
|
||||
log.Trace("param: ", param)
|
||||
var pv string
|
||||
if pn.Name == param.Name {
|
||||
if param.Apostr == "true" {
|
||||
pv = fmt.Sprintf("'%v'", pn.Value)
|
||||
} else {
|
||||
pv = fmt.Sprintf("%v", pn.Value)
|
||||
}
|
||||
var aa, av string
|
||||
|
||||
if param.Alias != "" {
|
||||
aa = fmt.Sprintf("%s=%v", param.Alias, pv)
|
||||
av = fmt.Sprintf("%v", pv)
|
||||
switch param.Type {
|
||||
case "int":
|
||||
aaMap[param.Alias] = pn.Value
|
||||
naMap[param.Alias] = pn.Value
|
||||
default:
|
||||
aaMap[param.Alias] = pv
|
||||
naMap[param.Alias] = fmt.Sprintf("%v", pn.Value)
|
||||
}
|
||||
} else {
|
||||
aa = fmt.Sprintf("%s=%v", param.Name, pv)
|
||||
av = fmt.Sprintf("%v", pv)
|
||||
switch param.Type {
|
||||
case "int":
|
||||
aaMap[param.Name] = pn.Value
|
||||
naMap[param.Name] = pn.Value
|
||||
default:
|
||||
aaMap[param.Name] = pv
|
||||
naMap[param.Name] = fmt.Sprintf("%v", pn.Value)
|
||||
}
|
||||
}
|
||||
if param.Loc == "" || param.Loc == "true" {
|
||||
mml.AaLoc = append(mml.AaLoc, aa)
|
||||
mml.AaUri = append(mml.AaUri, av)
|
||||
}
|
||||
//mml.AaMap = append(mml.AaMap, aaMap)
|
||||
mml.AaList = append(mml.AaList, aa)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
mml.AaMap = aaMap
|
||||
mml.NaMap = naMap
|
||||
log.Trace("mml.AaMap: ", mml.AaMap)
|
||||
log.Trace("mml.NaMap: ", mml.NaMap)
|
||||
log.Trace("mml.AaList: ", mml.AaList)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func ParseMMLParams(mmlComms *[]MmlCommand) error {
|
||||
for _, mml := range *mmlComms {
|
||||
where := fmt.Sprintf("operation='%s' AND object='%s'", mml.Operation, mml.Object)
|
||||
mc, err := dborm.XormGetMmlCommand("mml_command", where)
|
||||
if err != nil {
|
||||
log.Error("Failed to XormGetMmlCommand: ", err)
|
||||
return err
|
||||
}
|
||||
if mc == nil {
|
||||
err := errors.New("Not found mml map")
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
log.Debug("mml command: ", mc)
|
||||
for _, pn := range mml.Params {
|
||||
log.Trace("pn: ", pn)
|
||||
for _, param := range mc.ParamJson {
|
||||
log.Trace("param: ", param)
|
||||
var pv string
|
||||
if pn.Name == param.Name {
|
||||
if param.Apostr == "true" {
|
||||
pv = fmt.Sprintf("'%v'", pn.Value)
|
||||
} else {
|
||||
pv = fmt.Sprintf("%v", pn.Value)
|
||||
}
|
||||
var aa string
|
||||
aaMap := make(map[string]interface{})
|
||||
if param.Alias != "" {
|
||||
aa = fmt.Sprintf("%s=%v", param.Alias, pv)
|
||||
switch param.Type {
|
||||
case "int":
|
||||
aaMap[param.Alias] = pn.Value
|
||||
case "string":
|
||||
aaMap[param.Alias] = pv
|
||||
}
|
||||
} else {
|
||||
aa = fmt.Sprintf("%s=%v", param.Name, pv)
|
||||
switch param.Type {
|
||||
case "int":
|
||||
aaMap[param.Name] = pn.Value
|
||||
case "string":
|
||||
aaMap[param.Name] = pv
|
||||
}
|
||||
}
|
||||
//mml.AaMap = append(mml.AaMap, aaMap)
|
||||
mml.AaList = append(mml.AaList, aa)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
log.Trace("mml.AaMap: ", mml.AaMap)
|
||||
log.Trace("mml.AaList: ", mml.AaList)
|
||||
*mmlComms = append(*mmlComms, mml)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func parseRequestUri(httpUri string, mmlMap *dborm.MmlHttpMap, mml *MmlCommand) string {
|
||||
requestURI := fmt.Sprintf("%s%s", httpUri, mmlMap.URI)
|
||||
if mmlMap.ExtUri != "" && len(mml.AaUri) > 0 {
|
||||
extUri := strings.Join(mml.AaUri, "/")
|
||||
requestURI = requestURI + fmt.Sprintf(mmlMap.ExtUri, extUri)
|
||||
}
|
||||
if mmlMap.Params != "" {
|
||||
params := strings.Join(mml.AaLoc, "+and+")
|
||||
params = strings.ReplaceAll(params, " ", "+") // replace " " to "+"
|
||||
requestURI = fmt.Sprintf("%s?%s=%s", requestURI, mmlMap.Params, params)
|
||||
}
|
||||
return requestURI
|
||||
}
|
||||
|
||||
func TransMml2HttpReq(httpUri, uerAgent string, mml *MmlCommand) (*[]byte, error) {
|
||||
log.Info("TransMml2HttpReq processing ...")
|
||||
log.Debug("mml: ", mml)
|
||||
|
||||
where := fmt.Sprintf("operation='%s' AND object='%s'", mml.Operation, mml.Object)
|
||||
mmlMap, err := dborm.XormGetMmlHttpMap("mml_http_map", where)
|
||||
if err != nil {
|
||||
log.Error("Failed to XormGetMmlHttpMap: ", err)
|
||||
return ParseErrorOutput(err), err
|
||||
}
|
||||
if mmlMap == nil {
|
||||
err := errors.New("Not found mml map")
|
||||
log.Error(err)
|
||||
return ParseErrorOutput(err), err
|
||||
}
|
||||
log.Trace("mmlMap: ", mmlMap)
|
||||
if mmlMap.Output == "" {
|
||||
mmlMap.Output = "{}"
|
||||
}
|
||||
outputJson := new(dborm.MmlOutput)
|
||||
err = json.Unmarshal([]byte(mmlMap.Output), outputJson)
|
||||
if err != nil {
|
||||
log.Error("Failed to Unmarshal:", err)
|
||||
return ParseErrorOutput(err), err
|
||||
}
|
||||
log.Trace("outputJson: ", outputJson)
|
||||
inputJson := new(dborm.MmlInput)
|
||||
log.Trace("mmlMap.Input: ", mmlMap.Input)
|
||||
if mmlMap.Input == "" {
|
||||
mmlMap.Input = "{}"
|
||||
}
|
||||
err = json.Unmarshal([]byte(mmlMap.Input), inputJson)
|
||||
if err != nil {
|
||||
log.Error("Failed to Unmarshal:", err)
|
||||
return ParseErrorOutput(err), err
|
||||
}
|
||||
log.Trace("inputJson: ", inputJson)
|
||||
|
||||
var requestURI string
|
||||
var output *[]byte
|
||||
client := resty.New()
|
||||
switch strings.ToLower(mmlMap.Method) {
|
||||
case "get":
|
||||
requestURI = parseRequestUri(httpUri, mmlMap, mml)
|
||||
log.Debugf("method: Get requestURI: %s", requestURI)
|
||||
response, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": uerAgent}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Get(requestURI)
|
||||
if err != nil {
|
||||
log.Error("Failed to Get:", err)
|
||||
output = ParseErrorOutput(err)
|
||||
} else {
|
||||
output = ParseOutputResponse(outputJson, response)
|
||||
}
|
||||
case "post":
|
||||
requestURI = parseRequestUri(httpUri, mmlMap, mml)
|
||||
body := ParseInputBody(inputJson, mml)
|
||||
log.Debugf("method: Post requestURI: %s", requestURI)
|
||||
response, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": uerAgent}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
SetBody(*body).
|
||||
Post(requestURI)
|
||||
if err != nil {
|
||||
log.Error("Failed to Post:", err)
|
||||
output = ParseErrorOutput(err)
|
||||
} else {
|
||||
output = ParseOutputResponse(outputJson, response)
|
||||
}
|
||||
case "put":
|
||||
requestURI = parseRequestUri(httpUri, mmlMap, mml)
|
||||
body := ParseInputBody(inputJson, mml)
|
||||
log.Debugf("method: Put requestURI: %s", requestURI)
|
||||
response, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": uerAgent}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
SetBody(*body).
|
||||
Put(requestURI)
|
||||
if err != nil {
|
||||
log.Error("Failed to Put:", err)
|
||||
output = ParseErrorOutput(err)
|
||||
} else {
|
||||
output = ParseOutputResponse(outputJson, response)
|
||||
}
|
||||
case "delete":
|
||||
requestURI = parseRequestUri(httpUri, mmlMap, mml)
|
||||
log.Debugf("method: Delete requestURI: %s", requestURI)
|
||||
response, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": uerAgent}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Delete(requestURI)
|
||||
if err != nil {
|
||||
log.Error("Failed to Delete:", err)
|
||||
output = ParseErrorOutput(err)
|
||||
} else {
|
||||
output = ParseOutputResponse(outputJson, response)
|
||||
}
|
||||
case "patch":
|
||||
requestURI = parseRequestUri(httpUri, mmlMap, mml)
|
||||
log.Debugf("method: patch requestURI: %s", requestURI)
|
||||
response, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": uerAgent}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Patch(requestURI)
|
||||
if err != nil {
|
||||
log.Error("Failed to Patch:", err)
|
||||
output = ParseErrorOutput(err)
|
||||
} else {
|
||||
output = ParseOutputResponse(outputJson, response)
|
||||
}
|
||||
default:
|
||||
err := errors.New("not found mml command")
|
||||
log.Error(err)
|
||||
output = ParseErrorOutput(err)
|
||||
}
|
||||
return output, nil
|
||||
}
|
||||
|
||||
const (
|
||||
MaxMmlOutputBufferSize = 1000000
|
||||
FormatTypeJson = "json"
|
||||
FormatTypeTable = "table"
|
||||
DefaultFormatType = FormatTypeTable
|
||||
)
|
||||
|
||||
const (
|
||||
RetCodeSucceeded = 0
|
||||
RetCodeFailed = 0
|
||||
)
|
||||
|
||||
func ParseInputBody(inputJson *dborm.MmlInput, mml *MmlCommand) *[]byte {
|
||||
inputBody := make(map[string]interface{})
|
||||
log.Trace("mml.NaMap:", mml.NaMap)
|
||||
log.Trace("mml.AaMap:", mml.AaMap)
|
||||
if strings.ToLower(inputJson.BodyFmt) == "putdb" {
|
||||
for _, icol := range inputJson.Cols {
|
||||
log.Trace("icol:", icol)
|
||||
mml.NaMap[icol.Name] = icol.Value
|
||||
}
|
||||
inputBody[inputJson.BodyKey] = mml.NaMap
|
||||
} else {
|
||||
inputParams := make([]map[string]interface{}, 0)
|
||||
inputParams = append(inputParams, mml.NaMap)
|
||||
inputBody[inputJson.BodyKey] = inputParams
|
||||
}
|
||||
|
||||
body, err := json.Marshal(inputBody)
|
||||
if err != nil {
|
||||
log.Error("Failed to marshal:", err)
|
||||
}
|
||||
|
||||
log.Trace("inputBody:", inputBody)
|
||||
log.Trace("body:", string(body))
|
||||
return &body
|
||||
}
|
||||
|
||||
func ParseOutputResponse(outputJson *dborm.MmlOutput, response *resty.Response) *[]byte {
|
||||
var output []byte
|
||||
var str bytes.Buffer
|
||||
|
||||
switch response.StatusCode() {
|
||||
case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted:
|
||||
if OmcMmlVar.Output == FormatTypeJson {
|
||||
code := fmt.Sprintf("StatusCode = %d status %s\n\n", response.StatusCode(), response.Status())
|
||||
title := formatTitle(outputJson.Title)
|
||||
|
||||
json.Indent(&str, response.Body(), "", " ")
|
||||
log.Trace(str.String())
|
||||
|
||||
output = global.BytesCombine1([]byte(code), []byte(title), str.Bytes(), []byte("\n"))
|
||||
} else {
|
||||
log.Trace("Body:", string(response.Body()))
|
||||
mapDatas := make(map[string]interface{}, 0)
|
||||
|
||||
err := json.Unmarshal(response.Body(), &mapDatas)
|
||||
if err != nil {
|
||||
log.Error("Failed to json.Unmarshal:", err)
|
||||
//output = *ParseErrorOutput(err)
|
||||
output = *ParseErrorOutput(string(response.Body()))
|
||||
return &output
|
||||
}
|
||||
log.Trace("mapDatas:", mapDatas)
|
||||
switch strings.ToLower(outputJson.RetFmt) {
|
||||
case "getdb":
|
||||
if len(mapDatas) > 0 {
|
||||
var data interface{}
|
||||
for _, data = range mapDatas {
|
||||
log.Trace("data:", data)
|
||||
break
|
||||
}
|
||||
if len(data.([]interface{})) > 0 {
|
||||
table := (data.([]interface{}))[0]
|
||||
log.Trace("table:", table)
|
||||
|
||||
code := fmt.Sprintf(outputJson.RetMsg, RetCodeSucceeded)
|
||||
title := formatTitle(outputJson.Title)
|
||||
fmtResults := ParseTableOutput(outputJson, table)
|
||||
output = global.BytesCombine1([]byte(code), []byte(title), []byte(fmtResults))
|
||||
}
|
||||
}
|
||||
case "deletedb":
|
||||
var data interface{}
|
||||
for _, data = range mapDatas {
|
||||
log.Trace("data:", data)
|
||||
break
|
||||
}
|
||||
|
||||
if len(data.(map[string]interface{})) > 0 {
|
||||
table := data.(map[string]interface{})
|
||||
code := fmt.Sprintf(outputJson.RetMsg, RetCodeSucceeded)
|
||||
fmtResults := ParseDBOperOutput(outputJson, table)
|
||||
output = global.BytesCombine1([]byte(code), []byte(fmtResults))
|
||||
}
|
||||
case "postdb":
|
||||
var data interface{}
|
||||
for _, data = range mapDatas {
|
||||
log.Trace("data:", data)
|
||||
break
|
||||
}
|
||||
|
||||
if len(data.(map[string]interface{})) > 0 {
|
||||
table := data.(map[string]interface{})
|
||||
code := fmt.Sprintf(outputJson.RetMsg, RetCodeSucceeded)
|
||||
fmtResults := ParseDBOperOutput(outputJson, table)
|
||||
output = global.BytesCombine1([]byte(code), []byte(fmtResults))
|
||||
}
|
||||
case "putdb":
|
||||
var data interface{}
|
||||
for _, data = range mapDatas {
|
||||
log.Trace("data:", data)
|
||||
break
|
||||
}
|
||||
if len(data.(map[string]interface{})) > 0 {
|
||||
table := data.(map[string]interface{})
|
||||
code := fmt.Sprintf(outputJson.RetMsg, RetCodeSucceeded)
|
||||
fmtResults := ParseDBOperOutput(outputJson, table)
|
||||
output = global.BytesCombine1([]byte(code), []byte(fmtResults))
|
||||
}
|
||||
case "getnf":
|
||||
if len(mapDatas) > 0 {
|
||||
var data interface{}
|
||||
for _, data = range mapDatas {
|
||||
log.Trace("data:", data)
|
||||
break
|
||||
}
|
||||
if len(data.([]interface{})) > 0 {
|
||||
//table := (data.([]interface{}))[0]
|
||||
//log.Trace("table:", table)
|
||||
|
||||
code := fmt.Sprintf(outputJson.RetMsg, RetCodeSucceeded)
|
||||
title := formatTitle(outputJson.Title)
|
||||
fmtResults := ParseNFTableOutput(outputJson, data)
|
||||
output = global.BytesCombine1([]byte(code), []byte(title), []byte(fmtResults))
|
||||
}
|
||||
}
|
||||
default:
|
||||
code := fmt.Sprintf(outputJson.RetMsg, RetCodeSucceeded)
|
||||
output = global.BytesCombine1([]byte(code))
|
||||
}
|
||||
|
||||
}
|
||||
default:
|
||||
if OmcMmlVar.Output == FormatTypeJson {
|
||||
code := fmt.Sprintf("StatusCode = %d status %s\n\n", response.StatusCode(), response.Status())
|
||||
//title := formatTitle("Network Element Information")
|
||||
|
||||
json.Indent(&str, response.Body(), "", " ")
|
||||
log.Trace(str.String())
|
||||
|
||||
output = global.BytesCombine1([]byte(code), str.Bytes(), []byte("\n"))
|
||||
} else {
|
||||
log.Trace("Body:", string(response.Body()))
|
||||
mapResults := make(map[string]interface{}, 0)
|
||||
|
||||
err := json.Unmarshal(response.Body(), &mapResults)
|
||||
if err != nil {
|
||||
log.Error("Failed to json.Unmarshal:", err)
|
||||
output = *ParseErrorOutput(string(response.Body()))
|
||||
} else {
|
||||
log.Trace("mapResults:", mapResults)
|
||||
errResult := mapResults["error"]
|
||||
log.Trace("errResult:", errResult)
|
||||
if len(errResult.(map[string]interface{})) > 0 {
|
||||
errCode, _ := strconv.Atoi(fmt.Sprintf("%v", errResult.(map[string]interface{})["errorCode"]))
|
||||
errorInfo := errResult.(map[string]interface{})["errorInfo"]
|
||||
output = []byte(fmt.Sprintf(outputJson.ErrMsg, errCode, errorInfo))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return &output
|
||||
}
|
||||
|
||||
func ParseDBOperOutput(outputJson *dborm.MmlOutput, cols any) string {
|
||||
var colOutput []dborm.ColOutput = outputJson.Cols
|
||||
var value, retFmtCols string
|
||||
if len(cols.(map[string]interface{})) > 0 {
|
||||
if len(colOutput) > 0 {
|
||||
coln := colOutput[0].Name
|
||||
value = fmt.Sprintf("%v", cols.(map[string]interface{})[coln])
|
||||
log.Tracef("coln:%s value:%s", coln, value)
|
||||
retFmtCols = colOutput[0].Display + " = " + value + "\n\n"
|
||||
}
|
||||
}
|
||||
|
||||
return retFmtCols
|
||||
}
|
||||
|
||||
func ParseNFTableOutput(outputJson *dborm.MmlOutput, cols any) string {
|
||||
var colOutput []dborm.ColOutput
|
||||
var fmtColName string
|
||||
var colName []string
|
||||
var spaceNum int = 1
|
||||
var alignmentM, alignmentSN, alignmentSV string = "Left", "Right", "Left"
|
||||
|
||||
if outputJson.SepSpaceNum != 0 {
|
||||
spaceNum = outputJson.SepSpaceNum
|
||||
}
|
||||
if outputJson.AlignmentM != "" {
|
||||
alignmentM = outputJson.AlignmentM
|
||||
}
|
||||
if outputJson.AlignmentSN != "" {
|
||||
alignmentSN = outputJson.AlignmentSN
|
||||
}
|
||||
if outputJson.AlignmentSV != "" {
|
||||
alignmentSV = outputJson.AlignmentSV
|
||||
}
|
||||
|
||||
maxLength := math.MinInt64
|
||||
for _, coln := range outputJson.Cols {
|
||||
log.Trace("coln:", coln)
|
||||
|
||||
if len(coln.Display) > maxLength {
|
||||
maxLength = len(coln.Display)
|
||||
}
|
||||
if coln.Length < len(coln.Display) {
|
||||
coln.Length = len(coln.Display)
|
||||
}
|
||||
|
||||
colName = append(colName, ParseAlignmentOutput(coln.Length, alignmentM, coln.Display))
|
||||
colOutput = append(colOutput, coln)
|
||||
}
|
||||
fmtColName = formatLineBySpace(&colName, spaceNum)
|
||||
log.Trace("fmtColName:", fmtColName)
|
||||
|
||||
var retFmtCols string
|
||||
var fmtColValues []string
|
||||
var numberResult int
|
||||
// for _, colnvs := range cols.([]interface{}) {
|
||||
// log.Trace("colnvs:", colnvs)
|
||||
// if colnvs == nil {
|
||||
// break
|
||||
// }
|
||||
numberResult = len(cols.([]interface{}))
|
||||
|
||||
if numberResult == 1 && outputJson.SingleList == true {
|
||||
colnv := cols.([]interface{})[0]
|
||||
log.Trace("colnv:", colnv)
|
||||
|
||||
var fmtNV []string
|
||||
for _, coln := range colOutput {
|
||||
fmtName := ParseAlignmentOutput(maxLength, alignmentSN, coln.Display)
|
||||
log.Tracef("alignmentSN:%s fmtName:%s", alignmentSN, fmtName)
|
||||
value := fmt.Sprintf("%v", colnv.(map[string]interface{})[coln.Name])
|
||||
fmtValue := ParseAlignmentOutput(coln.Length, alignmentSV, value)
|
||||
fmtNV = append(fmtNV, fmtName+": "+fmtValue)
|
||||
}
|
||||
|
||||
fmtResults := strings.Join(fmtNV, "\n")
|
||||
log.Tracef("fmtResults:\n%s", fmtResults)
|
||||
fmtEnd := fmt.Sprintf(outputJson.End, numberResult)
|
||||
retFmtCols = fmtResults + "\n\n" + fmtEnd
|
||||
log.Tracef("retFmtCols:\n%s", retFmtCols)
|
||||
return retFmtCols
|
||||
} else {
|
||||
for i := 0; i < numberResult; i++ {
|
||||
colnv := cols.([]interface{})[i]
|
||||
log.Trace("colnv:", colnv)
|
||||
var colValues []string
|
||||
var newVal []string
|
||||
for _, coln := range colOutput {
|
||||
value := fmt.Sprintf("%v", colnv.(map[string]interface{})[coln.Name])
|
||||
if len(coln.Alias) != 0 {
|
||||
enumVal, _ := strconv.Atoi(value)
|
||||
value = parseEnumAlias(&(coln.Alias), enumVal)
|
||||
}
|
||||
newVal = append(newVal, ParseAlignmentOutput(coln.Length, alignmentM, value))
|
||||
}
|
||||
colValues = append(colValues, formatLineBySpace(&newVal, spaceNum))
|
||||
log.Trace("colValues:", colValues)
|
||||
fmtColValues = append(fmtColValues, strings.Join(colValues, "\n"))
|
||||
log.Trace("fmtColValues:", fmtColValues)
|
||||
}
|
||||
fmtEnd := fmt.Sprintf(outputJson.End, numberResult)
|
||||
retFmtCols = fmtColName + "\n\n" + strings.Join(fmtColValues, "\n") + "\n\n" + fmtEnd
|
||||
log.Tracef("retFmtCols:\n%s", retFmtCols)
|
||||
return retFmtCols
|
||||
}
|
||||
// }
|
||||
// fmtEnd := fmt.Sprintf(outputJson.End, numberResult)
|
||||
// retFmtCols = fmtColName + "\n" + strings.Join(fmtColValues, "\n") + "\n\n" + fmtEnd
|
||||
// log.Tracef("retFmtCols:\n%s", retFmtCols)
|
||||
// return retFmtCols
|
||||
}
|
||||
|
||||
func ParseTableOutput(outputJson *dborm.MmlOutput, cols any) string {
|
||||
var colOutput []dborm.ColOutput
|
||||
var fmtColName string
|
||||
var colName []string
|
||||
var spaceNum int = 1
|
||||
var alignmentM, alignmentSN, alignmentSV string = "Left", "Right", "Left"
|
||||
|
||||
if outputJson.SepSpaceNum != 0 {
|
||||
spaceNum = outputJson.SepSpaceNum
|
||||
}
|
||||
if outputJson.AlignmentM != "" {
|
||||
alignmentM = outputJson.AlignmentM
|
||||
}
|
||||
if outputJson.AlignmentSN != "" {
|
||||
alignmentSN = outputJson.AlignmentSN
|
||||
}
|
||||
if outputJson.AlignmentSV != "" {
|
||||
alignmentSV = outputJson.AlignmentSV
|
||||
}
|
||||
|
||||
maxLength := math.MinInt64
|
||||
for _, coln := range outputJson.Cols {
|
||||
log.Trace("coln:", coln)
|
||||
|
||||
if len(coln.Display) > maxLength {
|
||||
maxLength = len(coln.Display)
|
||||
}
|
||||
if coln.Length < len(coln.Display) {
|
||||
coln.Length = len(coln.Display)
|
||||
}
|
||||
|
||||
colName = append(colName, ParseAlignmentOutput(coln.Length, alignmentM, coln.Display))
|
||||
colOutput = append(colOutput, coln)
|
||||
}
|
||||
fmtColName = formatLineBySpace(&colName, spaceNum)
|
||||
log.Trace("fmtColName:", fmtColName)
|
||||
|
||||
var retFmtCols string
|
||||
var fmtColValues []string
|
||||
var numberResult int
|
||||
for _, colnvs := range cols.(map[string]interface{}) {
|
||||
log.Trace("colnvs:", colnvs)
|
||||
if colnvs == nil {
|
||||
break
|
||||
}
|
||||
numberResult = len(colnvs.([]interface{}))
|
||||
|
||||
if numberResult == 1 && outputJson.SingleList == true {
|
||||
colnv := colnvs.([]interface{})[0]
|
||||
log.Trace("colnv:", colnv)
|
||||
|
||||
var fmtNV []string
|
||||
for _, coln := range colOutput {
|
||||
fmtName := ParseAlignmentOutput(maxLength, alignmentSN, coln.Display)
|
||||
log.Tracef("alignmentSN:%s fmtName:%s", alignmentSN, fmtName)
|
||||
value := fmt.Sprintf("%v", colnv.(map[string]interface{})[coln.Name])
|
||||
fmtValue := ParseAlignmentOutput(coln.Length, alignmentSV, value)
|
||||
fmtNV = append(fmtNV, fmtName+": "+fmtValue)
|
||||
}
|
||||
|
||||
fmtResults := strings.Join(fmtNV, "\n")
|
||||
log.Tracef("fmtResults:\n%s", fmtResults)
|
||||
fmtEnd := fmt.Sprintf(outputJson.End, numberResult)
|
||||
retFmtCols = fmtResults + "\n\n" + fmtEnd
|
||||
log.Tracef("retFmtCols:\n%s", retFmtCols)
|
||||
return retFmtCols
|
||||
} else {
|
||||
for i := 0; i < numberResult; i++ {
|
||||
colnv := colnvs.([]interface{})[i]
|
||||
log.Trace("colnv:", colnv)
|
||||
var colValues []string
|
||||
var newVal []string
|
||||
for _, coln := range colOutput {
|
||||
value := fmt.Sprintf("%v", colnv.(map[string]interface{})[coln.Name])
|
||||
if len(coln.Alias) != 0 {
|
||||
enumVal, _ := strconv.Atoi(value)
|
||||
value = parseEnumAlias(&(coln.Alias), enumVal)
|
||||
}
|
||||
newVal = append(newVal, ParseAlignmentOutput(coln.Length, alignmentM, value))
|
||||
}
|
||||
colValues = append(colValues, formatLineBySpace(&newVal, spaceNum))
|
||||
log.Trace("colValues:", colValues)
|
||||
fmtColValues = append(fmtColValues, strings.Join(colValues, "\n"))
|
||||
log.Trace("fmtColValues:", fmtColValues)
|
||||
}
|
||||
fmtEnd := fmt.Sprintf(outputJson.End, numberResult)
|
||||
retFmtCols = fmtColName + "\n\n" + strings.Join(fmtColValues, "\n") + "\n\n" + fmtEnd
|
||||
log.Tracef("retFmtCols:\n%s", retFmtCols)
|
||||
return retFmtCols
|
||||
}
|
||||
}
|
||||
fmtEnd := fmt.Sprintf(outputJson.End, numberResult)
|
||||
retFmtCols = fmtColName + "\n" + strings.Join(fmtColValues, "\n") + "\n\n" + fmtEnd
|
||||
log.Tracef("retFmtCols:\n%s", retFmtCols)
|
||||
return retFmtCols
|
||||
}
|
||||
|
||||
func parseEnumAlias(alias *[]string, enumVal int) string {
|
||||
return (*alias)[enumVal]
|
||||
}
|
||||
|
||||
func formatLineBySpace(strArray *[]string, spaceNum int) string {
|
||||
space := strings.Repeat(" ", spaceNum)
|
||||
return strings.Join(*strArray, space)
|
||||
}
|
||||
|
||||
func ParseAlignmentOutput(length int, alignment string, str string) string {
|
||||
spaceLen := length - len(str)
|
||||
if spaceLen < 0 {
|
||||
log.Warnf("len(str=%s)=%d more length=%d", str, len(str), length)
|
||||
spaceLen = 0
|
||||
}
|
||||
var retStr string
|
||||
switch alignment {
|
||||
case "Left":
|
||||
suffix := strings.Repeat(" ", spaceLen)
|
||||
retStr = str + suffix
|
||||
case "Right":
|
||||
prefix := strings.Repeat(" ", spaceLen)
|
||||
retStr = prefix + str
|
||||
log.Tracef("retStr:%s", retStr)
|
||||
case "Middle":
|
||||
prefix := strings.Repeat(" ", int(math.Ceil(float64(spaceLen)/2)))
|
||||
suffix := strings.Repeat(" ", int(math.Floor(float64(spaceLen)/2)))
|
||||
retStr = prefix + str + suffix
|
||||
}
|
||||
log.Tracef("length=%d, spaceLne=%d, alignment=%s, str=%s, retStr=%s", length, spaceLen, alignment, str, retStr)
|
||||
return retStr
|
||||
}
|
||||
|
||||
func ParseErrorOutput(err any) *[]byte {
|
||||
var output []byte
|
||||
|
||||
var formatType string = DefaultFormatType
|
||||
if formatType == FormatTypeJson {
|
||||
output = []byte(fmt.Sprintf("ErrorCode = 1 Error message: %v\n\n", err))
|
||||
} else {
|
||||
output = []byte(fmt.Sprintf("RetCode = -1 operation failed: %v\n\n", err))
|
||||
}
|
||||
|
||||
return &output
|
||||
}
|
||||
|
||||
func formatTitle(title string) string {
|
||||
var builder strings.Builder
|
||||
builder.WriteString(title)
|
||||
builder.WriteString("\n")
|
||||
for i := 0; i < len(title); i++ {
|
||||
builder.WriteString("-")
|
||||
}
|
||||
builder.WriteString("\n")
|
||||
return builder.String()
|
||||
}
|
||||
|
||||
func formatTableOutput() {
|
||||
|
||||
}
|
||||
51
features/monitor/process.go
Normal file
51
features/monitor/process.go
Normal file
@@ -0,0 +1,51 @@
|
||||
package monitor
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
websocket2 "ems.agt/lib/websocket"
|
||||
"ems.agt/restagent/config"
|
||||
"github.com/gorilla/websocket"
|
||||
)
|
||||
|
||||
var (
|
||||
// 進程
|
||||
UriWs = config.UriPrefix + "/monitor/{apiVersion}/process/ws"
|
||||
)
|
||||
|
||||
var wsUpgrade = websocket.Upgrader{
|
||||
CheckOrigin: func(r *http.Request) bool {
|
||||
return true
|
||||
},
|
||||
}
|
||||
|
||||
func ProcessWs(w http.ResponseWriter, r *http.Request) {
|
||||
ws, err := wsUpgrade.Upgrade(w, r, nil)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
wsClient := websocket2.NewWsClient("processClient", ws)
|
||||
go wsClient.Read()
|
||||
go wsClient.Write()
|
||||
}
|
||||
|
||||
// @Tags Process
|
||||
// @Summary Stop Process
|
||||
// @Description 停止进程
|
||||
// @Param request body request.ProcessReq true "request"
|
||||
// @Success 200
|
||||
// @Security ApiKeyAuth
|
||||
// @Router /process/stop [post]
|
||||
// @x-panel-log {"bodyKeys":["PID"],"paramKeys":[],"BeforeFuntions":[],"formatZH":"结束进程 [PID]","formatEN":"结束进程 [PID]"}
|
||||
func StopProcess(w http.ResponseWriter, r *http.Request) {
|
||||
// var req request.ProcessReq
|
||||
// if err := c.ShouldBindJSON(&req); err != nil {
|
||||
// helper.ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInvalidParams, err)
|
||||
// return
|
||||
// }
|
||||
// if err := processService.StopProcess(req); err != nil {
|
||||
// helper.ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInvalidParams, err)
|
||||
// return
|
||||
// }
|
||||
// helper.SuccessWithOutData(c)
|
||||
}
|
||||
269
features/nbi/nbi.go
Normal file
269
features/nbi/nbi.go
Normal file
@@ -0,0 +1,269 @@
|
||||
package nbi
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"github.com/go-resty/resty/v2"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/oauth"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/lib/session"
|
||||
"ems.agt/restagent/config"
|
||||
)
|
||||
|
||||
type ErrorOAuthResponse struct {
|
||||
Error map[string]interface{}
|
||||
}
|
||||
|
||||
type FailOAuthResponse struct {
|
||||
Error struct {
|
||||
ErrorCode string
|
||||
ErrorInfo string
|
||||
}
|
||||
}
|
||||
|
||||
type ApiResponse struct {
|
||||
ResultCode string
|
||||
ResultMessage interface{}
|
||||
}
|
||||
|
||||
var globalSession = session.NewSessManager("restagent")
|
||||
|
||||
var (
|
||||
MAX_RMUID_NUM int
|
||||
MAX_ALARMID_NUM int
|
||||
MAX_PMUID_NUM int
|
||||
MAX_SUBID_NUM int
|
||||
MAX_URI_LEN int
|
||||
RMUID_REGEXP string
|
||||
)
|
||||
|
||||
var (
|
||||
// Northbound interface
|
||||
GetNRMUri = config.UriPrefix + "/resourceManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/{objectTypeValue}"
|
||||
NorthboundGetAlarmUri = config.UriPrefix + "/faultManagement/{apiVersion}/alarms" // ?alarmIds={alarmIdValues}
|
||||
)
|
||||
|
||||
func CheckParameterName(r *http.Request) []string {
|
||||
var errorParams []string
|
||||
vars := r.URL.Query()
|
||||
for k, v := range vars {
|
||||
log.Debug("vars:", k, v)
|
||||
if k != "rmUIDs" && k != "fields" {
|
||||
errorParams = append(errorParams, k)
|
||||
}
|
||||
}
|
||||
|
||||
return errorParams
|
||||
}
|
||||
|
||||
func GetRmUIDArr(r *http.Request) []string {
|
||||
vars := r.URL.Query()
|
||||
rmUIDs, ok := vars["rmUIDs"]
|
||||
if !ok {
|
||||
log.Debug("rmUIDs is not exist")
|
||||
return nil
|
||||
}
|
||||
|
||||
var rmUIDValues []string
|
||||
for _, r := range rmUIDs {
|
||||
if r != "" {
|
||||
rmUIDValues = global.MergeStringArr(rmUIDValues, strings.Split(r, `,`))
|
||||
}
|
||||
}
|
||||
|
||||
return rmUIDValues
|
||||
}
|
||||
|
||||
func GetAttrNameArr(r *http.Request) []string {
|
||||
vars := r.URL.Query()
|
||||
fields, ok := vars["fields"]
|
||||
if !ok {
|
||||
log.Debug("attributeNames does not exist")
|
||||
return nil
|
||||
}
|
||||
var attrNames []string
|
||||
for _, a := range fields {
|
||||
if a != "" {
|
||||
attrNames = global.MergeStringArr(attrNames, strings.Split(a, `,`))
|
||||
}
|
||||
}
|
||||
|
||||
return attrNames
|
||||
}
|
||||
|
||||
func CheckValidRmUID(rmUIDs []string) []string {
|
||||
log.Debug("CheckValidRmUID processing... ")
|
||||
|
||||
var invalidRmUIDs []string
|
||||
for _, r := range rmUIDs {
|
||||
if !global.MatchRmUID(RMUID_REGEXP, r) {
|
||||
invalidRmUIDs = append(invalidRmUIDs, r)
|
||||
}
|
||||
}
|
||||
|
||||
return invalidRmUIDs
|
||||
}
|
||||
|
||||
func CheckLocalRmUID(rmUIDs []string) string {
|
||||
log.Debug("GetLocalRmUID processing... ")
|
||||
|
||||
rmUID := config.GetRmUIDFromConfig()
|
||||
for _, r := range rmUIDs {
|
||||
if r == rmUID {
|
||||
return rmUID
|
||||
}
|
||||
}
|
||||
|
||||
return ""
|
||||
}
|
||||
|
||||
func NBIGetNRMFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("NorthGetNRMFromNF processing... ")
|
||||
|
||||
// response 414-4 uri too long ? (optional)
|
||||
// todo ... ?
|
||||
if bytes.Count([]byte(r.RequestURI), nil) > config.GetUriMaxLenFromConfig() {
|
||||
log.Error("Request Uri too long:", bytes.Count([]byte(r.RequestURI), nil), config.GetUriMaxLenFromConfig())
|
||||
services.ResponseRequestURITooLong414UriTooLong(w)
|
||||
return
|
||||
}
|
||||
|
||||
// check media type(content type) only support "application/json"
|
||||
// response 415-1
|
||||
if !services.IsVallidContentType(r, config.GetYamlConfig().OMC.CheckContentType) {
|
||||
log.Debug("Invalid Content-Type")
|
||||
services.ResponseUnsupportedMediaType415(w)
|
||||
return
|
||||
}
|
||||
|
||||
// error processing ...
|
||||
// 401-1 response
|
||||
token, ret := oauth.IsCarriedToken(r)
|
||||
if ret == false {
|
||||
log.Error("AccessToken is not carried")
|
||||
services.ResponseUnauthorized401AccessTokenNotCarried(w)
|
||||
return
|
||||
}
|
||||
|
||||
// 401-2 response
|
||||
if dborm.XormExistValidToken(token, config.GetExpiresFromConfig()) == false {
|
||||
log.Error("AccessToken fails or does not exist")
|
||||
services.ResponseUnauthorized401AccessTokenNotExist(w)
|
||||
return
|
||||
}
|
||||
|
||||
_, err := dborm.XormUpdateSessionShakeTime(token)
|
||||
if err != nil {
|
||||
log.Error("Failed to update session table:", err)
|
||||
services.ResponseUnauthorized401AccessTokenNotExist(w)
|
||||
return
|
||||
}
|
||||
|
||||
/*
|
||||
// response 403 Forbidden, permissions deny
|
||||
// todo...
|
||||
plist := globalSession.GetPermissionFromSession(token)
|
||||
log.Debug("permission list:", plist)
|
||||
if len(plist) == 0 || plist[0] == false {
|
||||
log.Debug("User permission deny")
|
||||
services.ResponseForbidden403NotPermission(w)
|
||||
return
|
||||
}
|
||||
*/
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["elementTypeValue"]
|
||||
|
||||
apiVer := vars["apiVersion"]
|
||||
if apiVer != "v1" {
|
||||
log.Error("Uri is invalid")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
// response 406-1
|
||||
rmUIDValues := GetRmUIDArr(r)
|
||||
if rmUIDValues == nil {
|
||||
log.Error("missing parameter: rmUIDs")
|
||||
services.ResponseNotAcceptable406MissingParam(w)
|
||||
return
|
||||
}
|
||||
|
||||
// response 406-2
|
||||
errorParams := CheckParameterName(r)
|
||||
if errorParams != nil {
|
||||
log.Error("parameter name error: ", errorParams)
|
||||
services.ResponseNotAcceptable406ParamError(w, errorParams)
|
||||
return
|
||||
}
|
||||
|
||||
// response 400-5
|
||||
if len(rmUIDValues) == 0 {
|
||||
log.Error("rmUIDs is wrong or NULL")
|
||||
services.ResponseBadRequest400WrongParamValue(w)
|
||||
return
|
||||
}
|
||||
|
||||
// response 414-1
|
||||
if len(rmUIDValues) > config.GetYamlConfig().Params.RmUIDMaxNum {
|
||||
log.Error("rmUID greater than", config.GetYamlConfig().Params.RmUIDMaxNum)
|
||||
services.ResponseRequestURITooLong414NRMNumExceed(w, config.GetYamlConfig().Params.RmUIDMaxNum)
|
||||
return
|
||||
}
|
||||
/*
|
||||
// response 400-1
|
||||
// check rmUID is valid
|
||||
// todo ...
|
||||
invalidRmUIDs := CheckValidRmUID(rmUIDValues)
|
||||
if len(invalidRmUIDs) != 0 {
|
||||
log.Debug("rmUID is invalid")
|
||||
services.ResponseBadRequest400RmUIDsIsInvalid(w, invalidRmUIDs)
|
||||
return
|
||||
}
|
||||
*/
|
||||
var response *resty.Response
|
||||
// respMsg := make(map[string]interface{})
|
||||
for _, rmUID := range rmUIDValues {
|
||||
neInfo, err := dborm.XormGetNeInfoByRmUID(neType, rmUID)
|
||||
if err != nil {
|
||||
log.Error("dborm.XormGetNeInfo is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
|
||||
requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.Ip, neInfo.Port, r.RequestURI)
|
||||
log.Debug("requestURI2NF: GET ", requestURI2NF)
|
||||
|
||||
client := resty.New()
|
||||
response, err = client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Get(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Failed to Get from NF:", err)
|
||||
services.ResponseInternalServerError500NFConnectRefused(w)
|
||||
return
|
||||
}
|
||||
/*
|
||||
switch response.StatusCode() {
|
||||
case http.StatusOK, http.StatusAccepted, http.StatusNoContent, http.StatusCreated:
|
||||
respMsg["data"] = response
|
||||
default:
|
||||
if response != nil {
|
||||
services.TransportResponse(w, response.StatusCode(), response.Body())
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
services.TransportResponse(w, response.StatusCode(), response.Body())
|
||||
}
|
||||
203
features/nbi/snmp.go
Normal file
203
features/nbi/snmp.go
Normal file
@@ -0,0 +1,203 @@
|
||||
package nbi
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
g "github.com/gosnmp/gosnmp"
|
||||
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
)
|
||||
|
||||
func init() {
|
||||
conf := config.GetYamlConfig()
|
||||
// Default is a pointer to a GoSNMP struct that contains sensible defaults
|
||||
// eg port 161, community public, etc
|
||||
g.Default.Target = conf.NE.Addr
|
||||
g.Default.Port = conf.NE.Port
|
||||
err := g.Default.Connect()
|
||||
if err != nil {
|
||||
fmt.Printf("Connect() err: %v", err)
|
||||
}
|
||||
//defer g.Default.Conn.Close()
|
||||
MAX_RMUID_NUM = config.GetRmUIDMaxNumFromConfig()
|
||||
MAX_ALARMID_NUM = config.GetAlarmIDMaxNumFromConfig()
|
||||
MAX_PMUID_NUM = config.GetPmIDMaxNumFromConfig()
|
||||
MAX_SUBID_NUM = config.GetSubIDMaxNumFromConfig()
|
||||
MAX_URI_LEN = config.GetUriMaxLenFromConfig()
|
||||
RMUID_REGEXP = config.GetRmUIDRegexpFromConfig()
|
||||
}
|
||||
|
||||
func GetNRMByUri(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("GetNRMByUri processing... ")
|
||||
|
||||
// response 414-4 uri too long ? (optional)
|
||||
// todo ... ?
|
||||
if bytes.Count([]byte(r.RequestURI), nil) > MAX_URI_LEN {
|
||||
log.Error("Request Uri too long:", bytes.Count([]byte(r.RequestURI), nil))
|
||||
services.ResponseRequestURITooLong414UriTooLong(w)
|
||||
return
|
||||
}
|
||||
|
||||
// check media type(content type) only support "application/json"
|
||||
// response 415-1
|
||||
if !services.IsVallidContentType(r, config.GetYamlConfig().OMC.CheckContentType) {
|
||||
log.Debug("Invalid Content-Type")
|
||||
services.ResponseUnsupportedMediaType415(w)
|
||||
return
|
||||
}
|
||||
|
||||
// error processing ...
|
||||
// 401-1 response
|
||||
token, ret := globalSession.IsCarriedToken(r)
|
||||
if ret == false {
|
||||
log.Error("AccessToken is not carried")
|
||||
services.ResponseUnauthorized401AccessTokenNotCarried(w)
|
||||
return
|
||||
}
|
||||
|
||||
// 401-2 response
|
||||
if globalSession.IsValidToken(token) == false {
|
||||
log.Error("AccessToken fails or does not exist")
|
||||
services.ResponseUnauthorized401AccessTokenNotExist(w)
|
||||
return
|
||||
}
|
||||
// response 403 Forbidden, permissions deny
|
||||
// todo...
|
||||
plist := globalSession.GetPermissionFromSession(token)
|
||||
log.Debug("permission list:", plist)
|
||||
if len(plist) == 0 || plist[0] == false {
|
||||
log.Error("User permission deny")
|
||||
services.ResponseForbidden403NotPermission(w)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
qeuryUri := vars["apiCategory"] + "/" + vars["elementTypeValue"] + "/" + vars["objectTypeValue"]
|
||||
log.Debug("Get by Uri: ", qeuryUri)
|
||||
|
||||
apiVer := vars["apiVersion"]
|
||||
if apiVer != "v1" {
|
||||
log.Error("Uri is invalid")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
// response 406-1
|
||||
rmUIDValues := GetRmUIDArr(r)
|
||||
if rmUIDValues == nil {
|
||||
log.Error("missing parameter: rmUIDs")
|
||||
services.ResponseNotAcceptable406MissingParam(w)
|
||||
return
|
||||
}
|
||||
|
||||
// response 406-2
|
||||
errorParams := CheckParameterName(r)
|
||||
if errorParams != nil {
|
||||
log.Error("parameter name error: ", errorParams)
|
||||
services.ResponseNotAcceptable406ParamError(w, errorParams)
|
||||
return
|
||||
}
|
||||
|
||||
// response 400-5
|
||||
if len(rmUIDValues) == 0 {
|
||||
log.Error("rmUIDs is wrong or NULL")
|
||||
services.ResponseBadRequest400WrongParamValue(w)
|
||||
return
|
||||
}
|
||||
|
||||
// response 414-1
|
||||
if len(rmUIDValues) > MAX_RMUID_NUM {
|
||||
log.Error("rmUID greater than", MAX_RMUID_NUM)
|
||||
services.ResponseRequestURITooLong414NRMNumExceed(w, MAX_RMUID_NUM)
|
||||
return
|
||||
}
|
||||
|
||||
// response 400-1
|
||||
// check rmUID is valid
|
||||
// todo ...
|
||||
invalidRmUIDs := CheckValidRmUID(rmUIDValues)
|
||||
if len(invalidRmUIDs) != 0 {
|
||||
log.Error("rmUID is invalid")
|
||||
services.ResponseBadRequest400RmUIDsIsInvalid(w, invalidRmUIDs)
|
||||
return
|
||||
}
|
||||
|
||||
// response 404-2
|
||||
rmUID := CheckLocalRmUID(rmUIDValues)
|
||||
if rmUID == "" {
|
||||
log.Error("rmUID does not exist")
|
||||
services.ResponseNotFound404NRMNotExist(w, rmUIDValues)
|
||||
return
|
||||
}
|
||||
|
||||
// response 404-1, uri is not exist in map
|
||||
attrNames := GetAttrNameArr(r)
|
||||
var Oids []string
|
||||
Oids = *config.GetOidByFileds(qeuryUri, attrNames, &Oids)
|
||||
if len(Oids) == 0 {
|
||||
log.Error("Nothing of config map")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
// response 404-1, uri is not exist in map
|
||||
var nameOids []config.NameOid
|
||||
nameOids = *config.GetDataOidByFields(qeuryUri, attrNames, &nameOids)
|
||||
if len(nameOids) == 0 {
|
||||
log.Error("Nothing of config map")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
result, err2 := g.Default.Get(Oids) // Get() accepts up to g.MAX_OIDS
|
||||
if err2 != nil {
|
||||
log.Fatalf("Get() err: %v", err2)
|
||||
|
||||
}
|
||||
|
||||
// var nameValues []config.NameValue
|
||||
var nameValue config.NameValue
|
||||
|
||||
nameValues := make(map[string]interface{})
|
||||
nameValues["rmUID"] = rmUID
|
||||
for i, variable := range result.Variables {
|
||||
nameValue.Name = nameOids[i].Name
|
||||
log.Debugf("%d: oid: %s name: %s\n", i, variable.Name, nameValue.Name)
|
||||
// if nameOids[i].Oid == variable.Name && global.IsContain(attributeNames, nameValue.Name) {
|
||||
if nameOids[i].Oid == variable.Name {
|
||||
// the Value of each variable returned by Get() implements
|
||||
// interface{}. You could do a type switch...
|
||||
switch variable.Type {
|
||||
case g.OctetString:
|
||||
bytes := variable.Value.([]byte)
|
||||
log.Debugf("string: %s\n", string(bytes))
|
||||
nameValue.Value = string(bytes)
|
||||
nameValues[nameValue.Name] = nameValue.Value
|
||||
case g.Integer:
|
||||
value := variable.Value.(int)
|
||||
log.Debugf("integer: %d\n", value)
|
||||
nameValue.Value = strconv.Itoa(value)
|
||||
nameValues[nameValue.Name] = nameValue.Value
|
||||
case g.IPAddress:
|
||||
value := variable.Value.(string)
|
||||
log.Debugf("IPAddress: %s\n", variable.Value)
|
||||
nameValue.Value = value
|
||||
nameValues[nameValue.Name] = nameValue.Value
|
||||
default:
|
||||
// ... or often you're just interested in numeric values.
|
||||
// ToBigInt() will return the Value as a BigInt, for plugging
|
||||
// into your calculations.
|
||||
log.Debugf("number: %d\n", g.ToBigInt(variable.Value))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
getResponse := services.DataResponse{nameValues}
|
||||
services.ResponseWithJson(w, http.StatusOK, getResponse)
|
||||
}
|
||||
972
features/pm/performance.go
Normal file
972
features/pm/performance.go
Normal file
@@ -0,0 +1,972 @@
|
||||
package pm
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"xorm.io/xorm"
|
||||
|
||||
"github.com/go-resty/resty/v2"
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
|
||||
type Response struct {
|
||||
Data interface{} `json:"data"`
|
||||
}
|
||||
|
||||
type KpiReport struct {
|
||||
Timestamp string `json:"TimeStamp"`
|
||||
Task struct {
|
||||
Period struct {
|
||||
StartTime string `json:"StartTime"`
|
||||
EndTime string `json:"EndTime"`
|
||||
} `json:"Period"`
|
||||
NE struct {
|
||||
NEName string `json:"NEName"`
|
||||
RmUID string `json:"rmUID"`
|
||||
NeType string `json:"NeType"`
|
||||
KPIs []struct {
|
||||
KPIID string `json:"KPIID"`
|
||||
Value int `json:"Value"`
|
||||
Err string `json:"Err"`
|
||||
} `json:"KPIs"`
|
||||
} `json:"NE"`
|
||||
} `json:"Task"`
|
||||
}
|
||||
|
||||
type GoldKpi struct {
|
||||
// Id int `json:"-" xorm:"pk 'id' autoincr"`
|
||||
Date string `json:"date" xorm:"date"`
|
||||
Index int `json:"index"`
|
||||
StartTime string `json:"startTime"`
|
||||
EndTime string `json:"endTime"`
|
||||
NEName string `json:"neName" xorm:"ne_name"`
|
||||
RmUid string `json:"rmUid" xorm:"rm_uid"`
|
||||
NEType string `json:"neType" xorm:"ne_type"`
|
||||
KpiId string `json:"kpiId" xorm:"kpi_id"`
|
||||
Value int `json:"value"`
|
||||
Error string `json:"error"`
|
||||
Timestamp string `json:"timestamp"`
|
||||
}
|
||||
|
||||
var (
|
||||
// performance management
|
||||
PostPerformanceUri = config.UriPrefix + "/performanceManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/kpiReport/{index}"
|
||||
|
||||
// performance management
|
||||
PostPerformancePattern = config.UriPrefix + "/performanceManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/kpiReport/{index}"
|
||||
MeasureTaskUri = config.UriPrefix + "/performanceManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/measureTask"
|
||||
MeasureReportUri = config.UriPrefix + "/performanceManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/measureReport"
|
||||
MeasureReportFmt = config.UriPrefix + "/performanceManagement/v1/elementType/%s/objectType/measureReport"
|
||||
MeasurementUri = config.UriPrefix + "/performanceManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/measurement/{index}"
|
||||
UriMeasureTask = config.UriPrefix + "/performanceManagement/{apiVersion}/measureTask/{netype}"
|
||||
)
|
||||
|
||||
var xEngine *xorm.Engine
|
||||
|
||||
type DatabaseClient struct {
|
||||
dbType string
|
||||
dbUrl string
|
||||
dbConnMaxLifetime time.Duration
|
||||
dbMaxIdleConns int
|
||||
dbMaxOpenConns int
|
||||
IsShowSQL bool
|
||||
|
||||
XEngine *xorm.Engine
|
||||
}
|
||||
|
||||
var DbClient DatabaseClient
|
||||
|
||||
func InitDbClient(dbType, dbUser, dbPassword, dbHost, dbPort, dbName string) error {
|
||||
DbClient.dbUrl = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=true&loc=Local",
|
||||
dbUser, dbPassword, dbHost, dbPort, dbName)
|
||||
DbClient.dbType = dbType
|
||||
DbClient.dbConnMaxLifetime = 0
|
||||
DbClient.dbMaxIdleConns = 0
|
||||
DbClient.dbMaxOpenConns = 0
|
||||
if log.GetLevel() == log.LOG_TRACE {
|
||||
DbClient.IsShowSQL = true
|
||||
}
|
||||
log.Debugf("dbType:%s dbUrl:%s:******@tcp(%s:%s)/%s??charset=utf8&parseTime=true&loc=Local",
|
||||
dbType, dbUser, dbHost, dbPort, dbName)
|
||||
|
||||
var err error
|
||||
DbClient.XEngine, err = xorm.NewEngine(DbClient.dbType, DbClient.dbUrl)
|
||||
if err != nil {
|
||||
log.Error("Failed to connet database:", err)
|
||||
return err
|
||||
}
|
||||
DbClient.XEngine.SetConnMaxLifetime(DbClient.dbConnMaxLifetime)
|
||||
DbClient.XEngine.SetMaxIdleConns(DbClient.dbMaxIdleConns)
|
||||
DbClient.XEngine.SetMaxOpenConns(DbClient.dbMaxOpenConns)
|
||||
if DbClient.IsShowSQL {
|
||||
DbClient.XEngine.ShowSQL(true)
|
||||
}
|
||||
xEngine = DbClient.XEngine
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func XormConnectDatabase(dbType, dbUser, dbPassword, dbHost, dbPort, dbName string) (*xorm.Engine, error) {
|
||||
sqlStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=true&loc=Local",
|
||||
dbUser, dbPassword, dbHost, dbPort, dbName)
|
||||
log.Debugf("dbType:%s Connect to:%s:******@tcp(%s:%s)/%s?charset=utf8&parseTime=true&loc=Local",
|
||||
dbType, dbUser, dbHost, dbPort, dbName)
|
||||
var err error
|
||||
xEngine, err = xorm.NewEngine(dbType, sqlStr) //1、Create xorm engine
|
||||
if err != nil {
|
||||
log.Error("Failed to connect database:", err)
|
||||
return nil, err
|
||||
}
|
||||
if log.GetLevel() == log.LOG_TRACE {
|
||||
xEngine.ShowSQL(true)
|
||||
}
|
||||
return xEngine, nil
|
||||
}
|
||||
|
||||
func GetDateFromTimeString(fmtString string, timeString string) string {
|
||||
t, _ := time.ParseInLocation(fmtString, timeString, time.Local)
|
||||
return t.Format("2006-01-02")
|
||||
}
|
||||
|
||||
func GetDateTimeFromTimeString(fmtString string, timeString string) string {
|
||||
t, _ := time.ParseInLocation(fmtString, timeString, time.Local)
|
||||
return t.Format(global.DateTime)
|
||||
}
|
||||
|
||||
// process alarm post message from NFs
|
||||
func PostKPIReportFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("PostKPIReportFromNF processing... ")
|
||||
|
||||
vars := mux.Vars(r)
|
||||
apiVer := vars["apiVersion"]
|
||||
if apiVer != global.ApiVersionV1 {
|
||||
log.Error("Uri api version is invalid. apiVersion:", apiVer)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
// body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
|
||||
if err != nil {
|
||||
log.Error("Faile to io.ReadAll: ", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
log.Debug("Request body:", string(body))
|
||||
kpiReport := new(KpiReport)
|
||||
_ = json.Unmarshal(body, &kpiReport)
|
||||
log.Debug("kpiReport:", kpiReport)
|
||||
|
||||
session := xEngine.NewSession()
|
||||
defer session.Close()
|
||||
goldKpi := new(GoldKpi)
|
||||
layout := time.RFC3339Nano
|
||||
goldKpi.Date = GetDateFromTimeString(layout, kpiReport.Task.Period.StartTime)
|
||||
goldKpi.Index, _ = strconv.Atoi(vars["index"])
|
||||
goldKpi.StartTime = global.GetFmtTimeString(layout, kpiReport.Task.Period.StartTime, time.DateTime)
|
||||
goldKpi.EndTime = global.GetFmtTimeString(layout, kpiReport.Task.Period.EndTime, time.DateTime)
|
||||
goldKpi.NEName = kpiReport.Task.NE.NEName
|
||||
goldKpi.RmUid = kpiReport.Task.NE.RmUID
|
||||
goldKpi.NEType = kpiReport.Task.NE.NeType
|
||||
goldKpi.Timestamp = global.GetFmtTimeString(layout, kpiReport.Timestamp, time.DateTime)
|
||||
for _, k := range kpiReport.Task.NE.KPIs {
|
||||
goldKpi.KpiId = k.KPIID
|
||||
goldKpi.Value = k.Value
|
||||
goldKpi.Error = k.Err
|
||||
log.Trace("goldKpi:", goldKpi)
|
||||
|
||||
// 启动事务
|
||||
err := session.Begin()
|
||||
if err != nil {
|
||||
log.Error("Failed to Begin gold_kpi:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
gkpi := &GoldKpi{}
|
||||
_, err = session.Where("id = ?", 1).ForUpdate().Get(gkpi)
|
||||
if err != nil {
|
||||
// 回滚事务
|
||||
session.Rollback()
|
||||
log.Error("Failed to ForUpdate gold_kpi:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
affected, err := session.Insert(goldKpi)
|
||||
if err != nil && affected <= 0 {
|
||||
session.Rollback()
|
||||
log.Error("Failed to insert gold_kpi:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
// 提交事务
|
||||
err = session.Commit()
|
||||
if err != nil {
|
||||
log.Error("Failed to Commit gold_kpi:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
services.ResponseStatusOK200Null(w)
|
||||
}
|
||||
|
||||
type MeasureTask struct {
|
||||
Tasks []Task `json:"Tasks"`
|
||||
NotifyUrl string `json:"NotifyUrl"` /* "http://xEngine.xEngine.xEngine.x:xxxx/api/rest/performanceManagement/v1/elementType/smf/objectType/measureReport */
|
||||
}
|
||||
|
||||
type Task struct {
|
||||
Id int `json:"Id"`
|
||||
|
||||
StartTime string `json:"StartTime"`
|
||||
EndTime string `json:"EndTime"`
|
||||
|
||||
Schedule struct {
|
||||
Type string `json:"Type"` // 计划类型:Weekly/Monthly, 如果type为"", 则任务以StartTime和EndTime为条件进行统计, 否则以Shedule方式进行
|
||||
Days []int `json:"Days"` // Weekly: [0,1,...,5,6] 星期日为0, Monthly: [1,2,3,...,30,31]
|
||||
Periods []dborm.Period `json:"Periods"`
|
||||
/*
|
||||
Periods []struct {
|
||||
Start string `json:"Start"` // 零点或者零点加测量粒度的整数倍
|
||||
End string `json:"End"` //零点加测量粒度的整数倍
|
||||
} `json:"Periods"`
|
||||
*/
|
||||
} `json:"Schedule"`
|
||||
|
||||
GranulOption string `json:"GranulOption"` // 测量粒度选项:15M/30M/60M/24H
|
||||
KPISet []dborm.KpiSetJ `json:"KPISet"`
|
||||
/*
|
||||
KPISet []struct {
|
||||
Code string `json:"Code"` // 统计编码 如:SMFHA01
|
||||
KPIs []string `json:"KPIs` // 指标项集合 ["SMF.AttCreatePduSession", "SMF.AttCreatePduSession._Dnn"]
|
||||
} `json:"KPISet"`
|
||||
*/
|
||||
}
|
||||
|
||||
type MeasureReport struct {
|
||||
Id int `json:"Id"`
|
||||
TimeStamp string `json:"TimeStamp"`
|
||||
NeName string `json:"NeName"`
|
||||
RmUID string `json:"rmUID"`
|
||||
NeType string `json:"NeType"`
|
||||
|
||||
Report struct {
|
||||
Period struct {
|
||||
StartTime string `json:"StartTime"`
|
||||
EndTime string `json:"EndTime"`
|
||||
} `json:"Period"`
|
||||
|
||||
Datas []struct {
|
||||
Code string `json:"Code"` // 统计编码 如:SMFHA01
|
||||
KPIs []struct {
|
||||
KPIID string `json:"KPIID"` // 指标项, 如: SMF.AttCreatePduSession._Dnn
|
||||
KPIValues []struct {
|
||||
Name string `json:"Name"` // 单个的写"Total", 或者指标项有多个测量项,如Dnn的名称写对应的Dnn"cmnet"/"ims"
|
||||
Value int64 `json:"Value"`
|
||||
} `json:"KPIValues"`
|
||||
} `json:"KPIs"`
|
||||
} `json:"Datas"`
|
||||
} `json:"Report"`
|
||||
}
|
||||
|
||||
type MeasureData struct {
|
||||
// Id int `json:"id" xorm:"pk 'id' autoincr"`
|
||||
Id int `json:"id" xorm:"-"`
|
||||
Date string `json:"date" xorm:"date"`
|
||||
TaskId int `json:"taskId"`
|
||||
NeType string `json:"neType" xorm:"ne_type"`
|
||||
NeName string `json:"neName" xorm:"ne_name"`
|
||||
RmUid string `json:"rmUid" xorm:"rm_uid"`
|
||||
GranulOption string `json:"granulOption" xorm:"granul_option"`
|
||||
StartTime string `json:"startTime"`
|
||||
EndTime string `json:"endTime"`
|
||||
KpiCode string `json:"kpiCode" xorm:"kpi_code"`
|
||||
KpiId string `json:"kpiId" xorm:"kpi_id"`
|
||||
KpiExt string `json:"kpiExt" xorm:"kpi_ext"`
|
||||
Value int64 `json:"value"`
|
||||
Timestamp string `json:"timestamp"`
|
||||
}
|
||||
|
||||
// process measure report from NFs
|
||||
func PostMeasureReportFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("PostMeasureReportFromNF processing... ")
|
||||
|
||||
// vars := mux.Vars(r)
|
||||
// neType := vars["elementTypeValue"]
|
||||
vars := mux.Vars(r)
|
||||
apiVer := vars["apiVersion"]
|
||||
if apiVer != global.ApiVersionV1 {
|
||||
log.Error("Uri api version is invalid. apiVersion:", apiVer)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
// body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
|
||||
if err != nil {
|
||||
log.Error("Faile to io.ReadAll: ", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
log.Debug("Request body:", string(body))
|
||||
measureReport := new(MeasureReport)
|
||||
_ = json.Unmarshal(body, &measureReport)
|
||||
log.Debug("measureReport:", measureReport)
|
||||
|
||||
session := xEngine.NewSession()
|
||||
defer session.Close()
|
||||
measureData := new(MeasureData)
|
||||
layout := global.DateTime
|
||||
measureData.Date = GetDateFromTimeString(layout, measureReport.Report.Period.StartTime)
|
||||
measureData.TaskId = measureReport.Id
|
||||
measureData.StartTime = measureReport.Report.Period.StartTime
|
||||
measureData.EndTime = measureReport.Report.Period.EndTime
|
||||
measureData.NeType = measureReport.NeType
|
||||
measureData.NeName = measureReport.NeName
|
||||
measureData.RmUid = measureReport.RmUID
|
||||
measureData.GranulOption, _ = dborm.XormGetSingleCol("measure_task", "granul_option", fmt.Sprintf("id=%d", measureReport.Id))
|
||||
t, _ := strconv.ParseInt(measureReport.TimeStamp, 10, 64)
|
||||
timestamp := time.Unix(t, 0)
|
||||
log.Debug("timestamp:", timestamp.Format(layout))
|
||||
measureData.Timestamp = timestamp.Format(layout)
|
||||
log.Debug("Datas:", measureReport.Report.Datas)
|
||||
for _, d := range measureReport.Report.Datas {
|
||||
measureData.KpiCode = d.Code
|
||||
|
||||
log.Debug("KPIs:", d.KPIs)
|
||||
for _, k := range d.KPIs {
|
||||
measureData.KpiId = k.KPIID
|
||||
|
||||
log.Debug("KPIValues:", k.KPIValues)
|
||||
if len(k.KPIValues) != 0 {
|
||||
for _, v := range k.KPIValues {
|
||||
measureData.KpiExt = v.Name
|
||||
measureData.Value = v.Value
|
||||
log.Debug("measureData:", measureData)
|
||||
|
||||
affected, err := session.Insert(measureData)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to insert measure_data:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
}
|
||||
} else {
|
||||
measureData.Value = 0
|
||||
log.Debug("measureData:", measureData)
|
||||
|
||||
affected, err := session.Insert(measureData)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to insert measure_data:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
}
|
||||
|
||||
func PostMeasureTaskToNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("PostMeasureTaskToNF processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["elementTypeValue"]
|
||||
params := r.URL.Query()
|
||||
taskIds := params["id"]
|
||||
log.Debug("taskIds:", taskIds)
|
||||
|
||||
var response *resty.Response
|
||||
client := resty.New()
|
||||
measureTask := new(MeasureTask)
|
||||
measureTask.Tasks = make([]Task, 1)
|
||||
for _, taskId := range taskIds {
|
||||
id, _ := strconv.Atoi(taskId)
|
||||
task, err := dborm.GetMeasureTask(id)
|
||||
if err != nil {
|
||||
log.Error("Failed to connect database: ", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
log.Debug("Table Task:", task)
|
||||
|
||||
measureTask.Tasks[0].Id = task.Id
|
||||
measureTask.Tasks[0].StartTime = task.StartTime
|
||||
measureTask.Tasks[0].EndTime = task.EndTime
|
||||
// v := new(dborm.ScheduleJson)
|
||||
// _ = json.Unmarshal(task.Schedule, v)
|
||||
// measureTask.Task[0].Schedule.Type = v.Type
|
||||
// measureTask.Task[0].Schedule.Days = v.Days
|
||||
if len(task.Schedule) >= 1 {
|
||||
measureTask.Tasks[0].Schedule.Type = task.Schedule[0].Type
|
||||
measureTask.Tasks[0].Schedule.Days = task.Schedule[0].Days
|
||||
}
|
||||
//v := new(dborm.ScheduleJ)
|
||||
//_ = json.Unmarshal(task.Schedule, v)
|
||||
measureTask.Tasks[0].Schedule.Periods = task.Periods
|
||||
measureTask.Tasks[0].GranulOption = task.GranulOption
|
||||
|
||||
measureTask.Tasks[0].KPISet = task.KpiSet
|
||||
ips, err := global.GetIps()
|
||||
if err != nil {
|
||||
log.Error("Failed to get local IP:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
log.Debug("ips:", ips)
|
||||
|
||||
measureTask.NotifyUrl = global.SetNotifyUrl(ips[0], config.GetYamlConfig().Rest[0].Port, fmt.Sprintf(MeasureReportFmt, neType))
|
||||
log.Debug("Measure Task to NF:", measureTask)
|
||||
|
||||
if len(task.NeIds) == 0 {
|
||||
var neInfos []dborm.NeInfo
|
||||
err := dborm.XormGetNeInfoByNeType(neType, &neInfos)
|
||||
if err != nil {
|
||||
log.Error("Failed to dborm.XormGetNeInfoByNeType:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
for _, neInfo := range neInfos {
|
||||
task.NeIds = append(task.NeIds, neInfo.NeId)
|
||||
}
|
||||
}
|
||||
|
||||
for _, neId := range task.NeIds {
|
||||
var err error
|
||||
neInfo, err := dborm.XormGetNeInfo(neType, neId)
|
||||
if err != nil {
|
||||
log.Error("Failed to dborm.XormGetNeInfo:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
if neInfo == nil {
|
||||
err := errors.New(fmt.Sprintf("not found target NE neType=%s, neId=%s", neType, neId))
|
||||
log.Error(err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.Ip, neInfo.Port, r.RequestURI)
|
||||
log.Debug("requestURI2NF: POST ", requestURI2NF)
|
||||
|
||||
switch task.Status {
|
||||
case dborm.MeasureTaskStatusInactive:
|
||||
body, _ := json.Marshal(measureTask)
|
||||
log.Debug("body: ", string(body))
|
||||
|
||||
log.Debug("User-Agent: ", config.GetDefaultUserAgent())
|
||||
response, err = client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
SetBody(body).
|
||||
SetContentLength(true).
|
||||
Post(requestURI2NF)
|
||||
|
||||
if err != nil {
|
||||
log.Error("Post to NF failed:", err)
|
||||
services.ResponseInternalServerError500NFConnectRefused(w)
|
||||
return
|
||||
}
|
||||
log.Debug("response info: ")
|
||||
log.Debug("Status Code:", response.StatusCode())
|
||||
log.Debug("Status:", response.Status())
|
||||
log.Debug("Proto:", response.Proto())
|
||||
log.Debug("Time:", response.Time())
|
||||
log.Debug("Received At:", response.ReceivedAt())
|
||||
log.Debug("Size:", response.Size())
|
||||
|
||||
case dborm.MeasureTaskStatusSuspend:
|
||||
body, _ := json.Marshal(measureTask)
|
||||
log.Debug("body: ", string(body))
|
||||
response, err = client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
SetBody(body).
|
||||
SetContentLength(true).
|
||||
Put(requestURI2NF)
|
||||
|
||||
if err != nil {
|
||||
log.Error("Put to NF failed:", err)
|
||||
services.ResponseInternalServerError500NFConnectRefused(w)
|
||||
return
|
||||
}
|
||||
default:
|
||||
err = errors.New(fmt.Sprintf("measure task status must be inactive id=%d", id))
|
||||
log.Error("Unable to active measure task:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
log.Debug("StatusCode: ", response.StatusCode())
|
||||
switch response.StatusCode() {
|
||||
case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted:
|
||||
taskInfo := new(dborm.MeasureTask)
|
||||
taskInfo.Status = dborm.MeasureTaskStatusActive
|
||||
taskInfo.CreateTime = time.Now().Format(time.DateTime)
|
||||
affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo)
|
||||
if err != nil {
|
||||
log.Error("dborm.XormUpdateTableById is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
} else if affected <= 0 {
|
||||
log.Info("Not record affected in measure_task")
|
||||
}
|
||||
default:
|
||||
log.Error("NF return failure to active measure task")
|
||||
if response != nil {
|
||||
log.Info("response body:", string(response.Body()))
|
||||
services.TransportResponse(w, response.StatusCode(), response.Body())
|
||||
return
|
||||
} else {
|
||||
err = errors.New(fmt.Sprintf("failed to active measure task, NF return error status=%v", response.Status()))
|
||||
log.Error("Unable to active measure task:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
}
|
||||
|
||||
func PutMeasureTaskToNF(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
services.ResponseStatusOK200Null(w)
|
||||
}
|
||||
|
||||
func DeleteMeasureTaskToNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("DeleteMeasureTaskToNF processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["elementTypeValue"]
|
||||
params := r.URL.Query()
|
||||
taskIds := params["id"]
|
||||
log.Debug("taskIds:", taskIds)
|
||||
|
||||
var response *resty.Response
|
||||
respMsg := make(map[string]interface{})
|
||||
for _, taskId := range taskIds {
|
||||
id, _ := strconv.Atoi(taskId)
|
||||
task, err := dborm.GetMeasureTask(id)
|
||||
if err != nil {
|
||||
log.Error("Failed to connect database: ", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
log.Debug("Measure Task:", task)
|
||||
|
||||
if len(task.NeIds) == 0 {
|
||||
var neInfos []dborm.NeInfo
|
||||
err := dborm.XormGetNeInfoByNeType(neType, &neInfos)
|
||||
if err != nil {
|
||||
log.Error("Failed to dborm.XormGetNeInfoByNeType:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
for _, neInfo := range neInfos {
|
||||
task.NeIds = append(task.NeIds, neInfo.NeId)
|
||||
}
|
||||
}
|
||||
log.Debug("neIds:", task.NeIds)
|
||||
if len(task.NeIds) == 0 {
|
||||
log.Warn("Not found target NE in the measure task")
|
||||
taskInfo := new(dborm.MeasureTask)
|
||||
taskInfo.Status = dborm.MeasureTaskStatusDeleted
|
||||
affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo)
|
||||
if err != nil {
|
||||
log.Error("dborm.XormUpdateTableById is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
} else if affected <= 0 {
|
||||
log.Info("Not record affected in measure_task")
|
||||
}
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
}
|
||||
|
||||
for _, neId := range task.NeIds {
|
||||
var err error
|
||||
neInfo, err := dborm.XormGetNeInfo(neType, neId)
|
||||
if err != nil {
|
||||
log.Error("dborm.XormGetNeInfo is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
if neInfo != nil {
|
||||
requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.Ip, neInfo.Port, r.RequestURI)
|
||||
log.Debug("requestURI2NF: DELETE ", requestURI2NF)
|
||||
client := resty.New()
|
||||
response, err = client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Delete(requestURI2NF)
|
||||
if err != nil {
|
||||
// to avoid can't delete the task for abnormal NF
|
||||
log.Error("Failed to resty delete:", err)
|
||||
taskInfo := new(dborm.MeasureTask)
|
||||
taskInfo.Status = dborm.MeasureTaskStatusDeleted
|
||||
affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo)
|
||||
if err != nil {
|
||||
log.Error("dborm.XormUpdateTableById is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
} else if affected <= 0 {
|
||||
log.Info("Not record affected in measure_task")
|
||||
}
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
}
|
||||
|
||||
log.Info("StatusCode: ", response.StatusCode())
|
||||
switch response.StatusCode() {
|
||||
case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted:
|
||||
taskInfo := new(dborm.MeasureTask)
|
||||
taskInfo.Status = dborm.MeasureTaskStatusDeleted
|
||||
affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo)
|
||||
if err != nil {
|
||||
log.Error("dborm.XormUpdateTableById is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
} else if affected <= 0 {
|
||||
log.Infof("Not record affected in measure_task")
|
||||
}
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
default:
|
||||
log.Info("response body:", string(response.Body()))
|
||||
body := new(map[string]interface{})
|
||||
_ = json.Unmarshal(response.Body(), &body)
|
||||
respMsg["error"] = body
|
||||
}
|
||||
} else {
|
||||
taskInfo := new(dborm.MeasureTask)
|
||||
taskInfo.Status = dborm.MeasureTaskStatusDeleted
|
||||
affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo)
|
||||
if err != nil {
|
||||
log.Error("dborm.XormUpdateTableById is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
} else if affected <= 0 {
|
||||
log.Info("Not record affected in measure_task")
|
||||
}
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
services.ResponseWithJson(w, response.StatusCode(), respMsg)
|
||||
}
|
||||
|
||||
func PatchMeasureTaskToNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("PatchMeasureTaskToNF processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["elementTypeValue"]
|
||||
params := r.URL.Query()
|
||||
taskIds := params["id"]
|
||||
log.Debug("taskIds:", taskIds)
|
||||
|
||||
var response *resty.Response
|
||||
respMsg := make(map[string]interface{})
|
||||
for _, taskId := range taskIds {
|
||||
id, _ := strconv.Atoi(taskId)
|
||||
task, err := dborm.GetMeasureTask(id)
|
||||
if err != nil {
|
||||
log.Error("Failed to connect database: ", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
log.Debug("Measure Task:", task)
|
||||
|
||||
// for neType
|
||||
if len(task.NeIds) == 0 {
|
||||
var neInfos []dborm.NeInfo
|
||||
err := dborm.XormGetNeInfoByNeType(neType, &neInfos)
|
||||
if err != nil {
|
||||
log.Error("Failed to dborm.XormGetNeInfoByNeType:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
for _, neInfo := range neInfos {
|
||||
task.NeIds = append(task.NeIds, neInfo.NeId)
|
||||
}
|
||||
}
|
||||
|
||||
if len(task.NeIds) == 0 {
|
||||
taskInfo := new(dborm.MeasureTask)
|
||||
taskInfo.Status = dborm.MeasureTaskStatusInactive
|
||||
affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo)
|
||||
if err != nil {
|
||||
log.Error("dborm.XormUpdateTableById is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
} else if affected <= 0 {
|
||||
log.Info("Not record affected in measure_task")
|
||||
}
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
}
|
||||
|
||||
for _, neId := range task.NeIds {
|
||||
var err error
|
||||
neInfo, err := dborm.XormGetNeInfo(neType, neId)
|
||||
if err != nil {
|
||||
log.Error("dborm.XormGetNeInfo is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
if neInfo == nil {
|
||||
em := errors.New("Not found NE info in database")
|
||||
log.Error(em)
|
||||
taskInfo := new(dborm.MeasureTask)
|
||||
taskInfo.Status = dborm.MeasureTaskStatusInactive
|
||||
affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo)
|
||||
if err != nil {
|
||||
log.Error("dborm.XormUpdateTableById is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
} else if affected <= 0 {
|
||||
log.Info("Not record affected in measure_task")
|
||||
}
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
//services.ResponseInternalServerError500ProcessError(w, em)
|
||||
return
|
||||
}
|
||||
|
||||
requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.Ip, neInfo.Port, r.RequestURI)
|
||||
log.Debug("requestURI2NF: PATCH ", requestURI2NF)
|
||||
client := resty.New()
|
||||
response, err = client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Patch(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Patch to NF failed:", err)
|
||||
services.ResponseInternalServerError500NFConnectRefused(w)
|
||||
return
|
||||
}
|
||||
|
||||
log.Debug("StatusCode: ", response.StatusCode())
|
||||
switch response.StatusCode() {
|
||||
case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted:
|
||||
taskInfo := new(dborm.MeasureTask)
|
||||
taskInfo.Status = dborm.MeasureTaskStatusInactive
|
||||
affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo)
|
||||
if err != nil {
|
||||
log.Error("dborm.XormUpdateTableById is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
} else if affected <= 0 {
|
||||
log.Info("Not record affected in measure_task")
|
||||
}
|
||||
default:
|
||||
log.Debug("response body:", string(response.Body()))
|
||||
body := new(map[string]interface{})
|
||||
_ = json.Unmarshal(response.Body(), &body)
|
||||
respMsg["error"] = body
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
services.ResponseWithJson(w, response.StatusCode(), respMsg)
|
||||
return
|
||||
}
|
||||
|
||||
type Measurement struct {
|
||||
Id int `json:"-" xorm:"pk 'id' autoincr"`
|
||||
Date string `json:"-" xorm:"date"`
|
||||
Index int `json:"Index"` // 1天中测量时间粒度(如15分钟)的切片索引: 0~95
|
||||
Timestamp string `json:"TimeStamp" xorm:"-"`
|
||||
NeName string `json:"NeName"` // UserLabel
|
||||
RmUID string `json:"RmUID" xorm:"rm_uid"`
|
||||
NeType string `json:"NeType"` // 网元类型
|
||||
PmVersion string `json:"PmVersion"` // 性能数据版本号
|
||||
Dn string `json:"Dn"` // (???)网元标识, 如:RJN-CMZJ-TZ,SubNetwork=5GC88,ManagedElement=SMF53456,SmfFunction=53456
|
||||
Period string `json:"Period"` // 测量时间粒度选项:5/15/30/60
|
||||
TimeZone string `json:"TimeZone"`
|
||||
StartTime string `json:"StartTime"`
|
||||
|
||||
Datas []Data `json:"Datas"`
|
||||
}
|
||||
|
||||
type KPIValue struct {
|
||||
Name string `json:"Name"` // 单个的写"Total", 或者指标项有多个测量项,如Dnn的名称写对应的Dnn"cmnet"/"ims"
|
||||
Value int64 `json:"Value"`
|
||||
}
|
||||
|
||||
type KPI struct {
|
||||
KPIID string `json:"KPIID"` // 指标项, 如: SMF.AttCreatePduSession._Dnn
|
||||
KPIValues []KPIValue `json:"KPIValues"`
|
||||
}
|
||||
|
||||
type Data struct {
|
||||
ObjectType string `json:"ObjectType"` // 网络资源类别名称, Pm指标项列表中为空间粒度 如:SmfFunction
|
||||
KPIs []KPI `json:"KPIs"` // 指标项, 如: SMF.AttCreatePduSession._Dnn
|
||||
}
|
||||
|
||||
// process measurement post message from NFs
|
||||
func PostMeasurementFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("PostMeasurementFromNF processing... ")
|
||||
|
||||
vars := mux.Vars(r)
|
||||
apiVer := vars["apiVersion"]
|
||||
if apiVer != global.ApiVersionV1 {
|
||||
log.Error("Uri api version is invalid. apiVersion:", apiVer)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
|
||||
if err != nil {
|
||||
log.Error("Faile to io.ReadAll: ", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
log.Debug("Request body:", string(body))
|
||||
// measurement := new(dborm.NorthboundPm)
|
||||
measurement := new(dborm.NorthboundPm)
|
||||
_ = json.Unmarshal(body, &measurement)
|
||||
log.Debug("measurement:", measurement)
|
||||
|
||||
session := dborm.DbClient.XEngine.NewSession()
|
||||
defer session.Close()
|
||||
|
||||
// layout := global.DateTime
|
||||
layout := time.RFC3339
|
||||
measurement.Date = GetDateFromTimeString(layout, measurement.StartTime)
|
||||
measurement.StartTime = GetDateTimeFromTimeString(layout, measurement.StartTime)
|
||||
affected, err := session.Table("northbound_pm").Insert(measurement)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to insert northbound_pm:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
}
|
||||
|
||||
// get measurement message from NFs
|
||||
func GetMeasurementFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("GetMeasurementFromNF processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
apiVer := vars["apiVersion"]
|
||||
if apiVer != global.ApiVersionV1 {
|
||||
log.Error("Uri api version is invalid. apiVersion:", apiVer)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
neType := vars["elementTypeValue"]
|
||||
if neType == "" {
|
||||
log.Error("elementTypeValue is null.")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
params := r.URL.Query()
|
||||
neIds := params["ne_id"]
|
||||
if len(neIds) == 0 {
|
||||
log.Error("ne_id NOT FOUND")
|
||||
services.ResponseBadRequest400WrongParamValue(w)
|
||||
return
|
||||
}
|
||||
log.Debugf("neType: %s neId:%s", neType, neIds)
|
||||
|
||||
//var neInfo *dborm.NeInfo
|
||||
neInfo := new(dborm.NeInfo)
|
||||
|
||||
neInfo, err = dborm.XormGetNeInfo(neType, neIds[0])
|
||||
if err != nil {
|
||||
log.Error("dborm.XormGetNeInfo is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
|
||||
requestURI2NF := fmt.Sprintf("http://%s:%v%s", neInfo.Ip, neInfo.Port, r.RequestURI)
|
||||
log.Debug("requestURI2NF: GET ", requestURI2NF)
|
||||
|
||||
client := resty.New()
|
||||
response, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Get(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Failed to Get from NF:", err)
|
||||
services.ResponseInternalServerError500NFConnectRefused(w)
|
||||
return
|
||||
}
|
||||
|
||||
respMsg := make(map[string]interface{})
|
||||
switch response.StatusCode() {
|
||||
case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted:
|
||||
log.Debug("response:", response)
|
||||
// measurement := new(dborm.NorthboundPm)
|
||||
measurement := new(dborm.NorthboundPm)
|
||||
_ = json.Unmarshal(response.Body(), &measurement)
|
||||
log.Debug("measurement:", measurement)
|
||||
|
||||
session := dborm.DbClient.XEngine.NewSession()
|
||||
defer session.Close()
|
||||
|
||||
layout := time.RFC3339
|
||||
measurement.Date = GetDateFromTimeString(layout, measurement.StartTime)
|
||||
measurement.StartTime = GetDateTimeFromTimeString(layout, measurement.StartTime)
|
||||
affected, err := session.Table("northbound_pm").Insert(measurement)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to insert northbound_pm:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
default:
|
||||
log.Debug("response body:", string(response.Body()))
|
||||
body := new(map[string]interface{})
|
||||
_ = json.Unmarshal(response.Body(), &body)
|
||||
respMsg["error"] = body
|
||||
}
|
||||
|
||||
services.ResponseWithJson(w, response.StatusCode(), respMsg)
|
||||
}
|
||||
175
features/security/account.go
Normal file
175
features/security/account.go
Normal file
@@ -0,0 +1,175 @@
|
||||
package security
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"io"
|
||||
"net/http"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/oauth"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
)
|
||||
|
||||
var (
|
||||
UriOauthToken = config.UriPrefix + "/securityManagement/{apiVersion}/oauth/token"
|
||||
UriOauthHandshake = config.UriPrefix + "/securityManagement/{apiVersion}/oauth/handshake"
|
||||
)
|
||||
|
||||
func LoginFromOMC(w http.ResponseWriter, r *http.Request) {
|
||||
log.Info("LoginFromOMC processing... ")
|
||||
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) //io.LimitReader限制大小
|
||||
if err != nil {
|
||||
log.Error("Failed to ReadAll:", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
// check media type(content type) only support "application/json"
|
||||
if !services.IsVallidContentType(r, config.GetYamlConfig().OMC.CheckContentType) {
|
||||
log.Debug("Invalid Content-Type")
|
||||
services.ResponseUnsupportedMediaType415(w)
|
||||
return
|
||||
}
|
||||
|
||||
// // check extend uri, response 404
|
||||
// if !IsValidOAuthUri(r) {
|
||||
// log.Debug("Uri is invalid")
|
||||
// services.ResponseNotFound404UriNotExist(w, r)
|
||||
// return
|
||||
// }
|
||||
|
||||
// Error process ....
|
||||
// response 400-7
|
||||
if !json.Valid([]byte(body)) {
|
||||
log.Error("Invalid Json Format")
|
||||
services.ResponseBadRequest400InvalidJson(w)
|
||||
return
|
||||
}
|
||||
|
||||
var oAuthBody oauth.OAuthBody
|
||||
_ = json.Unmarshal(body, &oAuthBody) //转为json
|
||||
//log.Debug("body:", string(body), "oAuthBody:", oAuthBody)
|
||||
|
||||
defer r.Body.Close()
|
||||
// response 400-5
|
||||
if oauth.IsWrongOAuthInfo(oAuthBody) {
|
||||
log.Error("Wrong parameter value")
|
||||
services.ResponseBadRequest400WrongParamValue(w)
|
||||
return
|
||||
}
|
||||
/*
|
||||
if oauth.IsValidOAuthInfo(oAuthBody) {
|
||||
plist := config.GetPermissionFromConfig(oAuthBody.UserName, oAuthBody.GrantType)
|
||||
log.Debug("Permission list:", plist)
|
||||
|
||||
token := globalSession.NewSession(w, r, plist)
|
||||
services.ResponseStatusOK200Login(w, token)
|
||||
} else {
|
||||
// response 400-4
|
||||
log.Debug("Authentication failed, mismatch user or password")
|
||||
|
||||
services.ResponseBadRequest400IncorrectLogin(w)
|
||||
}
|
||||
*/
|
||||
validUser, user, _ := dborm.XormCheckLoginUser(oAuthBody.UserName,
|
||||
oAuthBody.Value, config.GetYamlConfig().Auth.Crypt)
|
||||
if !validUser {
|
||||
// response 400-4
|
||||
log.Error("Authentication failed, mismatch user or password")
|
||||
services.ResponseBadRequest400IncorrectLogin(w)
|
||||
return
|
||||
}
|
||||
|
||||
token := oauth.GenRandToken() // Generate new token to session ID
|
||||
sourceAddr := r.RemoteAddr
|
||||
affected, err := dborm.XormInsertSession(oAuthBody.UserName, sourceAddr, token,
|
||||
config.GetExpiresFromConfig(), config.GetYamlConfig().Auth.Session)
|
||||
if err != nil {
|
||||
log.Error("Failed to XormInsertSession:", err)
|
||||
if affected == -1 {
|
||||
services.ResponseForbidden403MultiLoginNotAllowed(w)
|
||||
} else {
|
||||
services.ResponseBadRequest400IncorrectLogin(w)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
services.ResponseStatusOK200Login(w, token, user)
|
||||
return
|
||||
}
|
||||
|
||||
func LogoutFromOMC(w http.ResponseWriter, r *http.Request) {
|
||||
log.Info("LogoutFromOMC processing... ")
|
||||
|
||||
// check media type(content type) only support "application/json"
|
||||
if services.IsVallidContentType(r, config.GetYamlConfig().OMC.CheckContentType) == false {
|
||||
log.Error("Invalid Content-Type")
|
||||
services.ResponseUnsupportedMediaType415(w)
|
||||
return
|
||||
}
|
||||
|
||||
// check extend uri, response 404
|
||||
if !services.IsValidOAuthUri(r) {
|
||||
log.Error("Uri is invalid")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
// error processing ...
|
||||
// 401-1 response
|
||||
token, ret := oauth.IsCarriedToken(r)
|
||||
if ret == false {
|
||||
log.Error("AccessToken is not carried")
|
||||
services.ResponseUnauthorized401AccessTokenNotCarried(w)
|
||||
return
|
||||
}
|
||||
|
||||
_, err := dborm.XormLogoutUpdateSession(token)
|
||||
if err != nil {
|
||||
log.Error("Uri is invalid")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
services.ResponseStatusOK200Null(w)
|
||||
return
|
||||
}
|
||||
|
||||
func HandshakeFromOMC(w http.ResponseWriter, r *http.Request) {
|
||||
log.Info("HandshakeFromOMC processing... ")
|
||||
|
||||
// check media type(content type) only support "application/json"
|
||||
if !services.IsVallidContentType(r, config.GetYamlConfig().OMC.CheckContentType) {
|
||||
log.Debug("Invalid Content-Type")
|
||||
services.ResponseUnsupportedMediaType415(w)
|
||||
return
|
||||
}
|
||||
|
||||
// check extend uri, response 404
|
||||
if !services.IsValidOAuthUri(r) {
|
||||
log.Error("Uri is invalid")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
// error processing ...
|
||||
// 401-1 response
|
||||
token, ret := oauth.IsCarriedToken(r)
|
||||
if ret == false {
|
||||
log.Error("AccessToken is not carried")
|
||||
services.ResponseUnauthorized401AccessTokenNotCarried(w)
|
||||
return
|
||||
}
|
||||
|
||||
_, err := dborm.XormUpdateSessionShakeTime(token)
|
||||
if err != nil {
|
||||
log.Error("Uri is invalid")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
services.ResponseStatusOK200Null(w)
|
||||
return
|
||||
}
|
||||
109
features/sm/backup.go
Normal file
109
features/sm/backup.go
Normal file
@@ -0,0 +1,109 @@
|
||||
package sm
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/restagent/config"
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
)
|
||||
|
||||
var dbConfig = config.GetYamlConfig().Database
|
||||
|
||||
func DatabaseWhoreBackup() {
|
||||
// MySQL数据库连接信息
|
||||
sqlStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=true&loc=Local",
|
||||
dbConfig.User, dbConfig.Password, dbConfig.Host, dbConfig.Port, dbConfig.Name)
|
||||
db, err := sql.Open("mysql", sqlStr)
|
||||
if err != nil {
|
||||
log.Error("Failed to connect to database:", err)
|
||||
return
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
// 备份SQL文件路径
|
||||
backupFile := dbConfig.Backup + "/" + "whore_backup_" + dbConfig.Name + ".sql"
|
||||
|
||||
// 执行mysqldump命令进行备份
|
||||
cmd := exec.Command("mysqldump", "-u", dbConfig.User, "-p"+dbConfig.Password, "-h", dbConfig.Host, dbConfig.Name)
|
||||
output, err := cmd.Output()
|
||||
if err != nil {
|
||||
log.Error("Failed to execute mysqldump command:", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 将备份结果写入SQL文件
|
||||
file, err := os.Create(backupFile)
|
||||
if err != nil {
|
||||
log.Error("Failed to create backup file:", err)
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
_, err = file.Write(output)
|
||||
if err != nil {
|
||||
log.Error("Failed to write backup file:", err)
|
||||
return
|
||||
}
|
||||
|
||||
log.Info("Backup completed successfully.")
|
||||
}
|
||||
|
||||
func DatabaseIncrementalBackup() {
|
||||
// MySQL数据库连接信息
|
||||
sqlStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=true&loc=Local",
|
||||
dbConfig.User, dbConfig.Password, dbConfig.Host, dbConfig.Port, dbConfig.Name)
|
||||
db, err := sql.Open("mysql", sqlStr)
|
||||
if err != nil {
|
||||
log.Error("Failed to connect to database:", err)
|
||||
return
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
// 备份SQL文件路径
|
||||
backupFile := dbConfig.Backup + "/" + "incremental_backup_" + dbConfig.Name + ".sql"
|
||||
|
||||
// 上次备份的时间点
|
||||
lastBackupTime := time.Date(2022, time.January, 1, 0, 0, 0, 0, time.Local)
|
||||
|
||||
// 构建增量备份SQL语句
|
||||
query := fmt.Sprintf("SELECT * FROM table WHERE modified_at > '%s'", lastBackupTime.Format("2006-01-02 15:04:05"))
|
||||
|
||||
// 执行查询
|
||||
rows, err := db.Query(query)
|
||||
if err != nil {
|
||||
log.Error("Failed to execute query:", err)
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
// 创建增量备份SQL文件
|
||||
file, err := os.Create(backupFile)
|
||||
if err != nil {
|
||||
log.Error("Failed to create backup file:", err)
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
// 将查询结果写入SQL文件
|
||||
for rows.Next() {
|
||||
var data string
|
||||
err := rows.Scan(&data)
|
||||
if err != nil {
|
||||
log.Error("Failed to scan row:", err)
|
||||
return
|
||||
}
|
||||
|
||||
_, err = file.WriteString(data + "\n")
|
||||
if err != nil {
|
||||
log.Error("Failed to write backup file:", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
log.Info("Incremental backup completed successfully.")
|
||||
}
|
||||
845
features/state/getstate.go
Normal file
845
features/state/getstate.go
Normal file
@@ -0,0 +1,845 @@
|
||||
package state
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/go-resty/resty/v2"
|
||||
"github.com/gorilla/mux"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
)
|
||||
|
||||
type CpuUsage struct {
|
||||
NfCpuUsage uint16 `json:"nfCpuUsage"`
|
||||
SysCpuUsage uint16 `json:"sysCpuUsage"`
|
||||
}
|
||||
|
||||
type MemUsage struct {
|
||||
TotalMem uint32 `json:"totalMem"`
|
||||
NfUsedMem uint32 `json:"nfUsedMem"`
|
||||
SysMemUsage uint16 `json:"sysMemUsage"`
|
||||
}
|
||||
|
||||
type PartitionInfo struct {
|
||||
Total uint32 `json:"total"` // MB
|
||||
Used uint32 `json:"used"` // MB
|
||||
}
|
||||
|
||||
type DiskSpace struct {
|
||||
PartitionNum uint8 `json:"partitionNum"`
|
||||
PartitionInfo []PartitionInfo `json:"partitionInfo"`
|
||||
}
|
||||
|
||||
type HardwareInfo struct {
|
||||
CPUs int `json:"cpus"`
|
||||
Memory int `json:"memory"`
|
||||
}
|
||||
|
||||
type SysState struct {
|
||||
HostName string `json:"hostName"` // linux命令: hostname
|
||||
OsInfo string `json:"osInfo"` // linux命令: uname -a
|
||||
DbInfo string `json:"dbInfo"` // 网元如果有db, 显示数据库名和版本信息, OMC: mysql --version
|
||||
Version string `json:"version"` // 软件版本信息: 16.1.1
|
||||
IpAddr []string `json:"ipAddr"` // 网管的ipv4和ipv6列表
|
||||
Port uint16 `json:"port"` // 用于网管的port
|
||||
Capability uint32 `json:"capability"`
|
||||
SerialNum string `json:"serialNum"`
|
||||
ExpiryDate string `json:"expiryDate"`
|
||||
HardwareInfo HardwareInfo `json:"hardwareInfo"`
|
||||
CpuUsage CpuUsage `json:"cpuUsage"`
|
||||
MemUsage MemUsage `json:"memUsage"`
|
||||
DiskSpace DiskSpace `json:"diskSpace"`
|
||||
//Timestamp string `json:"timestamp"`
|
||||
}
|
||||
|
||||
type SystemState struct {
|
||||
HostName string `json:"hostName"` // linux命令: hostname
|
||||
OsInfo string `json:"osInfo"` // linux命令: uname -a
|
||||
DbInfo string `json:"dbInfo"` // 网元如果有db, 显示数据库名和版本信息, OMC: mysql --version
|
||||
Version string `json:"version"` // 软件版本信息: 16.1.1
|
||||
IpAddr []string `json:"ipAddr"` // 网管的ipv4和ipv6列表
|
||||
Port uint16 `json:"port"` // 用于网管的port
|
||||
Capability uint32 `json:"capability"`
|
||||
SerialNum string `json:"serialNum"`
|
||||
ExpiryDate string `json:"expiryDate"`
|
||||
HardwareInfo struct {
|
||||
CPUs int `json:"cpus"` // 主机(裸机/虚拟机)的cpu个数
|
||||
Memory int `json:"memory"` // 主机(裸机/虚拟机): 配置的内存
|
||||
} `json:"hardwareInfo"`
|
||||
CpuUsage struct {
|
||||
NfCpuUsage uint16 `json:"nfCpuUsage"`
|
||||
SysCpuUsage uint16 `json:"sysCpuUsage"`
|
||||
} `json:"cpuUsage"`
|
||||
MemUsage struct {
|
||||
TotalMem uint32 `json:"totalMem"`
|
||||
NfUsedMem uint32 `json:"nfUsedMem"`
|
||||
SysMemUsage uint16 `json:"sysMemUsage"`
|
||||
} `json:"memUsage"`
|
||||
DiskSpace struct {
|
||||
PartitionNum uint8 `json:"partitionNum"`
|
||||
PartitionInfo []struct {
|
||||
Total uint32 `json:"total"` // MB
|
||||
Used uint32 `json:"used"` // MB
|
||||
} `json:"partitionInfo"`
|
||||
} `json:"diskSpace"`
|
||||
//Timestamp string `json:"timestamp"`
|
||||
}
|
||||
|
||||
type SystemInfo struct {
|
||||
NeType string `json:"neType" map:"neType, omitempty"`
|
||||
NeId string `json:"neId" map:"neId, omitempty"`
|
||||
HostName string `json:"hostName" map:"hostName, omitempty"` // linux命令: hostname
|
||||
OsInfo string `json:"osInfo" map:"osInfo, omitempty"` // linux命令: uname -a
|
||||
DbInfo string `json:"dbInfo" map:"dbInfo, omitempty"` // 网元如果有db, 显示数据库名和版本信息, OMC: mysql --version
|
||||
Version string `json:"version" map:"version, omitempty"` // 软件版本信息: 16.1.1
|
||||
IpAddr string `json:"ipAddr" map:"ipAddr, omitempty"` // 网管的ipv4和ipv6列表
|
||||
Port uint16 `json:"port" map:"port, omitempty"` // 用于网管的port
|
||||
CPUs int `json:"cpus" map:"cpus, omitempty"`
|
||||
TotalMem int `json:"totalMem" map:"totalMem, omitempty"`
|
||||
PvFlag string `json:"pvFlag" map:"pvFlag, omitempty"`
|
||||
Status string `json:"status" map:"status, omitempty"`
|
||||
}
|
||||
|
||||
type LicenseInfo struct {
|
||||
NeType string `json:"neType"`
|
||||
NeId string `json:"neId"`
|
||||
SerialNum string `json:"serialNum"`
|
||||
Capability uint32 `json:"capability"`
|
||||
CapUsed uint32 `json:"capUsed"`
|
||||
FeatureEnabled []string `json:"featureEnabled"`
|
||||
ExpiryDate string `json:"expiryDate"`
|
||||
}
|
||||
|
||||
type Response struct {
|
||||
Data interface{} `json:"data"`
|
||||
}
|
||||
|
||||
var (
|
||||
UriSysState = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/systemState"
|
||||
UriSysState2 = config.UriPrefix + "/systemManagement/{apiVersion}/systemState/{elementTypeValue}"
|
||||
UriSysInfoAll = config.UriPrefix + "/systemManagement/{apiVersion}/sysInfo"
|
||||
UriSysInfoOne = config.UriPrefix + "/systemManagement/{apiVersion}/sysInfo/{neType}/{neId}"
|
||||
UriLicenseInfoAll = config.UriPrefix + "/systemManagement/{apiVersion}/licenseInfo"
|
||||
UriLicenseInfoOne = config.UriPrefix + "/systemManagement/{apiVersion}/licenseInfo/{neType}/{neId}"
|
||||
)
|
||||
|
||||
var client = resty.New()
|
||||
|
||||
func init() {
|
||||
/*
|
||||
client.
|
||||
SetTimeout(10 * time.Second).
|
||||
SetRetryCount(1).
|
||||
SetRetryWaitTime(1 * time.Second).
|
||||
SetRetryMaxWaitTime(2 * time.Second).
|
||||
SetRetryAfter(func(client *resty.Client, resp *resty.Response) (time.Duration, error) {
|
||||
return 0, errors.New("quota exceeded")
|
||||
})
|
||||
*/
|
||||
client.SetTimeout(3 * time.Second)
|
||||
}
|
||||
|
||||
func NeStatusEnumToStr(intStatus int) string {
|
||||
switch intStatus {
|
||||
case 0:
|
||||
return "active"
|
||||
case 1:
|
||||
return "offline"
|
||||
case 2:
|
||||
return "standby"
|
||||
case 3:
|
||||
return "maintain"
|
||||
default:
|
||||
return "unkown"
|
||||
}
|
||||
}
|
||||
|
||||
// Get system state from NF/NFs
|
||||
func GetOneLicenseInfoFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("GetOneLicenseInfoFromNF processing... ")
|
||||
|
||||
data := make([]map[string]interface{}, 0)
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["neType"]
|
||||
neId := vars["neId"]
|
||||
if neType == "" || neId == "" {
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
token, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
log.Debug("AccessToken:", token)
|
||||
|
||||
neInfo, err := dborm.XormGetNeInfo(neType, neId)
|
||||
if err != nil {
|
||||
log.Error("Failed to XormGetNeInfo:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
} else if neInfo == nil {
|
||||
err := global.ErrCMNotFoundTargetNE
|
||||
log.Error(global.ErrCMNotFoundTargetNE)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
log.Trace("neInfo:", neInfo)
|
||||
|
||||
//systemState := make(map[string]interface{})
|
||||
systemState := &SysState{}
|
||||
result := make(map[string]interface{})
|
||||
//sysInfo := &SystemInfo{}
|
||||
omcNeTypeLower := "omc"
|
||||
if config.GetYamlConfig().OMC.NeType != "" {
|
||||
omcNeTypeLower = strings.ToLower(config.GetYamlConfig().OMC.NeType)
|
||||
}
|
||||
if neType != omcNeTypeLower {
|
||||
log.Debugf("r.RemoteAddr: %s omcNeTypeLower: %s", r.RemoteAddr, omcNeTypeLower)
|
||||
var requestURI2NF string
|
||||
if config.GetYamlConfig().OMC.TestMode == true && strings.ToLower(neType) != "udm" {
|
||||
var udmNEs []dborm.NeInfo
|
||||
err := dborm.XormGetNeInfoByNeType("UDM", &udmNEs)
|
||||
if err != nil {
|
||||
log.Error("Get system state from NF is failed:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
if len(udmNEs) > 0 {
|
||||
udmNe := udmNEs[0]
|
||||
hostUri := fmt.Sprintf("http://%s:%v", udmNe.Ip, udmNe.Port)
|
||||
requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
hostUri, strings.ToLower(udmNe.NeType))
|
||||
}
|
||||
} else {
|
||||
hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port)
|
||||
requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
hostUri, strings.ToLower(neInfo.NeType))
|
||||
}
|
||||
log.Debug("requestURI2NF:", requestURI2NF)
|
||||
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"accessToken": token}).
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Get(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Get system state from NF is failed:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
} else {
|
||||
log.Trace("resp.Body():", string(resp.Body()))
|
||||
_ = json.Unmarshal(resp.Body(), &systemState)
|
||||
|
||||
log.Trace("systemState:", systemState)
|
||||
capUsed := config.TDatas[neInfo.NeType].CapUsed
|
||||
log.Tracef("neInfo.NeType:%s capUsed: %v", capUsed)
|
||||
licenseInfo := &LicenseInfo{
|
||||
NeType: neInfo.NeType,
|
||||
NeId: neInfo.NeId,
|
||||
SerialNum: systemState.SerialNum,
|
||||
Capability: systemState.Capability,
|
||||
CapUsed: capUsed,
|
||||
FeatureEnabled: config.TDatas[neInfo.NeType].FeatureEnabled,
|
||||
ExpiryDate: systemState.ExpiryDate,
|
||||
}
|
||||
//neItem := strings.ToUpper(neType) + "/" + neId
|
||||
result, err = global.ToMap(*licenseInfo, "json")
|
||||
}
|
||||
} else {
|
||||
systemState := GetEMSState(neInfo.Ip)
|
||||
licenseInfo := &LicenseInfo{
|
||||
NeType: neInfo.NeType,
|
||||
NeId: neInfo.NeId,
|
||||
SerialNum: systemState.SerialNum,
|
||||
Capability: systemState.Capability,
|
||||
CapUsed: config.TDatas[neInfo.NeType].CapUsed,
|
||||
FeatureEnabled: config.TDatas[neInfo.NeType].FeatureEnabled,
|
||||
ExpiryDate: systemState.ExpiryDate,
|
||||
}
|
||||
result, err = global.ToMap(*licenseInfo, "json")
|
||||
// neItem := strings.ToUpper(neType) + "/" + neId
|
||||
// result[neItem] = sysInfo
|
||||
}
|
||||
|
||||
data = append(data, result)
|
||||
log.Trace("data:", data)
|
||||
|
||||
var response Response
|
||||
response.Data = data
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
}
|
||||
|
||||
// Get system state from NF/NFs
|
||||
func GetAllLicenseInfoFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("GetAllLicenseInfoFromNF processing... ")
|
||||
|
||||
data := make([]map[string]interface{}, 0)
|
||||
|
||||
token, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
log.Debug("AccessToken:", token)
|
||||
|
||||
var neList []dborm.NeInfo
|
||||
_, err = dborm.XormGetAllNeInfo(&neList)
|
||||
omcNeTypeLower := "omc"
|
||||
if config.GetYamlConfig().OMC.NeType != "" {
|
||||
omcNeTypeLower = strings.ToLower(config.GetYamlConfig().OMC.NeType)
|
||||
}
|
||||
|
||||
for _, ne := range neList {
|
||||
result := make(map[string]interface{})
|
||||
log.Debugf("r.RemoteAddr: %s omcNeTypeLower: %s", r.RemoteAddr, omcNeTypeLower)
|
||||
log.Debug("ne: ", ne)
|
||||
//if strings.ToLower(ne.NeType) != omcNeTypeLower || !strings.Contains(r.RemoteAddr, ne.Ip) {
|
||||
if strings.ToLower(ne.NeType) != omcNeTypeLower {
|
||||
// hostUri := fmt.Sprintf("http://%s:%v", ne.Ip, ne.Port)
|
||||
// requestURI2NF := fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
// hostUri, strings.ToLower(ne.NeType))
|
||||
var requestURI2NF string
|
||||
if config.GetYamlConfig().OMC.TestMode == true && strings.ToLower(ne.NeType) != "udm" {
|
||||
var udmNEs []dborm.NeInfo
|
||||
err := dborm.XormGetNeInfoByNeType("UDM", &udmNEs)
|
||||
if err != nil {
|
||||
log.Error("Get system state from NF is failed:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
if len(udmNEs) > 0 {
|
||||
udmNe := udmNEs[0]
|
||||
hostUri := fmt.Sprintf("http://%s:%v", udmNe.Ip, udmNe.Port)
|
||||
requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
hostUri, strings.ToLower(udmNe.NeType))
|
||||
}
|
||||
} else {
|
||||
hostUri := fmt.Sprintf("http://%s:%v", ne.Ip, ne.Port)
|
||||
requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
hostUri, strings.ToLower(ne.NeType))
|
||||
}
|
||||
log.Debug("requestURI2NF:", requestURI2NF)
|
||||
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"accessToken": token}).
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Get(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Get system state from NF is failed:", err)
|
||||
// errorMessage := services.ErrorMessage{
|
||||
// ErrorCode: "1", ErrorInfo: "Internal server error, NF connnect refused",
|
||||
// }
|
||||
// //result["error"] = errorMessage
|
||||
continue
|
||||
} else {
|
||||
systemState := &SysState{}
|
||||
_ = json.Unmarshal(resp.Body(), &systemState)
|
||||
licenseInfo := &LicenseInfo{
|
||||
NeType: ne.NeType,
|
||||
NeId: ne.NeId,
|
||||
SerialNum: systemState.SerialNum,
|
||||
Capability: systemState.Capability,
|
||||
CapUsed: config.TDatas[ne.NeType].CapUsed,
|
||||
FeatureEnabled: config.TDatas[ne.NeType].FeatureEnabled,
|
||||
ExpiryDate: systemState.ExpiryDate,
|
||||
}
|
||||
result, err = global.ToMap(*licenseInfo, "json")
|
||||
// neItem := strings.ToUpper(ne.NeType) + "/" + ne.NeId
|
||||
// result[neItem] = sysInfo
|
||||
}
|
||||
} else {
|
||||
systemState := GetEMSState(ne.Ip)
|
||||
licenseInfo := &LicenseInfo{
|
||||
NeType: ne.NeType,
|
||||
NeId: ne.NeId,
|
||||
SerialNum: systemState.SerialNum,
|
||||
Capability: systemState.Capability,
|
||||
CapUsed: config.TDatas[ne.NeType].CapUsed,
|
||||
FeatureEnabled: config.TDatas[ne.NeType].FeatureEnabled,
|
||||
ExpiryDate: systemState.ExpiryDate,
|
||||
}
|
||||
result, err = global.ToMap(*licenseInfo, "json")
|
||||
// neItem := strings.ToUpper(ne.NeType) + "/" + ne.NeId
|
||||
// result[neItem] = sysInfo
|
||||
}
|
||||
|
||||
data = append(data, result)
|
||||
log.Trace("data:", data)
|
||||
}
|
||||
|
||||
var response Response
|
||||
response.Data = data
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
}
|
||||
|
||||
// Get system state from NF/NFs
|
||||
func GetOneSysinfoFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("GetOneSysinfoFromNF processing... ")
|
||||
|
||||
data := make([]map[string]interface{}, 0)
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["neType"]
|
||||
neId := vars["neId"]
|
||||
if neType == "" || neId == "" {
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
token, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
log.Debug("AccessToken:", token)
|
||||
|
||||
neInfo, err := dborm.XormGetNeInfo(neType, neId)
|
||||
if err != nil {
|
||||
log.Error("Failed to XormGetNeInfo:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
} else if neInfo == nil {
|
||||
err := global.ErrCMNotFoundTargetNE
|
||||
log.Error(global.ErrCMNotFoundTargetNE)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
log.Trace("neInfo:", neInfo)
|
||||
|
||||
//systemState := make(map[string]interface{})
|
||||
systemState := &SysState{}
|
||||
result := make(map[string]interface{})
|
||||
//sysInfo := &SystemInfo{}
|
||||
omcNeTypeLower := "omc"
|
||||
if config.GetYamlConfig().OMC.NeType != "" {
|
||||
omcNeTypeLower = strings.ToLower(config.GetYamlConfig().OMC.NeType)
|
||||
}
|
||||
if neType != omcNeTypeLower {
|
||||
log.Debugf("r.RemoteAddr: %s omcNeTypeLower: %s", r.RemoteAddr, omcNeTypeLower)
|
||||
var requestURI2NF string
|
||||
if config.GetYamlConfig().OMC.TestMode == true && strings.ToLower(neType) != "udm" {
|
||||
var udmNEs []dborm.NeInfo
|
||||
err := dborm.XormGetNeInfoByNeType("UDM", &udmNEs)
|
||||
if err != nil {
|
||||
log.Error("Get system state from NF is failed:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
if len(udmNEs) > 0 {
|
||||
udmNe := udmNEs[0]
|
||||
hostUri := fmt.Sprintf("http://%s:%v", udmNe.Ip, udmNe.Port)
|
||||
requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
hostUri, strings.ToLower(udmNe.NeType))
|
||||
}
|
||||
} else {
|
||||
hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port)
|
||||
requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
hostUri, strings.ToLower(neInfo.NeType))
|
||||
}
|
||||
log.Debug("requestURI2NF:", requestURI2NF)
|
||||
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"accessToken": token}).
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Get(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Get system state from NF is failed:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
} else {
|
||||
log.Trace("resp.Body():", string(resp.Body()))
|
||||
_ = json.Unmarshal(resp.Body(), &systemState)
|
||||
|
||||
log.Trace("systemState:", systemState)
|
||||
hostName := "5gc"
|
||||
if systemState.HostName != "" {
|
||||
hostName = systemState.HostName
|
||||
}
|
||||
osInfo := "Linux 5gc 4.15.0-29-generic #31-Ubuntu SMP Tue Jul 17 15:39:52 UTC 2018 x86_64 GNU/Linux"
|
||||
if systemState.OsInfo != "" {
|
||||
osInfo = systemState.OsInfo
|
||||
}
|
||||
dbInfo := "adb v1.0.1"
|
||||
if systemState.OsInfo != "" {
|
||||
dbInfo = systemState.DbInfo
|
||||
}
|
||||
port, _ := strconv.Atoi(neInfo.Port)
|
||||
cpus := 4
|
||||
if systemState.HardwareInfo.CPUs != 0 {
|
||||
cpus = systemState.HardwareInfo.CPUs
|
||||
}
|
||||
totalMem := 34029125632
|
||||
if systemState.HardwareInfo.Memory != 0 {
|
||||
totalMem = systemState.HardwareInfo.Memory
|
||||
}
|
||||
sysInfo := &SystemInfo{
|
||||
NeType: neInfo.NeType,
|
||||
NeId: neInfo.NeId,
|
||||
HostName: hostName,
|
||||
OsInfo: osInfo,
|
||||
DbInfo: dbInfo,
|
||||
Version: systemState.Version,
|
||||
IpAddr: neInfo.Ip,
|
||||
Port: uint16(port),
|
||||
CPUs: cpus,
|
||||
TotalMem: totalMem,
|
||||
PvFlag: neInfo.PvFlag,
|
||||
Status: NeStatusEnumToStr(neInfo.Status),
|
||||
}
|
||||
//neItem := strings.ToUpper(neType) + "/" + neId
|
||||
result, err = global.ToMap(*sysInfo, "json")
|
||||
}
|
||||
} else {
|
||||
systemState := GetEMSState(neInfo.Ip)
|
||||
sysInfo := &SystemInfo{
|
||||
NeType: neInfo.NeType,
|
||||
NeId: neInfo.NeId,
|
||||
HostName: systemState.HostName,
|
||||
OsInfo: systemState.OsInfo,
|
||||
DbInfo: systemState.DbInfo,
|
||||
Version: systemState.Version,
|
||||
IpAddr: neInfo.Ip,
|
||||
Port: systemState.Port,
|
||||
CPUs: systemState.HardwareInfo.CPUs,
|
||||
TotalMem: systemState.HardwareInfo.Memory,
|
||||
PvFlag: neInfo.PvFlag,
|
||||
Status: NeStatusEnumToStr(neInfo.Status),
|
||||
}
|
||||
result, err = global.ToMap(*sysInfo, "json")
|
||||
// neItem := strings.ToUpper(neType) + "/" + neId
|
||||
// result[neItem] = sysInfo
|
||||
}
|
||||
|
||||
data = append(data, result)
|
||||
log.Trace("data:", data)
|
||||
|
||||
var response Response
|
||||
response.Data = data
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
}
|
||||
|
||||
// Get system state from NF/NFs
|
||||
func GetAllSysinfoFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("GetAllSysinfoFromNF processing... ")
|
||||
|
||||
data := make([]map[string]interface{}, 0)
|
||||
|
||||
token, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
log.Debug("AccessToken:", token)
|
||||
|
||||
var neList []dborm.NeInfo
|
||||
_, err = dborm.XormGetAllNeInfo(&neList)
|
||||
omcNeTypeLower := "omc"
|
||||
if config.GetYamlConfig().OMC.NeType != "" {
|
||||
omcNeTypeLower = strings.ToLower(config.GetYamlConfig().OMC.NeType)
|
||||
}
|
||||
|
||||
for _, ne := range neList {
|
||||
result := make(map[string]interface{})
|
||||
log.Debugf("r.RemoteAddr: %s omcNeTypeLower: %s", r.RemoteAddr, omcNeTypeLower)
|
||||
log.Debug("ne: ", ne)
|
||||
//if strings.ToLower(ne.NeType) != omcNeTypeLower || !strings.Contains(r.RemoteAddr, ne.Ip) {
|
||||
if strings.ToLower(ne.NeType) != omcNeTypeLower {
|
||||
// hostUri := fmt.Sprintf("http://%s:%v", ne.Ip, ne.Port)
|
||||
// requestURI2NF := fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
// hostUri, strings.ToLower(ne.NeType))
|
||||
var requestURI2NF string
|
||||
if config.GetYamlConfig().OMC.TestMode == true && strings.ToLower(ne.NeType) != "udm" {
|
||||
var udmNEs []dborm.NeInfo
|
||||
err := dborm.XormGetNeInfoByNeType("UDM", &udmNEs)
|
||||
if err != nil {
|
||||
log.Error("Get system state from NF is failed:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
if len(udmNEs) > 0 {
|
||||
udmNe := udmNEs[0]
|
||||
hostUri := fmt.Sprintf("http://%s:%v", udmNe.Ip, udmNe.Port)
|
||||
requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
hostUri, strings.ToLower(udmNe.NeType))
|
||||
}
|
||||
} else {
|
||||
hostUri := fmt.Sprintf("http://%s:%v", ne.Ip, ne.Port)
|
||||
requestURI2NF = fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
hostUri, strings.ToLower(ne.NeType))
|
||||
}
|
||||
log.Debug("requestURI2NF:", requestURI2NF)
|
||||
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"accessToken": token}).
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Get(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Get system state from NF is failed:", err)
|
||||
// errorMessage := services.ErrorMessage{
|
||||
// ErrorCode: "1", ErrorInfo: "Internal server error, NF connnect refused",
|
||||
// }
|
||||
// //result["error"] = errorMessage
|
||||
continue
|
||||
} else {
|
||||
systemState := &SysState{}
|
||||
_ = json.Unmarshal(resp.Body(), &systemState)
|
||||
hostName := "5gc"
|
||||
if systemState.HostName != "" {
|
||||
hostName = systemState.HostName
|
||||
}
|
||||
osInfo := "Linux 5gc 4.15.0-29-generic #31-Ubuntu SMP Tue Jul 17 15:39:52 UTC 2018 x86_64 GNU/Linux"
|
||||
if systemState.OsInfo != "" {
|
||||
osInfo = systemState.OsInfo
|
||||
}
|
||||
dbInfo := "adb v1.0.1"
|
||||
if systemState.OsInfo != "" {
|
||||
dbInfo = systemState.DbInfo
|
||||
}
|
||||
port, _ := strconv.Atoi(ne.Port)
|
||||
cpus := 4
|
||||
if systemState.HardwareInfo.CPUs != 0 {
|
||||
cpus = systemState.HardwareInfo.CPUs
|
||||
}
|
||||
totalMem := 34029125632
|
||||
if systemState.HardwareInfo.Memory != 0 {
|
||||
totalMem = systemState.HardwareInfo.Memory
|
||||
}
|
||||
sysInfo := &SystemInfo{
|
||||
NeType: ne.NeType,
|
||||
NeId: ne.NeId,
|
||||
HostName: hostName,
|
||||
OsInfo: osInfo,
|
||||
DbInfo: dbInfo,
|
||||
Version: systemState.Version,
|
||||
IpAddr: ne.Ip,
|
||||
Port: uint16(port),
|
||||
CPUs: cpus,
|
||||
TotalMem: totalMem,
|
||||
PvFlag: ne.PvFlag,
|
||||
Status: NeStatusEnumToStr(ne.Status),
|
||||
}
|
||||
// neItem := strings.ToUpper(ne.NeType) + "/" + ne.NeId
|
||||
// result[neItem] = sysInfo
|
||||
result, err = global.ToMap(*sysInfo, "json")
|
||||
}
|
||||
} else {
|
||||
port, _ := strconv.Atoi(ne.Port)
|
||||
systemState := GetEMSState(ne.Ip)
|
||||
sysInfo := &SystemInfo{
|
||||
NeType: ne.NeType,
|
||||
NeId: ne.NeId,
|
||||
HostName: systemState.HostName,
|
||||
OsInfo: systemState.OsInfo,
|
||||
DbInfo: systemState.DbInfo,
|
||||
Version: systemState.Version,
|
||||
IpAddr: ne.Ip,
|
||||
Port: (uint16(port)),
|
||||
CPUs: systemState.HardwareInfo.CPUs,
|
||||
TotalMem: systemState.HardwareInfo.Memory,
|
||||
PvFlag: ne.PvFlag,
|
||||
Status: NeStatusEnumToStr(ne.Status),
|
||||
}
|
||||
// neItem := strings.ToUpper(ne.NeType) + "/" + ne.NeId
|
||||
// result[neItem] = sysInfo
|
||||
result, err = global.ToMap(*sysInfo, "json")
|
||||
}
|
||||
|
||||
data = append(data, result)
|
||||
log.Trace("data:", data)
|
||||
}
|
||||
|
||||
var response Response
|
||||
response.Data = data
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
}
|
||||
|
||||
// Get system state from NF/NFs
|
||||
func GetStateFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("GetStateFromNF processing... ")
|
||||
|
||||
data := make([]map[string]interface{}, 0)
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["elementTypeValue"]
|
||||
|
||||
var neList []dborm.NeInfo
|
||||
if neType == "" {
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
token, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
log.Debug("AccessToken:", token)
|
||||
|
||||
switch strings.ToLower(neType) {
|
||||
case "all":
|
||||
// query all NFs
|
||||
// create rest client
|
||||
restHostPort := fmt.Sprintf("http://127.0.0.1:%d", config.GetYamlConfig().Rest[0].Port)
|
||||
getNeInfoPattern := fmt.Sprintf(config.UriPrefix+"/databaseManagement/v1/elementType/%s/objectType/ne_info",
|
||||
config.GetYamlConfig().Database.Name)
|
||||
getNeInfoURI := restHostPort + getNeInfoPattern + "?WHERE=status='0'"
|
||||
log.Debug("getNeInfoPattern:", getNeInfoPattern)
|
||||
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"AccessToken": token}).
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Get(getNeInfoURI)
|
||||
if err != nil {
|
||||
log.Error("Get ne_info from DB is failed:", err)
|
||||
services.ResponseInternalServerError500NFConnectRefused(w)
|
||||
return
|
||||
}
|
||||
|
||||
neList, _ = dborm.XormParseResult(resp.Body())
|
||||
default:
|
||||
restHostPort := fmt.Sprintf("http://127.0.0.1:%d", config.GetYamlConfig().Rest[0].Port)
|
||||
getNeInfoPattern := fmt.Sprintf(config.UriPrefix+"/databaseManagement/v1/elementType/%s/objectType/ne_info",
|
||||
config.GetYamlConfig().Database.Name)
|
||||
getNeInfoURI := restHostPort + getNeInfoPattern
|
||||
neId := services.GetUriParamString(r, "ne_id", ",", true, false)
|
||||
if neId == "" {
|
||||
getNeInfoURI = getNeInfoURI + fmt.Sprintf("?WHERE=status='0'+and+ne_type='%s'", neType)
|
||||
} else {
|
||||
getNeInfoURI = getNeInfoURI + fmt.Sprintf("?WHERE=status='0'+and+ne_type='%v'+and+ne_id+in+%v", neType, neId)
|
||||
}
|
||||
log.Debug("getNeInfoURI:", getNeInfoURI)
|
||||
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"accessToken": token}).
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Get(getNeInfoURI)
|
||||
if err != nil {
|
||||
log.Error("Get ne_info from DB is failed:", err)
|
||||
services.ResponseInternalServerError500NFConnectRefused(w)
|
||||
return
|
||||
}
|
||||
|
||||
neList, _ = dborm.XormParseResult(resp.Body())
|
||||
}
|
||||
omcNeTypeLower := "omc"
|
||||
if config.GetYamlConfig().OMC.NeType != "" {
|
||||
omcNeTypeLower = strings.ToLower(config.GetYamlConfig().OMC.NeType)
|
||||
}
|
||||
for _, ne := range neList {
|
||||
result := make(map[string]interface{})
|
||||
log.Debugf("r.RemoteAddr: %s omcNeTypeLower: %s", r.RemoteAddr, omcNeTypeLower)
|
||||
log.Debug("ne: ", ne)
|
||||
//if strings.ToLower(ne.NeType) != omcNeTypeLower || !strings.Contains(r.RemoteAddr, ne.Ip) {
|
||||
if strings.ToLower(ne.NeType) != omcNeTypeLower {
|
||||
hostUri := fmt.Sprintf("http://%s:%v", ne.Ip, ne.Port)
|
||||
requestURI2NF := fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
hostUri, ne.NeType)
|
||||
log.Debug("requestURI2NF:", requestURI2NF)
|
||||
|
||||
result["ipAddress"] = ne.Ip
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"accessToken": token}).
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Get(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Get system state from NF is failed:", err)
|
||||
errorMessage := services.ErrorMessage{
|
||||
ErrorCode: "1", ErrorInfo: "Internal server error, NF connnect refused",
|
||||
}
|
||||
result["error"] = errorMessage
|
||||
} else {
|
||||
systemState := make(map[string]interface{})
|
||||
_ = json.Unmarshal(resp.Body(), &systemState)
|
||||
result["systemState"] = systemState
|
||||
}
|
||||
} else {
|
||||
result["ipAddress"] = ne.Ip
|
||||
emsState := GetEMSState(ne.Ip)
|
||||
result["systemState"] = emsState
|
||||
}
|
||||
neItem := strings.ToUpper(ne.NeType) + "/" + ne.NeId
|
||||
mapState := make(map[string]interface{})
|
||||
mapState[neItem] = result
|
||||
|
||||
data = append(data, mapState)
|
||||
log.Trace("data:", data)
|
||||
}
|
||||
|
||||
var response Response
|
||||
response.Data = data
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
}
|
||||
|
||||
func GetEMSState(ip string) *SysState {
|
||||
log.Debug("GetEMSState processing... ")
|
||||
|
||||
sysInfo := new(SysInfo)
|
||||
err := GetSysInfo(sysInfo)
|
||||
if err != nil {
|
||||
log.Error("Failed to GetSysInfo:", err)
|
||||
return nil
|
||||
}
|
||||
|
||||
cpuUsage := &CpuUsage{
|
||||
NfCpuUsage: sysInfo.MyCpuPercent,
|
||||
SysCpuUsage: sysInfo.SysCpuPercent,
|
||||
}
|
||||
|
||||
memUsage := &MemUsage{
|
||||
TotalMem: sysInfo.SysTotalRam,
|
||||
NfUsedMem: sysInfo.MyUsedRam,
|
||||
SysMemUsage: sysInfo.SysRamUsedPercent,
|
||||
}
|
||||
|
||||
diskSpace := &DiskSpace{
|
||||
PartitionNum: sysInfo.PartitionNum,
|
||||
PartitionInfo: sysInfo.PartitionInfo,
|
||||
}
|
||||
|
||||
version := "16.1.1"
|
||||
if global.Version != "" {
|
||||
version = global.Version
|
||||
}
|
||||
hostName, _ := os.Hostname()
|
||||
emsState := &SysState{
|
||||
HostName: hostName,
|
||||
OsInfo: getUnameStr(),
|
||||
DbInfo: "mysql Ver 15.1 Distrib 10.3.35-MariaDB, for Linux (aarch64) using readline 5.1",
|
||||
IpAddr: []string{ip},
|
||||
Port: 3030,
|
||||
Version: version,
|
||||
Capability: 9999999,
|
||||
SerialNum: config.GetYamlConfig().OMC.Sn,
|
||||
ExpiryDate: "-",
|
||||
HardwareInfo: HardwareInfo{CPUs: getCpuNumber(), Memory: getTotalMemory()},
|
||||
CpuUsage: *cpuUsage,
|
||||
MemUsage: *memUsage,
|
||||
DiskSpace: *diskSpace,
|
||||
}
|
||||
|
||||
//getSystemInfo()
|
||||
return emsState
|
||||
}
|
||||
243
features/state/state_linux.go
Normal file
243
features/state/state_linux.go
Normal file
@@ -0,0 +1,243 @@
|
||||
//go:build linux
|
||||
// +build linux
|
||||
|
||||
package state
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"os"
|
||||
"runtime"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/log"
|
||||
"github.com/shirou/gopsutil/cpu"
|
||||
"github.com/shirou/gopsutil/disk"
|
||||
"github.com/shirou/gopsutil/mem"
|
||||
"github.com/shirou/gopsutil/process"
|
||||
)
|
||||
|
||||
type SysInfo struct {
|
||||
SysCpuPercent uint16 // x%
|
||||
MyCpuPercent uint16 // x%, CPU percent of current proccess
|
||||
|
||||
SysTotalRam uint32 // KB
|
||||
MyUsedRam uint32 // RAM usage of current proccess, KB
|
||||
SysRamUsedPercent uint16 // x%
|
||||
|
||||
PartitionNum byte
|
||||
PartitionInfo []PartitionInfo // usage of each partition
|
||||
}
|
||||
|
||||
const MAX_PARTITION_NUM byte = 32
|
||||
|
||||
func GetSysStat() ([]byte, int) {
|
||||
// Get sys info
|
||||
var sysInfo SysInfo
|
||||
err := GetSysInfo(&sysInfo)
|
||||
if err != nil {
|
||||
return nil, 0
|
||||
}
|
||||
|
||||
//log.Tracef("current sys info: %v", sysInfo)
|
||||
|
||||
// build ems buffer
|
||||
var data []byte = make([]byte, 1024)
|
||||
var len int
|
||||
var i byte
|
||||
binary.BigEndian.PutUint16(data[0:], sysInfo.MyCpuPercent) //x% * 100
|
||||
binary.BigEndian.PutUint16(data[2:], sysInfo.SysCpuPercent) //x% * 100
|
||||
binary.BigEndian.PutUint32(data[4:], sysInfo.SysTotalRam) // KB
|
||||
binary.BigEndian.PutUint32(data[8:], sysInfo.MyUsedRam) // KB
|
||||
binary.BigEndian.PutUint16(data[12:], sysInfo.SysRamUsedPercent) //x% * 100
|
||||
data[14] = sysInfo.PartitionNum
|
||||
for i = 0; i < sysInfo.PartitionNum; i++ {
|
||||
binary.BigEndian.PutUint32(data[15+8*(i):], sysInfo.PartitionInfo[i].Total) // MB
|
||||
binary.BigEndian.PutUint32(data[15+8*(i)+4:], sysInfo.PartitionInfo[i].Used) // MB
|
||||
}
|
||||
len = int(15 + 8*sysInfo.PartitionNum)
|
||||
|
||||
//log.Tracef("current sys stat buf: %v, len: %d", data, len)
|
||||
|
||||
return data, len
|
||||
}
|
||||
|
||||
var pProc *process.Process = nil
|
||||
|
||||
func GetSYsCpuPercent() float64 {
|
||||
totalPercent, err := cpu.Percent(0, false) //(2*time.Second, false)
|
||||
if err != nil {
|
||||
return 0.0
|
||||
} else {
|
||||
return totalPercent[0]
|
||||
}
|
||||
}
|
||||
|
||||
func GetSysInfo(sysInfo *SysInfo) error {
|
||||
// sys cpu percent
|
||||
totalPercent, err := cpu.Percent(0, false) //(2*time.Second, false)
|
||||
if err != nil {
|
||||
sysInfo.SysCpuPercent = 0
|
||||
} else {
|
||||
sysInfo.SysCpuPercent = uint16(totalPercent[0] * 100)
|
||||
}
|
||||
|
||||
if pProc == nil {
|
||||
checkPid := os.Getpid()
|
||||
pProc, err = process.NewProcess(int32(checkPid))
|
||||
if err != nil {
|
||||
log.Tracef("get process info error %v", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// self cpu percent
|
||||
percent, err := pProc.Percent(0) //(2*time.Second)
|
||||
if err != nil {
|
||||
log.Tracef("get process cpu percent error %v", err)
|
||||
sysInfo.MyCpuPercent = 0
|
||||
} else {
|
||||
sysInfo.MyCpuPercent = uint16(percent * 100)
|
||||
}
|
||||
|
||||
// self RAM(KB)
|
||||
myRam, err := pProc.MemoryInfo()
|
||||
if err != nil {
|
||||
log.Tracef("get self memory info error %v", err)
|
||||
sysInfo.MyUsedRam = 0
|
||||
} else {
|
||||
sysInfo.MyUsedRam = uint32(myRam.RSS / 1024)
|
||||
}
|
||||
|
||||
// system RAM(KB)
|
||||
sysRam, err := mem.VirtualMemory()
|
||||
if err != nil {
|
||||
log.Tracef("gett sys memory info error %v", err)
|
||||
sysInfo.SysTotalRam = 0
|
||||
sysInfo.SysRamUsedPercent = 0
|
||||
} else {
|
||||
sysInfo.SysTotalRam = uint32(sysRam.Total / 1024)
|
||||
sysInfo.SysRamUsedPercent = uint16(sysRam.UsedPercent * 100)
|
||||
}
|
||||
|
||||
// partition usage
|
||||
GetPartitions(sysInfo)
|
||||
return nil
|
||||
}
|
||||
|
||||
func getProcess() process.Process {
|
||||
checkPid := os.Getpid()
|
||||
ret, _ := process.NewProcess(int32(checkPid))
|
||||
return *ret
|
||||
}
|
||||
|
||||
func GetSystemCpuInfo() {
|
||||
physicalCnt, _ := cpu.Counts(false)
|
||||
logicalCnt, _ := cpu.Counts(true)
|
||||
log.Tracef("physical count:%d logical count:%d", physicalCnt, logicalCnt)
|
||||
|
||||
totalPercent, _ := cpu.Percent(3*time.Second, false) // per cpu is false
|
||||
perPercents, _ := cpu.Percent(3*time.Second, true) // per cpu is true
|
||||
log.Tracef("total percent:%v per percents:%v", totalPercent, perPercents)
|
||||
}
|
||||
|
||||
func GetProcessCpuPercent() {
|
||||
p := getProcess()
|
||||
percent, err := p.Percent(0)
|
||||
if err != nil {
|
||||
log.Tracef("error %v", err)
|
||||
}
|
||||
|
||||
numcpu := runtime.NumCPU()
|
||||
// if percent < 0.0 || percent > 100.0*float64(numcpu) { // TODO
|
||||
if percent < 0.0 {
|
||||
log.Tracef("Err CPU Percent of Process: %f, CPU num: %d", percent, numcpu)
|
||||
} else {
|
||||
log.Tracef("get process CPU percent: %f, CPU num: %d", percent, numcpu)
|
||||
}
|
||||
}
|
||||
|
||||
func GetProcessMemoryInfo() {
|
||||
p := getProcess()
|
||||
|
||||
v, err := p.MemoryInfo()
|
||||
if err != nil {
|
||||
log.Tracef("getting memory info error %v", err)
|
||||
}
|
||||
|
||||
log.Tracef("get process memory info %v", v)
|
||||
|
||||
info, _ := mem.VirtualMemory()
|
||||
fmt.Println(info)
|
||||
}
|
||||
|
||||
func GetPartitions(sysInfo *SysInfo) {
|
||||
sysInfo.PartitionNum = 0
|
||||
//sysInfo.PartitionInfo = make([]PartitionInfo, MAX_PARTITION_NUM, MAX_PARTITION_NUM)
|
||||
infos, _ := disk.Partitions(true)
|
||||
for _, info := range infos {
|
||||
GetOnePartitionUsage(info.Mountpoint, sysInfo)
|
||||
if sysInfo.PartitionNum >= MAX_PARTITION_NUM {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func GetOnePartitionUsage(path string, sysInfo *SysInfo) int {
|
||||
info, err := disk.Usage(path)
|
||||
if err != nil {
|
||||
return -1
|
||||
}
|
||||
|
||||
if info.Total <= 0 { // info.Used/(1024 * 1024)MB
|
||||
return 0
|
||||
}
|
||||
var partition PartitionInfo
|
||||
partition.Total = uint32(info.Total / 1024 / 1024)
|
||||
partition.Used = uint32(info.Used / 1024 / 1024)
|
||||
sysInfo.PartitionInfo = append(sysInfo.PartitionInfo, partition)
|
||||
sysInfo.PartitionNum++
|
||||
|
||||
/*data, err := json.MarshalIndent(info, "", " ")
|
||||
if err != nil {
|
||||
return -1
|
||||
}
|
||||
|
||||
fmt.Println(string(data))*/
|
||||
return 1
|
||||
}
|
||||
|
||||
func getOS() string {
|
||||
var osname string
|
||||
if runtime.GOOS == "linux" {
|
||||
osname = "GNU/Linux"
|
||||
}
|
||||
return osname
|
||||
}
|
||||
|
||||
func utsnameToString(unameArray [65]int8) string {
|
||||
var byteString [65]byte
|
||||
var indexLength int
|
||||
for ; unameArray[indexLength] != 0 && indexLength < 65; indexLength++ {
|
||||
byteString[indexLength] = uint8(unameArray[indexLength])
|
||||
}
|
||||
return string(byteString[:indexLength])
|
||||
}
|
||||
|
||||
func getUnameStr() string {
|
||||
var utsname = syscall.Utsname{}
|
||||
err := syscall.Uname(&utsname)
|
||||
if err == nil {
|
||||
name := utsnameToString(utsname.Sysname)
|
||||
node := utsnameToString(utsname.Nodename)
|
||||
release := utsnameToString(utsname.Release)
|
||||
version := utsnameToString(utsname.Version)
|
||||
machine := utsnameToString(utsname.Machine)
|
||||
//domain:= utsnameToString(utsname.Domainname)
|
||||
osName := getOS()
|
||||
return fmt.Sprintf("%s %s %s %s %s %s", name, node,
|
||||
release, version, machine, osName)
|
||||
}
|
||||
return ""
|
||||
}
|
||||
231
features/state/state_windows.go
Normal file
231
features/state/state_windows.go
Normal file
@@ -0,0 +1,231 @@
|
||||
//go:build windows
|
||||
// +build windows
|
||||
|
||||
package state
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"os"
|
||||
"runtime"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/shirou/gopsutil/cpu"
|
||||
"github.com/shirou/gopsutil/disk"
|
||||
"github.com/shirou/gopsutil/mem"
|
||||
"github.com/shirou/gopsutil/process"
|
||||
)
|
||||
|
||||
type SysInfo struct {
|
||||
SysCpuPercent uint16 // x%
|
||||
MyCpuPercent uint16 // x%, CPU percent of current proccess
|
||||
|
||||
SysTotalRam uint32 // KB
|
||||
MyUsedRam uint32 // RAM usage of current proccess, KB
|
||||
SysRamUsedPercent uint16 // x%
|
||||
|
||||
PartitionNum byte
|
||||
PartitionInfo []PartitionInfo // usage of each partition
|
||||
}
|
||||
|
||||
const MAX_PARTITION_NUM byte = 32
|
||||
|
||||
func GetSysStat() ([]byte, int) {
|
||||
// Get sys info
|
||||
var sysInfo SysInfo
|
||||
err := GetSysInfo(&sysInfo)
|
||||
if err != nil {
|
||||
return nil, 0
|
||||
}
|
||||
|
||||
//fmt.Printf("current sys info: %v", sysInfo)
|
||||
|
||||
// build ems buffer
|
||||
var data []byte = make([]byte, 1024)
|
||||
var len int
|
||||
var i byte
|
||||
binary.BigEndian.PutUint16(data[0:], sysInfo.MyCpuPercent) //x% * 100
|
||||
binary.BigEndian.PutUint16(data[2:], sysInfo.SysCpuPercent) //x% * 100
|
||||
binary.BigEndian.PutUint32(data[4:], sysInfo.SysTotalRam) // KB
|
||||
binary.BigEndian.PutUint32(data[8:], sysInfo.MyUsedRam) // KB
|
||||
binary.BigEndian.PutUint16(data[12:], sysInfo.SysRamUsedPercent) //x% * 100
|
||||
data[14] = sysInfo.PartitionNum
|
||||
for i = 0; i < sysInfo.PartitionNum; i++ {
|
||||
binary.BigEndian.PutUint32(data[15+8*(i):], sysInfo.PartitionInfo[i].Total) // MB
|
||||
binary.BigEndian.PutUint32(data[15+8*(i)+4:], sysInfo.PartitionInfo[i].Used) // MB
|
||||
}
|
||||
len = int(15 + 8*sysInfo.PartitionNum)
|
||||
|
||||
//fmt.Printf("current sys stat buf: %v, len: %d", data, len)
|
||||
|
||||
return data, len
|
||||
}
|
||||
|
||||
var pProc *process.Process = nil
|
||||
|
||||
func GetSYsCpuPercent() float64 {
|
||||
totalPercent, err := cpu.Percent(0, false) //(2*time.Second, false)
|
||||
if err != nil {
|
||||
return 0.0
|
||||
} else {
|
||||
return totalPercent[0]
|
||||
}
|
||||
}
|
||||
|
||||
func GetSysInfo(sysInfo *SysInfo) error {
|
||||
// sys cpu percent
|
||||
totalPercent, err := cpu.Percent(0, false) //(2*time.Second, false)
|
||||
if err != nil {
|
||||
sysInfo.SysCpuPercent = 0
|
||||
} else {
|
||||
sysInfo.SysCpuPercent = uint16(totalPercent[0] * 100)
|
||||
}
|
||||
|
||||
if pProc == nil {
|
||||
checkPid := os.Getpid()
|
||||
pProc, err = process.NewProcess(int32(checkPid))
|
||||
if err != nil {
|
||||
fmt.Printf("get process info error %v", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// self cpu percent
|
||||
percent, err := pProc.Percent(0) //(2*time.Second)
|
||||
if err != nil {
|
||||
fmt.Printf("get process cpu percent error %v", err)
|
||||
sysInfo.MyCpuPercent = 0
|
||||
} else {
|
||||
sysInfo.MyCpuPercent = uint16(percent * 100)
|
||||
}
|
||||
|
||||
// self RAM(KB)
|
||||
myRam, err := pProc.MemoryInfo()
|
||||
if err != nil {
|
||||
fmt.Printf("get self memory info error %v", err)
|
||||
sysInfo.MyUsedRam = 0
|
||||
} else {
|
||||
sysInfo.MyUsedRam = uint32(myRam.RSS / 1024)
|
||||
}
|
||||
|
||||
// system RAM(KB)
|
||||
sysRam, err := mem.VirtualMemory()
|
||||
if err != nil {
|
||||
fmt.Printf("gett sys memory info error %v", err)
|
||||
sysInfo.SysTotalRam = 0
|
||||
sysInfo.SysRamUsedPercent = 0
|
||||
} else {
|
||||
sysInfo.SysTotalRam = uint32(sysRam.Total / 1024)
|
||||
sysInfo.SysRamUsedPercent = uint16(sysRam.UsedPercent * 100)
|
||||
}
|
||||
|
||||
// partition usage
|
||||
GetPartitions(sysInfo)
|
||||
return nil
|
||||
}
|
||||
|
||||
func getProcess() process.Process {
|
||||
checkPid := os.Getpid()
|
||||
ret, _ := process.NewProcess(int32(checkPid))
|
||||
return *ret
|
||||
}
|
||||
|
||||
func GetSystemCpuInfo() {
|
||||
physicalCnt, _ := cpu.Counts(false)
|
||||
logicalCnt, _ := cpu.Counts(true)
|
||||
fmt.Printf("physical count:%d logical count:%d\n", physicalCnt, logicalCnt)
|
||||
|
||||
totalPercent, _ := cpu.Percent(3*time.Second, false) // per cpu is false
|
||||
perPercents, _ := cpu.Percent(3*time.Second, true) // per cpu is true
|
||||
fmt.Printf("total percent:%v per percents:%v\n", totalPercent, perPercents)
|
||||
}
|
||||
|
||||
func GetProcessCpuPercent() {
|
||||
p := getProcess()
|
||||
percent, err := p.Percent(0)
|
||||
if err != nil {
|
||||
fmt.Printf("error %v", err)
|
||||
}
|
||||
|
||||
numcpu := runtime.NumCPU()
|
||||
// if percent < 0.0 || percent > 100.0*float64(numcpu) { // TODO
|
||||
if percent < 0.0 {
|
||||
fmt.Printf("Err CPU Percent of Process: %f, CPU num: %d", percent, numcpu)
|
||||
} else {
|
||||
fmt.Printf("get process CPU percent: %f, CPU num: %d", percent, numcpu)
|
||||
}
|
||||
}
|
||||
|
||||
func GetProcessMemoryInfo() {
|
||||
p := getProcess()
|
||||
|
||||
v, err := p.MemoryInfo()
|
||||
if err != nil {
|
||||
fmt.Printf("getting memory info error %v", err)
|
||||
}
|
||||
|
||||
fmt.Printf("get process memory info %v\n", v)
|
||||
|
||||
info, _ := mem.VirtualMemory()
|
||||
fmt.Println(info)
|
||||
}
|
||||
|
||||
func GetPartitions(sysInfo *SysInfo) {
|
||||
sysInfo.PartitionNum = 0
|
||||
//sysInfo.PartitionInfo = make([]PartitionInfo, MAX_PARTITION_NUM, MAX_PARTITION_NUM)
|
||||
infos, _ := disk.Partitions(true)
|
||||
for _, info := range infos {
|
||||
GetOnePartitionUsage(info.Mountpoint, sysInfo)
|
||||
if sysInfo.PartitionNum >= MAX_PARTITION_NUM {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func GetOnePartitionUsage(path string, sysInfo *SysInfo) int {
|
||||
info, err := disk.Usage(path)
|
||||
if err != nil {
|
||||
return -1
|
||||
}
|
||||
|
||||
if info.Total <= 0 { // info.Used/(1024 * 1024)MB
|
||||
return 0
|
||||
}
|
||||
var partition PartitionInfo
|
||||
partition.Total = uint32(info.Total / 1024 / 1024)
|
||||
partition.Used = uint32(info.Used / 1024 / 1024)
|
||||
sysInfo.PartitionInfo = append(sysInfo.PartitionInfo, partition)
|
||||
sysInfo.PartitionNum++
|
||||
|
||||
/*data, err := json.MarshalIndent(info, "", " ")
|
||||
if err != nil {
|
||||
return -1
|
||||
}
|
||||
|
||||
fmt.Println(string(data))*/
|
||||
return 1
|
||||
}
|
||||
|
||||
func getOS() string {
|
||||
var osname string
|
||||
if runtime.GOOS == "linux" {
|
||||
osname = "GNU/Linux"
|
||||
}
|
||||
return osname
|
||||
}
|
||||
|
||||
func utsnameToString(unameArray [65]int8) string {
|
||||
var byteString [65]byte
|
||||
var indexLength int
|
||||
for ; unameArray[indexLength] != 0 && indexLength < 65; indexLength++ {
|
||||
byteString[indexLength] = uint8(unameArray[indexLength])
|
||||
}
|
||||
return string(byteString[:indexLength])
|
||||
}
|
||||
|
||||
func getUnameStr() string {
|
||||
osInfo, _ := syscall.GetVersion()
|
||||
|
||||
return fmt.Sprintf("Widnows %d", osInfo)
|
||||
}
|
||||
74
features/state/sysinfo.go
Normal file
74
features/state/sysinfo.go
Normal file
@@ -0,0 +1,74 @@
|
||||
package state
|
||||
|
||||
import (
|
||||
"ems.agt/lib/log"
|
||||
"github.com/shirou/gopsutil/cpu"
|
||||
"github.com/shirou/gopsutil/disk"
|
||||
"github.com/shirou/gopsutil/host"
|
||||
"github.com/shirou/gopsutil/mem"
|
||||
)
|
||||
|
||||
func getSystemInfo() {
|
||||
// 获取主机信息
|
||||
hostInfo, err := host.Info()
|
||||
if err != nil {
|
||||
log.Errorf("Failed to get host info: %v", err)
|
||||
return
|
||||
}
|
||||
log.Tracef("Host info: %+v", hostInfo)
|
||||
|
||||
// 获取CPU信息
|
||||
cpuInfo, err := cpu.Info()
|
||||
if err != nil {
|
||||
log.Errorf("Failed to get CPU info: %v", err)
|
||||
return
|
||||
}
|
||||
log.Tracef("CPU info: %+v", cpuInfo)
|
||||
|
||||
// 获取内存信息
|
||||
memInfo, err := mem.VirtualMemory()
|
||||
if err != nil {
|
||||
log.Errorf("Failed to get memory info: %v", err)
|
||||
return
|
||||
}
|
||||
log.Tracef("Memory info: %+v", memInfo)
|
||||
|
||||
// 获取磁盘分区信息
|
||||
diskPartitions, err := disk.Partitions(true)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to get disk partitions: %v", err)
|
||||
return
|
||||
}
|
||||
log.Tracef("Disk partitions: %+v", diskPartitions)
|
||||
for _, partition := range diskPartitions {
|
||||
// 获取每个磁盘分区的使用情况
|
||||
usage, err := disk.Usage(partition.Mountpoint)
|
||||
if err != nil {
|
||||
log.Errorf("Failed to get disk usage for %s: %v", partition.Mountpoint, err)
|
||||
continue
|
||||
}
|
||||
log.Tracef("%s usage: %+v", partition.Mountpoint, usage)
|
||||
}
|
||||
}
|
||||
|
||||
func getCpuNumber() int {
|
||||
// 获取CPU信息
|
||||
cpuInfo, err := cpu.Info()
|
||||
if err != nil {
|
||||
log.Errorf("Failed to get CPU info: %v", err)
|
||||
return 0
|
||||
}
|
||||
log.Tracef("CPU info: %+v", cpuInfo)
|
||||
return len(cpuInfo)
|
||||
}
|
||||
|
||||
func getTotalMemory() int {
|
||||
// 获取内存信息
|
||||
memInfo, err := mem.VirtualMemory()
|
||||
if err != nil {
|
||||
log.Errorf("Failed to get memory info: %v", err)
|
||||
return 0
|
||||
}
|
||||
log.Tracef("Memory info: %+v", memInfo)
|
||||
return int(memInfo.Total)
|
||||
}
|
||||
369
features/trace/trace.go
Normal file
369
features/trace/trace.go
Normal file
@@ -0,0 +1,369 @@
|
||||
package trace
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/go-resty/resty/v2"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
)
|
||||
|
||||
var (
|
||||
UriTraceTaskV1 = config.UriPrefix + "/traceManagement/v1/subscriptions"
|
||||
UriTraceTask = config.UriPrefix + "/traceManagement/{apiVersion}/subscriptions"
|
||||
)
|
||||
|
||||
type TraceTask struct {
|
||||
Id int `json:"id" xorm:"pk 'id' autoincr"`
|
||||
TraceType string `json:"traceType"`
|
||||
StartTime string `json:"startTime"`
|
||||
EndTime string `json:"endTime"`
|
||||
Imsi string `json:"imsi"`
|
||||
Msisdn string `json:"msisdn"`
|
||||
SrcIp string `json:"srcIp"`
|
||||
DstIp string `json:"dstIp"`
|
||||
SignalPort int16 `json:"signalPort"`
|
||||
NeType string `json:"neType"`
|
||||
NeId string `json:"neId"`
|
||||
UeIp string `json:"ueIp"`
|
||||
Interfaces []string `json:"interfaces"`
|
||||
NotifyUrl string `json:"notifyUrl" xorm:"-"`
|
||||
Status string `json:"-" xorm:"status"`
|
||||
SuccNEs []string `json:"-" xorm:"succ_nes"`
|
||||
FailNEs []string `json:"-" xorm:"fail_nes"`
|
||||
UpdateTime string `json:"-" xorm:"-"`
|
||||
}
|
||||
|
||||
var client = resty.New()
|
||||
|
||||
/*
|
||||
func init() {
|
||||
client.SetTimeout(3 * time.Second)
|
||||
}
|
||||
*/
|
||||
|
||||
// Post trace task to NF/NFs
|
||||
func PostTraceTaskToNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("PostTraceTaskToNF processing... ")
|
||||
|
||||
//vars := mux.Vars(r)
|
||||
|
||||
token, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
log.Debug("AccessToken:", token)
|
||||
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, int64(config.GetYamlConfig().Params.UriMaxLen)))
|
||||
if err != nil {
|
||||
log.Error("io.ReadAll is failed:", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
log.Trace("body:", string(body))
|
||||
|
||||
traceTask := new(TraceTask)
|
||||
_ = json.Unmarshal(body, traceTask)
|
||||
log.Debug("traceTask:", traceTask)
|
||||
|
||||
var neTypes []string
|
||||
// do not set device
|
||||
if traceTask.NeType == "" {
|
||||
// query neType by interface
|
||||
if len(traceTask.Interfaces) > 0 {
|
||||
err := dborm.XormGetSingleColStringArrayByIn("trace_info", "ne_type", "interface", traceTask.Interfaces, &neTypes)
|
||||
if err != nil {
|
||||
log.Error("Failed to dborm.XormGetSingleCol:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
} else {
|
||||
neTypes = append(neTypes, traceTask.NeType)
|
||||
}
|
||||
log.Debug("neTypes:", neTypes)
|
||||
|
||||
traceTask.Status = "Inactive"
|
||||
_, err = dborm.XormInsertTableOne("trace_task", traceTask)
|
||||
if err != nil {
|
||||
log.Error("Failed to dborm.XormInsertTableOne:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
traceTask.NotifyUrl = config.GetYamlConfig().OMC.GtpUri
|
||||
log.Trace("traceTask:", traceTask)
|
||||
|
||||
for _, neType := range neTypes {
|
||||
var neInfos []dborm.NeInfo
|
||||
if traceTask.NeId == "" {
|
||||
err := dborm.XormGetNeInfoByNeType(neType, &neInfos)
|
||||
if err != nil {
|
||||
log.Error("Failed to dborm.XormGetNeInfoByNeType:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
neInfo, err := dborm.XormGetNeInfo(neType, traceTask.NeId)
|
||||
if err != nil {
|
||||
log.Error("Failed to dborm.XormGetNeInfoByNeType:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
neInfos = append(neInfos, *neInfo)
|
||||
}
|
||||
for _, neInfo := range neInfos {
|
||||
hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port)
|
||||
requestURI2NF := fmt.Sprintf("%s%s", hostUri, UriTraceTaskV1)
|
||||
log.Debug("requestURI2NF:", requestURI2NF)
|
||||
|
||||
body, _ := json.Marshal(traceTask)
|
||||
log.Debug("body:", string(body))
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
SetBody(body).
|
||||
Post(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Failed to Post:", err)
|
||||
failNE := fmt.Sprintf("%s.%s", neInfo.NeType, neInfo.NeId)
|
||||
traceTask.FailNEs = append(traceTask.FailNEs, failNE)
|
||||
} else {
|
||||
switch resp.StatusCode() {
|
||||
case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted:
|
||||
succNE := fmt.Sprintf("%s.%s", neInfo.NeType, neInfo.NeId)
|
||||
traceTask.SuccNEs = append(traceTask.SuccNEs, succNE)
|
||||
default:
|
||||
log.Warn("Post return code:%d, message:%s", resp.StatusCode(), string(resp.Body()))
|
||||
failNE := fmt.Sprintf("%s.%s", neInfo.NeType, neInfo.NeId)
|
||||
traceTask.FailNEs = append(traceTask.FailNEs, failNE)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if len(traceTask.SuccNEs) > 0 {
|
||||
traceTask.Status = "Active"
|
||||
_, err = dborm.XormUpdateTableById(traceTask.Id, "trace_task", traceTask)
|
||||
if err != nil {
|
||||
log.Error("Failed to dborm.XormUpdateTableById:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
} else {
|
||||
traceTask.Status = "Failed"
|
||||
_, err = dborm.XormUpdateTableById(traceTask.Id, "trace_task", traceTask)
|
||||
if err != nil {
|
||||
log.Error("Failed to dborm.XormUpdateTableById:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
err = global.ErrTraceFailedDistributeToNEs
|
||||
log.Error(err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func PutTraceTaskToNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("PutTraceTaskToNF processing... ")
|
||||
|
||||
//vars := mux.Vars(r)
|
||||
|
||||
token, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
log.Debug("AccessToken:", token)
|
||||
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, int64(config.GetYamlConfig().Params.UriMaxLen)))
|
||||
if err != nil {
|
||||
log.Error("io.ReadAll is failed:", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
traceTask := new(TraceTask)
|
||||
_ = json.Unmarshal(body, traceTask)
|
||||
|
||||
traceTask.NotifyUrl = config.GetYamlConfig().OMC.GtpUri
|
||||
log.Debug("traceTask:", traceTask)
|
||||
|
||||
var neTypes []string
|
||||
// do not set device
|
||||
if traceTask.NeType == "" {
|
||||
// query neType by interface
|
||||
if len(traceTask.Interfaces) > 0 {
|
||||
err := dborm.XormGetSingleColStringArrayByIn("trace_info", "ne_type", "interface", traceTask.Interfaces, &neTypes)
|
||||
if err != nil {
|
||||
log.Error("Failed to dborm.XormGetSingleColStringArrayByIn:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
} else {
|
||||
neTypes = append(neTypes, traceTask.NeType)
|
||||
}
|
||||
log.Debug("neTypes:", neTypes)
|
||||
|
||||
for _, neType := range neTypes {
|
||||
var neInfos []dborm.NeInfo
|
||||
if traceTask.NeId == "" {
|
||||
err := dborm.XormGetNeInfoByNeType(neType, &neInfos)
|
||||
if err != nil {
|
||||
log.Error("Failed to dborm.XormGetNeInfoByNeType:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
neInfo, err := dborm.XormGetNeInfo(neType, traceTask.NeId)
|
||||
if err != nil {
|
||||
log.Error("Failed to dborm.XormGetNeInfoByNeType:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
neInfos = append(neInfos, *neInfo)
|
||||
}
|
||||
for _, neInfo := range neInfos {
|
||||
hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port)
|
||||
requestURI2NF := fmt.Sprintf("%s%s", hostUri, UriTraceTaskV1)
|
||||
log.Debug("requestURI2NF:", requestURI2NF)
|
||||
|
||||
body, _ := json.Marshal(traceTask)
|
||||
log.Debug("body:", string(body))
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
SetBody(body).
|
||||
Put(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Failed to Put:", err)
|
||||
failNE := fmt.Sprintf("%s.%s", neInfo.NeType, neInfo.NeId)
|
||||
traceTask.FailNEs = append(traceTask.FailNEs, failNE)
|
||||
} else {
|
||||
switch resp.StatusCode() {
|
||||
case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted:
|
||||
succNE := fmt.Sprintf("%s.%s", neInfo.NeType, neInfo.NeId)
|
||||
traceTask.SuccNEs = append(traceTask.SuccNEs, succNE)
|
||||
default:
|
||||
log.Warn("Post return code:%d, message:%s", resp.StatusCode(), string(resp.Body()))
|
||||
failNE := fmt.Sprintf("%s.%s", neInfo.NeType, neInfo.NeId)
|
||||
traceTask.FailNEs = append(traceTask.FailNEs, failNE)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if len(traceTask.SuccNEs) > 0 {
|
||||
traceTask.Status = "Active"
|
||||
_, err = dborm.XormUpdateTableById(traceTask.Id, "trace_task", traceTask)
|
||||
if err != nil {
|
||||
log.Error("Failed to dborm.XormUpdateTableById:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
} else {
|
||||
traceTask.Status = "Failed"
|
||||
_, err = dborm.XormUpdateTableById(traceTask.Id, "trace_task", traceTask)
|
||||
if err != nil {
|
||||
log.Error("Failed to dborm.XormUpdateTableById:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
err = global.ErrTraceFailedDistributeToNEs
|
||||
log.Error(err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func DeleteTraceTaskToNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("DeleteTraceTaskToNF processing... ")
|
||||
|
||||
token, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Request error:", err)
|
||||
return
|
||||
}
|
||||
log.Debug("AccessToken:", token)
|
||||
|
||||
vars := r.URL.Query()
|
||||
ids, ok := vars["id"]
|
||||
if !ok || len(ids) == 0 {
|
||||
err = global.ErrTraceNotCarriedTaskID
|
||||
log.Error(err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
log.Debug("ids:", ids)
|
||||
|
||||
for _, id := range ids {
|
||||
log.Debug("id:", id)
|
||||
|
||||
var succNes []string
|
||||
err = dborm.XormGetColStringArrayByWhere("trace_task", "succ_nes", fmt.Sprintf("id=%s", id), &succNes)
|
||||
if err != nil {
|
||||
log.Error("Failed to dborm.XormGetSingleColStringArrayByWhere:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
log.Debug("succNes:", succNes)
|
||||
nes := new([]string)
|
||||
if len(succNes) > 0 {
|
||||
_ = json.Unmarshal([]byte(succNes[0]), nes)
|
||||
}
|
||||
log.Debug("nes:", nes)
|
||||
|
||||
for _, ne := range *nes {
|
||||
i := strings.Index(ne, ".")
|
||||
neType := ne[0:i]
|
||||
neId := ne[i+1:]
|
||||
log.Debugf("ne:%s neType:%s neId:%s", ne, neType, neId)
|
||||
neInfo, err := dborm.XormGetNeInfo(neType, neId)
|
||||
if err != nil {
|
||||
log.Error("Failed to dborm.XormGetNeInfo:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port)
|
||||
requestURI2NF := fmt.Sprintf("%s%s?id=%s", hostUri, UriTraceTaskV1, id)
|
||||
log.Debug("requestURI2NF:", requestURI2NF)
|
||||
|
||||
_, err = client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Delete(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Failed to Delete:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
_, err = dborm.XormDeleteDataByWhere(fmt.Sprintf("id=%s", id), "trace_task")
|
||||
if err != nil {
|
||||
log.Error("Failed to dborm.XormDeleteDataByWhere:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
}
|
||||
68
go.mod
Normal file
68
go.mod
Normal file
@@ -0,0 +1,68 @@
|
||||
module ems.agt
|
||||
|
||||
go 1.19
|
||||
|
||||
require (
|
||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
||||
github.com/go-resty/resty/v2 v2.7.0
|
||||
github.com/go-sql-driver/mysql v1.7.1
|
||||
github.com/gorilla/mux v1.8.0
|
||||
github.com/gosnmp/gosnmp v1.35.0
|
||||
github.com/jasonlvhit/gocron v0.0.1
|
||||
github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f
|
||||
github.com/robfig/cron/v3 v3.0.1
|
||||
github.com/shirou/gopsutil v3.21.11+incompatible
|
||||
golang.org/x/crypto v0.12.0
|
||||
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
xorm.io/xorm v1.3.2
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
||||
github.com/dgraph-io/ristretto v0.1.1 // indirect
|
||||
github.com/dustin/go-humanize v1.0.1 // indirect
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/golang/glog v1.1.2 // indirect
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||
github.com/golang/protobuf v1.5.3 // indirect
|
||||
github.com/google/flatbuffers v23.5.26+incompatible // indirect
|
||||
github.com/gorilla/websocket v1.5.0 // indirect
|
||||
github.com/klauspost/compress v1.16.7 // indirect
|
||||
github.com/lufia/plan9stats v0.0.0-20230326075908-cb1d2100619a // indirect
|
||||
github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b // indirect
|
||||
github.com/shirou/gopsutil/v3 v3.23.7 // indirect
|
||||
github.com/shoenig/go-m1cpu v0.1.6 // indirect
|
||||
go.opencensus.io v0.24.0 // indirect
|
||||
google.golang.org/protobuf v1.31.0 // indirect
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/dgraph-io/badger/v4 v4.2.0
|
||||
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
|
||||
github.com/go-ole/go-ole v1.2.6 // indirect
|
||||
github.com/goccy/go-json v0.10.2 // indirect
|
||||
github.com/golang/snappy v0.0.4 // indirect
|
||||
github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect
|
||||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570 // indirect
|
||||
github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042 // indirect
|
||||
github.com/mattn/go-isatty v0.0.19 // indirect
|
||||
github.com/mattn/go-sqlite3 v1.14.15 // indirect
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/onsi/ginkgo v1.16.5 // indirect
|
||||
github.com/onsi/gomega v1.21.1 // indirect
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
github.com/stretchr/testify v1.8.4 // indirect
|
||||
github.com/syndtr/goleveldb v1.0.0 // indirect
|
||||
github.com/tebeka/strftime v0.1.5 // indirect
|
||||
github.com/tklauser/go-sysconf v0.3.12 // indirect
|
||||
github.com/tklauser/numcpus v0.6.1 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.3 // indirect
|
||||
golang.org/x/net v0.14.0 // indirect
|
||||
golang.org/x/sys v0.11.0 // indirect
|
||||
golang.org/x/tools v0.6.0 // indirect
|
||||
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
|
||||
xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978 // indirect
|
||||
)
|
||||
826
go.sum
Normal file
826
go.sum
Normal file
@@ -0,0 +1,826 @@
|
||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s=
|
||||
gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU=
|
||||
gitee.com/travelliu/dm v1.8.11192/go.mod h1:DHTzyhCrM843x9VdKVbZ+GKXGRbKM2sJ4LxihRxShkE=
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
|
||||
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
|
||||
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
|
||||
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
|
||||
github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
|
||||
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
|
||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
|
||||
github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
|
||||
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
|
||||
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
|
||||
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
||||
github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
|
||||
github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
|
||||
github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
||||
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
|
||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
|
||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
|
||||
github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
|
||||
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
|
||||
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
|
||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||
github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
|
||||
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
|
||||
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
|
||||
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
||||
github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||
github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/denisenkom/go-mssqldb v0.10.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
|
||||
github.com/dgraph-io/badger/v4 v4.2.0 h1:kJrlajbXXL9DFTNuhhu9yCx7JJa4qpYWxtE8BzuWsEs=
|
||||
github.com/dgraph-io/badger/v4 v4.2.0/go.mod h1:qfCqhPoWDFJRx1gp5QwwyGo8xk1lbHUxvK9nK0OGAak=
|
||||
github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8=
|
||||
github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA=
|
||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
|
||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
|
||||
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
|
||||
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
|
||||
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
|
||||
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
|
||||
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
|
||||
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
|
||||
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
|
||||
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
|
||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 h1:Ghm4eQYC0nEPnSJdVkTrXpu9KtoVCSo1hg7mtI7G9KU=
|
||||
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239/go.mod h1:Gdwt2ce0yfBxPvZrHkprdPPTTS3N5rwmLE8T22KBXlw=
|
||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||
github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
|
||||
github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
|
||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||
github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
|
||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
|
||||
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
|
||||
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
|
||||
github.com/go-redis/redis v6.15.5+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
|
||||
github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY=
|
||||
github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I=
|
||||
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
||||
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
||||
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
|
||||
github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
|
||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
|
||||
github.com/goccy/go-json v0.8.1/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
|
||||
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||
github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
|
||||
github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
|
||||
github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
|
||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
|
||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ=
|
||||
github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
|
||||
github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo=
|
||||
github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ=
|
||||
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I=
|
||||
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
|
||||
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
|
||||
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
|
||||
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
|
||||
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
|
||||
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
|
||||
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
||||
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
|
||||
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
|
||||
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
|
||||
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||
github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw=
|
||||
github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
|
||||
github.com/google/flatbuffers v23.5.26+incompatible h1:M9dgRyhJemaM4Sw8+66GHBu8ioaQmyPLg1b8VwK5WJg=
|
||||
github.com/google/flatbuffers v23.5.26+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
|
||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
|
||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
|
||||
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
||||
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
|
||||
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
||||
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
|
||||
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/gosnmp/gosnmp v1.35.0 h1:EuWWNPxTCdAUx2/NbQcSa3WdNxjzpy4Phv57b4MWpJM=
|
||||
github.com/gosnmp/gosnmp v1.35.0/go.mod h1:2AvKZ3n9aEl5TJEo/fFmf/FGO4Nj4cVeEc5yuk88CYc=
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||
github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
|
||||
github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
|
||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
|
||||
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
|
||||
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
|
||||
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
|
||||
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
|
||||
github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
|
||||
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
|
||||
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
|
||||
github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
||||
github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
|
||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
|
||||
github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
|
||||
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
|
||||
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
|
||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||
github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
|
||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
||||
github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
|
||||
github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo=
|
||||
github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
|
||||
github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
|
||||
github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA=
|
||||
github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE=
|
||||
github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s=
|
||||
github.com/jackc/pgconn v1.4.0/go.mod h1:Y2O3ZDF0q4mMacyWV3AstPJpeHXWGEetiFttmq5lahk=
|
||||
github.com/jackc/pgconn v1.5.0/go.mod h1:QeD3lBfpTFe8WUnPZWN5KY/mB8FGMIYRdd8P8Jr0fAI=
|
||||
github.com/jackc/pgconn v1.5.1-0.20200601181101-fa742c524853/go.mod h1:QeD3lBfpTFe8WUnPZWN5KY/mB8FGMIYRdd8P8Jr0fAI=
|
||||
github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o=
|
||||
github.com/jackc/pgconn v1.8.1/go.mod h1:JV6m6b6jhjdmzchES0drzCcYcAHS1OPD5xu3OZ/lE2g=
|
||||
github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY=
|
||||
github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8=
|
||||
github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE=
|
||||
github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd/go.mod h1:hrBW0Enj2AZTNpt/7Y5rr2xe/9Mn757Wtb2xeBzPv2c=
|
||||
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
|
||||
github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78=
|
||||
github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA=
|
||||
github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg=
|
||||
github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM=
|
||||
github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM=
|
||||
github.com/jackc/pgproto3/v2 v2.0.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
|
||||
github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
|
||||
github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
|
||||
github.com/jackc/pgservicefile v0.0.0-20200307190119-3430c5407db8/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E=
|
||||
github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E=
|
||||
github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg=
|
||||
github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc=
|
||||
github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw=
|
||||
github.com/jackc/pgtype v1.2.0/go.mod h1:5m2OfMh1wTK7x+Fk952IDmI4nw3nPrvtQdM0ZT4WpC0=
|
||||
github.com/jackc/pgtype v1.3.1-0.20200510190516-8cd94a14c75a/go.mod h1:vaogEUkALtxZMCH411K+tKzNpwzCKU+AnPzBKZ+I+Po=
|
||||
github.com/jackc/pgtype v1.3.1-0.20200606141011-f6355165a91c/go.mod h1:cvk9Bgu/VzJ9/lxTO5R5sf80p0DiucVtN7ZxvaC4GmQ=
|
||||
github.com/jackc/pgtype v1.7.0/go.mod h1:ZnHF+rMePVqDKaOfJVI4Q8IVvAQMryDlDkZnKOI75BE=
|
||||
github.com/jackc/pgtype v1.8.0/go.mod h1:PqDKcEBtllAtk/2p6z6SHdXW5UB+MhE75tUol2OKexE=
|
||||
github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y=
|
||||
github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM=
|
||||
github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc=
|
||||
github.com/jackc/pgx/v4 v4.5.0/go.mod h1:EpAKPLdnTorwmPUUsqrPxy5fphV18j9q3wrfRXgo+kA=
|
||||
github.com/jackc/pgx/v4 v4.6.1-0.20200510190926-94ba730bb1e9/go.mod h1:t3/cdRQl6fOLDxqtlyhe9UWgfIi9R8+8v8GKV5TRA/o=
|
||||
github.com/jackc/pgx/v4 v4.6.1-0.20200606145419-4e5062306904/go.mod h1:ZDaNWkt9sW1JMiNn0kdYBaLelIhw7Pg4qd+Vk6tw7Hg=
|
||||
github.com/jackc/pgx/v4 v4.11.0/go.mod h1:i62xJgdrtVDsnL3U8ekyrQXEwGNTRoG7/8r+CIdYfcc=
|
||||
github.com/jackc/pgx/v4 v4.12.0/go.mod h1:fE547h6VulLPA3kySjfnSG/e2D861g/50JlVUa/ub60=
|
||||
github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
|
||||
github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
|
||||
github.com/jackc/puddle v1.1.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
|
||||
github.com/jackc/puddle v1.1.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
|
||||
github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
|
||||
github.com/jasonlvhit/gocron v0.0.1 h1:qTt5qF3b3srDjeOIR4Le1LfeyvoYzJlYpqvG7tJX5YU=
|
||||
github.com/jasonlvhit/gocron v0.0.1/go.mod h1:k9a3TV8VcU73XZxfVHCHWMWF9SOqgoku0/QlY2yvlA4=
|
||||
github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 h1:IPJ3dvxmJ4uczJe5YQdrYB16oTJlGSC/OyZDqUk9xX4=
|
||||
github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj7dQo+O6GJNiMx+Pa94qKj+TG8ONdKHgMNIyyag=
|
||||
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||
github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=
|
||||
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
|
||||
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
|
||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
|
||||
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/klauspost/compress v1.12.3 h1:G5AfA94pHPysR56qqrkO2pxEexdDzrpFJ6yt/VqWxVU=
|
||||
github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
|
||||
github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=
|
||||
github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
|
||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570 h1:0iQektZGS248WXmGIYOwRXSQhD4qn3icjMpuxwO7qlo=
|
||||
github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570/go.mod h1:BLt8L9ld7wVsvEWQbuLrUZnCMnUmLZ+CGDzKtclrTlE=
|
||||
github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f h1:sgUSP4zdTUZYZgAGGtN5Lxk92rK+JUFOwf+FT99EEI4=
|
||||
github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f/go.mod h1:UGmTpUd3rjbtfIpwAPrcfmGf/Z1HS95TATB+m57TPB8=
|
||||
github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042 h1:Bvq8AziQ5jFF4BHGAEDSqwPW1NJS3XshxbRCxtjFAZc=
|
||||
github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042/go.mod h1:TPpsiPUEh0zFL1Snz4crhMlBe60PYxRHr5oFF3rRYg0=
|
||||
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||
github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||
github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||
github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
|
||||
github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
|
||||
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
|
||||
github.com/lufia/plan9stats v0.0.0-20230326075908-cb1d2100619a h1:N9zuLhTvBSRt0gWSiJswwQ2HqDmtX/ZCDJURnKUt1Ik=
|
||||
github.com/lufia/plan9stats v0.0.0-20230326075908-cb1d2100619a/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE=
|
||||
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
|
||||
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
||||
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
|
||||
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
||||
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
||||
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
||||
github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||
github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
|
||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
|
||||
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
||||
github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
||||
github.com/mattn/go-sqlite3 v1.14.15 h1:vfoHhTN1af61xCRSWzFIWzx2YskyMTwHLrExkBOjvxI=
|
||||
github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
||||
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
|
||||
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||
github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
|
||||
github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
|
||||
github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
|
||||
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||
github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg=
|
||||
github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU=
|
||||
github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k=
|
||||
github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w=
|
||||
github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
|
||||
github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
|
||||
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
|
||||
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
||||
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
|
||||
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
|
||||
github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
|
||||
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
|
||||
github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
|
||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
|
||||
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
|
||||
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
|
||||
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
|
||||
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
||||
github.com/onsi/gomega v1.21.1 h1:OB/euWYIExnPBohllTicTHmGTrMaqJ67nIu80j0/uEM=
|
||||
github.com/onsi/gomega v1.21.1/go.mod h1:iYAIXgPSaDHak0LCMA+AWBpIKBr8WZicMxnE8luStNc=
|
||||
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
|
||||
github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis=
|
||||
github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
|
||||
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
||||
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
||||
github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA=
|
||||
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
|
||||
github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
|
||||
github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
|
||||
github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
|
||||
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
||||
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
|
||||
github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
|
||||
github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
|
||||
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
||||
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
|
||||
github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b h1:0LFwY6Q3gMACTjAbMZBjXAqTOzOwFaj2Ld6cjeQ7Rig=
|
||||
github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
|
||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
||||
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
|
||||
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
|
||||
github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
|
||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||
github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
|
||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
|
||||
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
||||
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk=
|
||||
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
|
||||
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
|
||||
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
|
||||
github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU=
|
||||
github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc=
|
||||
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
||||
github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
|
||||
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
|
||||
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
|
||||
github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI=
|
||||
github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
|
||||
github.com/shirou/gopsutil/v3 v3.23.7 h1:C+fHO8hfIppoJ1WdsVm1RoI0RwXoNdfTK7yWXV0wVj4=
|
||||
github.com/shirou/gopsutil/v3 v3.23.7/go.mod h1:c4gnmoRC0hQuaLqvxnx1//VXQ0Ms/X9UnJF8pddY5z4=
|
||||
github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
|
||||
github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
|
||||
github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
|
||||
github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
|
||||
github.com/shopspring/decimal v0.0.0-20200227202807-02e2044944cc/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
|
||||
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
|
||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
||||
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
||||
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
|
||||
github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
|
||||
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
||||
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||
github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
|
||||
github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
|
||||
github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
|
||||
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
|
||||
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
|
||||
github.com/tebeka/strftime v0.1.5 h1:1NQKN1NiQgkqd/2moD6ySP/5CoZQsKa1d3ZhJ44Jpmg=
|
||||
github.com/tebeka/strftime v0.1.5/go.mod h1:29/OidkoWHdEKZqzyDLUyC+LmgDgdHo4WAFCDT7D/Ig=
|
||||
github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM=
|
||||
github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI=
|
||||
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
|
||||
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
|
||||
github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms=
|
||||
github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4=
|
||||
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
|
||||
github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
|
||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
|
||||
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
|
||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
|
||||
github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||
github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
|
||||
github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
|
||||
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||
go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
|
||||
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
||||
go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
||||
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||
go.opencensus.io v0.22.5 h1:dntmOdLpSpHlVqbW5Eay97DelsZHe+55D+xC6i0dDS0=
|
||||
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
|
||||
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
|
||||
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
|
||||
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
||||
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
||||
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
||||
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
|
||||
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
|
||||
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
|
||||
go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
||||
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
||||
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
|
||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
|
||||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
||||
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
||||
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA=
|
||||
golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio=
|
||||
golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk=
|
||||
golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
|
||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8=
|
||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
||||
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
|
||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||
golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14=
|
||||
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA=
|
||||
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
|
||||
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4=
|
||||
golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc=
|
||||
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||
golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM=
|
||||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||
golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||
google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
|
||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
|
||||
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||
google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||
google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
||||
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
|
||||
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
|
||||
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
|
||||
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
|
||||
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk=
|
||||
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
|
||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||
gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
|
||||
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE=
|
||||
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw=
|
||||
gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s=
|
||||
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
|
||||
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
|
||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||
lukechampine.com/uint128 v1.1.1 h1:pnxCASz787iMf+02ssImqk6OLt+Z5QHMoZyUXR4z6JU=
|
||||
lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
|
||||
modernc.org/cc/v3 v3.33.6/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.33.9/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.33.11/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.34.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.4/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.5/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.7/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.8/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.10/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.15/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.16/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.17/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/cc/v3 v3.35.18 h1:rMZhRcWrba0y3nVmdiQ7kxAgOOSq2m2f2VzjHLgEs6U=
|
||||
modernc.org/cc/v3 v3.35.18/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
|
||||
modernc.org/ccgo/v3 v3.9.5/go.mod h1:umuo2EP2oDSBnD3ckjaVUXMrmeAw8C8OSICVa0iFf60=
|
||||
modernc.org/ccgo/v3 v3.10.0/go.mod h1:c0yBmkRFi7uW4J7fwx/JiijwOjeAeR2NoSaRVFPmjMw=
|
||||
modernc.org/ccgo/v3 v3.11.0/go.mod h1:dGNposbDp9TOZ/1KBxghxtUp/bzErD0/0QW4hhSaBMI=
|
||||
modernc.org/ccgo/v3 v3.11.1/go.mod h1:lWHxfsn13L3f7hgGsGlU28D9eUOf6y3ZYHKoPaKU0ag=
|
||||
modernc.org/ccgo/v3 v3.11.3/go.mod h1:0oHunRBMBiXOKdaglfMlRPBALQqsfrCKXgw9okQ3GEw=
|
||||
modernc.org/ccgo/v3 v3.12.4/go.mod h1:Bk+m6m2tsooJchP/Yk5ji56cClmN6R1cqc9o/YtbgBQ=
|
||||
modernc.org/ccgo/v3 v3.12.6/go.mod h1:0Ji3ruvpFPpz+yu+1m0wk68pdr/LENABhTrDkMDWH6c=
|
||||
modernc.org/ccgo/v3 v3.12.8/go.mod h1:Hq9keM4ZfjCDuDXxaHptpv9N24JhgBZmUG5q60iLgUo=
|
||||
modernc.org/ccgo/v3 v3.12.11/go.mod h1:0jVcmyDwDKDGWbcrzQ+xwJjbhZruHtouiBEvDfoIsdg=
|
||||
modernc.org/ccgo/v3 v3.12.14/go.mod h1:GhTu1k0YCpJSuWwtRAEHAol5W7g1/RRfS4/9hc9vF5I=
|
||||
modernc.org/ccgo/v3 v3.12.18/go.mod h1:jvg/xVdWWmZACSgOiAhpWpwHWylbJaSzayCqNOJKIhs=
|
||||
modernc.org/ccgo/v3 v3.12.20/go.mod h1:aKEdssiu7gVgSy/jjMastnv/q6wWGRbszbheXgWRHc8=
|
||||
modernc.org/ccgo/v3 v3.12.21/go.mod h1:ydgg2tEprnyMn159ZO/N4pLBqpL7NOkJ88GT5zNU2dE=
|
||||
modernc.org/ccgo/v3 v3.12.22/go.mod h1:nyDVFMmMWhMsgQw+5JH6B6o4MnZ+UQNw1pp52XYFPRk=
|
||||
modernc.org/ccgo/v3 v3.12.25/go.mod h1:UaLyWI26TwyIT4+ZFNjkyTbsPsY3plAEB6E7L/vZV3w=
|
||||
modernc.org/ccgo/v3 v3.12.29/go.mod h1:FXVjG7YLf9FetsS2OOYcwNhcdOLGt8S9bQ48+OP75cE=
|
||||
modernc.org/ccgo/v3 v3.12.36/go.mod h1:uP3/Fiezp/Ga8onfvMLpREq+KUjUmYMxXPO8tETHtA8=
|
||||
modernc.org/ccgo/v3 v3.12.38/go.mod h1:93O0G7baRST1vNj4wnZ49b1kLxt0xCW5Hsa2qRaZPqc=
|
||||
modernc.org/ccgo/v3 v3.12.43/go.mod h1:k+DqGXd3o7W+inNujK15S5ZYuPoWYLpF5PYougCmthU=
|
||||
modernc.org/ccgo/v3 v3.12.46/go.mod h1:UZe6EvMSqOxaJ4sznY7b23/k13R8XNlyWsO5bAmSgOE=
|
||||
modernc.org/ccgo/v3 v3.12.47/go.mod h1:m8d6p0zNps187fhBwzY/ii6gxfjob1VxWb919Nk1HUk=
|
||||
modernc.org/ccgo/v3 v3.12.50/go.mod h1:bu9YIwtg+HXQxBhsRDE+cJjQRuINuT9PUK4orOco/JI=
|
||||
modernc.org/ccgo/v3 v3.12.51/go.mod h1:gaIIlx4YpmGO2bLye04/yeblmvWEmE4BBBls4aJXFiE=
|
||||
modernc.org/ccgo/v3 v3.12.53/go.mod h1:8xWGGTFkdFEWBEsUmi+DBjwu/WLy3SSOrqEmKUjMeEg=
|
||||
modernc.org/ccgo/v3 v3.12.54/go.mod h1:yANKFTm9llTFVX1FqNKHE0aMcQb1fuPJx6p8AcUx+74=
|
||||
modernc.org/ccgo/v3 v3.12.55/go.mod h1:rsXiIyJi9psOwiBkplOaHye5L4MOOaCjHg1Fxkj7IeU=
|
||||
modernc.org/ccgo/v3 v3.12.56/go.mod h1:ljeFks3faDseCkr60JMpeDb2GSO3TKAmrzm7q9YOcMU=
|
||||
modernc.org/ccgo/v3 v3.12.57/go.mod h1:hNSF4DNVgBl8wYHpMvPqQWDQx8luqxDnNGCMM4NFNMc=
|
||||
modernc.org/ccgo/v3 v3.12.60/go.mod h1:k/Nn0zdO1xHVWjPYVshDeWKqbRWIfif5dtsIOCUVMqM=
|
||||
modernc.org/ccgo/v3 v3.12.65/go.mod h1:D6hQtKxPNZiY6wDBtehSGKFKmyXn53F8nGTpH+POmS4=
|
||||
modernc.org/ccgo/v3 v3.12.66/go.mod h1:jUuxlCFZTUZLMV08s7B1ekHX5+LIAurKTTaugUr/EhQ=
|
||||
modernc.org/ccgo/v3 v3.12.67/go.mod h1:Bll3KwKvGROizP2Xj17GEGOTrlvB1XcVaBrC90ORO84=
|
||||
modernc.org/ccgo/v3 v3.12.73/go.mod h1:hngkB+nUUqzOf3iqsM48Gf1FZhY599qzVg1iX+BT3cQ=
|
||||
modernc.org/ccgo/v3 v3.12.81/go.mod h1:p2A1duHoBBg1mFtYvnhAnQyI6vL0uw5PGYLSIgF6rYY=
|
||||
modernc.org/ccgo/v3 v3.12.82 h1:wudcnJyjLj1aQQCXF3IM9Gz2X6UNjw+afIghzdtn0v8=
|
||||
modernc.org/ccgo/v3 v3.12.82/go.mod h1:ApbflUfa5BKadjHynCficldU1ghjen84tuM5jRynB7w=
|
||||
modernc.org/ccorpus v1.11.1/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ=
|
||||
modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM=
|
||||
modernc.org/libc v1.9.8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w=
|
||||
modernc.org/libc v1.9.11/go.mod h1:NyF3tsA5ArIjJ83XB0JlqhjTabTCHm9aX4XMPHyQn0Q=
|
||||
modernc.org/libc v1.11.0/go.mod h1:2lOfPmj7cz+g1MrPNmX65QCzVxgNq2C5o0jdLY2gAYg=
|
||||
modernc.org/libc v1.11.2/go.mod h1:ioIyrl3ETkugDO3SGZ+6EOKvlP3zSOycUETe4XM4n8M=
|
||||
modernc.org/libc v1.11.5/go.mod h1:k3HDCP95A6U111Q5TmG3nAyUcp3kR5YFZTeDS9v8vSU=
|
||||
modernc.org/libc v1.11.6/go.mod h1:ddqmzR6p5i4jIGK1d/EiSw97LBcE3dK24QEwCFvgNgE=
|
||||
modernc.org/libc v1.11.11/go.mod h1:lXEp9QOOk4qAYOtL3BmMve99S5Owz7Qyowzvg6LiZso=
|
||||
modernc.org/libc v1.11.13/go.mod h1:ZYawJWlXIzXy2Pzghaf7YfM8OKacP3eZQI81PDLFdY8=
|
||||
modernc.org/libc v1.11.16/go.mod h1:+DJquzYi+DMRUtWI1YNxrlQO6TcA5+dRRiq8HWBWRC8=
|
||||
modernc.org/libc v1.11.19/go.mod h1:e0dgEame6mkydy19KKaVPBeEnyJB4LGNb0bBH1EtQ3I=
|
||||
modernc.org/libc v1.11.24/go.mod h1:FOSzE0UwookyT1TtCJrRkvsOrX2k38HoInhw+cSCUGk=
|
||||
modernc.org/libc v1.11.26/go.mod h1:SFjnYi9OSd2W7f4ct622o/PAYqk7KHv6GS8NZULIjKY=
|
||||
modernc.org/libc v1.11.27/go.mod h1:zmWm6kcFXt/jpzeCgfvUNswM0qke8qVwxqZrnddlDiE=
|
||||
modernc.org/libc v1.11.28/go.mod h1:Ii4V0fTFcbq3qrv3CNn+OGHAvzqMBvC7dBNyC4vHZlg=
|
||||
modernc.org/libc v1.11.31/go.mod h1:FpBncUkEAtopRNJj8aRo29qUiyx5AvAlAxzlx9GNaVM=
|
||||
modernc.org/libc v1.11.34/go.mod h1:+Tzc4hnb1iaX/SKAutJmfzES6awxfU1BPvrrJO0pYLg=
|
||||
modernc.org/libc v1.11.37/go.mod h1:dCQebOwoO1046yTrfUE5nX1f3YpGZQKNcITUYWlrAWo=
|
||||
modernc.org/libc v1.11.39/go.mod h1:mV8lJMo2S5A31uD0k1cMu7vrJbSA3J3waQJxpV4iqx8=
|
||||
modernc.org/libc v1.11.42/go.mod h1:yzrLDU+sSjLE+D4bIhS7q1L5UwXDOw99PLSX0BlZvSQ=
|
||||
modernc.org/libc v1.11.44/go.mod h1:KFq33jsma7F5WXiYelU8quMJasCCTnHK0mkri4yPHgA=
|
||||
modernc.org/libc v1.11.45/go.mod h1:Y192orvfVQQYFzCNsn+Xt0Hxt4DiO4USpLNXBlXg/tM=
|
||||
modernc.org/libc v1.11.47/go.mod h1:tPkE4PzCTW27E6AIKIR5IwHAQKCAtudEIeAV1/SiyBg=
|
||||
modernc.org/libc v1.11.49/go.mod h1:9JrJuK5WTtoTWIFQ7QjX2Mb/bagYdZdscI3xrvHbXjE=
|
||||
modernc.org/libc v1.11.51/go.mod h1:R9I8u9TS+meaWLdbfQhq2kFknTW0O3aw3kEMqDDxMaM=
|
||||
modernc.org/libc v1.11.53/go.mod h1:5ip5vWYPAoMulkQ5XlSJTy12Sz5U6blOQiYasilVPsU=
|
||||
modernc.org/libc v1.11.54/go.mod h1:S/FVnskbzVUrjfBqlGFIPA5m7UwB3n9fojHhCNfSsnw=
|
||||
modernc.org/libc v1.11.55/go.mod h1:j2A5YBRm6HjNkoSs/fzZrSxCuwWqcMYTDPLNx0URn3M=
|
||||
modernc.org/libc v1.11.56/go.mod h1:pakHkg5JdMLt2OgRadpPOTnyRXm/uzu+Yyg/LSLdi18=
|
||||
modernc.org/libc v1.11.58/go.mod h1:ns94Rxv0OWyoQrDqMFfWwka2BcaF6/61CqJRK9LP7S8=
|
||||
modernc.org/libc v1.11.70/go.mod h1:DUOmMYe+IvKi9n6Mycyx3DbjfzSKrdr/0Vgt3j7P5gw=
|
||||
modernc.org/libc v1.11.71/go.mod h1:DUOmMYe+IvKi9n6Mycyx3DbjfzSKrdr/0Vgt3j7P5gw=
|
||||
modernc.org/libc v1.11.75/go.mod h1:dGRVugT6edz361wmD9gk6ax1AbDSe0x5vji0dGJiPT0=
|
||||
modernc.org/libc v1.11.82/go.mod h1:NF+Ek1BOl2jeC7lw3a7Jj5PWyHPwWD4aq3wVKxqV1fI=
|
||||
modernc.org/libc v1.11.86/go.mod h1:ePuYgoQLmvxdNT06RpGnaDKJmDNEkV7ZPKI2jnsvZoE=
|
||||
modernc.org/libc v1.11.87 h1:PzIzOqtlzMDDcCzJ5cUP6h/Ku6Fa9iyflP2ccTY64aE=
|
||||
modernc.org/libc v1.11.87/go.mod h1:Qvd5iXTeLhI5PS0XSyqMY99282y+3euapQFxM7jYnpY=
|
||||
modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||
modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||
modernc.org/mathutil v1.4.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||
modernc.org/mathutil v1.4.1 h1:ij3fYGe8zBF4Vu+g0oT7mB06r8sqGWKuJu1yXeR4by8=
|
||||
modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||
modernc.org/memory v1.0.4/go.mod h1:nV2OApxradM3/OVbs2/0OsP6nPfakXpi50C7dcoHXlc=
|
||||
modernc.org/memory v1.0.5 h1:XRch8trV7GgvTec2i7jc33YlUI0RKVDBvZ5eZ5m8y14=
|
||||
modernc.org/memory v1.0.5/go.mod h1:B7OYswTRnfGg+4tDH1t1OeUNnsy2viGTdME4tzd+IjM=
|
||||
modernc.org/opt v0.1.1 h1:/0RX92k9vwVeDXj+Xn23DKp2VJubL7k8qNffND6qn3A=
|
||||
modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
|
||||
modernc.org/sqlite v1.14.2 h1:ohsW2+e+Qe2To1W6GNezzKGwjXwSax6R+CrhRxVaFbE=
|
||||
modernc.org/sqlite v1.14.2/go.mod h1:yqfn85u8wVOE6ub5UT8VI9JjhrwBUUCNyTACN0h6Sx8=
|
||||
modernc.org/strutil v1.1.1 h1:xv+J1BXY3Opl2ALrBwyfEikFAj8pmqcpnfmuwUwcozs=
|
||||
modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw=
|
||||
modernc.org/tcl v1.8.13/go.mod h1:V+q/Ef0IJaNUSECieLU4o+8IScapxnMyFV6i/7uQlAY=
|
||||
modernc.org/token v1.0.0 h1:a0jaWiNMDhDUtqOj09wvjWWAqd3q7WpBulmL9H2egsk=
|
||||
modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
|
||||
modernc.org/z v1.2.19/go.mod h1:+ZpP0pc4zz97eukOzW3xagV/lS82IpPN9NGG5pNF9vY=
|
||||
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
|
||||
sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
|
||||
xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978 h1:bvLlAPW1ZMTWA32LuZMBEGHAUOcATZjzHcotf3SWweM=
|
||||
xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE=
|
||||
xorm.io/xorm v1.3.2 h1:uTRRKF2jYzbZ5nsofXVUx6ncMaek+SHjWYtCXyZo1oM=
|
||||
xorm.io/xorm v1.3.2/go.mod h1:9NbjqdnjX6eyjRRhh01GHm64r6N9shTb/8Ak3YRt8Nw=
|
||||
64
lib/aes/aes.go
Normal file
64
lib/aes/aes.go
Normal file
@@ -0,0 +1,64 @@
|
||||
package aes
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/aes"
|
||||
"crypto/cipher"
|
||||
"encoding/base64"
|
||||
)
|
||||
|
||||
func AesEncrypt(orig string, key string) string {
|
||||
// 转成字节数组
|
||||
origData := []byte(orig)
|
||||
k := []byte(key)
|
||||
|
||||
// 分组秘钥
|
||||
block, _ := aes.NewCipher(k)
|
||||
// 获取秘钥块的长度
|
||||
blockSize := block.BlockSize()
|
||||
// 补全码
|
||||
origData = PKCS7Padding(origData, blockSize)
|
||||
// 加密模式
|
||||
blockMode := cipher.NewCBCEncrypter(block, k[:blockSize])
|
||||
// 创建数组
|
||||
cryted := make([]byte, len(origData))
|
||||
// 加密
|
||||
blockMode.CryptBlocks(cryted, origData)
|
||||
|
||||
return base64.StdEncoding.EncodeToString(cryted)
|
||||
|
||||
}
|
||||
|
||||
func AesDecrypt(cryted string, key string) string {
|
||||
// 转成字节数组
|
||||
crytedByte, _ := base64.StdEncoding.DecodeString(cryted)
|
||||
k := []byte(key)
|
||||
|
||||
// 分组秘钥
|
||||
block, _ := aes.NewCipher(k)
|
||||
// 获取秘钥块的长度
|
||||
blockSize := block.BlockSize()
|
||||
// 加密模式
|
||||
blockMode := cipher.NewCBCDecrypter(block, k[:blockSize])
|
||||
// 创建数组
|
||||
orig := make([]byte, len(crytedByte))
|
||||
// 解密
|
||||
blockMode.CryptBlocks(orig, crytedByte)
|
||||
// 去补全码
|
||||
orig = PKCS7UnPadding(orig)
|
||||
return string(orig)
|
||||
}
|
||||
|
||||
// 补码
|
||||
func PKCS7Padding(ciphertext []byte, blocksize int) []byte {
|
||||
padding := blocksize - len(ciphertext)%blocksize
|
||||
padtext := bytes.Repeat([]byte{byte(padding)}, padding)
|
||||
return append(ciphertext, padtext...)
|
||||
}
|
||||
|
||||
// 去码
|
||||
func PKCS7UnPadding(origData []byte) []byte {
|
||||
length := len(origData)
|
||||
unpadding := int(origData[length-1])
|
||||
return origData[:(length - unpadding)]
|
||||
}
|
||||
92
lib/cache/badger_db/badger_db.go
vendored
Normal file
92
lib/cache/badger_db/badger_db.go
vendored
Normal file
@@ -0,0 +1,92 @@
|
||||
package badger_db
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/dgraph-io/badger/v4"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
type Cache struct {
|
||||
db *badger.DB
|
||||
}
|
||||
|
||||
func NewCacheDB(db *badger.DB) *Cache {
|
||||
return &Cache{
|
||||
db: db,
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Cache) SetNX(key string, value interface{}) error {
|
||||
err := c.db.Update(func(txn *badger.Txn) error {
|
||||
_, err := txn.Get([]byte(key))
|
||||
if errors.Is(err, badger.ErrKeyNotFound) {
|
||||
v := []byte(fmt.Sprintf("%v", value))
|
||||
return txn.Set([]byte(key), v)
|
||||
}
|
||||
return err
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *Cache) Set(key string, value interface{}) error {
|
||||
err := c.db.Update(func(txn *badger.Txn) error {
|
||||
v := []byte(fmt.Sprintf("%v", value))
|
||||
return txn.Set([]byte(key), v)
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *Cache) Del(key string) error {
|
||||
err := c.db.Update(func(txn *badger.Txn) error {
|
||||
return txn.Delete([]byte(key))
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *Cache) Clean() error {
|
||||
return c.db.DropAll()
|
||||
}
|
||||
|
||||
func (c *Cache) Get(key string) ([]byte, error) {
|
||||
var result []byte
|
||||
err := c.db.View(func(txn *badger.Txn) error {
|
||||
item, err := txn.Get([]byte(key))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = item.Value(func(val []byte) error {
|
||||
result = append([]byte{}, val...)
|
||||
return nil
|
||||
})
|
||||
return err
|
||||
})
|
||||
return result, err
|
||||
}
|
||||
|
||||
func (c *Cache) SetWithTTL(key string, value interface{}, duration time.Duration) error {
|
||||
err := c.db.Update(func(txn *badger.Txn) error {
|
||||
v := []byte(fmt.Sprintf("%v", value))
|
||||
e := badger.NewEntry([]byte(key), v).WithTTL(duration)
|
||||
return txn.SetEntry(e)
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *Cache) PrefixScanKey(prefixStr string) ([]string, error) {
|
||||
var res []string
|
||||
err := c.db.View(func(txn *badger.Txn) error {
|
||||
it := txn.NewIterator(badger.DefaultIteratorOptions)
|
||||
defer it.Close()
|
||||
prefix := []byte(prefixStr)
|
||||
for it.Seek(prefix); it.ValidForPrefix(prefix); it.Next() {
|
||||
item := it.Item()
|
||||
k := item.Key()
|
||||
res = append(res, string(k))
|
||||
return nil
|
||||
}
|
||||
return nil
|
||||
})
|
||||
return res, err
|
||||
}
|
||||
55
lib/cache/cache.go
vendored
Normal file
55
lib/cache/cache.go
vendored
Normal file
@@ -0,0 +1,55 @@
|
||||
package cache
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/cache/badger_db"
|
||||
"ems.agt/lib/log"
|
||||
"github.com/dgraph-io/badger/v4"
|
||||
)
|
||||
|
||||
var CACHE *badger_db.Cache
|
||||
|
||||
func Init() {
|
||||
options := badger.Options{
|
||||
Dir: "tmp/badger",
|
||||
ValueDir: "tmp/badger",
|
||||
ValueLogFileSize: 64 << 20,
|
||||
ValueLogMaxEntries: 10 << 20,
|
||||
VLogPercentile: 0.1,
|
||||
|
||||
MemTableSize: 32 << 20,
|
||||
BaseTableSize: 2 << 20,
|
||||
BaseLevelSize: 10 << 20,
|
||||
TableSizeMultiplier: 2,
|
||||
LevelSizeMultiplier: 10,
|
||||
MaxLevels: 7,
|
||||
NumGoroutines: 4,
|
||||
MetricsEnabled: true,
|
||||
NumCompactors: 2,
|
||||
NumLevelZeroTables: 5,
|
||||
NumLevelZeroTablesStall: 15,
|
||||
NumMemtables: 1,
|
||||
BloomFalsePositive: 0.01,
|
||||
BlockSize: 2 * 1024,
|
||||
SyncWrites: false,
|
||||
NumVersionsToKeep: 1,
|
||||
CompactL0OnClose: false,
|
||||
VerifyValueChecksum: false,
|
||||
BlockCacheSize: 32 << 20,
|
||||
IndexCacheSize: 0,
|
||||
ZSTDCompressionLevel: 1,
|
||||
EncryptionKey: []byte{},
|
||||
EncryptionKeyRotationDuration: 10 * 24 * time.Hour, // Default 10 days.
|
||||
DetectConflicts: true,
|
||||
NamespaceOffset: -1,
|
||||
}
|
||||
|
||||
cache, err := badger.Open(options)
|
||||
if err != nil {
|
||||
log.Errorf("failed to badger init cache:", err)
|
||||
}
|
||||
|
||||
CACHE = badger_db.NewCacheDB(cache)
|
||||
log.Info("init cache successfully")
|
||||
}
|
||||
1412
lib/dborm/dborm.go
Normal file
1412
lib/dborm/dborm.go
Normal file
File diff suppressed because it is too large
Load Diff
120
lib/file/file.go
Normal file
120
lib/file/file.go
Normal file
@@ -0,0 +1,120 @@
|
||||
package file
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
|
||||
const (
|
||||
//经过测试,linux下,延时需要大于100ms
|
||||
TIME_DELAY_AFTER_WRITE = 200
|
||||
)
|
||||
|
||||
type Response struct {
|
||||
Data []string `json:"data"`
|
||||
}
|
||||
|
||||
type MMLRequest struct {
|
||||
MML []string `json:"mml"`
|
||||
}
|
||||
|
||||
func GetFile(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("PostMMLToNF processing... ")
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["elementTypeValue"]
|
||||
params := r.URL.Query()
|
||||
neId := params["ne_id"]
|
||||
log.Debug("neType:", neType, "neId", neId)
|
||||
|
||||
neInfo := new(dborm.NeInfo)
|
||||
var err error
|
||||
if len(neId) == 0 {
|
||||
log.Error("ne_id NOT FOUND")
|
||||
services.ResponseBadRequest400WrongParamValue(w)
|
||||
return
|
||||
}
|
||||
neInfo, err = dborm.XormGetNeInfo(neType, neId[0])
|
||||
if err != nil {
|
||||
log.Error("dborm.XormGetNeInfo is failed:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
}
|
||||
|
||||
var buf [8192]byte
|
||||
var n int
|
||||
var mmlResult []string
|
||||
|
||||
if neInfo != nil {
|
||||
hostMML := fmt.Sprintf("%s:%d", neInfo.Ip, config.GetYamlConfig().MML.Port)
|
||||
conn, err := net.Dial("tcp", hostMML)
|
||||
if err != nil {
|
||||
errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err)
|
||||
log.Error(errMsg)
|
||||
mmlResult = append(mmlResult, errMsg)
|
||||
response := Response{mmlResult}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
return
|
||||
}
|
||||
|
||||
loginStr := fmt.Sprintf("%s\n%s\n", config.GetYamlConfig().MML.User, config.GetYamlConfig().MML.Password)
|
||||
n, err = conn.Write([]byte(loginStr))
|
||||
if err != nil {
|
||||
log.Errorf("Error: %s", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE)
|
||||
|
||||
n, err = conn.Read(buf[0:])
|
||||
if err != nil {
|
||||
log.Errorf("Error: %s", err.Error())
|
||||
return
|
||||
}
|
||||
log.Debug(string(buf[0:n]))
|
||||
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
|
||||
if err != nil {
|
||||
log.Error("io.ReadAll is failed:", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
log.Debug("Body:", string(body))
|
||||
|
||||
mmlRequest := new(MMLRequest)
|
||||
_ = json.Unmarshal(body, mmlRequest)
|
||||
|
||||
for _, mml := range mmlRequest.MML {
|
||||
mmlCommand := fmt.Sprintf("%s\n", mml)
|
||||
log.Debug("mml command:", mmlCommand)
|
||||
n, err = conn.Write([]byte(mmlCommand))
|
||||
if err != nil {
|
||||
log.Errorf("Error: %s", err.Error())
|
||||
return
|
||||
}
|
||||
time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE)
|
||||
|
||||
n, err = conn.Read(buf[0:])
|
||||
if err != nil {
|
||||
log.Errorf("Error: %s", err.Error())
|
||||
return
|
||||
}
|
||||
log.Debug(string(buf[0 : n-len(neType)-2]))
|
||||
mmlResult = append(mmlResult, string(buf[0:n-len(neType)-2]))
|
||||
}
|
||||
}
|
||||
|
||||
response := Response{mmlResult}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
}
|
||||
58
lib/global/global.go
Normal file
58
lib/global/global.go
Normal file
@@ -0,0 +1,58 @@
|
||||
package global
|
||||
|
||||
import "errors"
|
||||
|
||||
// 跨package引用的首字母大写
|
||||
const (
|
||||
RequestBodyMaxLen = 2000000
|
||||
ApiVersionV1 = "v1"
|
||||
ApiVersionV2 = "v2"
|
||||
LineBreak = "\n"
|
||||
)
|
||||
|
||||
const (
|
||||
DateTime = "2006-01-02 15:04:05"
|
||||
DateData = "20060102150405"
|
||||
DateHour = "2006010215"
|
||||
)
|
||||
|
||||
const (
|
||||
MaxInt32Number = 2147483647
|
||||
)
|
||||
|
||||
const (
|
||||
MaxLimitData = 1000
|
||||
)
|
||||
|
||||
var (
|
||||
Version string
|
||||
BuildTime string
|
||||
GoVer string
|
||||
)
|
||||
|
||||
var (
|
||||
ErrParamsNotAdapted = errors.New("the number of params is not adapted")
|
||||
|
||||
// PM module error message
|
||||
ErrPMNotFoundData = errors.New("not found PM data")
|
||||
|
||||
// CM module error message
|
||||
ErrCMNotFoundTargetNE = errors.New("not found target NE")
|
||||
ErrCMCannotDeleteActiveNE = errors.New("can not delete an active NE")
|
||||
ErrCMInvalidBackupFile = errors.New("invalid backup file")
|
||||
ErrCMNotMatchMD5File = errors.New("md5 not match between file and url")
|
||||
ErrCMNotMatchSignFile = errors.New("digests signatures not match in the file")
|
||||
ErrCMExistSoftwareFile = errors.New("exist the same software package file")
|
||||
ErrCMNotFoundTargetSoftware = errors.New("not found the target software package")
|
||||
ErrCMNotFoundTargetNeVersion = errors.New("not found the target NE version")
|
||||
ErrCMNotFoundRollbackNeVersion = errors.New("not found the rollback NE version")
|
||||
|
||||
ErrCMNotFoundTargetBackupFile = errors.New("not found the target NE backup")
|
||||
|
||||
// TRACE module error message
|
||||
ErrTraceFailedDistributeToNEs = errors.New("failed to distribute trace task to target NEs")
|
||||
ErrTraceNotCarriedTaskID = errors.New("not carried task id in request url")
|
||||
|
||||
// MML module error define
|
||||
ErrMmlInvalidCommandFormat = errors.New("invalid mml command format")
|
||||
)
|
||||
479
lib/global/kits.go
Normal file
479
lib/global/kits.go
Normal file
@@ -0,0 +1,479 @@
|
||||
package global
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/md5"
|
||||
"encoding/hex"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
IsIPv4 = "IPv4"
|
||||
IsIPv6 = "IPv6"
|
||||
NonIP = "NonIp"
|
||||
)
|
||||
|
||||
type em struct{}
|
||||
|
||||
func GetPkgName() string {
|
||||
return reflect.TypeOf(em{}).PkgPath()
|
||||
}
|
||||
|
||||
// interface{} change to map[string]interface{}
|
||||
// interface{} data is []interface{}
|
||||
func ListToMap(list interface{}, key string) map[string]interface{} {
|
||||
res := make(map[string]interface{})
|
||||
arr := ToSlice(list)
|
||||
for _, row := range arr {
|
||||
immutable := reflect.ValueOf(row)
|
||||
val := immutable.FieldByName(key).String()
|
||||
res[val] = row
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
// interface{} change to []interface{}
|
||||
func ToSlice(arr interface{}) []interface{} {
|
||||
ret := make([]interface{}, 0)
|
||||
v := reflect.ValueOf(arr)
|
||||
if v.Kind() != reflect.Slice {
|
||||
ret = append(ret, arr)
|
||||
return ret
|
||||
}
|
||||
l := v.Len()
|
||||
for i := 0; i < l; i++ {
|
||||
ret = append(ret, v.Index(i).Interface())
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
var TodoList []Todo
|
||||
|
||||
type Todo struct {
|
||||
Id int64
|
||||
Item string
|
||||
}
|
||||
|
||||
// JSON序列化方式
|
||||
func jsonStructToMap(TodoList Todo) (map[string]interface{}, error) {
|
||||
// 结构体转json
|
||||
strRet, err := json.Marshal(TodoList)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// json转map
|
||||
var mRet map[string]interface{}
|
||||
err1 := json.Unmarshal(strRet, &mRet)
|
||||
if err1 != nil {
|
||||
return nil, err1
|
||||
}
|
||||
return mRet, nil
|
||||
}
|
||||
|
||||
func IsContain(item string, items []string) bool {
|
||||
for _, e := range items {
|
||||
if e == item {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func IsContainP(item string, items *[]string, size int) bool {
|
||||
for i := 0; i < size; i++ {
|
||||
if (*items)[i] == item {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// 将字符串 分割成 字符串数组
|
||||
// @s:分割符
|
||||
func SplitString(str string, s string) []string {
|
||||
sa := strings.Split(str, s)
|
||||
return sa
|
||||
}
|
||||
|
||||
// 合并字符串数组
|
||||
func MergeStringArr(a, b []string) []string {
|
||||
var arr []string
|
||||
for _, i := range a {
|
||||
arr = append(arr, i)
|
||||
}
|
||||
for _, j := range b {
|
||||
arr = append(arr, j)
|
||||
}
|
||||
return arr
|
||||
}
|
||||
|
||||
// 数组去重
|
||||
func UniqueStringArr(m []string) []string {
|
||||
d := make([]string, 0)
|
||||
tempMap := make(map[string]bool, len(m))
|
||||
for _, v := range m { // 以值作为键名
|
||||
if tempMap[v] == false {
|
||||
tempMap[v] = true
|
||||
d = append(d, v)
|
||||
}
|
||||
}
|
||||
return d
|
||||
}
|
||||
|
||||
// 合并整型数组
|
||||
func MergeArr(a, b []int) []int {
|
||||
var arr []int
|
||||
for _, i := range a {
|
||||
arr = append(arr, i)
|
||||
}
|
||||
for _, j := range b {
|
||||
arr = append(arr, j)
|
||||
}
|
||||
return arr
|
||||
}
|
||||
|
||||
// 数组去重
|
||||
func UniqueArr(m []int) []int {
|
||||
d := make([]int, 0)
|
||||
tempMap := make(map[int]bool, len(m))
|
||||
for _, v := range m { // 以值作为键名
|
||||
if tempMap[v] == false {
|
||||
tempMap[v] = true
|
||||
d = append(d, v)
|
||||
}
|
||||
}
|
||||
return d
|
||||
}
|
||||
|
||||
// 升序
|
||||
func AscArr(e []int) []int {
|
||||
sort.Ints(e[:])
|
||||
return e
|
||||
}
|
||||
|
||||
// 降序
|
||||
func DescArr(e []int) []int {
|
||||
sort.Sort(sort.Reverse(sort.IntSlice(e)))
|
||||
return e
|
||||
}
|
||||
|
||||
func MatchRmUID(p string, s string) bool {
|
||||
match, _ := regexp.MatchString(p, s)
|
||||
return match
|
||||
}
|
||||
|
||||
type OrderedMap struct {
|
||||
Order []string
|
||||
Map map[string]interface{}
|
||||
}
|
||||
|
||||
func (om *OrderedMap) UnmarshalJson(b []byte) error {
|
||||
json.Unmarshal(b, &om.Map)
|
||||
|
||||
index := make(map[string]int)
|
||||
for key := range om.Map {
|
||||
om.Order = append(om.Order, key)
|
||||
esc, _ := json.Marshal(key) //Escape the key
|
||||
index[key] = bytes.Index(b, esc)
|
||||
}
|
||||
|
||||
sort.Slice(om.Order, func(i, j int) bool { return index[om.Order[i]] < index[om.Order[j]] })
|
||||
return nil
|
||||
}
|
||||
|
||||
func (om OrderedMap) MarshalJson() ([]byte, error) {
|
||||
var b []byte
|
||||
buf := bytes.NewBuffer(b)
|
||||
buf.WriteRune('{')
|
||||
l := len(om.Order)
|
||||
for i, key := range om.Order {
|
||||
km, err := json.Marshal(key)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
buf.Write(km)
|
||||
buf.WriteRune(':')
|
||||
vm, err := json.Marshal(om.Map[key])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
buf.Write(vm)
|
||||
if i != l-1 {
|
||||
buf.WriteRune(',')
|
||||
}
|
||||
fmt.Println(buf.String())
|
||||
}
|
||||
buf.WriteRune('}')
|
||||
fmt.Println(buf.String())
|
||||
return buf.Bytes(), nil
|
||||
}
|
||||
|
||||
func GetBodyCopy(r *http.Request) (*bytes.Buffer, error) {
|
||||
// If r.bodyBuf present, return the copy
|
||||
// if r.bodyBuf != nil {
|
||||
// return bytes.NewBuffer(r.bodyBuf.Bytes()), nil
|
||||
// }
|
||||
|
||||
// Maybe body is `io.Reader`.
|
||||
// Note: Resty user have to watchout for large body size of `io.Reader`
|
||||
if r.Body != nil {
|
||||
b, err := io.ReadAll(r.Body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Restore the Body
|
||||
// close(r.Body)
|
||||
r.Body = io.NopCloser(bytes.NewReader(b))
|
||||
|
||||
// Return the Body bytes
|
||||
return bytes.NewBuffer(b), nil
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func UnmarshalBody(r *http.Request, v *interface{}, maxLen int64) error {
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, maxLen))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return json.Unmarshal(body, v)
|
||||
}
|
||||
|
||||
func SetNotifyUrl(ip string, port uint16, uri string) string {
|
||||
return fmt.Sprintf("http://%s:%d%s", ip, port, uri)
|
||||
}
|
||||
|
||||
func GetIps() (ips []string, err error) {
|
||||
interfaceAddr, err := net.InterfaceAddrs()
|
||||
if err != nil {
|
||||
return ips, err
|
||||
}
|
||||
|
||||
for _, address := range interfaceAddr {
|
||||
ipNet, isVailIpNet := address.(*net.IPNet)
|
||||
// 检查ip地址判断是否回环地址
|
||||
if isVailIpNet && !ipNet.IP.IsLoopback() {
|
||||
if ipNet.IP.To4() != nil {
|
||||
ips = append(ips, ipNet.IP.String())
|
||||
}
|
||||
}
|
||||
}
|
||||
return ips, nil
|
||||
}
|
||||
|
||||
func GetCurrentTimeSliceIndexByPeriod(t time.Time, period int) int {
|
||||
index := int((t.Hour()*60+t.Minute())/period) - 1
|
||||
if index < 0 {
|
||||
return int(24*60/period) - 1
|
||||
}
|
||||
return index
|
||||
}
|
||||
|
||||
var (
|
||||
cst *time.Location
|
||||
)
|
||||
|
||||
// RFC3339ToDateTime convert rfc3339 value to china standard time layout
|
||||
func RFC3339ToDateTime(value string) (string, error) {
|
||||
ts, err := time.Parse(time.RFC3339, value)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return ts.In(cst).Format("2006-01-02 15:04:05"), nil
|
||||
}
|
||||
|
||||
// CreateTimeDir 根据当前时间格式来创建文件夹
|
||||
func CreateTimeDir(fmt string, path string) string {
|
||||
folderName := time.Now().Format(fmt)
|
||||
folderPath := filepath.Join(path, folderName)
|
||||
if _, err := os.Stat(folderPath); os.IsNotExist(err) {
|
||||
// 必须分成两步:先创建文件夹、再修改权限
|
||||
os.Mkdir(folderPath, 0664) //0644也可以os.ModePerm
|
||||
os.Chmod(folderPath, 0664)
|
||||
}
|
||||
return folderPath
|
||||
}
|
||||
|
||||
// CreateDir 根据传入的目录名和路径来创建文件夹
|
||||
func CreateDir(folderName string, path string) string {
|
||||
folderPath := filepath.Join(path, folderName)
|
||||
if _, err := os.Stat(folderPath); os.IsNotExist(err) {
|
||||
// 必须分成两步:先创建文件夹、再修改权限
|
||||
os.Mkdir(folderPath, 0664) //0644也可以os.ModePerm
|
||||
os.Chmod(folderPath, 0664)
|
||||
}
|
||||
return folderPath
|
||||
}
|
||||
|
||||
func GetFmtTimeString(srcFmt string, timeString string, dstFmt string) string {
|
||||
t, _ := time.ParseInLocation(srcFmt, timeString, time.Local)
|
||||
return t.Format(dstFmt)
|
||||
}
|
||||
|
||||
func GetFileMD5Sum(filePath string) (string, error) {
|
||||
file, err := os.Open(filePath)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer file.Close()
|
||||
md5 := md5.New()
|
||||
_, err = io.Copy(md5, file)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
md5str := hex.EncodeToString(md5.Sum(nil))
|
||||
|
||||
return md5str, nil
|
||||
}
|
||||
|
||||
// PathExists check path is exist or no
|
||||
func PathExists(path string) (bool, error) {
|
||||
_, err := os.Stat(path)
|
||||
if err == nil { //文件或者目录存在
|
||||
return true, nil
|
||||
}
|
||||
if os.IsNotExist(err) {
|
||||
return false, nil
|
||||
}
|
||||
return false, err
|
||||
}
|
||||
|
||||
func GetDayDuration(d1, d2 string) int64 {
|
||||
a, _ := time.Parse("2006-01-02", d1)
|
||||
b, _ := time.Parse("2006-01-02", d2)
|
||||
d := a.Sub(b)
|
||||
|
||||
return (int64)(d.Hours() / 24)
|
||||
}
|
||||
|
||||
func GetSecondsSinceDatetime(datetimeStr string) (int64, error) {
|
||||
loc1, _ := time.LoadLocation("Local")
|
||||
// 解析日期时间字符串为时间对象
|
||||
datetime, err := time.ParseInLocation(time.DateTime, datetimeStr, loc1)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
// 计算时间差
|
||||
duration := time.Since(datetime)
|
||||
|
||||
// 获取时间差的秒数
|
||||
seconds := int64(duration.Seconds())
|
||||
|
||||
return seconds, nil
|
||||
}
|
||||
|
||||
// 0: invalid ip
|
||||
// 4: IPv4
|
||||
// 6: IPv6
|
||||
func ParseIP(s string) (net.IP, int) {
|
||||
ip := net.ParseIP(s)
|
||||
if ip == nil {
|
||||
return nil, 0
|
||||
}
|
||||
for i := 0; i < len(s); i++ {
|
||||
switch s[i] {
|
||||
case '.':
|
||||
return ip, 4
|
||||
case ':':
|
||||
return ip, 6
|
||||
}
|
||||
}
|
||||
return nil, 0
|
||||
}
|
||||
|
||||
func BytesCombine1(pBytes ...[]byte) []byte {
|
||||
return bytes.Join(pBytes, []byte(""))
|
||||
}
|
||||
|
||||
func BytesCombine(pBytes ...[]byte) []byte {
|
||||
length := len(pBytes)
|
||||
s := make([][]byte, length)
|
||||
for index := 0; index < length; index++ {
|
||||
s[index] = pBytes[index]
|
||||
}
|
||||
sep := []byte("")
|
||||
return bytes.Join(s, sep)
|
||||
}
|
||||
|
||||
func ParseIPAddr(ip string) string {
|
||||
ipAddr := net.ParseIP(ip)
|
||||
|
||||
if ipAddr != nil {
|
||||
if ipAddr.To4() != nil {
|
||||
return IsIPv4
|
||||
} else {
|
||||
return IsIPv6
|
||||
}
|
||||
}
|
||||
|
||||
return NonIP
|
||||
}
|
||||
|
||||
func CombineHostUri(ip string, port string) string {
|
||||
var hostUri string = ""
|
||||
ipType := ParseIPAddr(ip)
|
||||
if ipType == IsIPv4 {
|
||||
hostUri = fmt.Sprintf("http://%s:%v", ip, port)
|
||||
} else {
|
||||
hostUri = fmt.Sprintf("http://[%s]:%v", ip, port)
|
||||
}
|
||||
|
||||
return hostUri
|
||||
}
|
||||
|
||||
func StructToMap(obj interface{}) map[string]interface{} {
|
||||
objValue := reflect.ValueOf(obj)
|
||||
objType := objValue.Type()
|
||||
|
||||
m := make(map[string]interface{})
|
||||
|
||||
for i := 0; i < objValue.NumField(); i++ {
|
||||
field := objValue.Field(i)
|
||||
fieldName := objType.Field(i).Name
|
||||
|
||||
m[fieldName] = field.Interface()
|
||||
}
|
||||
|
||||
return m
|
||||
}
|
||||
|
||||
// ToMap 结构体转为Map[string]interface{}
|
||||
func ToMap(in interface{}, tagName string) (map[string]interface{}, error) {
|
||||
out := make(map[string]interface{})
|
||||
|
||||
v := reflect.ValueOf(in)
|
||||
if v.Kind() == reflect.Ptr {
|
||||
v = v.Elem()
|
||||
}
|
||||
|
||||
if v.Kind() != reflect.Struct { // 非结构体返回错误提示
|
||||
return nil, fmt.Errorf("ToMap only accepts struct or struct pointer; got %T", v)
|
||||
}
|
||||
|
||||
t := v.Type()
|
||||
// 遍历结构体字段
|
||||
// 指定tagName值为map中key;字段值为map中value
|
||||
for i := 0; i < v.NumField(); i++ {
|
||||
fi := t.Field(i)
|
||||
if tagValue := fi.Tag.Get(tagName); tagValue != "" {
|
||||
out[tagValue] = v.Field(i).Interface()
|
||||
}
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
337
lib/log/logger.go
Normal file
337
lib/log/logger.go
Normal file
@@ -0,0 +1,337 @@
|
||||
// logger for omc/ems
|
||||
|
||||
package log
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
)
|
||||
|
||||
// LogLevel defines a log level
|
||||
type LogLevel int
|
||||
|
||||
// enum all LogLevels
|
||||
const (
|
||||
// following level also match syslog.Priority value
|
||||
LOG_TRACE LogLevel = iota
|
||||
LOG_DEBUG
|
||||
LOG_INFO
|
||||
LOG_WARN
|
||||
LOG_ERROR
|
||||
LOG_FATAL
|
||||
LOG_OFF
|
||||
LOG_NODEF
|
||||
)
|
||||
|
||||
// default log options
|
||||
const (
|
||||
DEFAULT_LOG_PREFIX = "omc"
|
||||
DEFAULT_LOG_FLAG = log.Lshortfile | log.Ldate | log.Lmicroseconds
|
||||
DEFAULT_LOG_LEVEL = LOG_DEBUG
|
||||
DEFAULT_CALL_DEPTH = 3
|
||||
)
|
||||
|
||||
// Logger is a logger interface
|
||||
type Logger interface {
|
||||
Fatal(v ...interface{})
|
||||
Fatalf(format string, v ...interface{})
|
||||
Error(v ...interface{})
|
||||
Errorf(format string, v ...interface{})
|
||||
Warn(v ...interface{})
|
||||
Warnf(format string, v ...interface{})
|
||||
Info(v ...interface{})
|
||||
Infof(format string, v ...interface{})
|
||||
Debug(v ...interface{})
|
||||
Debugf(format string, v ...interface{})
|
||||
Trace(v ...interface{})
|
||||
Tracef(format string, v ...interface{})
|
||||
|
||||
Level() LogLevel
|
||||
LevelString() string
|
||||
SetLevel(l LogLevel)
|
||||
}
|
||||
|
||||
var _ Logger = DiscardLogger{}
|
||||
|
||||
// DiscardLogger don't log implementation for ILogger
|
||||
type DiscardLogger struct{}
|
||||
|
||||
// Trace empty implementation
|
||||
func (DiscardLogger) Trace(v ...interface{}) {}
|
||||
|
||||
// Tracef empty implementation
|
||||
func (DiscardLogger) Tracef(format string, v ...interface{}) {}
|
||||
|
||||
// Debug empty implementation
|
||||
func (DiscardLogger) Debug(v ...interface{}) {}
|
||||
|
||||
// Debugf empty implementation
|
||||
func (DiscardLogger) Debugf(format string, v ...interface{}) {}
|
||||
|
||||
// Info empty implementation
|
||||
func (DiscardLogger) Info(v ...interface{}) {}
|
||||
|
||||
// Infof empty implementation
|
||||
func (DiscardLogger) Infof(format string, v ...interface{}) {}
|
||||
|
||||
// Warn empty implementation
|
||||
func (DiscardLogger) Warn(v ...interface{}) {}
|
||||
|
||||
// Warnf empty implementation
|
||||
func (DiscardLogger) Warnf(format string, v ...interface{}) {}
|
||||
|
||||
// Error empty implementation
|
||||
func (DiscardLogger) Error(v ...interface{}) {}
|
||||
|
||||
// Errorf empty implementation
|
||||
func (DiscardLogger) Errorf(format string, v ...interface{}) {}
|
||||
|
||||
// Fatal empty implementation
|
||||
func (DiscardLogger) Fatal(v ...interface{}) {}
|
||||
|
||||
// Fatalf empty implementation
|
||||
func (DiscardLogger) Fatalf(format string, v ...interface{}) {}
|
||||
|
||||
// Level empty implementation
|
||||
func (DiscardLogger) Level() LogLevel {
|
||||
return LOG_NODEF
|
||||
}
|
||||
|
||||
// Level empty implementation
|
||||
func (DiscardLogger) LevelString() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
// SetLevel empty implementation
|
||||
func (DiscardLogger) SetLevel(l LogLevel) {}
|
||||
|
||||
// EmsLogger is the default implment of ILogger
|
||||
type EmsLogger struct {
|
||||
TRACE *log.Logger
|
||||
DEBUG *log.Logger
|
||||
INFO *log.Logger
|
||||
WARN *log.Logger
|
||||
ERROR *log.Logger
|
||||
FATAL *log.Logger
|
||||
level LogLevel
|
||||
levelString []string
|
||||
depth int
|
||||
}
|
||||
|
||||
var _ Logger = &EmsLogger{}
|
||||
|
||||
// NewEmsLogger use a special io.Writer as logger output
|
||||
func NewEmsLogger(out io.Writer) *EmsLogger {
|
||||
return NewEmsLogger2(out, DEFAULT_LOG_PREFIX, DEFAULT_LOG_FLAG)
|
||||
}
|
||||
|
||||
// NewEmsLogger2 let you customrize your logger prefix and flag
|
||||
func NewEmsLogger2(out io.Writer, prefix string, flag int) *EmsLogger {
|
||||
return NewEmsLogger3(out, prefix, flag, DEFAULT_LOG_LEVEL)
|
||||
}
|
||||
|
||||
// NewEmsLogger3 let you customrize your logger prefix and flag and logLevel
|
||||
func NewEmsLogger3(out io.Writer, prefix string, flag int, l LogLevel) *EmsLogger {
|
||||
return &EmsLogger{
|
||||
TRACE: log.New(out, fmt.Sprintf("[%s] [trace] ", prefix), flag),
|
||||
DEBUG: log.New(out, fmt.Sprintf("[%s] [debug] ", prefix), flag),
|
||||
INFO: log.New(out, fmt.Sprintf("[%s] [info ] ", prefix), flag),
|
||||
WARN: log.New(out, fmt.Sprintf("[%s] [warn ] ", prefix), flag),
|
||||
ERROR: log.New(out, fmt.Sprintf("[%s] [error] ", prefix), flag),
|
||||
FATAL: log.New(out, fmt.Sprintf("[%s] [fatal] ", prefix), flag),
|
||||
level: l,
|
||||
levelString: []string{"trace", "debug", "info", "warn", "error", "fatal"},
|
||||
depth: DEFAULT_CALL_DEPTH,
|
||||
}
|
||||
}
|
||||
|
||||
// Trace implement ILogger
|
||||
func (s *EmsLogger) Trace(v ...interface{}) {
|
||||
if s.level <= LOG_TRACE {
|
||||
_ = s.TRACE.Output(s.depth, fmt.Sprintln(v...))
|
||||
}
|
||||
}
|
||||
|
||||
// Tracef implement ILogger
|
||||
func (s *EmsLogger) Tracef(format string, v ...interface{}) {
|
||||
if s.level <= LOG_TRACE {
|
||||
_ = s.TRACE.Output(s.depth, fmt.Sprintf(format, v...))
|
||||
}
|
||||
}
|
||||
|
||||
// Debug implement ILogger
|
||||
func (s *EmsLogger) Debug(v ...interface{}) {
|
||||
if s.level <= LOG_DEBUG {
|
||||
_ = s.DEBUG.Output(s.depth, fmt.Sprintln(v...))
|
||||
}
|
||||
}
|
||||
|
||||
// Debugf implement ILogger
|
||||
func (s *EmsLogger) Debugf(format string, v ...interface{}) {
|
||||
if s.level <= LOG_DEBUG {
|
||||
_ = s.DEBUG.Output(s.depth, fmt.Sprintf(format, v...))
|
||||
}
|
||||
}
|
||||
|
||||
// Info implement ILogger
|
||||
func (s *EmsLogger) Info(v ...interface{}) {
|
||||
if s.level <= LOG_INFO {
|
||||
_ = s.INFO.Output(s.depth, fmt.Sprintln(v...))
|
||||
}
|
||||
}
|
||||
|
||||
// Infof implement ILogger
|
||||
func (s *EmsLogger) Infof(format string, v ...interface{}) {
|
||||
if s.level <= LOG_INFO {
|
||||
_ = s.INFO.Output(s.depth, fmt.Sprintf(format, v...))
|
||||
}
|
||||
}
|
||||
|
||||
// Warn implement ILogger
|
||||
func (s *EmsLogger) Warn(v ...interface{}) {
|
||||
if s.level <= LOG_WARN {
|
||||
_ = s.WARN.Output(s.depth, fmt.Sprintln(v...))
|
||||
}
|
||||
}
|
||||
|
||||
// Warnf implement ILogger
|
||||
func (s *EmsLogger) Warnf(format string, v ...interface{}) {
|
||||
if s.level <= LOG_WARN {
|
||||
_ = s.WARN.Output(s.depth, fmt.Sprintf(format, v...))
|
||||
}
|
||||
}
|
||||
|
||||
// Error implement ILogger
|
||||
func (s *EmsLogger) Error(v ...interface{}) {
|
||||
if s.level <= LOG_ERROR {
|
||||
_ = s.ERROR.Output(s.depth, fmt.Sprintln(v...))
|
||||
}
|
||||
}
|
||||
|
||||
// Errorf implement ILogger
|
||||
func (s *EmsLogger) Errorf(format string, v ...interface{}) {
|
||||
if s.level <= LOG_ERROR {
|
||||
_ = s.ERROR.Output(s.depth, fmt.Sprintf(format, v...))
|
||||
}
|
||||
}
|
||||
|
||||
// Warn implement ILogger
|
||||
func (s *EmsLogger) Fatal(v ...interface{}) {
|
||||
if s.level <= LOG_FATAL {
|
||||
_ = s.FATAL.Output(s.depth, fmt.Sprintln(v...))
|
||||
}
|
||||
}
|
||||
|
||||
// Warnf implement ILogger
|
||||
func (s *EmsLogger) Fatalf(format string, v ...interface{}) {
|
||||
if s.level <= LOG_FATAL {
|
||||
_ = s.FATAL.Output(s.depth, fmt.Sprintf(format, v...))
|
||||
}
|
||||
}
|
||||
|
||||
// Level implement ILogger
|
||||
func (s *EmsLogger) Level() LogLevel {
|
||||
return s.level
|
||||
}
|
||||
|
||||
// Level implement ILogger
|
||||
func (s *EmsLogger) LevelString() string {
|
||||
return s.levelString[s.level]
|
||||
}
|
||||
|
||||
// SetLevel implement ILogger
|
||||
func (s *EmsLogger) SetLevel(l LogLevel) {
|
||||
s.level = l
|
||||
}
|
||||
|
||||
var Elogger Logger
|
||||
|
||||
func InitLogger(logFile string, period int, count int, prefix string, logLevel LogLevel) {
|
||||
|
||||
/*
|
||||
logFile, err := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
*/
|
||||
|
||||
logWriter := getLogWriter(logFile, period, count)
|
||||
Elogger = NewEmsLogger3(logWriter, prefix, DEFAULT_LOG_FLAG, logLevel)
|
||||
fmt.Printf("logFile=%s, period=%d, count=%d, prefix=%s, logLevel=%s\n", logFile, period, count, prefix, GetLevelString())
|
||||
}
|
||||
|
||||
// Trace implement ILogger
|
||||
func Trace(v ...interface{}) {
|
||||
Elogger.Trace(v...)
|
||||
}
|
||||
|
||||
// Tracef implement ILogger
|
||||
func Tracef(format string, v ...interface{}) {
|
||||
Elogger.Tracef(format, v...)
|
||||
}
|
||||
|
||||
// Debug implement ILogger
|
||||
func Debug(v ...interface{}) {
|
||||
Elogger.Debug(v...)
|
||||
}
|
||||
|
||||
// Debugf implement ILogger
|
||||
func Debugf(format string, v ...interface{}) {
|
||||
Elogger.Debugf(format, v...)
|
||||
}
|
||||
|
||||
// Info implement ILogger
|
||||
func Info(v ...interface{}) {
|
||||
Elogger.Info(v...)
|
||||
}
|
||||
|
||||
// Infof implement ILogger
|
||||
func Infof(format string, v ...interface{}) {
|
||||
Elogger.Infof(format, v...)
|
||||
}
|
||||
|
||||
// Warn implement ILogger
|
||||
func Warn(v ...interface{}) {
|
||||
Elogger.Warn(v...)
|
||||
}
|
||||
|
||||
// Warnf implement ILogger
|
||||
func Warnf(format string, v ...interface{}) {
|
||||
Elogger.Warnf(format, v...)
|
||||
}
|
||||
|
||||
// Error implement ILogger
|
||||
func Error(v ...interface{}) {
|
||||
Elogger.Error(v...)
|
||||
}
|
||||
|
||||
// Errorf implement ILogger
|
||||
func Errorf(format string, v ...interface{}) {
|
||||
Elogger.Errorf(format, v...)
|
||||
}
|
||||
|
||||
// Warn implement ILogger
|
||||
func Fatal(v ...interface{}) {
|
||||
Elogger.Fatal(v...)
|
||||
}
|
||||
|
||||
// Warnf implement ILogger
|
||||
func Fatalf(format string, v ...interface{}) {
|
||||
Elogger.Fatalf(format, v...)
|
||||
}
|
||||
|
||||
// Level implement ILogger
|
||||
func GetLevel() LogLevel {
|
||||
return Elogger.Level()
|
||||
}
|
||||
|
||||
// Level implement ILogger
|
||||
func GetLevelString() string {
|
||||
return Elogger.LevelString()
|
||||
}
|
||||
|
||||
// SetLevel implement ILogger
|
||||
func SetLevel(l LogLevel) {
|
||||
Elogger.SetLevel(l)
|
||||
}
|
||||
71
lib/log/partition.go
Normal file
71
lib/log/partition.go
Normal file
@@ -0,0 +1,71 @@
|
||||
package log
|
||||
|
||||
import (
|
||||
"io"
|
||||
"time"
|
||||
|
||||
rotatelogs "github.com/lestrrat/go-file-rotatelogs"
|
||||
)
|
||||
|
||||
type WriteSyncer interface {
|
||||
io.Writer
|
||||
Sync() error
|
||||
}
|
||||
|
||||
// 得到LogWriter
|
||||
func getLogWriter(filePath string, period, count int) WriteSyncer {
|
||||
warnIoWriter := getWriter(filePath, period, count)
|
||||
return addSync(warnIoWriter)
|
||||
}
|
||||
|
||||
// 日志文件切割
|
||||
func getWriter(filename string, period, count int) io.Writer {
|
||||
// 保存日志count天,每period小时分割一次日志
|
||||
duration := time.Hour * time.Duration(period)
|
||||
var logfile string
|
||||
if period >= 24 {
|
||||
logfile = filename + "-%Y%m%d"
|
||||
} else {
|
||||
logfile = filename + "-%Y%m%d%H"
|
||||
}
|
||||
hook, err := rotatelogs.New(
|
||||
|
||||
logfile,
|
||||
rotatelogs.WithLinkName(filename),
|
||||
// rotatelogs.WithMaxAge(duration),
|
||||
rotatelogs.WithRotationCount(count),
|
||||
rotatelogs.WithRotationTime(duration),
|
||||
rotatelogs.WithLocation(time.Local),
|
||||
)
|
||||
|
||||
//保存日志30天,每1分钟分割一次日志
|
||||
/*
|
||||
hook, err := rotatelogs.New(
|
||||
filename+"_%Y%m%d%H%M.log",
|
||||
rotatelogs.WithLinkName(filename),
|
||||
rotatelogs.WithMaxAge(time.Hour*24*30),
|
||||
rotatelogs.WithRotationTime(time.Minute*1),
|
||||
)
|
||||
*/
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return hook
|
||||
}
|
||||
|
||||
func addSync(w io.Writer) WriteSyncer {
|
||||
switch w := w.(type) {
|
||||
case WriteSyncer:
|
||||
return w
|
||||
default:
|
||||
return writerWrapper{w}
|
||||
}
|
||||
}
|
||||
|
||||
type writerWrapper struct {
|
||||
io.Writer
|
||||
}
|
||||
|
||||
func (w writerWrapper) Sync() error {
|
||||
return nil
|
||||
}
|
||||
89
lib/log/syslogger.go.bak
Normal file
89
lib/log/syslogger.go.bak
Normal file
@@ -0,0 +1,89 @@
|
||||
//go:build !windows && !nacl && !plan9
|
||||
// +build !windows,!nacl,!plan9
|
||||
|
||||
package log
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log/syslog"
|
||||
)
|
||||
|
||||
var _ Logger = &SyslogLogger{}
|
||||
|
||||
// SyslogLogger will be depricated
|
||||
type SyslogLogger struct {
|
||||
w *syslog.Writer
|
||||
}
|
||||
|
||||
// NewSyslogLogger implements Logger
|
||||
func NewSyslogLogger(w *syslog.Writer) *SyslogLogger {
|
||||
return &SyslogLogger{w: w}
|
||||
}
|
||||
|
||||
// Trace log content as Trace
|
||||
func (s *SyslogLogger) Trace(v ...interface{}) {
|
||||
_ = s.w.Trace(fmt.Sprint(v...))
|
||||
}
|
||||
|
||||
// Tracef log content as Trace and format
|
||||
func (s *SyslogLogger) Tracef(format string, v ...interface{}) {
|
||||
_ = s.w.Trace(fmt.Sprintf(format, v...))
|
||||
}
|
||||
|
||||
// Debug log content as Debug
|
||||
func (s *SyslogLogger) Debug(v ...interface{}) {
|
||||
_ = s.w.Debug(fmt.Sprint(v...))
|
||||
}
|
||||
|
||||
// Debugf log content as Debug and format
|
||||
func (s *SyslogLogger) Debugf(format string, v ...interface{}) {
|
||||
_ = s.w.Debug(fmt.Sprintf(format, v...))
|
||||
}
|
||||
|
||||
// Error log content as Error
|
||||
func (s *SyslogLogger) Error(v ...interface{}) {
|
||||
_ = s.w.Err(fmt.Sprint(v...))
|
||||
}
|
||||
|
||||
// Errorf log content as Errorf and format
|
||||
func (s *SyslogLogger) Errorf(format string, v ...interface{}) {
|
||||
_ = s.w.Err(fmt.Sprintf(format, v...))
|
||||
}
|
||||
|
||||
// Info log content as Info
|
||||
func (s *SyslogLogger) Info(v ...interface{}) {
|
||||
_ = s.w.Info(fmt.Sprint(v...))
|
||||
}
|
||||
|
||||
// Infof log content as Infof and format
|
||||
func (s *SyslogLogger) Infof(format string, v ...interface{}) {
|
||||
_ = s.w.Info(fmt.Sprintf(format, v...))
|
||||
}
|
||||
|
||||
// Warn log content as Warn
|
||||
func (s *SyslogLogger) Warn(v ...interface{}) {
|
||||
_ = s.w.Warn(fmt.Sprint(v...))
|
||||
}
|
||||
|
||||
// Warnf log content as Warnf and format
|
||||
func (s *SyslogLogger) Warnf(format string, v ...interface{}) {
|
||||
_ = s.w.Warn(fmt.Sprintf(format, v...))
|
||||
}
|
||||
|
||||
// Fatal log content as Fatal
|
||||
func (s *SyslogLogger) Fatal(v ...interface{}) {
|
||||
_ = s.w.Fatal(fmt.Sprint(v...))
|
||||
}
|
||||
|
||||
// Fatalf log content as Fatalf and format
|
||||
func (s *SyslogLogger) Fatalf(format string, v ...interface{}) {
|
||||
_ = s.w.Fatal(fmt.Sprintf(format, v...))
|
||||
}
|
||||
|
||||
// Level shows log level
|
||||
func (s *SyslogLogger) Level() LogLevel {
|
||||
return LOG_NODEF
|
||||
}
|
||||
|
||||
// SetLevel always return error, as current log/syslog package doesn't allow to set priority level after syslog.Writer created
|
||||
func (s *SyslogLogger) SetLevel(l LogLevel) {}
|
||||
30
lib/midware/midhandle.go
Normal file
30
lib/midware/midhandle.go
Normal file
@@ -0,0 +1,30 @@
|
||||
package midware
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"ems.agt/lib/log"
|
||||
)
|
||||
|
||||
func LoggerTraceMiddleware(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
// Do stuff here
|
||||
log.Trace("Http Trace Info:")
|
||||
log.Trace(" From Host:", r.RemoteAddr)
|
||||
log.Trace(" To Host:", r.Host)
|
||||
log.Debug(" RequestUri:", r.RequestURI)
|
||||
log.Trace(" Method:", r.Method)
|
||||
log.Trace(" Proto:", r.Proto)
|
||||
log.Trace(" ContentLength:", r.ContentLength)
|
||||
log.Trace(" User-Agent:", r.Header.Get("User-Agent"))
|
||||
log.Trace(" Content-Type:", r.Header.Get("Content-Type"))
|
||||
log.Trace(" AccessToken:", r.Header.Get("AccessToken"))
|
||||
log.Trace("Trace End=====")
|
||||
//body, _ := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
|
||||
// nop-close to ready r.Body !!!
|
||||
//r.Body = ioutil.NopCloser(bytes.NewReader(body))
|
||||
//log.Trace("Body:", string(body))
|
||||
// Call the next handler, which can be another middleware in the chain, or the final handler.
|
||||
next.ServeHTTP(w, r)
|
||||
})
|
||||
}
|
||||
900
lib/mmlp/parse.go
Normal file
900
lib/mmlp/parse.go
Normal file
@@ -0,0 +1,900 @@
|
||||
package mmlp
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"math"
|
||||
"net/http"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"github.com/go-resty/resty/v2"
|
||||
)
|
||||
|
||||
type Param struct {
|
||||
Name string `json:"name"`
|
||||
Value string `json:"value"`
|
||||
}
|
||||
|
||||
type MmlCommand struct {
|
||||
Operation string `json:"operation"`
|
||||
Object string `json:"object"`
|
||||
Params []Param `json:"params"`
|
||||
PaList []string `json:"paList"`
|
||||
AaList []string `json:"aaList"`
|
||||
AaMap map[string]interface{} `json:"aaMap"`
|
||||
NaMap map[string]interface{} `json:"naMap"`
|
||||
AaUri []string `json:"aaUri"`
|
||||
AaLoc []string `json:"aaLoc"` // for loc parameter
|
||||
}
|
||||
|
||||
type MmlVar struct {
|
||||
Version string `json:"version"`
|
||||
Output string `json:"output"`
|
||||
Limit int `json:"limit"`
|
||||
User string `json:"user"`
|
||||
SessionToken string `josn:"sessionToken"`
|
||||
HttpUri string `json:"httpUri"`
|
||||
UserAgent string `json:"userAgent"`
|
||||
}
|
||||
|
||||
// func init() {
|
||||
// OmcMmlVar = &MmlVar{
|
||||
// Version: "16.1.1",
|
||||
// Output: DefaultFormatType,
|
||||
// Limit: 50,
|
||||
// }
|
||||
// }
|
||||
|
||||
// func SetOmcMmlVarOutput(output string) {
|
||||
// OmcMmlVar.Output = output
|
||||
// }
|
||||
|
||||
// func SetOmcMmlVarLimit(limit int) {
|
||||
// OmcMmlVar.Limit = limit
|
||||
// }
|
||||
|
||||
func splitByColon(str string) []string {
|
||||
return splitBy(str, ':')
|
||||
}
|
||||
|
||||
func splitByComma(str string) []string {
|
||||
return splitBy(str, ',')
|
||||
}
|
||||
|
||||
func splitBy(str string, sep rune) []string {
|
||||
var result []string
|
||||
var stack []string
|
||||
var current []rune
|
||||
var quotes, apoFlag bool = false, false
|
||||
|
||||
for _, c := range str {
|
||||
if c == '{' || c == '[' || (c == '\'' && apoFlag == false) || (c == '"' && quotes == false) { // "'"
|
||||
apoFlag = true
|
||||
quotes = true
|
||||
stack = append(stack, string(c))
|
||||
} else if c == '}' || c == ']' || (c == '\'' && apoFlag == true) || (c == '"' && quotes == true) {
|
||||
apoFlag = false
|
||||
quotes = false
|
||||
if len(stack) > 0 {
|
||||
stack = stack[:len(stack)-1]
|
||||
}
|
||||
}
|
||||
|
||||
if c == sep && len(stack) == 0 {
|
||||
result = append(result, string(current))
|
||||
current = []rune{}
|
||||
} else {
|
||||
current = append(current, c)
|
||||
}
|
||||
}
|
||||
|
||||
result = append(result, string(current))
|
||||
return result
|
||||
}
|
||||
|
||||
func ParseMMLCommand(mmlStr string, mmlComms *[]MmlCommand) error {
|
||||
log.Info("ParseMMLCommand processing ...")
|
||||
log.Debug("mmlStr: ", mmlStr)
|
||||
|
||||
mc := new(MmlCommand)
|
||||
reg := regexp.MustCompile(`\s*;\s*`)
|
||||
mmls := reg.Split(mmlStr, -1)
|
||||
for _, mml := range mmls {
|
||||
log.Trace("mml:", mml)
|
||||
if len(mml) == 0 {
|
||||
continue
|
||||
}
|
||||
//reg := regexp.MustCompile(`\s*:\s*`)
|
||||
//ms := reg.Split(mml, -1)
|
||||
ms := splitByColon(mml)
|
||||
if len(ms) < 1 || len(ms) > 2 {
|
||||
err := global.ErrMmlInvalidCommandFormat
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
if len(ms) == 2 {
|
||||
cmd := strings.Trim(ms[0], " ")
|
||||
reg = regexp.MustCompile(`\s+`)
|
||||
cs := reg.Split(cmd, -1)
|
||||
//cs := strings.Split(cmd, " ")
|
||||
if len(cs) == 2 {
|
||||
mc.Operation = cs[0]
|
||||
mc.Object = cs[1]
|
||||
} else {
|
||||
err := global.ErrMmlInvalidCommandFormat
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
//reg = regexp.MustCompile(`\s*,\s*`)
|
||||
//reg = regexp.MustCompile(`(?U)(?<!\{[^{}]*),(?![^{}]*\})|(?<!\"[^\"]*),(?![^\"]*\")|(?<!\[[^\[\]]*),(?![^\[\]]*\])`)
|
||||
//reg = regexp.MustCompile(`,[^'"\(\)]+`)
|
||||
//params := reg.Split(ms[1], -1)
|
||||
params := splitByComma(strings.Trim(ms[1], " "))
|
||||
//params := strings.Split(ms[1], ",")
|
||||
for _, p := range params {
|
||||
log.Trace("p:", p)
|
||||
if p == "" {
|
||||
continue
|
||||
}
|
||||
mc.PaList = append(mc.PaList, p)
|
||||
reg = regexp.MustCompile(`\s*=\s*`)
|
||||
pvs := reg.Split(p, -1)
|
||||
log.Trace("pvs:", pvs)
|
||||
if len(pvs) == 2 {
|
||||
mc.Params = append(mc.Params, Param{Name: pvs[0], Value: pvs[1]})
|
||||
} else {
|
||||
err := global.ErrMmlInvalidCommandFormat
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else if len(ms) == 1 {
|
||||
cmd := ms[0]
|
||||
reg = regexp.MustCompile(`\s+`)
|
||||
cs := reg.Split(cmd, -1)
|
||||
//cs := strings.Split(cmd, " ")
|
||||
if len(cs) == 2 {
|
||||
mc.Operation = cs[0]
|
||||
mc.Object = cs[1]
|
||||
} else {
|
||||
err := global.ErrMmlInvalidCommandFormat
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
err := global.ErrMmlInvalidCommandFormat
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
err := ParseMMLAlias(mc)
|
||||
if err != nil {
|
||||
err := global.ErrMmlInvalidCommandFormat
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
*mmlComms = append(*mmlComms, *mc)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ParseMMLAlias(mml *MmlCommand) error {
|
||||
where := fmt.Sprintf("operation='%s' AND object='%s'", mml.Operation, mml.Object)
|
||||
mc, err := dborm.XormGetMmlCommand("mml_command", where)
|
||||
if err != nil {
|
||||
log.Error("Failed to XormGetMmlCommand: ", err)
|
||||
return err
|
||||
}
|
||||
if mc == nil {
|
||||
err := errors.New("Not found mml map")
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
log.Debug("mml command: ", mc)
|
||||
aaMap := make(map[string]interface{})
|
||||
naMap := make(map[string]interface{})
|
||||
for _, pn := range mml.Params {
|
||||
log.Trace("pn: ", pn)
|
||||
for _, param := range mc.ParamJson {
|
||||
log.Trace("param: ", param)
|
||||
var pv string
|
||||
if pn.Name == param.Name {
|
||||
if param.Apostr == "true" {
|
||||
pv = fmt.Sprintf("'%v'", pn.Value)
|
||||
} else {
|
||||
pv = fmt.Sprintf("%v", pn.Value)
|
||||
}
|
||||
var aa, av string
|
||||
|
||||
if param.Alias != "" {
|
||||
aa = fmt.Sprintf("%s=%v", param.Alias, pv)
|
||||
av = fmt.Sprintf("%v", pv)
|
||||
switch param.Type {
|
||||
case "int":
|
||||
aaMap[param.Alias] = pn.Value
|
||||
naMap[param.Alias] = pn.Value
|
||||
default:
|
||||
aaMap[param.Alias] = pv
|
||||
naMap[param.Alias] = fmt.Sprintf("%v", pn.Value)
|
||||
}
|
||||
} else {
|
||||
aa = fmt.Sprintf("%s=%v", param.Name, pv)
|
||||
av = fmt.Sprintf("%v", pv)
|
||||
switch param.Type {
|
||||
case "int":
|
||||
aaMap[param.Name] = pn.Value
|
||||
naMap[param.Name] = pn.Value
|
||||
default:
|
||||
aaMap[param.Name] = pv
|
||||
naMap[param.Name] = fmt.Sprintf("%v", pn.Value)
|
||||
}
|
||||
}
|
||||
if param.Loc == "" || param.Loc == "true" {
|
||||
mml.AaLoc = append(mml.AaLoc, aa)
|
||||
mml.AaUri = append(mml.AaUri, av)
|
||||
}
|
||||
//mml.AaMap = append(mml.AaMap, aaMap)
|
||||
mml.AaList = append(mml.AaList, aa)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
mml.AaMap = aaMap
|
||||
mml.NaMap = naMap
|
||||
log.Trace("mml.AaMap: ", mml.AaMap)
|
||||
log.Trace("mml.NaMap: ", mml.NaMap)
|
||||
log.Trace("mml.AaList: ", mml.AaList)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func ParseMMLParams(mmlComms *[]MmlCommand) error {
|
||||
for _, mml := range *mmlComms {
|
||||
where := fmt.Sprintf("operation='%s' AND object='%s'", mml.Operation, mml.Object)
|
||||
mc, err := dborm.XormGetMmlCommand("mml_command", where)
|
||||
if err != nil {
|
||||
log.Error("Failed to XormGetMmlCommand: ", err)
|
||||
return err
|
||||
}
|
||||
if mc == nil {
|
||||
err := errors.New("Not found mml map")
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
log.Debug("mml command: ", mc)
|
||||
for _, pn := range mml.Params {
|
||||
log.Trace("pn: ", pn)
|
||||
for _, param := range mc.ParamJson {
|
||||
log.Trace("param: ", param)
|
||||
var pv string
|
||||
if pn.Name == param.Name {
|
||||
if param.Apostr == "true" {
|
||||
pv = fmt.Sprintf("'%v'", pn.Value)
|
||||
} else {
|
||||
pv = fmt.Sprintf("%v", pn.Value)
|
||||
}
|
||||
var aa string
|
||||
aaMap := make(map[string]interface{})
|
||||
if param.Alias != "" {
|
||||
aa = fmt.Sprintf("%s=%v", param.Alias, pv)
|
||||
switch param.Type {
|
||||
case "int":
|
||||
aaMap[param.Alias] = pn.Value
|
||||
case "string":
|
||||
aaMap[param.Alias] = pv
|
||||
}
|
||||
} else {
|
||||
aa = fmt.Sprintf("%s=%v", param.Name, pv)
|
||||
switch param.Type {
|
||||
case "int":
|
||||
aaMap[param.Name] = pn.Value
|
||||
case "string":
|
||||
aaMap[param.Name] = pv
|
||||
}
|
||||
}
|
||||
//mml.AaMap = append(mml.AaMap, aaMap)
|
||||
mml.AaList = append(mml.AaList, aa)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
log.Trace("mml.AaMap: ", mml.AaMap)
|
||||
log.Trace("mml.AaList: ", mml.AaList)
|
||||
*mmlComms = append(*mmlComms, mml)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func parseRequestUri(httpUri string, mmlMap *dborm.MmlHttpMap, mml *MmlCommand) string {
|
||||
requestURI := fmt.Sprintf("%s%s", httpUri, mmlMap.URI)
|
||||
if mmlMap.ExtUri != "" && len(mml.AaUri) > 0 {
|
||||
extUri := strings.Join(mml.AaUri, "/")
|
||||
requestURI = requestURI + fmt.Sprintf(mmlMap.ExtUri, extUri)
|
||||
}
|
||||
if mmlMap.Params != "" {
|
||||
params := strings.Join(mml.AaLoc, "+and+")
|
||||
params = strings.ReplaceAll(params, " ", "+") // replace " " to "+"
|
||||
log.Trace("params:", params)
|
||||
if mmlMap.ParamTag == "SQL" && strings.TrimSpace(params) != "" {
|
||||
params = "+where+" + params
|
||||
}
|
||||
requestURI = fmt.Sprintf("%s%s%s", requestURI, mmlMap.Params, params)
|
||||
}
|
||||
return requestURI
|
||||
}
|
||||
|
||||
func TransMml2HttpReq(omcMmlVar *MmlVar, mml *MmlCommand) (*[]byte, error) {
|
||||
log.Info("TransMml2HttpReq processing ...")
|
||||
log.Debug("mml: ", mml)
|
||||
|
||||
where := fmt.Sprintf("operation='%s' AND object='%s'", mml.Operation, mml.Object)
|
||||
mmlMap, err := dborm.XormGetMmlHttpMap("mml_http_map", where)
|
||||
if err != nil {
|
||||
log.Error("Failed to XormGetMmlHttpMap: ", err)
|
||||
return ParseErrorOutput(err), err
|
||||
}
|
||||
if mmlMap == nil {
|
||||
err := errors.New("Not found mml map")
|
||||
log.Error(err)
|
||||
return ParseErrorOutput(err), err
|
||||
}
|
||||
log.Trace("mmlMap: ", mmlMap)
|
||||
if mmlMap.Output == "" {
|
||||
mmlMap.Output = "{}"
|
||||
}
|
||||
outputJson := new(dborm.MmlOutput)
|
||||
err = json.Unmarshal([]byte(mmlMap.Output), outputJson)
|
||||
if err != nil {
|
||||
log.Error("Failed to Unmarshal:", err)
|
||||
return ParseErrorOutput(err), err
|
||||
}
|
||||
log.Trace("outputJson: ", outputJson)
|
||||
inputJson := new(dborm.MmlInput)
|
||||
log.Trace("mmlMap.Input: ", mmlMap.Input)
|
||||
if mmlMap.Input == "" {
|
||||
mmlMap.Input = "{}"
|
||||
}
|
||||
err = json.Unmarshal([]byte(mmlMap.Input), inputJson)
|
||||
if err != nil {
|
||||
log.Error("Failed to Unmarshal:", err)
|
||||
return ParseErrorOutput(err), err
|
||||
}
|
||||
log.Trace("inputJson: ", inputJson)
|
||||
|
||||
var requestURI string
|
||||
var output *[]byte
|
||||
client := resty.New()
|
||||
switch strings.ToLower(mmlMap.Method) {
|
||||
case "get":
|
||||
requestURI = parseRequestUri(omcMmlVar.HttpUri, mmlMap, mml)
|
||||
log.Debugf("method: Get requestURI: %s", requestURI)
|
||||
response, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"accessToken": omcMmlVar.SessionToken}).
|
||||
SetHeaders(map[string]string{"User-Agent": omcMmlVar.UserAgent}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Get(requestURI)
|
||||
if err != nil {
|
||||
log.Error("Failed to Get:", err)
|
||||
output = ParseErrorOutput(err)
|
||||
} else {
|
||||
output = ParseOutputResponse(omcMmlVar, outputJson, response)
|
||||
}
|
||||
case "post":
|
||||
requestURI = parseRequestUri(omcMmlVar.HttpUri, mmlMap, mml)
|
||||
body := ParseInputBody(inputJson, mml)
|
||||
log.Debugf("method: Post requestURI: %s", requestURI)
|
||||
response, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"accessToken": omcMmlVar.SessionToken}).
|
||||
SetHeaders(map[string]string{"User-Agent": omcMmlVar.UserAgent}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
SetBody(*body).
|
||||
Post(requestURI)
|
||||
if err != nil {
|
||||
log.Error("Failed to Post:", err)
|
||||
output = ParseErrorOutput(err)
|
||||
} else {
|
||||
output = ParseOutputResponse(omcMmlVar, outputJson, response)
|
||||
}
|
||||
case "put":
|
||||
requestURI = parseRequestUri(omcMmlVar.HttpUri, mmlMap, mml)
|
||||
body := ParseInputBody(inputJson, mml)
|
||||
log.Debugf("method: Put requestURI: %s", requestURI)
|
||||
response, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"accessToken": omcMmlVar.SessionToken}).
|
||||
SetHeaders(map[string]string{"User-Agent": omcMmlVar.UserAgent}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
SetBody(*body).
|
||||
Put(requestURI)
|
||||
if err != nil {
|
||||
log.Error("Failed to Put:", err)
|
||||
output = ParseErrorOutput(err)
|
||||
} else {
|
||||
output = ParseOutputResponse(omcMmlVar, outputJson, response)
|
||||
}
|
||||
case "delete":
|
||||
requestURI = parseRequestUri(omcMmlVar.HttpUri, mmlMap, mml)
|
||||
log.Debugf("method: Delete requestURI: %s", requestURI)
|
||||
response, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"accessToken": omcMmlVar.SessionToken}).
|
||||
SetHeaders(map[string]string{"User-Agent": omcMmlVar.UserAgent}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Delete(requestURI)
|
||||
if err != nil {
|
||||
log.Error("Failed to Delete:", err)
|
||||
output = ParseErrorOutput(err)
|
||||
} else {
|
||||
output = ParseOutputResponse(omcMmlVar, outputJson, response)
|
||||
}
|
||||
case "patch":
|
||||
requestURI = parseRequestUri(omcMmlVar.HttpUri, mmlMap, mml)
|
||||
log.Debugf("method: patch requestURI: %s", requestURI)
|
||||
response, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"accessToken": omcMmlVar.SessionToken}).
|
||||
SetHeaders(map[string]string{"User-Agent": omcMmlVar.UserAgent}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Patch(requestURI)
|
||||
if err != nil {
|
||||
log.Error("Failed to Patch:", err)
|
||||
output = ParseErrorOutput(err)
|
||||
} else {
|
||||
output = ParseOutputResponse(omcMmlVar, outputJson, response)
|
||||
}
|
||||
default:
|
||||
err := errors.New("not found mml command")
|
||||
log.Error(err)
|
||||
output = ParseErrorOutput(err)
|
||||
}
|
||||
return output, nil
|
||||
}
|
||||
|
||||
const (
|
||||
MaxMmlOutputBufferSize = 1000000
|
||||
FormatTypeJson = "json"
|
||||
FormatTypeTable = "table"
|
||||
DefaultFormatType = FormatTypeTable
|
||||
)
|
||||
|
||||
const (
|
||||
RetCodeSucceeded = 0
|
||||
RetCodeFailed = 0
|
||||
)
|
||||
|
||||
func ParseInputBody(inputJson *dborm.MmlInput, mml *MmlCommand) *[]byte {
|
||||
inputBody := make(map[string]interface{})
|
||||
log.Trace("mml.NaMap:", mml.NaMap)
|
||||
log.Trace("mml.AaMap:", mml.AaMap)
|
||||
if strings.ToLower(inputJson.BodyFmt) == "putdb" {
|
||||
for _, icol := range inputJson.Cols {
|
||||
log.Trace("icol:", icol)
|
||||
mml.NaMap[icol.Name] = icol.Value
|
||||
}
|
||||
inputBody[inputJson.BodyKey] = mml.NaMap
|
||||
} else {
|
||||
inputParams := make([]map[string]interface{}, 0)
|
||||
inputParams = append(inputParams, mml.NaMap)
|
||||
inputBody[inputJson.BodyKey] = inputParams
|
||||
}
|
||||
|
||||
body, err := json.Marshal(inputBody)
|
||||
if err != nil {
|
||||
log.Error("Failed to marshal:", err)
|
||||
}
|
||||
|
||||
log.Trace("inputBody:", inputBody)
|
||||
log.Trace("body:", string(body))
|
||||
return &body
|
||||
}
|
||||
|
||||
func ParseOutputResponse(omcMmlVar *MmlVar, outputJson *dborm.MmlOutput, response *resty.Response) *[]byte {
|
||||
var output []byte
|
||||
var str bytes.Buffer
|
||||
|
||||
switch response.StatusCode() {
|
||||
case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted:
|
||||
if omcMmlVar.Output == FormatTypeJson {
|
||||
code := fmt.Sprintf("StatusCode = %d status %s\n\n", response.StatusCode(), response.Status())
|
||||
title := formatTitle(outputJson.Title)
|
||||
|
||||
json.Indent(&str, response.Body(), "", " ")
|
||||
log.Trace(str.String())
|
||||
|
||||
output = global.BytesCombine1([]byte(code), []byte(title), str.Bytes(), []byte("\n"))
|
||||
} else {
|
||||
log.Trace("Body:", string(response.Body()))
|
||||
mapDatas := make(map[string]interface{}, 0)
|
||||
|
||||
err := json.Unmarshal(response.Body(), &mapDatas)
|
||||
if err != nil {
|
||||
log.Error("Failed to json.Unmarshal:", err)
|
||||
//output = *ParseErrorOutput(err)
|
||||
output = *ParseErrorOutput(string(response.Body()))
|
||||
return &output
|
||||
}
|
||||
log.Trace("mapDatas:", mapDatas)
|
||||
switch strings.ToLower(outputJson.RetFmt) {
|
||||
case "getdb":
|
||||
if len(mapDatas) > 0 {
|
||||
var data interface{}
|
||||
for _, data = range mapDatas {
|
||||
log.Trace("data:", data)
|
||||
break
|
||||
}
|
||||
if len(data.([]interface{})) > 0 {
|
||||
table := (data.([]interface{}))[0]
|
||||
log.Trace("table:", table)
|
||||
|
||||
code := fmt.Sprintf(outputJson.RetMsg, RetCodeSucceeded)
|
||||
title := formatTitle(outputJson.Title)
|
||||
fmtResults := ParseTableOutput(outputJson, table)
|
||||
output = global.BytesCombine1([]byte(code), []byte(title), []byte(fmtResults))
|
||||
}
|
||||
}
|
||||
case "deletedb":
|
||||
var data interface{}
|
||||
for _, data = range mapDatas {
|
||||
log.Trace("data:", data)
|
||||
break
|
||||
}
|
||||
|
||||
if len(data.(map[string]interface{})) > 0 {
|
||||
table := data.(map[string]interface{})
|
||||
code := fmt.Sprintf(outputJson.RetMsg, RetCodeSucceeded)
|
||||
fmtResults := ParseDBOperOutput(outputJson, table)
|
||||
output = global.BytesCombine1([]byte(code), []byte(fmtResults))
|
||||
}
|
||||
case "postdb":
|
||||
var data interface{}
|
||||
for _, data = range mapDatas {
|
||||
log.Trace("data:", data)
|
||||
break
|
||||
}
|
||||
|
||||
if len(data.(map[string]interface{})) > 0 {
|
||||
table := data.(map[string]interface{})
|
||||
code := fmt.Sprintf(outputJson.RetMsg, RetCodeSucceeded)
|
||||
fmtResults := ParseDBOperOutput(outputJson, table)
|
||||
output = global.BytesCombine1([]byte(code), []byte(fmtResults))
|
||||
}
|
||||
case "putdb":
|
||||
var data interface{}
|
||||
for _, data = range mapDatas {
|
||||
log.Trace("data:", data)
|
||||
break
|
||||
}
|
||||
if len(data.(map[string]interface{})) > 0 {
|
||||
table := data.(map[string]interface{})
|
||||
code := fmt.Sprintf(outputJson.RetMsg, RetCodeSucceeded)
|
||||
fmtResults := ParseDBOperOutput(outputJson, table)
|
||||
output = global.BytesCombine1([]byte(code), []byte(fmtResults))
|
||||
}
|
||||
case "getnf":
|
||||
if len(mapDatas) > 0 {
|
||||
var data interface{}
|
||||
for _, data = range mapDatas {
|
||||
log.Trace("data:", data)
|
||||
break
|
||||
}
|
||||
if len(data.([]interface{})) > 0 {
|
||||
//table := (data.([]interface{}))[0]
|
||||
//log.Trace("table:", table)
|
||||
|
||||
code := fmt.Sprintf(outputJson.RetMsg, RetCodeSucceeded)
|
||||
title := formatTitle(outputJson.Title)
|
||||
fmtResults := ParseNFTableOutput(outputJson, data)
|
||||
output = global.BytesCombine1([]byte(code), []byte(title), []byte(fmtResults))
|
||||
}
|
||||
}
|
||||
default:
|
||||
code := fmt.Sprintf(outputJson.RetMsg, RetCodeSucceeded)
|
||||
output = global.BytesCombine1([]byte(code))
|
||||
}
|
||||
|
||||
}
|
||||
default:
|
||||
if omcMmlVar.Output == FormatTypeJson {
|
||||
code := fmt.Sprintf("StatusCode = %d status %s\n\n", response.StatusCode(), response.Status())
|
||||
//title := formatTitle("Network Element Information")
|
||||
|
||||
json.Indent(&str, response.Body(), "", " ")
|
||||
log.Trace(str.String())
|
||||
|
||||
output = global.BytesCombine1([]byte(code), str.Bytes(), []byte("\n"))
|
||||
} else {
|
||||
log.Trace("Body:", string(response.Body()))
|
||||
mapResults := make(map[string]interface{}, 0)
|
||||
|
||||
err := json.Unmarshal(response.Body(), &mapResults)
|
||||
if err != nil {
|
||||
log.Error("Failed to json.Unmarshal:", err)
|
||||
output = *ParseErrorOutput(string(response.Body()))
|
||||
} else {
|
||||
log.Trace("mapResults:", mapResults)
|
||||
errResult := mapResults["error"]
|
||||
log.Trace("errResult:", errResult)
|
||||
if len(errResult.(map[string]interface{})) > 0 {
|
||||
errCode, _ := strconv.Atoi(fmt.Sprintf("%v", errResult.(map[string]interface{})["errorCode"]))
|
||||
errorInfo := errResult.(map[string]interface{})["errorInfo"]
|
||||
output = []byte(fmt.Sprintf(outputJson.ErrMsg, errCode, errorInfo))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return &output
|
||||
}
|
||||
|
||||
func ParseDBOperOutput(outputJson *dborm.MmlOutput, cols any) string {
|
||||
var colOutput []dborm.ColOutput = outputJson.Cols
|
||||
var value, retFmtCols string
|
||||
if len(cols.(map[string]interface{})) > 0 {
|
||||
if len(colOutput) > 0 {
|
||||
coln := colOutput[0].Name
|
||||
value = fmt.Sprintf("%v", cols.(map[string]interface{})[coln])
|
||||
log.Tracef("coln:%s value:%s", coln, value)
|
||||
retFmtCols = colOutput[0].Display + " = " + value + "\n\n"
|
||||
}
|
||||
}
|
||||
|
||||
return retFmtCols
|
||||
}
|
||||
|
||||
func ParseNFTableOutput(outputJson *dborm.MmlOutput, cols any) string {
|
||||
var colOutput []dborm.ColOutput
|
||||
var fmtColName string
|
||||
var colName []string
|
||||
var spaceNum int = 1
|
||||
var alignmentM, alignmentSN, alignmentSV string = "Left", "Right", "Left"
|
||||
|
||||
if outputJson.SepSpaceNum != 0 {
|
||||
spaceNum = outputJson.SepSpaceNum
|
||||
}
|
||||
if outputJson.AlignmentM != "" {
|
||||
alignmentM = outputJson.AlignmentM
|
||||
}
|
||||
if outputJson.AlignmentSN != "" {
|
||||
alignmentSN = outputJson.AlignmentSN
|
||||
}
|
||||
if outputJson.AlignmentSV != "" {
|
||||
alignmentSV = outputJson.AlignmentSV
|
||||
}
|
||||
|
||||
maxLength := math.MinInt64
|
||||
for _, coln := range outputJson.Cols {
|
||||
log.Trace("coln:", coln)
|
||||
|
||||
if len(coln.Display) > maxLength {
|
||||
maxLength = len(coln.Display)
|
||||
}
|
||||
if coln.Length < len(coln.Display) {
|
||||
coln.Length = len(coln.Display)
|
||||
}
|
||||
|
||||
colName = append(colName, ParseAlignmentOutput(coln.Length, alignmentM, coln.Display))
|
||||
colOutput = append(colOutput, coln)
|
||||
}
|
||||
fmtColName = formatLineBySpace(&colName, spaceNum)
|
||||
log.Trace("fmtColName:", fmtColName)
|
||||
|
||||
var retFmtCols string
|
||||
var fmtColValues []string
|
||||
var numberResult int
|
||||
// for _, colnvs := range cols.([]interface{}) {
|
||||
// log.Trace("colnvs:", colnvs)
|
||||
// if colnvs == nil {
|
||||
// break
|
||||
// }
|
||||
numberResult = len(cols.([]interface{}))
|
||||
|
||||
if numberResult == 1 && outputJson.SingleList == true {
|
||||
colnv := cols.([]interface{})[0]
|
||||
log.Trace("colnv:", colnv)
|
||||
|
||||
var fmtNV []string
|
||||
for _, coln := range colOutput {
|
||||
fmtName := ParseAlignmentOutput(maxLength, alignmentSN, coln.Display)
|
||||
log.Tracef("alignmentSN:%s fmtName:%s", alignmentSN, fmtName)
|
||||
value := fmt.Sprintf("%v", colnv.(map[string]interface{})[coln.Name])
|
||||
fmtValue := ParseAlignmentOutput(coln.Length, alignmentSV, value)
|
||||
fmtNV = append(fmtNV, fmtName+": "+fmtValue)
|
||||
}
|
||||
|
||||
fmtResults := strings.Join(fmtNV, "\n")
|
||||
log.Tracef("fmtResults:\n%s", fmtResults)
|
||||
fmtEnd := fmt.Sprintf(outputJson.End, numberResult)
|
||||
retFmtCols = fmtResults + "\n\n" + fmtEnd
|
||||
log.Tracef("retFmtCols:\n%s", retFmtCols)
|
||||
return retFmtCols
|
||||
} else {
|
||||
for i := 0; i < numberResult; i++ {
|
||||
colnv := cols.([]interface{})[i]
|
||||
log.Trace("colnv:", colnv)
|
||||
var colValues []string
|
||||
var newVal []string
|
||||
for _, coln := range colOutput {
|
||||
value := fmt.Sprintf("%v", colnv.(map[string]interface{})[coln.Name])
|
||||
if len(coln.Alias) != 0 {
|
||||
enumVal, _ := strconv.Atoi(value)
|
||||
value = parseEnumAlias(&(coln.Alias), enumVal)
|
||||
}
|
||||
newVal = append(newVal, ParseAlignmentOutput(coln.Length, alignmentM, value))
|
||||
}
|
||||
colValues = append(colValues, formatLineBySpace(&newVal, spaceNum))
|
||||
log.Trace("colValues:", colValues)
|
||||
fmtColValues = append(fmtColValues, strings.Join(colValues, "\n"))
|
||||
log.Trace("fmtColValues:", fmtColValues)
|
||||
}
|
||||
fmtEnd := fmt.Sprintf(outputJson.End, numberResult)
|
||||
retFmtCols = fmtColName + "\n\n" + strings.Join(fmtColValues, "\n") + "\n\n" + fmtEnd
|
||||
log.Tracef("retFmtCols:\n%s", retFmtCols)
|
||||
return retFmtCols
|
||||
}
|
||||
}
|
||||
|
||||
func ParseTableOutput(outputJson *dborm.MmlOutput, cols any) string {
|
||||
var colOutput []dborm.ColOutput
|
||||
var fmtColName string
|
||||
var colName []string
|
||||
var spaceNum int = 1
|
||||
var alignmentM, alignmentSN, alignmentSV string = "Left", "Right", "Left"
|
||||
|
||||
if outputJson.SepSpaceNum != 0 {
|
||||
spaceNum = outputJson.SepSpaceNum
|
||||
}
|
||||
if outputJson.AlignmentM != "" {
|
||||
alignmentM = outputJson.AlignmentM
|
||||
}
|
||||
if outputJson.AlignmentSN != "" {
|
||||
alignmentSN = outputJson.AlignmentSN
|
||||
}
|
||||
if outputJson.AlignmentSV != "" {
|
||||
alignmentSV = outputJson.AlignmentSV
|
||||
}
|
||||
|
||||
maxLength := math.MinInt64
|
||||
for _, coln := range outputJson.Cols {
|
||||
log.Trace("coln:", coln)
|
||||
|
||||
if len(coln.Display) > maxLength {
|
||||
maxLength = len(coln.Display)
|
||||
}
|
||||
if coln.Length < len(coln.Display) {
|
||||
coln.Length = len(coln.Display)
|
||||
}
|
||||
|
||||
colName = append(colName, ParseAlignmentOutput(coln.Length, alignmentM, coln.Display))
|
||||
colOutput = append(colOutput, coln)
|
||||
}
|
||||
fmtColName = formatLineBySpace(&colName, spaceNum)
|
||||
log.Trace("fmtColName:", fmtColName)
|
||||
|
||||
var retFmtCols string
|
||||
var fmtColValues []string
|
||||
var numberResult int
|
||||
for _, colnvs := range cols.(map[string]interface{}) {
|
||||
log.Trace("colnvs:", colnvs)
|
||||
if colnvs == nil {
|
||||
break
|
||||
}
|
||||
numberResult = len(colnvs.([]interface{}))
|
||||
|
||||
if numberResult == 1 && outputJson.SingleList == true {
|
||||
colnv := colnvs.([]interface{})[0]
|
||||
log.Trace("colnv:", colnv)
|
||||
|
||||
var fmtNV []string
|
||||
for _, coln := range colOutput {
|
||||
fmtName := ParseAlignmentOutput(maxLength, alignmentSN, coln.Display)
|
||||
log.Tracef("alignmentSN:%s fmtName:%s", alignmentSN, fmtName)
|
||||
value := fmt.Sprintf("%v", colnv.(map[string]interface{})[coln.Name])
|
||||
fmtValue := ParseAlignmentOutput(coln.Length, alignmentSV, value)
|
||||
fmtNV = append(fmtNV, fmtName+": "+fmtValue)
|
||||
}
|
||||
|
||||
fmtResults := strings.Join(fmtNV, "\n")
|
||||
log.Tracef("fmtResults:\n%s", fmtResults)
|
||||
fmtEnd := fmt.Sprintf(outputJson.End, numberResult)
|
||||
retFmtCols = fmtResults + "\n\n" + fmtEnd
|
||||
log.Tracef("retFmtCols:\n%s", retFmtCols)
|
||||
return retFmtCols
|
||||
} else {
|
||||
for i := 0; i < numberResult; i++ {
|
||||
colnv := colnvs.([]interface{})[i]
|
||||
log.Trace("colnv:", colnv)
|
||||
var colValues []string
|
||||
var newVal []string
|
||||
for _, coln := range colOutput {
|
||||
value := fmt.Sprintf("%v", colnv.(map[string]interface{})[coln.Name])
|
||||
if len(coln.Alias) != 0 {
|
||||
enumVal, _ := strconv.Atoi(value)
|
||||
value = parseEnumAlias(&(coln.Alias), enumVal)
|
||||
}
|
||||
newVal = append(newVal, ParseAlignmentOutput(coln.Length, alignmentM, value))
|
||||
}
|
||||
colValues = append(colValues, formatLineBySpace(&newVal, spaceNum))
|
||||
log.Trace("colValues:", colValues)
|
||||
fmtColValues = append(fmtColValues, strings.Join(colValues, "\n"))
|
||||
log.Trace("fmtColValues:", fmtColValues)
|
||||
}
|
||||
fmtEnd := fmt.Sprintf(outputJson.End, numberResult)
|
||||
retFmtCols = fmtColName + "\n\n" + strings.Join(fmtColValues, "\n") + "\n\n" + fmtEnd
|
||||
log.Tracef("retFmtCols:\n%s", retFmtCols)
|
||||
return retFmtCols
|
||||
}
|
||||
}
|
||||
fmtEnd := fmt.Sprintf(outputJson.End, numberResult)
|
||||
retFmtCols = fmtColName + "\n" + strings.Join(fmtColValues, "\n") + "\n\n" + fmtEnd
|
||||
log.Tracef("retFmtCols:\n%s", retFmtCols)
|
||||
return retFmtCols
|
||||
}
|
||||
|
||||
func parseEnumAlias(alias *[]string, enumVal int) string {
|
||||
return (*alias)[enumVal]
|
||||
}
|
||||
|
||||
func formatLineBySpace(strArray *[]string, spaceNum int) string {
|
||||
space := strings.Repeat(" ", spaceNum)
|
||||
return strings.Join(*strArray, space)
|
||||
}
|
||||
|
||||
func ParseAlignmentOutput(length int, alignment string, str string) string {
|
||||
spaceLen := length - len(str)
|
||||
if spaceLen < 0 {
|
||||
log.Warnf("len(str=%s)=%d more length=%d", str, len(str), length)
|
||||
spaceLen = 0
|
||||
}
|
||||
var retStr string
|
||||
switch alignment {
|
||||
case "Left":
|
||||
suffix := strings.Repeat(" ", spaceLen)
|
||||
retStr = str + suffix
|
||||
case "Right":
|
||||
prefix := strings.Repeat(" ", spaceLen)
|
||||
retStr = prefix + str
|
||||
log.Tracef("retStr:%s", retStr)
|
||||
case "Middle":
|
||||
prefix := strings.Repeat(" ", int(math.Ceil(float64(spaceLen)/2)))
|
||||
suffix := strings.Repeat(" ", int(math.Floor(float64(spaceLen)/2)))
|
||||
retStr = prefix + str + suffix
|
||||
}
|
||||
log.Tracef("length=%d, spaceLne=%d, alignment=%s, str=%s, retStr=%s", length, spaceLen, alignment, str, retStr)
|
||||
return retStr
|
||||
}
|
||||
|
||||
func ParseErrorOutput(err any) *[]byte {
|
||||
var output []byte
|
||||
|
||||
var formatType string = DefaultFormatType
|
||||
if formatType == FormatTypeJson {
|
||||
output = []byte(fmt.Sprintf("ErrorCode = 1 Error message: %v\n\n", err))
|
||||
} else {
|
||||
output = []byte(fmt.Sprintf("RetCode = -1 operation failed: %v\n\n", err))
|
||||
}
|
||||
|
||||
return &output
|
||||
}
|
||||
|
||||
func formatTitle(title string) string {
|
||||
var builder strings.Builder
|
||||
builder.WriteString(title)
|
||||
builder.WriteString("\n")
|
||||
for i := 0; i < len(title); i++ {
|
||||
builder.WriteString("-")
|
||||
}
|
||||
builder.WriteString("\n")
|
||||
return builder.String()
|
||||
}
|
||||
|
||||
func formatTableOutput() {
|
||||
|
||||
}
|
||||
179
lib/oauth/oauth.go
Normal file
179
lib/oauth/oauth.go
Normal file
@@ -0,0 +1,179 @@
|
||||
package oauth
|
||||
|
||||
import (
|
||||
"crypto/sha256"
|
||||
"crypto/sha512"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/log"
|
||||
|
||||
"github.com/dgrijalva/jwt-go"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
)
|
||||
|
||||
// GenToken 生成Token值
|
||||
func GenToken(mapClaims jwt.MapClaims) (string, error) {
|
||||
token := jwt.NewWithClaims(jwt.SigningMethodHS256, mapClaims)
|
||||
var nowDate = time.Now()
|
||||
var secret = fmt.Sprintf("%v%v", nowDate, "xxxx")
|
||||
return token.SignedString([]byte(secret))
|
||||
}
|
||||
|
||||
// GenerateToken 生成Token值
|
||||
func GenerateToken(mapClaims jwt.MapClaims, key string) (string, error) {
|
||||
token := jwt.NewWithClaims(jwt.SigningMethodHS256, mapClaims)
|
||||
return token.SignedString([]byte(key))
|
||||
}
|
||||
|
||||
// ParseToken: "解析token"
|
||||
func ParseToken(token string, secret string) (string, error) {
|
||||
claim, err := jwt.Parse(token, func(token *jwt.Token) (interface{}, error) {
|
||||
return []byte(secret), nil
|
||||
})
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return claim.Claims.(jwt.MapClaims)["cmd"].(string), nil
|
||||
}
|
||||
|
||||
func RandAccessToken(n int) (ret string) {
|
||||
allString := "52661fbd-6b84-4fc2-aa1e-17879a5c6c9b"
|
||||
ret = ""
|
||||
for i := 0; i < n; i++ {
|
||||
r := rand.Intn(len(allString))
|
||||
ret = ret + allString[r:r+1]
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
const letterBytes = "abcdef0123456789"
|
||||
const (
|
||||
letterIdxBits = 6 // 6 bits to represent a letter index
|
||||
letterIdxMask = 1<<letterIdxBits - 1 // All 1-bits, as many as letterIdxBits
|
||||
letterIdxMax = 63 / letterIdxBits // # of letter indices fitting in 63 bits
|
||||
)
|
||||
|
||||
var src = rand.NewSource(time.Now().UnixNano())
|
||||
|
||||
func RandStringBytes(n int) string {
|
||||
b := make([]byte, n)
|
||||
// A src.Int63() generates 63 random bits, enough for letterIdxMax characters!
|
||||
for i, cache, remain := n-1, src.Int63(), letterIdxMax; i >= 0; {
|
||||
if remain == 0 {
|
||||
cache, remain = src.Int63(), letterIdxMax
|
||||
}
|
||||
if idx := int(cache & letterIdxMask); idx < len(letterBytes) {
|
||||
b[i] = letterBytes[idx]
|
||||
i--
|
||||
}
|
||||
cache >>= letterIdxBits
|
||||
remain--
|
||||
}
|
||||
|
||||
return string(b)
|
||||
}
|
||||
|
||||
func GenRandToken() string {
|
||||
return RandStringBytes(8) + "-" + RandStringBytes(4) + "-" +
|
||||
RandStringBytes(4) + "-" + RandStringBytes(4) + "-" + RandStringBytes(12)
|
||||
}
|
||||
|
||||
type OAuthBody struct {
|
||||
GrantType string
|
||||
UserName string
|
||||
Value string
|
||||
}
|
||||
|
||||
/*
|
||||
func IsValidOAuthInfo(oAuthBody OAuthBody) bool {
|
||||
log.Debug("IsValidOAuthInfo processing... ")
|
||||
|
||||
conf := config.GetYamlConfig()
|
||||
for _, o := range conf.Auth {
|
||||
if oAuthBody.GrantType == o.Type && oAuthBody.UserName == o.User && oAuthBody.Value == o.Password {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
*/
|
||||
|
||||
func IsWrongOAuthInfo(oAuthBody OAuthBody) bool {
|
||||
log.Debug("IsWrongOAuthInfo processing... ")
|
||||
|
||||
if oAuthBody.GrantType == "" || strings.ToLower(oAuthBody.GrantType) != "password" ||
|
||||
oAuthBody.UserName == "" || oAuthBody.Value == "" {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func GetTokenFromHttpRequest(r *http.Request) string {
|
||||
for k, v := range r.Header {
|
||||
log.Tracef("k:%s, v:%s", k, v)
|
||||
if strings.ToLower(k) == "accesstoken" && len(v) != 0 {
|
||||
log.Trace("AccessToken:", v[0])
|
||||
return v[0]
|
||||
}
|
||||
}
|
||||
|
||||
return ""
|
||||
}
|
||||
|
||||
// IsCarriedToken check token is carried
|
||||
func IsCarriedToken(r *http.Request) (string, bool) {
|
||||
|
||||
token := GetTokenFromHttpRequest(r)
|
||||
if token == "" {
|
||||
return "", false
|
||||
}
|
||||
return token, true
|
||||
}
|
||||
|
||||
// Bcrypt Encrypt 加密明文密码
|
||||
func BcryptEncrypt(password string) (string, error) {
|
||||
hashedBytes, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
|
||||
return string(hashedBytes), err
|
||||
}
|
||||
|
||||
// Bcrypt Compare 密文校验
|
||||
func BcryptCompare(hashedPassword, password string) error {
|
||||
return bcrypt.CompareHashAndPassword([]byte(hashedPassword), []byte(password))
|
||||
}
|
||||
|
||||
// sha256 crypt
|
||||
func GetSHA256HashCode(stringMessage string) string {
|
||||
message := []byte(stringMessage) //字符串转化字节数组
|
||||
//创建一个基于SHA256算法的hash.Hash接口的对象
|
||||
hash := sha256.New() //sha-256加密
|
||||
//输入数据
|
||||
hash.Write(message)
|
||||
//计算哈希值
|
||||
bytes := hash.Sum(nil)
|
||||
//将字符串编码为16进制格式,返回字符串
|
||||
hashCode := hex.EncodeToString(bytes)
|
||||
//返回哈希值
|
||||
return hashCode
|
||||
}
|
||||
|
||||
// sha512 crypt
|
||||
func GetSHA512HashCode(stringMessage string) string {
|
||||
message := []byte(stringMessage) //字符串转化字节数组
|
||||
//创建一个基于SHA256算法的hash.Hash接口的对象
|
||||
hash := sha512.New() //SHA-512加密
|
||||
//输入数据
|
||||
hash.Write(message)
|
||||
//计算哈希值
|
||||
bytes := hash.Sum(nil)
|
||||
//将字符串编码为16进制格式,返回字符串
|
||||
hashCode := hex.EncodeToString(bytes)
|
||||
//返回哈希值
|
||||
return hashCode
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user