fix: MML命令连接改为网元信息配置telnet

This commit is contained in:
TsMask
2024-10-11 16:29:14 +08:00
parent 6e8472d2e8
commit b55ce9e290
3 changed files with 469 additions and 499 deletions

View File

@@ -69,15 +69,11 @@ redis:
# sleep: time delay for after write buffer (millisecond) # sleep: time delay for after write buffer (millisecond)
# deadLine: timeout for io read and write (second) # deadLine: timeout for io read and write (second)
mml: mml:
port: 4100
port2: 5002
sleep: 200 sleep: 200
deadLine: 10 deadLine: 10
sizeRow: 600 sizeRow: 600
sizeCol: 128 sizeCol: 128
bufferSize: 65535 bufferSize: 65535
user: admin
password: admin
mmlHome: ./mmlhome mmlHome: ./mmlhome
# Tracking configuration # Tracking configuration

View File

@@ -10,15 +10,15 @@ import (
"strings" "strings"
"time" "time"
"be.ems/lib/dborm" "be.ems/lib/core/ctx"
"be.ems/lib/global" "be.ems/lib/global"
"be.ems/lib/log" "be.ems/lib/log"
"be.ems/lib/mmlp" "be.ems/lib/mmlp"
"be.ems/lib/services" "be.ems/lib/services"
"be.ems/restagent/config" "be.ems/restagent/config"
tokenConst "be.ems/src/framework/constants/token" tokenConst "be.ems/src/framework/constants/token"
"github.com/gorilla/mux" neModel "be.ems/src/modules/network_element/model"
neService "be.ems/src/modules/network_element/service"
) )
// const ( // const (
@@ -74,30 +74,35 @@ func InitMML() {
func PostMML2ToNF(w http.ResponseWriter, r *http.Request) { func PostMML2ToNF(w http.ResponseWriter, r *http.Request) {
log.Info("PostMML2ToNF processing... ") log.Info("PostMML2ToNF processing... ")
vars := mux.Vars(r) neType := ctx.GetParam(r, "elementTypeValue")
neType := vars["elementTypeValue"] neId := ctx.GetQuery(r, "ne_id")
neInfo := new(dborm.NeInfo) if neId == "" {
params := r.URL.Query() log.Error("NOT FOUND ne_id")
neId := params["ne_id"] services.ResponseBadRequest400WrongParamValue(w)
neInfo, err := dborm.XormGetNeInfo(neType, neId[0])
if err != nil {
log.Error("Failed to dborm.XormGetNeInfo:", err)
services.ResponseInternalServerError500ProcessError(w, err)
return return
} }
log.Debug("neType:", neType, "neId", neId)
neInfoArr := neService.NewNeInfoImpl.SelectList(neModel.NeInfo{NeType: neType, NeId: neId}, false, true)
if len(neInfoArr) < 1 {
services.ResponseInternalServerError500DatabaseOperationFailed(w)
return
}
neInfo := neInfoArr[0]
if neInfo.NeId != neId || neInfo.IP == "" || len(neInfo.Hosts) < 2 {
services.ResponseWithJson(w, 200, map[string]any{
"code": 0,
"msg": "neInfo not found",
})
return
}
telnetHost := neInfo.Hosts[1]
buf := make([]byte, BUFFER_SIZE) buf := make([]byte, BUFFER_SIZE)
var n int var n int
var mmlResult []string var mmlResult []string
port2 := 5002 hostMML := fmt.Sprintf("%s:%d", telnetHost.Addr, telnetHost.Port)
if config.GetYamlConfig().MML.Port2 != 0 {
port2 = config.GetYamlConfig().MML.Port2
}
if neInfo != nil {
hostMML := fmt.Sprintf("%s:%d", neInfo.Ip, port2)
conn, err := net.Dial("tcp", hostMML) conn, err := net.Dial("tcp", hostMML)
//conn, err := net.Dial("tcp", hostMML)
if err != nil { if err != nil {
errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err) errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err)
log.Error(errMsg) log.Error(errMsg)
@@ -129,7 +134,7 @@ func PostMML2ToNF(w http.ResponseWriter, r *http.Request) {
}) // 发送设置 WINDOW SIZE }) // 发送设置 WINDOW SIZE
conn.SetDeadline(time.Now().Add(TIME_DEAD_LINE * time.Second)) conn.SetDeadline(time.Now().Add(TIME_DEAD_LINE * time.Second))
loginStr := fmt.Sprintf("%s\n%s\n", config.GetYamlConfig().MML.User, config.GetYamlConfig().MML.Password) loginStr := fmt.Sprintf("%s\n%s\n", telnetHost.User, telnetHost.Password)
_, err = conn.Write([]byte(loginStr)) _, err = conn.Write([]byte(loginStr))
if err != nil { if err != nil {
log.Error("Failed to write:", err) log.Error("Failed to write:", err)
@@ -194,8 +199,6 @@ func PostMML2ToNF(w http.ResponseWriter, r *http.Request) {
mmlResult = append(mmlResult, result) mmlResult = append(mmlResult, result)
} }
}
response := Response{mmlResult} response := Response{mmlResult}
services.ResponseWithJson(w, http.StatusOK, response) services.ResponseWithJson(w, http.StatusOK, response)
} }
@@ -218,62 +221,39 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
// TIME_DEAD_LINE = time.Duration(config.GetYamlConfig().MML.DeadLine) // TIME_DEAD_LINE = time.Duration(config.GetYamlConfig().MML.DeadLine)
// } // }
pack := "mml" neType := ctx.GetParam(r, "elementTypeValue")
vars := mux.Vars(r) neId := ctx.GetQuery(r, "ne_id")
module := vars["managedType"] if neId == "" {
neType := vars["elementTypeValue"]
params := r.URL.Query()
neId := params["ne_id"]
if len(neId) == 0 {
log.Error("NOT FOUND ne_id") log.Error("NOT FOUND ne_id")
services.ResponseBadRequest400WrongParamValue(w) services.ResponseBadRequest400WrongParamValue(w)
return return
} }
log.Debug("neType:", neType, "neId", neId) log.Debug("neType:", neType, "neId", neId)
log.Debugf("method:%s, managementType:%s dbname:%s, tbname:%s pack:%s", r.Method, module, neType, neId[0], pack)
var buf [20 * 1024]byte
//buf := make([]byte, 0)
var n int
var mmlResult []string
// exist, err := services.CheckUserPermission(token, strings.ToLower(r.Method), module, neType, neId[0], pack)
// if err != nil {
// log.Error("Failed to get permission:", err)
// errMsg := fmt.Sprintf("RetCode = -1 operation failed: do not have the operation permissions")
// log.Error(errMsg)
// mmlResult = append(mmlResult, errMsg)
// response := Response{mmlResult}
// services.ResponseWithJson(w, http.StatusOK, response)
// //services.ResponseForbidden403NotPermission(w)
// return
// }
// if !exist {
// log.Error("Not permission!")
// errMsg := fmt.Sprintf("RetCode = -1 operation failed: do not have the operation permissions")
// log.Error(errMsg)
// mmlResult = append(mmlResult, errMsg)
// response := Response{mmlResult}
// services.ResponseWithJson(w, http.StatusOK, response)
// //services.ResponseForbidden403NotPermission(w)
// return
// }
if strings.ToLower(neType) == "omc" { if strings.ToLower(neType) == "omc" {
PostMMLToOMC(w, r) PostMMLToOMC(w, r)
return return
} }
neInfo := new(dborm.NeInfo) neInfoArr := neService.NewNeInfoImpl.SelectList(neModel.NeInfo{NeType: neType, NeId: neId}, false, true)
neInfo, err := dborm.XormGetNeInfo(neType, neId[0]) if len(neInfoArr) < 1 {
if err != nil {
log.Error("dborm.XormGetNeInfo is failed:", err)
services.ResponseInternalServerError500DatabaseOperationFailed(w) services.ResponseInternalServerError500DatabaseOperationFailed(w)
return return
} }
neInfo := neInfoArr[0]
if neInfo.NeId != neId || neInfo.IP == "" || len(neInfo.Hosts) < 2 {
services.ResponseWithJson(w, 200, map[string]any{
"code": 0,
"msg": "neInfo not found",
})
return
}
telnetHost := neInfo.Hosts[1]
if neInfo != nil { var buf [20 * 1024]byte
//buf := make([]byte, 0)
var n int
var mmlResult []string
switch strings.ToLower(neType) { switch strings.ToLower(neType) {
case "xxx": case "xxx":
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
@@ -365,7 +345,7 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
// log.Debug(string(buf[0:n])) // log.Debug(string(buf[0:n]))
for _, mml := range mmlRequest.MML { for _, mml := range mmlRequest.MML {
hostMML := fmt.Sprintf("%s:%d", neInfo.Ip, config.GetYamlConfig().MML.Port) hostMML := fmt.Sprintf("%s:%d", telnetHost.Addr, telnetHost.Port)
conn, err := net.Dial("tcp", hostMML) conn, err := net.Dial("tcp", hostMML)
if err != nil { if err != nil {
errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err) errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err)
@@ -379,7 +359,7 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
conn.SetDeadline(time.Now().Add(TIME_DEAD_LINE * time.Second)) conn.SetDeadline(time.Now().Add(TIME_DEAD_LINE * time.Second))
loginStr := fmt.Sprintf("%s\n%s\n", config.GetYamlConfig().MML.User, config.GetYamlConfig().MML.Password) loginStr := fmt.Sprintf("%s\n%s\n", telnetHost.User, telnetHost.Password)
_, err = conn.Write([]byte(loginStr)) _, err = conn.Write([]byte(loginStr))
if err != nil { if err != nil {
log.Error("Failed to write:", err) log.Error("Failed to write:", err)
@@ -430,7 +410,7 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
// mmlResult = append(mmlResult, "COMMAND OK\n") // mmlResult = append(mmlResult, "COMMAND OK\n")
} }
case "ims": case "ims":
hostMML := fmt.Sprintf("%s:%d", neInfo.Ip, config.GetYamlConfig().MML.Port) hostMML := fmt.Sprintf("%s:%d", telnetHost.Addr, telnetHost.Port)
conn, err := net.Dial("tcp", hostMML) conn, err := net.Dial("tcp", hostMML)
if err != nil { if err != nil {
errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err) errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err)
@@ -454,7 +434,7 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
// } // }
conn.SetDeadline(time.Now().Add(TIME_DEAD_LINE * time.Second)) conn.SetDeadline(time.Now().Add(TIME_DEAD_LINE * time.Second))
_, err = conn.Write([]byte(config.GetYamlConfig().MML.User + "\r\n")) _, err = conn.Write([]byte(telnetHost.User + "\r\n"))
if err != nil { if err != nil {
log.Error("Failed to write:", err) log.Error("Failed to write:", err)
mmlResult = append(mmlResult, err.Error()) mmlResult = append(mmlResult, err.Error())
@@ -474,7 +454,7 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
} }
log.Trace(string(buf[0:n])) log.Trace(string(buf[0:n]))
_, err = conn.Write([]byte(config.GetYamlConfig().MML.Password + "\r\n")) _, err = conn.Write([]byte(telnetHost.Password + "\r\n"))
if err != nil { if err != nil {
log.Error("Failed to write:", err) log.Error("Failed to write:", err)
mmlResult = append(mmlResult, err.Error()) mmlResult = append(mmlResult, err.Error())
@@ -549,7 +529,7 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
mmlResult = append(mmlResult, result) mmlResult = append(mmlResult, result)
} }
default: default:
hostMML := fmt.Sprintf("%s:%d", neInfo.Ip, config.GetYamlConfig().MML.Port) hostMML := fmt.Sprintf("%s:%d", telnetHost.Addr, telnetHost.Port)
conn, err := net.Dial("tcp", hostMML) conn, err := net.Dial("tcp", hostMML)
if err != nil { if err != nil {
errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err) errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err)
@@ -573,7 +553,7 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
// } // }
conn.SetDeadline(time.Now().Add(TIME_DEAD_LINE * time.Second)) conn.SetDeadline(time.Now().Add(TIME_DEAD_LINE * time.Second))
loginStr := fmt.Sprintf("%s\n%s\n", config.GetYamlConfig().MML.User, config.GetYamlConfig().MML.Password) loginStr := fmt.Sprintf("%s\n%s\n", telnetHost.User, telnetHost.Password)
_, err = conn.Write([]byte(loginStr)) _, err = conn.Write([]byte(loginStr))
if err != nil { if err != nil {
log.Error("Failed to write:", err) log.Error("Failed to write:", err)
@@ -638,7 +618,6 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
mmlResult = append(mmlResult, result) mmlResult = append(mmlResult, result)
} }
} }
}
response := Response{mmlResult} response := Response{mmlResult}
services.ResponseWithJson(w, http.StatusOK, response) services.ResponseWithJson(w, http.StatusOK, response)
@@ -647,28 +626,28 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
func PostMMLToOMC(w http.ResponseWriter, r *http.Request) { func PostMMLToOMC(w http.ResponseWriter, r *http.Request) {
log.Debug("PostMMLToOMC processing... ") log.Debug("PostMMLToOMC processing... ")
// token, err := services.CheckExtValidRequest(w, r) neType := "OMC" //ctx.GetParam(r, "elementTypeValue")
// if err != nil { neId := ctx.GetQuery(r, "ne_id")
// log.Error("Failed to CheckMmlValidRequest:", err) if neId == "" {
// return
// }
params := r.URL.Query()
neId := params["ne_id"]
if len(neId) == 0 {
log.Error("NOT FOUND ne_id") log.Error("NOT FOUND ne_id")
services.ResponseBadRequest400WrongParamValue(w) services.ResponseBadRequest400WrongParamValue(w)
return return
} }
log.Debug("neType:", neType, "neId", neId)
neInfo := new(dborm.NeInfo) neInfoArr := neService.NewNeInfoImpl.SelectList(neModel.NeInfo{NeType: neType, NeId: neId}, false, false)
neInfo, err := dborm.XormGetNeInfo("OMC", neId[0]) if len(neInfoArr) < 1 {
if err != nil {
log.Error("dborm.XormGetNeInfo is failed:", err)
services.ResponseInternalServerError500DatabaseOperationFailed(w) services.ResponseInternalServerError500DatabaseOperationFailed(w)
return return
} }
log.Trace("neInfo:", neInfo) neInfo := neInfoArr[0]
if neInfo.NeId != neId || neInfo.IP == "" {
services.ResponseWithJson(w, 200, map[string]any{
"code": 0,
"msg": "neInfo not found",
})
return
}
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen)) body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
if err != nil { if err != nil {
@@ -678,8 +657,7 @@ func PostMMLToOMC(w http.ResponseWriter, r *http.Request) {
} }
log.Trace("Body:", string(body)) log.Trace("Body:", string(body))
hostUri := fmt.Sprintf("http://%s:%s", neInfo.Ip, neInfo.Port) hostUri := fmt.Sprintf("http://%s:%d", neInfo.IP, neInfo.Port)
omcMmlVar := &mmlp.MmlVar{ omcMmlVar := &mmlp.MmlVar{
Version: global.Version, Version: global.Version,
Output: mmlp.DefaultFormatType, Output: mmlp.DefaultFormatType,

View File

@@ -184,15 +184,11 @@ type AlarmConfig struct {
} }
type MMLParam struct { type MMLParam struct {
Port int `yaml:"port"`
Port2 int `yaml:"port2"`
Sleep int64 `yaml:"sleep"` Sleep int64 `yaml:"sleep"`
DeadLine int64 `yaml:"deadLine"` DeadLine int64 `yaml:"deadLine"`
SizeRow int16 `yaml:"sizeRow"` SizeRow int16 `yaml:"sizeRow"`
SizeCol int16 `yaml:"sizeCol"` SizeCol int16 `yaml:"sizeCol"`
BufferSize int `yaml:"bufferSize"` BufferSize int `yaml:"bufferSize"`
User string `yaml:"user"`
Password string `ymal:"password"`
MmlHome string `yaml:"mmlHome"` MmlHome string `yaml:"mmlHome"`
} }