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)
# deadLine: timeout for io read and write (second)
mml:
port: 4100
port2: 5002
sleep: 200
deadLine: 10
sizeRow: 600
sizeCol: 128
bufferSize: 65535
user: admin
password: admin
mmlHome: ./mmlhome
# Tracking configuration

View File

@@ -10,15 +10,15 @@ import (
"strings"
"time"
"be.ems/lib/dborm"
"be.ems/lib/core/ctx"
"be.ems/lib/global"
"be.ems/lib/log"
"be.ems/lib/mmlp"
"be.ems/lib/services"
"be.ems/restagent/config"
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 (
@@ -74,30 +74,35 @@ func InitMML() {
func PostMML2ToNF(w http.ResponseWriter, r *http.Request) {
log.Info("PostMML2ToNF processing... ")
vars := mux.Vars(r)
neType := vars["elementTypeValue"]
neInfo := new(dborm.NeInfo)
params := r.URL.Query()
neId := params["ne_id"]
neInfo, err := dborm.XormGetNeInfo(neType, neId[0])
if err != nil {
log.Error("Failed to dborm.XormGetNeInfo:", err)
services.ResponseInternalServerError500ProcessError(w, err)
neType := ctx.GetParam(r, "elementTypeValue")
neId := ctx.GetQuery(r, "ne_id")
if neId == "" {
log.Error("NOT FOUND ne_id")
services.ResponseBadRequest400WrongParamValue(w)
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)
var n int
var mmlResult []string
port2 := 5002
if config.GetYamlConfig().MML.Port2 != 0 {
port2 = config.GetYamlConfig().MML.Port2
}
if neInfo != nil {
hostMML := fmt.Sprintf("%s:%d", neInfo.Ip, port2)
hostMML := fmt.Sprintf("%s:%d", telnetHost.Addr, telnetHost.Port)
conn, err := net.Dial("tcp", hostMML)
//conn, err := net.Dial("tcp", hostMML)
if err != nil {
errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err)
log.Error(errMsg)
@@ -129,7 +134,7 @@ func PostMML2ToNF(w http.ResponseWriter, r *http.Request) {
}) // 发送设置 WINDOW SIZE
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))
if err != nil {
log.Error("Failed to write:", err)
@@ -194,8 +199,6 @@ func PostMML2ToNF(w http.ResponseWriter, r *http.Request) {
mmlResult = append(mmlResult, result)
}
}
response := Response{mmlResult}
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)
// }
pack := "mml"
vars := mux.Vars(r)
module := vars["managedType"]
neType := vars["elementTypeValue"]
params := r.URL.Query()
neId := params["ne_id"]
if len(neId) == 0 {
neType := ctx.GetParam(r, "elementTypeValue")
neId := ctx.GetQuery(r, "ne_id")
if neId == "" {
log.Error("NOT FOUND ne_id")
services.ResponseBadRequest400WrongParamValue(w)
return
}
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" {
PostMMLToOMC(w, r)
return
}
neInfo := new(dborm.NeInfo)
neInfo, err := dborm.XormGetNeInfo(neType, neId[0])
if err != nil {
log.Error("dborm.XormGetNeInfo is failed:", err)
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]
if neInfo != nil {
var buf [20 * 1024]byte
//buf := make([]byte, 0)
var n int
var mmlResult []string
switch strings.ToLower(neType) {
case "xxx":
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]))
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)
if err != nil {
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))
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))
if err != nil {
log.Error("Failed to write:", err)
@@ -430,7 +410,7 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
// mmlResult = append(mmlResult, "COMMAND OK\n")
}
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)
if err != nil {
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))
_, err = conn.Write([]byte(config.GetYamlConfig().MML.User + "\r\n"))
_, err = conn.Write([]byte(telnetHost.User + "\r\n"))
if err != nil {
log.Error("Failed to write:", err)
mmlResult = append(mmlResult, err.Error())
@@ -474,7 +454,7 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
}
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 {
log.Error("Failed to write:", err)
mmlResult = append(mmlResult, err.Error())
@@ -549,7 +529,7 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
mmlResult = append(mmlResult, result)
}
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)
if err != nil {
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))
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))
if err != nil {
log.Error("Failed to write:", err)
@@ -638,7 +618,6 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
mmlResult = append(mmlResult, result)
}
}
}
response := Response{mmlResult}
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) {
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 {
neType := "OMC" //ctx.GetParam(r, "elementTypeValue")
neId := ctx.GetQuery(r, "ne_id")
if neId == "" {
log.Error("NOT FOUND ne_id")
services.ResponseBadRequest400WrongParamValue(w)
return
}
log.Debug("neType:", neType, "neId", neId)
neInfo := new(dborm.NeInfo)
neInfo, err := dborm.XormGetNeInfo("OMC", neId[0])
if err != nil {
log.Error("dborm.XormGetNeInfo is failed:", err)
neInfoArr := neService.NewNeInfoImpl.SelectList(neModel.NeInfo{NeType: neType, NeId: neId}, false, false)
if len(neInfoArr) < 1 {
services.ResponseInternalServerError500DatabaseOperationFailed(w)
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))
if err != nil {
@@ -678,8 +657,7 @@ func PostMMLToOMC(w http.ResponseWriter, r *http.Request) {
}
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{
Version: global.Version,
Output: mmlp.DefaultFormatType,

View File

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