fix: MML命令连接改为网元信息配置telnet
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user