This commit is contained in:
2023-08-27 17:31:27 +08:00
parent 2a8a2b5d25
commit 5550bb996d

View File

@@ -1,124 +1,113 @@
package file package file
import ( import (
"encoding/json"
"fmt" "fmt"
"io"
"net"
"net/http" "net/http"
"os" "os"
"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 ( // const (
//经过测试linux下延时需要大于100ms // //经过测试linux下延时需要大于100ms
TIME_DELAY_AFTER_WRITE = 200 // TIME_DELAY_AFTER_WRITE = 200
) // )
type Response struct { // type Response struct {
Data []string `json:"data"` // Data []string `json:"data"`
} // }
type MMLRequest struct { // type MMLRequest struct {
MML []string `json:"mml"` // MML []string `json:"mml"`
} // }
func GetFile(w http.ResponseWriter, r *http.Request) { // func GetFile(w http.ResponseWriter, r *http.Request) {
log.Debug("PostMMLToNF processing... ") // log.Debug("PostMMLToNF processing... ")
vars := mux.Vars(r) // vars := mux.Vars(r)
neType := vars["elementTypeValue"] // neType := vars["elementTypeValue"]
params := r.URL.Query() // params := r.URL.Query()
neId := params["ne_id"] // neId := params["ne_id"]
log.Debug("neType:", neType, "neId", neId) // log.Debug("neType:", neType, "neId", neId)
neInfo := new(dborm.NeInfo) // neInfo := new(dborm.NeInfo)
var err error // var err error
if len(neId) == 0 { // if len(neId) == 0 {
log.Error("ne_id NOT FOUND") // log.Error("ne_id NOT FOUND")
services.ResponseBadRequest400WrongParamValue(w) // services.ResponseBadRequest400WrongParamValue(w)
return // return
} // }
neInfo, err = dborm.XormGetNeInfo(neType, neId[0]) // neInfo, err = dborm.XormGetNeInfo(neType, neId[0])
if err != nil { // if err != nil {
log.Error("dborm.XormGetNeInfo is failed:", err) // log.Error("dborm.XormGetNeInfo is failed:", err)
services.ResponseInternalServerError500DatabaseOperationFailed(w) // services.ResponseInternalServerError500DatabaseOperationFailed(w)
return // return
} // }
var buf [8192]byte // var buf [8192]byte
var n int // var n int
var mmlResult []string // var mmlResult []string
if neInfo != nil { // if neInfo != nil {
hostMML := fmt.Sprintf("%s:%d", neInfo.Ip, config.GetYamlConfig().MML.Port) // hostMML := fmt.Sprintf("%s:%d", neInfo.Ip, config.GetYamlConfig().MML.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)
log.Error(errMsg) // log.Error(errMsg)
mmlResult = append(mmlResult, errMsg) // mmlResult = append(mmlResult, errMsg)
response := Response{mmlResult} // response := Response{mmlResult}
services.ResponseWithJson(w, http.StatusOK, response) // services.ResponseWithJson(w, http.StatusOK, response)
return // return
} // }
loginStr := fmt.Sprintf("%s\n%s\n", config.GetYamlConfig().MML.User, config.GetYamlConfig().MML.Password) // loginStr := fmt.Sprintf("%s\n%s\n", config.GetYamlConfig().MML.User, config.GetYamlConfig().MML.Password)
n, err = conn.Write([]byte(loginStr)) // n, err = conn.Write([]byte(loginStr))
if err != nil { // if err != nil {
log.Errorf("Error: %s", err.Error()) // log.Errorf("Error: %s", err.Error())
return // return
} // }
time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) // time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE)
n, err = conn.Read(buf[0:]) // n, err = conn.Read(buf[0:])
if err != nil { // if err != nil {
log.Errorf("Error: %s", err.Error()) // log.Errorf("Error: %s", err.Error())
return // return
} // }
log.Debug(string(buf[0:n])) // log.Debug(string(buf[0:n]))
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 {
log.Error("io.ReadAll is failed:", err) // log.Error("io.ReadAll is failed:", err)
services.ResponseNotFound404UriNotExist(w, r) // services.ResponseNotFound404UriNotExist(w, r)
return // return
} // }
log.Debug("Body:", string(body)) // log.Debug("Body:", string(body))
mmlRequest := new(MMLRequest) // mmlRequest := new(MMLRequest)
_ = json.Unmarshal(body, mmlRequest) // _ = json.Unmarshal(body, mmlRequest)
for _, mml := range mmlRequest.MML { // for _, mml := range mmlRequest.MML {
mmlCommand := fmt.Sprintf("%s\n", mml) // mmlCommand := fmt.Sprintf("%s\n", mml)
log.Debug("mml command:", mmlCommand) // log.Debug("mml command:", mmlCommand)
n, err = conn.Write([]byte(mmlCommand)) // n, err = conn.Write([]byte(mmlCommand))
if err != nil { // if err != nil {
log.Errorf("Error: %s", err.Error()) // log.Errorf("Error: %s", err.Error())
return // return
} // }
time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE) // time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE)
n, err = conn.Read(buf[0:]) // n, err = conn.Read(buf[0:])
if err != nil { // if err != nil {
log.Errorf("Error: %s", err.Error()) // log.Errorf("Error: %s", err.Error())
return // return
} // }
log.Debug(string(buf[0 : n-len(neType)-2])) // log.Debug(string(buf[0 : n-len(neType)-2]))
mmlResult = append(mmlResult, string(buf[0:n-len(neType)-2])) // mmlResult = append(mmlResult, string(buf[0:n-len(neType)-2]))
} // }
} // }
response := Response{mmlResult} // response := Response{mmlResult}
services.ResponseWithJson(w, http.StatusOK, response) // services.ResponseWithJson(w, http.StatusOK, response)
} // }
// 格式文件大小单位 // 格式文件大小单位
func FormatFileSize(fileSize float64) (size string) { func FormatFileSize(fileSize float64) (size string) {