1
0

feat: 删除不需要文件夹

This commit is contained in:
TsMask
2023-10-10 10:56:44 +08:00
parent ce7c3cae68
commit d173205528
154 changed files with 32276 additions and 1 deletions

344
restagent/config/config.go Normal file
View File

@@ -0,0 +1,344 @@
package config
import (
"flag"
"fmt"
"os"
"strings"
"ems.agt/lib/core/conf"
"ems.agt/lib/global"
"ems.agt/lib/log"
"gopkg.in/yaml.v3"
)
type DbConfig 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 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"`
Rest []struct {
IPv4 string `yaml:"ipv4"`
IPv6 string `yaml:"ipv6"`
Port uint16 `yaml:"port"`
Scheme string `yaml:"scheme"`
CaFile string `yaml:"caFile"`
CertFile string `yaml:"certFile"`
KeyFile string `yaml:"keyFile"`
} `yaml:"rest"`
WebServer struct {
Enabled bool `yaml:"enabled"`
RootDir string `yaml:"rootDir"`
Listen []struct {
Addr string `yaml:"addr"`
Scheme string `yaml:"scheme"`
CaFile string `yaml:"caFile"`
CertFile string `yaml:"certFile"`
KeyFile string `yaml:"keyFile"`
} `yaml:"listen"`
} `yaml:"webServer"`
Database DbConfig `yaml:"database"`
OMC struct {
UriPrefix string `yaml:"uriPrefix"`
NeType string `yaml:"neType"`
NeId string `yaml:"neId"`
RmUID string `yaml:"rmUID"`
NeName string `yaml:"neName"`
Province string `yaml:"province"`
Vendor string `yaml:"vendor"`
Dn string `yaml:"dn"`
Chk2Ne bool `yaml:"chk2ne"`
Sn string `yaml:"sn"`
CheckSign bool `yaml:"checksign"`
Backup string `yaml:"backup"`
Upload string `yaml:"upload"`
FrontUpload string `yaml:"frontUpload"`
FrontTraceDir string `yaml:"frontTraceDir"`
Software string `yaml:"software"`
License string `yaml:"license"`
GtpUri string `yaml:"gtpUri"`
CheckContentType bool `yaml:"checkContentType"`
TestMode bool `yaml:"testMode"`
RBACMode bool `yaml:"rbacMode"`
RunDir string `yaml:"runDir"`
} `yaml:"omc"`
Alarm struct {
ForwardAlarm bool `yaml:"forwardAlarm"`
Email struct {
Smtp string `yaml:"smtp"`
Port uint16 `yaml:"port"`
User string `yaml:"user"`
Password string `yaml:"password"`
} `json:"email"`
SMS struct {
ApiURL string `yaml:"apiURL"`
AccessKeyID string `yaml:"AccessKeyID"`
AccessKeySecret string `yaml:"accessKeySecret"`
SignName string `yaml:"signName"`
TemplateCode string `yaml:"templateCode"`
} `json:"sms"`
} `yaml:"alarm"`
MML struct {
Port int `yaml:"port"`
Sleep int64 `yaml:"sleep"`
User string `yaml:"user"`
Password string `ymal:"password"`
MmlHome string `yaml:"mmlHome"`
Upload string `yaml:"upload"`
} `yaml:"mml"`
NE struct {
Addr string `yaml:"addr"`
Port uint16 `yaml:"port"`
User string `yaml:"user"`
EtcDir string `yaml:"etcdir"`
BinDir string `yaml:"bindir"`
OmcDir string `yaml:"omcdir"`
ScpDir string `yaml:"scpdir"`
LicenseDir string `yaml:"licensedir"`
} `yaml:"ne"`
Auth struct {
Crypt string `yaml:"crypt"`
Token bool `yaml:"token"`
Expires uint32 `yaml:"expires"`
Session string `yaml:"session"`
PublicKey string `yaml:"publicKey"`
PrivateKey string `yaml:"privateKey"`
} `yaml:"auth"`
Params struct {
RmUIDMaxNum int `yaml:"rmuidmaxnum"`
AlarmIDMaxNum int `yaml:"alarmidmaxnum"`
PmIDMaxNum int `yaml:"pmidmaxnum"`
SubIDMaxNum int `yaml:"subidmaxnum"`
UriMaxLen int `yaml:"urimaxlen"`
RmUIDRegexp string `yaml:"rmuidregexp"`
} `yaml:"params"`
TestConfig struct {
Enabled bool `yaml:"enabled"`
File string `yaml:"file"`
} `yaml:"testConfig"`
}
type TestDatas struct {
UDM struct {
CapUsed uint32 `yaml:"capUsed"`
FeatureEnabled []string `yaml:"featureEnabled"`
} `yaml:"udm"`
AUSF struct {
CapUsed uint32 `yaml:"capUsed"`
FeatureEnabled []string `yaml:"featureEnabled"`
} `yaml:"ausf"`
AMF struct {
CapUsed uint32 `yaml:"capUsed"`
FeatureEnabled []string `yaml:"featureEnabled"`
} `yaml:"amf"`
SMF struct {
CapUsed uint32 `yaml:"capUsed"`
FeatureEnabled []string `yaml:"featureEnabled"`
} `yaml:"smf"`
UPF struct {
CapUsed uint32 `yaml:"capUsed"`
FeatureEnabled []string `yaml:"featureEnabled"`
} `yaml:"upf"`
}
type NeTestData struct {
CapUsed uint32 `yaml:"capUsed"`
FeatureEnabled []string `yaml:"featureEnabled"`
}
type TestDataMap struct {
NeTestDatas []map[string]NeTestData
}
var yamlConfig YamlConfig
func ReadConfig(configFile string) {
yamlFile, err := os.ReadFile(configFile)
if err != nil {
fmt.Println("Read yaml config file error:", err)
os.Exit(2)
}
// fmt.Println("yamlfile:", string(yamlFile))
err = yaml.Unmarshal(yamlFile, &yamlConfig)
if err != nil {
fmt.Println("Unmarshal error:", err)
os.Exit(3)
}
}
func WriteYamlConfig(newConfigData YamlConfig, configFile string) {
// 将配置转换回YAML数据
newYamlData, err := yaml.Marshal(&newConfigData)
if err != nil {
log.Errorf("Failed to marshal YAML: %v", err)
}
// 将新的YAML数据写入文件
err = os.WriteFile(configFile, newYamlData, 0644)
if err != nil {
log.Errorf("Failed to write YAML file: %v", err)
}
}
var mapYaml map[string]interface{}
func ReadParamConfig(fileName string) *map[string]interface{} {
file, err := os.ReadFile(fileName)
if err != nil {
fmt.Println("Read yaml file error:", err)
}
mapYaml = make(map[string]interface{})
err = yaml.Unmarshal(file, &mapYaml)
if err != nil {
fmt.Printf("yaml.Unmarshal: %v when to struct", err)
}
// fmt.Println("mapYaml:", mapYaml)
return &mapYaml
}
func GetYamlConfig() *YamlConfig {
return &yamlConfig
}
func GetAuthFromConfig() interface{} {
return yamlConfig.Auth
}
func GetExpiresFromConfig() uint32 {
return yamlConfig.Auth.Expires
}
func GetRmUIDFromConfig() string {
return yamlConfig.OMC.RmUID
}
func GetRmUIDRegexpFromConfig() string {
return yamlConfig.Params.RmUIDRegexp
}
func GetRmUIDMaxNumFromConfig() int {
return yamlConfig.Params.RmUIDMaxNum
}
func GetAlarmIDMaxNumFromConfig() int {
return yamlConfig.Params.AlarmIDMaxNum
}
func GetPmIDMaxNumFromConfig() int {
return yamlConfig.Params.PmIDMaxNum
}
func GetSubIDMaxNumFromConfig() int {
return yamlConfig.Params.SubIDMaxNum
}
func GetUriMaxLenFromConfig() int {
return yamlConfig.Params.UriMaxLen
}
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
}
var (
DefaultUriPrefix string = "/api/rest"
UriPrefix string = "/api/rest"
//TestDataUDM []map[string]interface{}
TDatas map[string]NeTestData
)
func ReadTestConfigYaml(pfile string) (ret error) {
file, err := os.ReadFile(pfile)
if err != nil {
return err
}
err = yaml.Unmarshal(file, &TDatas)
if err != nil {
fmt.Println("Failed to Unmarshal:", err)
return err
}
return nil
}
func GetDefaultUserAgent() string {
return "OMC-restagent/" + global.Version
}
const defaultConfigFile = "./etc/restconf.yaml"
func init() {
cfile := flag.String("c", defaultConfigFile, "config file")
pv := flag.Bool("version", false, "print version")
ph := flag.Bool("help", false, "print help")
global.BuildTime = "Wed May 31 18:24:04 CST 2023"
global.GoVer = "go version go1.15.7 linux/arm64"
flag.Parse()
if *pv {
fmt.Printf("OMC restagent version: %s\n%s\n%s\n\n", global.Version, global.BuildTime, global.GoVer)
os.Exit(0)
}
if *ph {
flag.Usage()
os.Exit(0)
}
// 使用viper读取配置
conf.InitConfig(*cfile)
ReadConfig(*cfile)
if GetYamlConfig().OMC.UriPrefix != "" {
UriPrefix = GetYamlConfig().OMC.UriPrefix
}
if GetYamlConfig().TestConfig.Enabled {
ReadTestConfigYaml(GetYamlConfig().TestConfig.File)
}
}

111
restagent/config/map.go Normal file
View File

@@ -0,0 +1,111 @@
package config
import (
"io/ioutil"
"log"
"gopkg.in/yaml.v3"
"ems.agt/lib/global"
)
type Uri2Object struct {
Uri string `yaml:"uri"`
Object []Object `yaml:"object"`
}
type Object struct {
Name string `yaml:"name"`
Syntax string `yaml:"syntax"`
Oid string `yaml:"oid"`
}
var uri2Object []Uri2Object
func ReadMap(pfile string) (ret error) {
file, err := ioutil.ReadFile(pfile)
if err != nil {
log.Println(err)
return err
}
err = yaml.Unmarshal(file, &uri2Object)
if err != nil {
log.Println(err)
return err
}
/*
for _, v := range uri2Object {
log.Println(v)
}
*/
return nil
}
func GetOid(uri string, oids *[]string) *[]string {
for _, v := range uri2Object {
if uri == v.Uri {
for _, o := range v.Object {
*oids = append(*oids, o.Oid)
}
}
}
return oids
}
func GetOidByFileds(uri string, fields []string, oids *[]string) *[]string {
for _, v := range uri2Object {
if uri == v.Uri {
for _, o := range v.Object {
if global.IsContain(o.Name, fields) || len(fields) == 0 {
*oids = append(*oids, o.Oid)
}
}
}
}
return oids
}
type NameOid struct {
Name string
Oid string
}
type NameValue struct {
Name string
Value string
}
func GetDataOid(Uri string, nameOids *[]NameOid) *[]NameOid {
var nameOid NameOid
for _, v := range uri2Object {
if Uri == v.Uri {
for _, o := range v.Object {
nameOid.Name = o.Name
nameOid.Oid = o.Oid
*nameOids = append(*nameOids, nameOid)
}
}
}
return nameOids
}
func GetDataOidByFields(uri string, fields []string, nameOids *[]NameOid) *[]NameOid {
var nameOid NameOid
for _, v := range uri2Object {
if uri == v.Uri {
for _, o := range v.Object {
nameOid.Name = o.Name
nameOid.Oid = o.Oid
if len(fields) == 0 || global.IsContainP(nameOid.Name, &fields, len(fields)) {
*nameOids = append(*nameOids, nameOid)
}
}
}
}
return nameOids
}

View File

@@ -0,0 +1,18 @@
-----BEGIN CERTIFICATE-----
MIIC4jCCAcqgAwIBAgICB+cwDQYJKoZIhvcNAQELBQAwEjEQMA4GA1UEAxMHUm9v
dCBDQTAeFw0yMzA4MTIxODA5MzZaFw0zMzA4MTIxODA5MzZaMBIxEDAOBgNVBAMT
B1Jvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCUTcFiT1GT
Zq9ROKTuWm6IfFthO6ysthEKevwkgJGDRCwF+K6rx3j7izTDfLkXum5OPbcd/yiE
B40Yrq9X2ckX260xG9PjDmGUaq8q5sza85Gg2hrW6wiLF9y8yYK3/v7716d0y6st
jt71pH554R98m0zHkbkmrFEagWR5cEoVM6MPZp2wdDnOFBBRiB1BrbHMpAFiKJ6s
oqm1yhUwCeeR/Hs09JF8KfOFhV4qAEVvE1cviHucCEvLBaG6xBzbKvYV2iOPu6u2
o818wphqmSZYoj3/O4/EyVgvj1VdSqmkTSudiiIhLAa8/2JKrW1v7wFQjRkwNwdf
h6UR5liIUwk7AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD
AQH/MB0GA1UdDgQWBBRtEF/Jyw6Zz3v0K5uA6aMOr9LXRTANBgkqhkiG9w0BAQsF
AAOCAQEAErmFo6JjEoFZv8R2gwNUq7ln+YEh2hX4myLlNDfTpYeGnn2Ge70Kmb0o
dkSyanDd9tGImcbEOttWAYve3vetvN3g+GONbf5pV7ClIbVV5MsjN/aGwj/TQWhu
ttmfu9IV2b5HyFEM61eoHVrNoWiNpbNHTu5D/XF8sg5JkseTnJF06foykzAx28i6
JcttunYn5SoWTIS9Ydu07X7uBcTeFBcKfH0xg4QlsNppiM5lIxBbp0WjQ8jyWw+b
Lyef4N6hmiaOf6P6qwaVZkEBhK6MVf1zadURuUSWAkhwGFjA7IbjbJ7OfYLXkYp3
mIrXQzjxz6AfyOcY/FsgcaDLf5xbYw==
-----END CERTIFICATE-----

Binary file not shown.

View File

@@ -0,0 +1,9 @@
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA10O52xwLqvwrrof3Ckso
QAXgQOMfIHB5HfrJYrd31tJlJbFw+bR1JHXIAdqh9Cz+H0ir8KfBXS/U2XgI5fbI
upkzg3cRv86nuksGtrKHzi9Q7lYYzGWVW9Tc/hcvdibG6XwLSNYemFN6JrOa5mZ7
IabtZLuPRwFCBx2XC/dg45wxrGWIe7fbw2SpGId76erwSn/oKJtoy5Ash7LrOkp6
lu8L0QQNfs9cRntjf4aQo99ppWvUF0H6OFBsGymwRfPRtWqLiwK824zrpXKMLFX3
e4FjFO7WQNR1spOuL0bH+Ym1cEPYUn8LJN9OaiodjEXc1pM1E5MHWXGMhnhiE9q3
jwIDAQAB
-----END PUBLIC KEY-----

View File

@@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAlE3BYk9Rk2avUTik7lpuiHxbYTusrLYRCnr8JICRg0QsBfiu
q8d4+4s0w3y5F7puTj23Hf8ohAeNGK6vV9nJF9utMRvT4w5hlGqvKubM2vORoNoa
1usIixfcvMmCt/7++9endMurLY7e9aR+eeEffJtMx5G5JqxRGoFkeXBKFTOjD2ad
sHQ5zhQQUYgdQa2xzKQBYiierKKptcoVMAnnkfx7NPSRfCnzhYVeKgBFbxNXL4h7
nAhLywWhusQc2yr2Fdojj7urtqPNfMKYapkmWKI9/zuPxMlYL49VXUqppE0rnYoi
ISwGvP9iSq1tb+8BUI0ZMDcHX4elEeZYiFMJOwIDAQABAoIBAFVJVhIsXVRwdBg4
hBkS5ogVRBPp1obIeYpWadSwH36m4M5aUlE1eKzoRGK7wlIUA8V5FmroxysOkKUG
KI5UD6Jp0fLw9uyX46QPqkb4zgyIkFI5u7+nEJW1Flt3Y3Ze7dJ1FbdEPWAIzs3j
WFzNC2eEhCYs9pZ3+HhOuzJfUitYU6ts83tazSms+7E027e/v2ubtYOzluEoj4YK
MM+ocqJOlXUOhyTATDaLs4fM567bwwFeriODQqmMIhXLf3HiBPfPYhoAlwPUV51L
bAjIPwG2/jy0yXPenYOUqSMP1i+XkyTL4eVqOLLQUI+BsEaToS8M7Lf4KRQE0vQm
uAkEA9ECgYEAxCsKXtkYXrma8UziSJgQBj88TfACyuYZBPkpBFJhffPVOreYzqmn
gsE38oHlLhCrezsxvScivS/Cwt7kgBTE9r6xmH8y2f0P3PNmtazQCqovG1gsNZ1t
9PZQmxbVUfx/7KRJ1Q5zX3x5C0P2c6XYv/1h/SQQ8PYXDhRxWZFVSikCgYEAwYlt
AoP8j6yHDMk10vJd0fKT1lztcHcQLvH3HQn2kHci2GCxySvcac49hpXTDeNdUzcQ
I9UWo1MggNojME3WHUTiZD5DYUzuNUBTkc0kMHWy79/YNAzvF9312MSyJ0NlytBQ
ISh0z0sPSxDjW+XCi/8LGu1rrremBqvh0rNIrMMCgYEAt+C8VNHcZRZHpX3y8icP
hjuKFGgwxe3Pb/j5uKJb3ktMCUEFjFo8uXTSM5AMuhRIGTgQVIS1rG5zemSh/Wj6
g2uWXyKEEQ+D6hGBqjP1wrlpdJE+x3btFdw5DFbn2HT9mF0bFAn6nXu4npWzEw5X
UQd67WT8OFIEpF8HLPTs5JkCgYBQlL6dmITU8Vm9mh1d+mnT23NwgnqeJATJ9xcT
sS1HE0Of4grEHw4Dw8pcOg+JLcyStE91C+kEEb1ryOdz2kS3JRI5+K6nWZeo9mKV
R1u1DZx2QbZMXcJDJriRC7y9mlNMsZVbaPPRx4fTknGHts9c6NEf4hC+y1pGVtSM
nPc6bwKBgQCrtb6srow9o0acH7mMmieDuqvT8DQ6rHWoizgneZTuvIo6SPO6nRnR
jfgfQkqr9IiLh9awSblQEN9fnddog7a1yS4cUZueiP5dmtFvp4B9Scnt+BoHpOLk
rrU2i7grAye4Cd003+pqhSERGCKSzb3fTSYiMypKsxeH2bs8nrRu2A==
-----END RSA PRIVATE KEY-----

View File

@@ -0,0 +1,8 @@
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAlE3BYk9Rk2avUTik7lpuiHxbYTusrLYRCnr8JICRg0QsBfiuq8d4
+4s0w3y5F7puTj23Hf8ohAeNGK6vV9nJF9utMRvT4w5hlGqvKubM2vORoNoa1usI
ixfcvMmCt/7++9endMurLY7e9aR+eeEffJtMx5G5JqxRGoFkeXBKFTOjD2adsHQ5
zhQQUYgdQa2xzKQBYiierKKptcoVMAnnkfx7NPSRfCnzhYVeKgBFbxNXL4h7nAhL
ywWhusQc2yr2Fdojj7urtqPNfMKYapkmWKI9/zuPxMlYL49VXUqppE0rnYoiISwG
vP9iSq1tb+8BUI0ZMDcHX4elEeZYiFMJOwIDAQAB
-----END RSA PUBLIC KEY-----

View File

@@ -0,0 +1,30 @@
-----BEGIN CERTIFICATE-----
MIIFKTCCAxGgAwIBAgIUIN48tRvspOjaIxbavyrZ/M7IvacwDQYJKoZIhvcNAQEL
BQAwHjELMAkGA1UEBhMCQ04xDzANBgNVBAMMBlJvb3RDQTAgFw0yMzA4MjIwMzQw
MDVaGA8yMTIzMDcyOTAzNDAwNVowHjELMAkGA1UEBhMCQ04xDzANBgNVBAMMBlJv
b3RDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALzyKbRc0hIDXsnI
Yo0DLjfGexwFmhgE6jFR6EWc4V2jVenkTrEahzpKYkhf2SrnEZuuZN/XU0JDAzUE
k8sNF6AUQOAQ6rwaHLB8ZZVEbl8F49F376RGAicg/AzIPytL1ebT1WR8YxoQgd6i
+B7H+6zcKDS8RREwpuVngNdVJ7/mUsxDFPVGpOsQQUsEdkZb/S7txRktHYBAXmiX
fZFC6aL/L9tXKJDcDiTQTyRuA08+uzFxgCF6/8XL8PD8+i8FzZLl0enadDy4ZiLA
pk+vrFmre+ETHHPf4lI1Ptz3fPNsvCS1HO73SJTgpGK0zpcvB32EqPuhPEKy33C0
dsY+CQcuACvhEk1EQjsSXkuoaPCV/aCmBhS3AMMRuD+73rs9G2DbJQc2KTkyiqM6
FO9MNGKUHDIEE9O8iBqagBZ7XXqwcf0zr+YdjT47RAM31uROKBECipc0BOSEHJ3w
sjMjLvqDHpP5NeoTnAIVt6djGQK8AWRKuICCtJ59llSmAMWjvsT4VD6ooVRln6ye
j6tLzlnmZvtxEmdOXL/Y7A/HnEb+uAtifsOvZUw/CQpdHRsrUdNUSOozTW/uXgp3
5lHx9B6HWuxOGagxaaLhD8W5TsqjdSc2BqX23Up/p84RaLrwHjXaesTq7Y/Ckd8T
wIfUc2HtdtFt7YrBr3pkJeI/HjcNAgMBAAGjXTBbMB0GA1UdDgQWBBSr39jHWOmo
14F/m0G/Irn6oVwNTzAfBgNVHSMEGDAWgBSr39jHWOmo14F/m0G/Irn6oVwNTzAM
BgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAE+Br
fsui1ac9meqmgTPnwG91GhqITmVBKwLpwJ3vNHqU/6SOlsw31GZ689kxpOYsMh19
PwYQ9OYQmz2LGbiVgf3m/mG9S4dnGQecqEAt0WBgYOOJ+tWwmtaDa1y1KEKJIGx2
R4NYmlihSqobgl3f7/WWtwZM9BZCFAubh757gOiDFDgTukbJxfFVIRy8MVWg5Voz
KZK1toIVI617SignK65L4JbdEPgnD803vYsmn+Mk5PvKLVd1jB/M/Sqxd1W7gqr5
nIT+WRJIs4SONQkxEP3e5aO2OQyify37a9P1IW8bPOtvZeQKnTSMIwVVyQV+Y6Az
4+a74ngLRAgk4ek9wycIHtv9ZzN0o6vwWBQ73DqyLLY2IVX/8LtrNO6LE9TpoMCa
tGVLZ1M5d1/eVYZC60y/lst/MRUyGgvB9tjiaNxo0Ni9quFifPAq/zx9AWo+7nIP
0RAahOvRZE5NM5LmgaVvMTXYflkfBXChDwL0gXa6rBt5y3/htZ8Cw1Tqi1v3Kv1s
hnD+zMD/Okrp76ZA/N2wib0p1Is1t+CFGdcmFOVEzkxXK37RreWay3cmdlTrzF5P
8kGivh2WApouy97rrhJo7R8rpUplD37Z5SiqtlOfBUaGIzpVapz19UTN5OTq10xo
yBSUGoQ/AGchVrHobdLPTgJNWU/L4QEPloEOGxg=
-----END CERTIFICATE-----

View File

@@ -0,0 +1,30 @@
-----BEGIN CERTIFICATE-----
MIIFKTCCAxGgAwIBAgIUIN48tRvspOjaIxbavyrZ/M7IvacwDQYJKoZIhvcNAQEL
BQAwHjELMAkGA1UEBhMCQ04xDzANBgNVBAMMBlJvb3RDQTAgFw0yMzA4MjIwMzQw
MDVaGA8yMTIzMDcyOTAzNDAwNVowHjELMAkGA1UEBhMCQ04xDzANBgNVBAMMBlJv
b3RDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALzyKbRc0hIDXsnI
Yo0DLjfGexwFmhgE6jFR6EWc4V2jVenkTrEahzpKYkhf2SrnEZuuZN/XU0JDAzUE
k8sNF6AUQOAQ6rwaHLB8ZZVEbl8F49F376RGAicg/AzIPytL1ebT1WR8YxoQgd6i
+B7H+6zcKDS8RREwpuVngNdVJ7/mUsxDFPVGpOsQQUsEdkZb/S7txRktHYBAXmiX
fZFC6aL/L9tXKJDcDiTQTyRuA08+uzFxgCF6/8XL8PD8+i8FzZLl0enadDy4ZiLA
pk+vrFmre+ETHHPf4lI1Ptz3fPNsvCS1HO73SJTgpGK0zpcvB32EqPuhPEKy33C0
dsY+CQcuACvhEk1EQjsSXkuoaPCV/aCmBhS3AMMRuD+73rs9G2DbJQc2KTkyiqM6
FO9MNGKUHDIEE9O8iBqagBZ7XXqwcf0zr+YdjT47RAM31uROKBECipc0BOSEHJ3w
sjMjLvqDHpP5NeoTnAIVt6djGQK8AWRKuICCtJ59llSmAMWjvsT4VD6ooVRln6ye
j6tLzlnmZvtxEmdOXL/Y7A/HnEb+uAtifsOvZUw/CQpdHRsrUdNUSOozTW/uXgp3
5lHx9B6HWuxOGagxaaLhD8W5TsqjdSc2BqX23Up/p84RaLrwHjXaesTq7Y/Ckd8T
wIfUc2HtdtFt7YrBr3pkJeI/HjcNAgMBAAGjXTBbMB0GA1UdDgQWBBSr39jHWOmo
14F/m0G/Irn6oVwNTzAfBgNVHSMEGDAWgBSr39jHWOmo14F/m0G/Irn6oVwNTzAM
BgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAE+Br
fsui1ac9meqmgTPnwG91GhqITmVBKwLpwJ3vNHqU/6SOlsw31GZ689kxpOYsMh19
PwYQ9OYQmz2LGbiVgf3m/mG9S4dnGQecqEAt0WBgYOOJ+tWwmtaDa1y1KEKJIGx2
R4NYmlihSqobgl3f7/WWtwZM9BZCFAubh757gOiDFDgTukbJxfFVIRy8MVWg5Voz
KZK1toIVI617SignK65L4JbdEPgnD803vYsmn+Mk5PvKLVd1jB/M/Sqxd1W7gqr5
nIT+WRJIs4SONQkxEP3e5aO2OQyify37a9P1IW8bPOtvZeQKnTSMIwVVyQV+Y6Az
4+a74ngLRAgk4ek9wycIHtv9ZzN0o6vwWBQ73DqyLLY2IVX/8LtrNO6LE9TpoMCa
tGVLZ1M5d1/eVYZC60y/lst/MRUyGgvB9tjiaNxo0Ni9quFifPAq/zx9AWo+7nIP
0RAahOvRZE5NM5LmgaVvMTXYflkfBXChDwL0gXa6rBt5y3/htZ8Cw1Tqi1v3Kv1s
hnD+zMD/Okrp76ZA/N2wib0p1Is1t+CFGdcmFOVEzkxXK37RreWay3cmdlTrzF5P
8kGivh2WApouy97rrhJo7R8rpUplD37Z5SiqtlOfBUaGIzpVapz19UTN5OTq10xo
yBSUGoQ/AGchVrHobdLPTgJNWU/L4QEPloEOGxg=
-----END CERTIFICATE-----

View File

@@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEYDCCAkigAwIBAgIUGZ67LDulO9kcRtwAwQGEC1oV5NUwDQYJKoZIhvcNAQEL
BQAwHjELMAkGA1UEBhMCQ04xDzANBgNVBAMMBlJvb3RDQTAeFw0yMzA4MjIwMzQw
MjVaFw0yMzA4MjMwMzQwMjVaMDwxCzAJBgNVBAYTAkNOMQ0wCwYDVQQKDARUZXN0
MR4wHAYDVQQDDBVUaW1lc3RhbXAgQ2VydGlmaWNhdGUwggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQC1vnKPYHUYPQSvGmfgSxZQley/hvJZyY9dun3hYv1P
h5PydHqkwM6t6wS+f9WTm2RyCvfRJrwn356gKm3DoDePs7T2kIEwnljMFRT8HDEC
SujKz2MBBW/b9eU6Bz9sQ4XHmSTVE/mJF4DiMRxmflUPZ+Mis80XbpFO91tdhDHZ
f0RX5D9ihaS/WTnkOV+ISMxxK1PB/zITlxAk15irYsMM8dCq0iUy/B3+bcGH1YzL
aKqbFw+nrm6NTxYLo4q3ERtLl49l9UXXcoNMvB70fk6i4kXrn7+AEdb3SPCFX0hb
qxUbCrLLDWf5x5JM9+49tkyQ7N36TSj92Q+05jp/f1MdAgMBAAGjeDB2MB0GA1Ud
DgQWBBRghFzHbuyke/ayjjVJuSgPKzwfRTAfBgNVHSMEGDAWgBSr39jHWOmo14F/
m0G/Irn6oVwNTzAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIGwDAWBgNVHSUB
Af8EDDAKBggrBgEFBQcDCDANBgkqhkiG9w0BAQsFAAOCAgEAAvKfbV0s2AGHKgEX
X33/N5nV8v109fjmQ0tzN1UvnamxYQLpgCLILN0yeWP4E5LKmzPWnTXG10woEasp
pAtXqYtgZZbvfqlkaryS5IJ73F6uO0hJK7iUswnpGxm9fxS04hhvsx3YRQnaaJ0m
Ek5JpXNsdQVN87iyGtnzp1uHY2csdyw9XDCQxDDXJ3hvLBthHAADeX+h8JX7G3xc
u85ON+w/rVIJIMpPQKg5gvNVzA/krebToSmOS6+f2O1UUj4PxwPPfBHugepzZYpF
grWy1vzz2DAZdNQs39c10a5/C5VrH77V++SoQBfYzCAI7YhA/L6ONIKW4nP3zFX3
zMmevHYR/WzQlN8twJhyAx7Y6AEjZNnfS2CvZj6UWvVUFbcVD5N9qgLuZxdDezQt
RAsVcSN5q5FURl99oi3X9sGoq/rI47MEU96hSG4pfiBTlt6VbYyWvBLeRWLccLPi
KtvV3wd6F8bqp+U2d/XQFTyQ5jfZcrCVvIesv4euTq+kTypjjjLadgzsy56ivoAx
UvjcJFZ2HVoKpv1SusOMsgg5nZf4lhE5zxYQOtEwzhOXv4U81ctIVHOKYZdDefWm
wC7dTtH9NxaWQZu07Y27wihkBARdnW1azgWorwzKYcGFT+pwrAPRUScj/vqsJkUH
KagSCD6B6qh4zSj0UANX3V6QcfQ=
-----END CERTIFICATE-----

View File

@@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEYDCCAkigAwIBAgIUGZ67LDulO9kcRtwAwQGEC1oV5NUwDQYJKoZIhvcNAQEL
BQAwHjELMAkGA1UEBhMCQ04xDzANBgNVBAMMBlJvb3RDQTAeFw0yMzA4MjIwMzQw
MjVaFw0yMzA4MjMwMzQwMjVaMDwxCzAJBgNVBAYTAkNOMQ0wCwYDVQQKDARUZXN0
MR4wHAYDVQQDDBVUaW1lc3RhbXAgQ2VydGlmaWNhdGUwggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQC1vnKPYHUYPQSvGmfgSxZQley/hvJZyY9dun3hYv1P
h5PydHqkwM6t6wS+f9WTm2RyCvfRJrwn356gKm3DoDePs7T2kIEwnljMFRT8HDEC
SujKz2MBBW/b9eU6Bz9sQ4XHmSTVE/mJF4DiMRxmflUPZ+Mis80XbpFO91tdhDHZ
f0RX5D9ihaS/WTnkOV+ISMxxK1PB/zITlxAk15irYsMM8dCq0iUy/B3+bcGH1YzL
aKqbFw+nrm6NTxYLo4q3ERtLl49l9UXXcoNMvB70fk6i4kXrn7+AEdb3SPCFX0hb
qxUbCrLLDWf5x5JM9+49tkyQ7N36TSj92Q+05jp/f1MdAgMBAAGjeDB2MB0GA1Ud
DgQWBBRghFzHbuyke/ayjjVJuSgPKzwfRTAfBgNVHSMEGDAWgBSr39jHWOmo14F/
m0G/Irn6oVwNTzAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIGwDAWBgNVHSUB
Af8EDDAKBggrBgEFBQcDCDANBgkqhkiG9w0BAQsFAAOCAgEAAvKfbV0s2AGHKgEX
X33/N5nV8v109fjmQ0tzN1UvnamxYQLpgCLILN0yeWP4E5LKmzPWnTXG10woEasp
pAtXqYtgZZbvfqlkaryS5IJ73F6uO0hJK7iUswnpGxm9fxS04hhvsx3YRQnaaJ0m
Ek5JpXNsdQVN87iyGtnzp1uHY2csdyw9XDCQxDDXJ3hvLBthHAADeX+h8JX7G3xc
u85ON+w/rVIJIMpPQKg5gvNVzA/krebToSmOS6+f2O1UUj4PxwPPfBHugepzZYpF
grWy1vzz2DAZdNQs39c10a5/C5VrH77V++SoQBfYzCAI7YhA/L6ONIKW4nP3zFX3
zMmevHYR/WzQlN8twJhyAx7Y6AEjZNnfS2CvZj6UWvVUFbcVD5N9qgLuZxdDezQt
RAsVcSN5q5FURl99oi3X9sGoq/rI47MEU96hSG4pfiBTlt6VbYyWvBLeRWLccLPi
KtvV3wd6F8bqp+U2d/XQFTyQ5jfZcrCVvIesv4euTq+kTypjjjLadgzsy56ivoAx
UvjcJFZ2HVoKpv1SusOMsgg5nZf4lhE5zxYQOtEwzhOXv4U81ctIVHOKYZdDefWm
wC7dTtH9NxaWQZu07Y27wihkBARdnW1azgWorwzKYcGFT+pwrAPRUScj/vqsJkUH
KagSCD6B6qh4zSj0UANX3V6QcfQ=
-----END CERTIFICATE-----

View File

@@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAtb5yj2B1GD0Erxpn4EsWUJXsv4byWcmPXbp94WL9T4eT8nR6
pMDOresEvn/Vk5tkcgr30Sa8J9+eoCptw6A3j7O09pCBMJ5YzBUU/BwxAkroys9j
AQVv2/XlOgc/bEOFx5kk1RP5iReA4jEcZn5VD2fjIrPNF26RTvdbXYQx2X9EV+Q/
YoWkv1k55DlfiEjMcStTwf8yE5cQJNeYq2LDDPHQqtIlMvwd/m3Bh9WMy2iqmxcP
p65ujU8WC6OKtxEbS5ePZfVF13KDTLwe9H5OouJF65+/gBHW90jwhV9IW6sVGwqy
yw1n+ceSTPfuPbZMkOzd+k0o/dkPtOY6f39THQIDAQABAoIBADgq2YDSEJ4jDXWI
NZ4t1oGlM/ulGvUAw9v1rL2hOCQCBIkj0ltkcvtw7JBrNXhex9Yu6ZOr4u53v7BE
LJQOyd0RbtXcpvB9n3fC9C9ODx9kQzmaikBgi8dw4Rzj7Ifq/kdHXwizGaVyrBQ7
lUlfta4DL0EkTDf3pdS/wW7PUhCjLPEPH6GqkDilsIGGudDT5pqUVB/fkLq4rPl4
QhQixDCwTtesPMeMMCy+bjB5hojRzENZ9ste4eSpF0BJQyUjKLWkyCPjFZKtM1l8
C+fZT/tVeyMkGpOXywhtuYSaAeoeaqrPjvMzN1H3slx0i9J6lIS/T+94jXuA5Zbw
iXR6GAkCgYEA4D6K02Nnu1vk/NnhqK8AiP9gWUxArGaQ8BKkhAXEi7/oLhRfnJE0
eNgmZLKk4pMZmC9tf5WiBXdcHDZwjxequi02AtdU4p0emStJ7L/if3YLdWKCOdjw
3jkMdtHmQRT3bUFppKkH4n+EAg08QOT1HLoFVmcfKkjZQ9igbfFoAx8CgYEAz3sn
G6ZpF7wbxdWyPxuko9O8r9V6xFa6pWpuy5X1rVXUEy4u7pwn3D7xgOT3v83HdkIG
aRlIR8YbEcekpO+hqRPljvm3zYDsEXs4I1fBmnxSrO9aX0IImEabTCTuRAUZRGMe
Vzrk2rqCmuO0zDmBN+/uxqlK5us3wAguO+vbPkMCgYAgSIC9/BKkA4/M4yU8nq0q
C/H4CSVKbJ2zIkvzAc2Q/PjVIXO+W509RIkKeDmKsPi/UxylgIpJ1Sw6l4/O2e5n
TTj4Yb3DvjD4hiXnYpyeEwWFScBLybKrm3Ty6jcG6ZjRbthhr0AGWKtNjFA/W3b6
QsGf9cqj0McOoHJAQb/iqwKBgH9c0+bvQjflqw7IXUDMEUbX5U3yuAfqTWzZZuXm
Sgd7VlHn2btzdCyJHurGoybEhRqc8R52/J3CiD9j1DfDOfN2WUZpGGE4MLGSeCWJ
6ziP9Jhf3ZP4DxqazR3y1ag/kQEf7zIQ3wc90oqOGR/8dMwHpwWgSnByF6jz3J2/
7LfNAoGBAMJsi2nJF3jzWwZLY9pQQ2/Icdojk0yUE0a9skdh5R6MjpzwQ3FydbB0
PxUxfJlAjS06kV/URo11AdQZXm/QKyb8uJPyRppJ7DZ0vsiDWysElqUHX/E/H6kI
QaQvePQ59HcgkJVh9wFI5blHtTyMrGR76kmZN5ClL05ITkqdnWJp
-----END RSA PRIVATE KEY-----

View File

@@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAtb5yj2B1GD0Erxpn4EsWUJXsv4byWcmPXbp94WL9T4eT8nR6
pMDOresEvn/Vk5tkcgr30Sa8J9+eoCptw6A3j7O09pCBMJ5YzBUU/BwxAkroys9j
AQVv2/XlOgc/bEOFx5kk1RP5iReA4jEcZn5VD2fjIrPNF26RTvdbXYQx2X9EV+Q/
YoWkv1k55DlfiEjMcStTwf8yE5cQJNeYq2LDDPHQqtIlMvwd/m3Bh9WMy2iqmxcP
p65ujU8WC6OKtxEbS5ePZfVF13KDTLwe9H5OouJF65+/gBHW90jwhV9IW6sVGwqy
yw1n+ceSTPfuPbZMkOzd+k0o/dkPtOY6f39THQIDAQABAoIBADgq2YDSEJ4jDXWI
NZ4t1oGlM/ulGvUAw9v1rL2hOCQCBIkj0ltkcvtw7JBrNXhex9Yu6ZOr4u53v7BE
LJQOyd0RbtXcpvB9n3fC9C9ODx9kQzmaikBgi8dw4Rzj7Ifq/kdHXwizGaVyrBQ7
lUlfta4DL0EkTDf3pdS/wW7PUhCjLPEPH6GqkDilsIGGudDT5pqUVB/fkLq4rPl4
QhQixDCwTtesPMeMMCy+bjB5hojRzENZ9ste4eSpF0BJQyUjKLWkyCPjFZKtM1l8
C+fZT/tVeyMkGpOXywhtuYSaAeoeaqrPjvMzN1H3slx0i9J6lIS/T+94jXuA5Zbw
iXR6GAkCgYEA4D6K02Nnu1vk/NnhqK8AiP9gWUxArGaQ8BKkhAXEi7/oLhRfnJE0
eNgmZLKk4pMZmC9tf5WiBXdcHDZwjxequi02AtdU4p0emStJ7L/if3YLdWKCOdjw
3jkMdtHmQRT3bUFppKkH4n+EAg08QOT1HLoFVmcfKkjZQ9igbfFoAx8CgYEAz3sn
G6ZpF7wbxdWyPxuko9O8r9V6xFa6pWpuy5X1rVXUEy4u7pwn3D7xgOT3v83HdkIG
aRlIR8YbEcekpO+hqRPljvm3zYDsEXs4I1fBmnxSrO9aX0IImEabTCTuRAUZRGMe
Vzrk2rqCmuO0zDmBN+/uxqlK5us3wAguO+vbPkMCgYAgSIC9/BKkA4/M4yU8nq0q
C/H4CSVKbJ2zIkvzAc2Q/PjVIXO+W509RIkKeDmKsPi/UxylgIpJ1Sw6l4/O2e5n
TTj4Yb3DvjD4hiXnYpyeEwWFScBLybKrm3Ty6jcG6ZjRbthhr0AGWKtNjFA/W3b6
QsGf9cqj0McOoHJAQb/iqwKBgH9c0+bvQjflqw7IXUDMEUbX5U3yuAfqTWzZZuXm
Sgd7VlHn2btzdCyJHurGoybEhRqc8R52/J3CiD9j1DfDOfN2WUZpGGE4MLGSeCWJ
6ziP9Jhf3ZP4DxqazR3y1ag/kQEf7zIQ3wc90oqOGR/8dMwHpwWgSnByF6jz3J2/
7LfNAoGBAMJsi2nJF3jzWwZLY9pQQ2/Icdojk0yUE0a9skdh5R6MjpzwQ3FydbB0
PxUxfJlAjS06kV/URo11AdQZXm/QKyb8uJPyRppJ7DZ0vsiDWysElqUHX/E/H6kI
QaQvePQ59HcgkJVh9wFI5blHtTyMrGR76kmZN5ClL05ITkqdnWJp
-----END RSA PRIVATE KEY-----

View File

@@ -0,0 +1,134 @@
# file: log file name
# level: /trace/debug/info/warn/error/fatal, default: debug
# duration: rotation time with xx hours, example: 1/12/24 hours
# count: rotation count of log, default is 30 rotation
logger:
file: d:/local.git/ems.agt/restagent/log/restagent-t.log
level: trace
duration: 24
count: 2
# rest agent listen ipv4/v6 and port, support multiple routines
# ip: 0.0.0.0 or ::0, support IPv4/v6
rest:
- ipv4: 0.0.0.0
ipv6: fe80::f6bb:7d5f:bcb2:763b%7
port: 3030
- ipv4: 0.0.0.0
ipv6: fe80::f6bb:7d5f:bcb2:763b%7
port: 6060
database:
type: mysql
user: root
password: 1000omc@kp!
host: 127.0.0.1
port: 33066
name: omc_db
backup: d:/local.git/ems.agt/restagent/database
# Redis 缓存数据,数据源声明全小写
redis:
dataSource:
# OMC系统使用库
default:
port: 6379 # Redis port
host: "192.168.0.229" # Redis host
password: ""
db: 10 # Redis db_num
# UDM网元用户库
udmuser:
port: 6379 # Redis port
host: "192.168.0.229"
password: ""
db: 0 # Redis db_num
# 多个数据源时可以用这个指定默认的数据源
defaultDataSourceName: "default"
mml:
port: 4100
sleep: 200
user: admin
password: admin
mmlHome: ./mmlhome
ne:
user: root
etcdir: /usr/local/etc
bindir: /usr/local/bin
omcdir: /usr/local/omc
scpdir: /tmp
licensedir: /usr/local/etc/{neType}/license
# chk2ne: true/false, if put OmcNeConfig parameters to NE
omc:
uriPrefix: /api/rest
neType: OMC
neId: 001
rmUID: 4400HX101
neName: OMC
province: GD
vendor: ""
dn: 4600
chk2ne: false
sn: 13750650
checksign: false
backup: ./backup
upload: ./upload
frontUpload: d:/local.git/fe.ems/upload
frontTraceDir: d:/local.git/fe.ems/trace
software: ./software
license: ./license
gtpUri: gtp:192.168.2.119:2152
checkContentType: false
testMode: false
rbacMode: true
runDir:
# Alarm module setting
# Forward interface:
# email/sms
alarm:
forwardAlarm: true
email:
smtp: smtp@xxx.com.cn
port: 25
user: smtpuser
password: smtpuser@omc
sms:
apiURL: http://smsc.xxx.com.cn/
accessKeyID: xxxx
accessKeySecret: xxxx
signName: xxx SMSC
templateCode: 1000
#User authorized information
# crypt: mysql/md5/bcrypt
# token: true/false to check accessToken
# expires for session, unit: second
# Support single/multiple session of user
auth:
crypt: bcrypt
token: true
expires: 1800
session: multiple
publicKey: ./etc/certs/omc_pub.key
privateKey: ./etc/certs/omc_pri.key
# Parameter for limit number
# rmuid_maxnum: the max number of rmUID, default: 50
# alarmid_maxnum: the max number of AlarmID, default: 50
# pmid_maxnum: the max number of pmID, default: 50
# subid_maxnum: the max number of subscription ID, default: 20
# uri_maxlen: the max length of uri, default: 8192
# rmuid_regexp: regexp pattern of rmUID
params:
rmuidmaxnum: 50
alarmidmaxnum: 50
pmidmaxnum: 50
subidmaxnum: 20
urimaxlen: 2100000
rmuidregexp: "[0-9]{4}[A-Z]{2}[A-Z]{2}[0-9A-Z]{1}[0-9A-Z]{3}[0-9A-Z]{1,16}"
testConfig:
enabled: true
file: ./etc/testconfig.yaml

156
restagent/etc/restconf.yaml Normal file
View File

@@ -0,0 +1,156 @@
# file: log file name
# level: /trace/debug/info/warn/error/fatal, default: debug
# duration: rotation time with xx hours, example: 1/12/24 hours
# count: rotation count of log, default is 30 rotation
logger:
file: d:/local.git/ems.agt/restagent/log/restagent.log
level: trace
duration: 24
count: 2
# rest agent listen ipv4/v6 and port, support multiple routines
# ip: 0.0.0.0 or ::0, support IPv4/v6
rest:
- ipv4: 0.0.0.0
ipv6:
port: 3040
- ipv4: 0.0.0.0
ipv6:
port: 4443
scheme: https
caFile: ./etc/certs/rootca.crt
certFile: ./etc/certs/tsa-omc.crt
keyFile: ./etc/certs/tsa-omc_pri.key
webServer:
enabled: true
rootDir: d:/local.git/fe.ems
listen:
- addr: :8080
schema: http
- addr: :8443
scheme: https
caFile: ./etc/certs/rootca.crt
certFile: ./etc/certs/tsa-omc.crt
keyFile: ./etc/certs/tsa-omc_pri.key
database:
type: mysql
user: root
# password: 1000omc@kp!
# host: "192.168.2.119"
# port: 33066
password: "root@1234"
host: "192.168.30.244"
port: 3306
name: omc_db
backup: d:/local.git/ems.agt/restagent/database
# Redis 缓存数据,数据源声明全小写
redis:
dataSource:
# OMC系统使用库
default:
port: 6379 # Redis port
host: "192.168.0.229" # Redis host
password: ""
db: 10 # Redis db_num
# UDM网元用户库
udmuser:
port: 6379 # Redis port
host: "192.168.0.229"
password: ""
db: 0 # Redis db_num
# 多个数据源时可以用这个指定默认的数据源
defaultDataSourceName: "default"
mml:
port: 4100
sleep: 200
user: admin
password: admin
mmlHome: ./mmlhome
upload: /home/agtuser
ne:
user: root
etcdir: /usr/local/etc
bindir: /usr/local/bin
omcdir: /usr/local/omc
scpdir: /tmp
licensedir: /usr/local/etc/{neType}/license
# chk2ne: true/false, if put OmcNeConfig parameters to NE
omc:
uriPrefix: /api/rest/oam
neType: OMC
neId: 001
rmUID: 4400HX101
neName: OMC
province: GD
vendor: ""
dn: 4600
chk2ne: false
sn: 13750650
checksign: false
backup: ./backup
upload: ./upload
frontUpload: C:\AMP\Probject\ems_frontend\upload
frontTraceDir: d:/local.git/fe.ems/trace
software: ./software
license: ./license
gtpUri: gtp:192.168.2.119:2152
checkContentType: false
testMode: false
rbacMode: true
runDir:
# Alarm module setting
# Forward interface:
# email/sms
alarm:
forwardAlarm: true
email:
smtp: smtp@xxx.com.cn
port: 25
user: smtpuser
password: smtpuser@omc
sms:
apiURL: http://smsc.xxx.com.cn/
accessKeyID: xxxx
accessKeySecret: xxxx
signName: xxx SMSC
templateCode: 1000
#User authorized information
# crypt: mysql/md5/bcrypt
# token: true/false to check accessToken
# expires for session, unit: second
# Support single/multiple session of user
#
auth:
crypt: bcrypt
token: true
expires: 1800
session: multiple
publicKey: ./etc/certs/omc_pub.key
privateKey: ./etc/certs/omc_pri.key
# Parameter for limit number
# rmuid_maxnum: the max number of rmUID, default: 50
# alarmid_maxnum: the max number of AlarmID, default: 50
# pmid_maxnum: the max number of pmID, default: 50
# subid_maxnum: the max number of subscription ID, default: 20
# uri_maxlen: the max length of uri, default: 8192
# rmuid_regexp: regexp pattern of rmUID
params:
rmuidmaxnum: 50
alarmidmaxnum: 50
pmidmaxnum: 50
subidmaxnum: 20
urimaxlen: 2100000
rmuidregexp: "[0-9]{4}[A-Z]{2}[A-Z]{2}[0-9A-Z]{1}[0-9A-Z]{3}[0-9A-Z]{1,16}"
testConfig:
enabled: true
file: ./etc/testconfig.yaml

View File

@@ -0,0 +1,19 @@
UDM:
capUsed: 16
featureEnabled: [N8,N10,N13]
AUSF:
capUsed: 16
featureEnabled: [N12]
AMF:
capUsed: 16
featureEnabled: [N1,N2,N8,N11,N12,N14,N15]
SMF:
capUsed: 16
featureEnabled: [N4,N7,N10,N11]
UPF:
capUsed: 16
featureEnabled: [N3,N4,N6,N9]
OMC:
capUsed: 0
featureEnabled: []

26
restagent/makefile Normal file
View File

@@ -0,0 +1,26 @@
# Makefile for rest agent project
PROJECT = OMC
VERSION = 1.6.2
PLATFORM = amd64
ARMPLATFORM = aarch64
BUILDDIR = ../../build
DEBBUILDDIR = ../../debbuild
RPMBUILDDIR = $(HOME)/goprojects/rpmbuild
INSTALLDIR = /usr/local/omc
RELEASEDIR = ../../release
LIBDIR = ems.agt/lib
BINNAME = restagent
.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)

211
restagent/restagent.go Normal file
View File

@@ -0,0 +1,211 @@
package main
import (
"crypto/tls"
"crypto/x509"
"fmt"
"net"
"net/http"
"os"
"strconv"
"strings"
"ems.agt/lib/core/redis"
"ems.agt/lib/dborm"
"ems.agt/lib/global"
"ems.agt/lib/log"
"ems.agt/lib/routes"
"ems.agt/features/dbrest"
"ems.agt/features/fm"
"ems.agt/features/lm"
"ems.agt/features/pm"
"ems.agt/restagent/config"
)
// const defaultConfigFile = "./etc/restconf.yaml"
// func init() {
// cfile := 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 restagent version: %s\n%s\n%s\n\n", global.Version, global.BuildTime, global.GoVer)
// os.Exit(0)
// }
// if *ph {
// flag.Usage()
// os.Exit(0)
// }
// config.ReadConfig(*cfile)
// config.UriPrefix = config.GetYamlConfig().OMC.UriPrefix
// //fmt.Println(config.UriPrefix)
// }
func listenIPv6(ipv6 string, port int) {
//
addr := &net.TCPAddr{
IP: net.ParseIP(ipv6),
Port: port,
}
listener, err := net.ListenTCP("tcp6", addr)
if err != nil {
fmt.Println("Failed to listen:", err)
return
}
server := &http.Server{}
err = server.Serve(listener)
if err != nil {
fmt.Println("Failed to serve:", err)
}
}
func HttpListen(addr string, router http.Handler) {
err := http.ListenAndServe(addr, router)
if err != nil {
fmt.Println("ListenAndServe err:", err)
os.Exit(5)
}
}
func HttpListenTLS(addr, certFile, keyFile string, router http.Handler) {
err := http.ListenAndServeTLS(addr, certFile, keyFile, router)
if err != nil {
fmt.Println("ListenAndServeTLS err:", err)
os.Exit(6)
}
}
func HttpListenConfigTLS(addr, caFile, certFile, keyFile string, router http.Handler) {
// 加载根证书
caCert, err := os.ReadFile(caFile)
if err != nil {
log.Fatal(err)
}
caCertPool := x509.NewCertPool()
caCertPool.AppendCertsFromPEM(caCert)
// 创建自定义的TLS配置
tlsConfig := &tls.Config{
ClientCAs: caCertPool,
ClientAuth: tls.RequireAndVerifyClientCert,
}
// 创建HTTP服务器
server := &http.Server{
Addr: addr,
Handler: router,
TLSConfig: tlsConfig,
}
err = server.ListenAndServeTLS(certFile, keyFile)
if err != nil {
fmt.Println("ListenAndServeTLS err:", err)
os.Exit(6)
}
}
func HttpListenWebServerTLS(addr, certFile, keyFile string) {
err := http.ListenAndServeTLS(addr, certFile, keyFile, nil)
if err != nil {
fmt.Println("ListenAndServeTLS err:", err)
os.Exit(7)
}
}
func HttpListenWebServer(addr string) {
err := http.ListenAndServe(addr, nil)
if err != nil {
fmt.Println("ListenAndServe err:", err)
os.Exit(7)
}
}
func main() {
conf := config.GetYamlConfig()
log.InitLogger(conf.Logger.File, conf.Logger.Duration, conf.Logger.Count, "omc:restagent", config.GetLogLevel())
fmt.Printf("OMC restagent version: %s\n", global.Version)
log.Infof("========================= OMC restagent startup =========================")
log.Infof("OMC restagent version: %s %s %s", global.Version, global.BuildTime, global.GoVer)
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)
os.Exit(4)
}
err = fm.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)
os.Exit(4)
}
err = pm.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)
os.Exit(4)
}
err = dbrest.InitDbClient(conf.Database.Type, conf.Database.User, conf.Database.Password,
conf.Database.Host, conf.Database.Port, conf.Database.Name)
if err != nil {
fmt.Println("rests.initDbClient err:", err)
os.Exit(4)
}
err = lm.InitDbClient(conf.Database.Type, conf.Database.User, conf.Database.Password,
conf.Database.Host, conf.Database.Port, conf.Database.Name)
if err != nil {
fmt.Println("lm.initDbClient err:", err)
os.Exit(4)
}
// 连接redis
redis.Connect()
router := routes.NewRouter()
// 开启监控采集
// monitor.StartMonitor(false, "")
for _, rest := range conf.Rest {
// ipv4 goroutines
if rest.IPv4 != "" {
listen := rest.IPv4 + ":" + strconv.Itoa(int(rest.Port))
if strings.ToLower(rest.Scheme) == "https" {
go HttpListenTLS(listen, rest.CertFile, rest.KeyFile, router)
} else {
go HttpListen(listen, router)
}
}
// ipv6 goroutines
if rest.IPv6 != "" {
listenv6 := "[" + rest.IPv6 + "]" + ":" + strconv.Itoa(int(rest.Port))
if strings.ToLower(rest.Scheme) == "https" {
go HttpListenTLS(listenv6, rest.CertFile, rest.KeyFile, router)
} else {
go HttpListen(listenv6, router)
}
}
}
if conf.WebServer.Enabled {
fs := http.FileServer(http.Dir(conf.WebServer.RootDir))
http.Handle("/", fs)
for _, listen := range conf.WebServer.Listen {
if strings.ToLower(listen.Scheme) == "https" {
go HttpListenWebServerTLS(listen.Addr, listen.CertFile, listen.KeyFile)
} else {
go HttpListenWebServer(listen.Addr)
}
}
}
select {}
}