marge: 合并代码,包名变更be.ems
This commit is contained in:
@@ -9,11 +9,11 @@ import (
|
||||
|
||||
"github.com/go-resty/resty/v2"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/oauth"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/oauth"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
@@ -5,12 +5,12 @@ import (
|
||||
"io"
|
||||
"net/http"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
wsService "ems.agt/src/modules/ws/service"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/global"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
wsService "be.ems/src/modules/ws/service"
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
"os/exec"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/log"
|
||||
"be.ems/lib/log"
|
||||
)
|
||||
|
||||
func ExecCmd(command string) error {
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
"os/exec"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/log"
|
||||
"be.ems/lib/log"
|
||||
)
|
||||
|
||||
func ExecCmd(command string) error {
|
||||
|
||||
@@ -7,11 +7,12 @@ import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
@@ -153,6 +154,22 @@ func DeleteLcenseFile(w http.ResponseWriter, r *http.Request) {
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
}
|
||||
|
||||
type MMLRequest struct {
|
||||
MML []string `json:"mml"`
|
||||
}
|
||||
|
||||
var TIME_DELAY_AFTER_WRITE time.Duration = 200
|
||||
var TIME_DEAD_LINE time.Duration = 10
|
||||
|
||||
func init() {
|
||||
if config.GetYamlConfig().MML.Sleep != 0 {
|
||||
TIME_DELAY_AFTER_WRITE = time.Duration(config.GetYamlConfig().MML.Sleep)
|
||||
}
|
||||
if config.GetYamlConfig().MML.DeadLine != 0 {
|
||||
TIME_DEAD_LINE = time.Duration(config.GetYamlConfig().MML.DeadLine)
|
||||
}
|
||||
}
|
||||
|
||||
func UploadLicenseFileData(w http.ResponseWriter, r *http.Request) {
|
||||
log.Info("UploadLicenseFileData processing... ")
|
||||
|
||||
@@ -207,7 +224,7 @@ func UploadLicenseFileData(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
var licenseFileName, comment string
|
||||
|
||||
// 处理软件rpm/deb文件
|
||||
// 处理license文件
|
||||
if len(licFile) > 0 {
|
||||
file := licFile[0]
|
||||
// 打开文件
|
||||
@@ -279,39 +296,213 @@ func UploadLicenseFileData(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
switch neTypeLower {
|
||||
case "omc":
|
||||
restartCmd := fmt.Sprintf("sudo %s/bin/omcsvc.sh restart", config.GetYamlConfig().NE.OmcDir)
|
||||
cmd := exec.Command("ssh", sshHost, restartCmd)
|
||||
out, err := cmd.CombinedOutput()
|
||||
log.Debugf("Exec output: %v", string(out))
|
||||
if err != nil {
|
||||
log.Error("Faile to execute ssh restart omc:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
case "ims":
|
||||
restartCmd := "sudo ims-stop && sudo ims-start"
|
||||
cmd := exec.Command("ssh", sshHost, restartCmd)
|
||||
out, err := cmd.CombinedOutput()
|
||||
log.Debugf("Exec output: %v", string(out))
|
||||
if err != nil {
|
||||
log.Error("Faile to execute ssh sudo systemctl command:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
default:
|
||||
restartCmd := fmt.Sprintf("sudo systemctl restart %s.service", neTypeLower)
|
||||
cmd := exec.Command("ssh", sshHost, restartCmd)
|
||||
out, err := cmd.CombinedOutput()
|
||||
log.Debugf("Exec output: %v", string(out))
|
||||
if err != nil {
|
||||
log.Error("Faile to execute ssh sudo systemctl command:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
/*
|
||||
// judge license if expired
|
||||
isRestart := false
|
||||
hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port)
|
||||
requestURI2NF := fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState",
|
||||
hostUri, neTypeLower)
|
||||
log.Debug("requestURI2NF:", requestURI2NF)
|
||||
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{tokenConst.HEADER_KEY: r.Header.Get(tokenConst.HEADER_KEY)}).
|
||||
//SetHeaders(map[string]string{"accessToken": token}).
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Get(requestURI2NF)
|
||||
if err != nil {
|
||||
log.Error("Failed to get system state:", err)
|
||||
isRestart = true
|
||||
} else {
|
||||
systemState := make(map[string]interface{})
|
||||
_ = json.Unmarshal(resp.Body(), &systemState)
|
||||
expiryDate := fmt.Sprintf("%v", systemState["expiryDate"])
|
||||
t1_expiry, _ := time.ParseInLocation(time.DateOnly, expiryDate, time.Local)
|
||||
nowDate := time.Now().Local()
|
||||
nowDate.Format(time.DateOnly)
|
||||
isRestart = t1_expiry.Before(nowDate)
|
||||
}
|
||||
// case non-expired license: send NE reload license MML
|
||||
if !isRestart {
|
||||
// send reload license MML
|
||||
var buf [20 * 1024]byte
|
||||
//buf := make([]byte, 0)
|
||||
var n int
|
||||
if neInfo != nil {
|
||||
switch strings.ToLower(neType) {
|
||||
case "ims":
|
||||
hostMML := fmt.Sprintf("%s:%d", neInfo.Ip, config.GetYamlConfig().MML.Port)
|
||||
conn, err := net.Dial("tcp", hostMML)
|
||||
if err != nil {
|
||||
errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err)
|
||||
log.Error(errMsg)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
defer conn.Close()
|
||||
|
||||
conn.SetDeadline(time.Now().Add(TIME_DEAD_LINE * time.Second))
|
||||
|
||||
_, err = conn.Write([]byte(config.GetYamlConfig().MML.User + "\r\n"))
|
||||
if err != nil {
|
||||
log.Error("Failed to write:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE)
|
||||
|
||||
n, err = conn.Read(buf[0:])
|
||||
if err != nil {
|
||||
log.Error("Failed to read:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
log.Trace(string(buf[0:n]))
|
||||
|
||||
_, err = conn.Write([]byte(config.GetYamlConfig().MML.Password + "\r\n"))
|
||||
if err != nil {
|
||||
log.Error("Failed to write:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE)
|
||||
|
||||
n, err = conn.Read(buf[0:])
|
||||
if err != nil {
|
||||
log.Error("Failed to read:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
log.Trace(string(buf[0 : n-len(neType)-2]))
|
||||
|
||||
mmlCommand := "check lic\r\n"
|
||||
|
||||
_, err = conn.Write([]byte(mmlCommand))
|
||||
if err != nil {
|
||||
log.Error("Failed to write:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE)
|
||||
|
||||
n, err = conn.Read(buf[0:])
|
||||
if err != nil {
|
||||
log.Error("Failed to read:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
log.Trace(string(buf[0 : n-len(neType)-2]))
|
||||
|
||||
re1 := regexp.MustCompile(`\x1B\[[0-9;]*[a-zA-Z]`) // 匹配包含␛的控制字符
|
||||
//re2 := regexp.MustCompile(`\x00`) // 匹配空字符
|
||||
re2 := regexp.MustCompile(`[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x1B]`) // 匹配空字符和包含␛的控制字符
|
||||
//re := regexp.MustCompile(`[\x00-\x1F\x7F]`)
|
||||
// upf telnet buffer只能读取一次,需要去掉前面的多余字符
|
||||
result := re1.ReplaceAllString(string(buf[0:n-len(neType)-2]), "")
|
||||
result = re2.ReplaceAllString(result, "")
|
||||
if !strings.Contains(result, "COMMAND OK") {
|
||||
err = fmt.Errorf("failed to check license, %s", result)
|
||||
log.Error(err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
default:
|
||||
hostMML := fmt.Sprintf("%s:%d", neInfo.Ip, config.GetYamlConfig().MML.Port)
|
||||
conn, err := net.Dial("tcp", hostMML)
|
||||
if err != nil {
|
||||
errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err)
|
||||
log.Error(errMsg)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
defer conn.Close()
|
||||
|
||||
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)
|
||||
_, err = conn.Write([]byte(loginStr))
|
||||
if err != nil {
|
||||
log.Error("Failed to write:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE)
|
||||
|
||||
n, err = conn.Read(buf[0:])
|
||||
if err != nil {
|
||||
log.Error("Failed to read:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
log.Trace(string(buf[0:n]))
|
||||
|
||||
mmlCommand := "check lic\n"
|
||||
_, err = conn.Write([]byte(mmlCommand))
|
||||
if err != nil {
|
||||
log.Error("Failed to write:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE)
|
||||
|
||||
n, err = conn.Read(buf[0:])
|
||||
if err != nil {
|
||||
log.Error("Failed to read:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
log.Trace(string(buf[0 : n-len(neType)-2]))
|
||||
re1 := regexp.MustCompile(`\x1B\[[0-9;]*[a-zA-Z]`) // 匹配包含␛的控制字符
|
||||
//re2 := regexp.MustCompile(`\x00`) // 匹配空字符
|
||||
re2 := regexp.MustCompile(`[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x1B]`) // 匹配空字符和包含␛的控制字符
|
||||
//re := regexp.MustCompile(`[\x00-\x1F\x7F]`)
|
||||
result := re1.ReplaceAllString(string(buf[0:n-len(neType)-2]), "")
|
||||
result = re2.ReplaceAllString(result, "")
|
||||
if !strings.Contains(result, "COMMAND OK") {
|
||||
err = fmt.Errorf("failed to check license, %s", result)
|
||||
log.Error(err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// case expired license: restart NE service
|
||||
switch neTypeLower {
|
||||
case "omc":
|
||||
restartCmd := fmt.Sprintf("sudo %s/bin/omcsvc.sh restart", config.GetYamlConfig().NE.OmcDir)
|
||||
cmd := exec.Command("ssh", sshHost, restartCmd)
|
||||
out, err := cmd.CombinedOutput()
|
||||
log.Debugf("Exec output: %v", string(out))
|
||||
if err != nil {
|
||||
log.Error("Faile to execute ssh restart omc:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
case "ims":
|
||||
restartCmd := "sudo ims-stop && sudo ims-start"
|
||||
cmd := exec.Command("ssh", sshHost, restartCmd)
|
||||
out, err := cmd.CombinedOutput()
|
||||
log.Debugf("Exec output: %v", string(out))
|
||||
if err != nil {
|
||||
log.Error("Faile to execute ssh sudo systemctl command:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
default:
|
||||
restartCmd := fmt.Sprintf("sudo systemctl restart %s.service", neTypeLower)
|
||||
cmd := exec.Command("ssh", sshHost, restartCmd)
|
||||
out, err := cmd.CombinedOutput()
|
||||
log.Debugf("Exec output: %v", string(out))
|
||||
if err != nil {
|
||||
log.Error("Faile to execute ssh sudo systemctl command:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
neLicense := dborm.NeLicense{
|
||||
NeType: neTypeUpper,
|
||||
NeID: neId,
|
||||
|
||||
@@ -10,21 +10,19 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
tokenConst "ems.agt/src/framework/constants/token"
|
||||
neService "ems.agt/src/modules/network_element/service"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/global"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
tokenConst "be.ems/src/framework/constants/token"
|
||||
neService "be.ems/src/modules/network_element/service"
|
||||
|
||||
"github.com/go-resty/resty/v2"
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
|
||||
var (
|
||||
UriParamOmcNeConfig = config.DefaultUriPrefix + "/systemManagement/v1/elementType/%s/objectType/config/omcNeConfig"
|
||||
UriOmcNeConfig = config.DefaultUriPrefix + "/systemManagement/v1/elementType/omc/objectType/config/omcNeConfig"
|
||||
// NE CM export/import
|
||||
NeCmUri = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/cm"
|
||||
// NE info
|
||||
@@ -36,11 +34,9 @@ var (
|
||||
// nf instance action uri, action: start/stop/restart
|
||||
UriNeInstance = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/instance/{action}"
|
||||
|
||||
CustomUriParamOmcNeConfig = config.UriPrefix + "/systemManagement/v1/elementType/%s/objectType/config/omcNeConfig"
|
||||
CustomUriOmcNeConfig = config.UriPrefix + "/systemManagement/v1/elementType/omc/objectType/config/omcNeConfig"
|
||||
CustomNeCmUri = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/cm"
|
||||
CustomUriNeInfo = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/neInfo"
|
||||
CustomUriNeCmFile = config.UriPrefix + "/systemManagement/{apiVersion}/{neType}/neBackup/{fileName}"
|
||||
CustomNeCmUri = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/cm"
|
||||
CustomUriNeInfo = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/neInfo"
|
||||
CustomUriNeCmFile = config.UriPrefix + "/systemManagement/{apiVersion}/{neType}/neBackup/{fileName}"
|
||||
// service action uri, action: start/stop/restart
|
||||
CustomUriNeService = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/service/{action}"
|
||||
// nf instance action uri, action: start/stop/restart
|
||||
@@ -170,7 +166,7 @@ func PostNeInfo(w http.ResponseWriter, r *http.Request) {
|
||||
} else {
|
||||
hostUri := global.CombineHostUri(neInfo.Ip, neInfo.Port)
|
||||
//hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port)
|
||||
apiUri := fmt.Sprintf(UriParamOmcNeConfig, strings.ToLower(neInfo.NeType))
|
||||
apiUri := fmt.Sprintf("%s/systemManagement/v1/elementType/%s/objectType/config/omcNeConfig", config.DefaultUriPrefix, strings.ToLower(neInfo.NeType))
|
||||
requestURI2NF := fmt.Sprintf("%s%s", hostUri, apiUri)
|
||||
log.Debug("requestURI2NF:", requestURI2NF)
|
||||
|
||||
@@ -280,7 +276,7 @@ func PutNeInfo(w http.ResponseWriter, r *http.Request) {
|
||||
} else {
|
||||
hostUri := global.CombineHostUri(neInfo.Ip, neInfo.Port)
|
||||
//hostUri := fmt.Sprintf("http://%s:%v", neInfo.Ip, neInfo.Port)
|
||||
apiUri := fmt.Sprintf(UriParamOmcNeConfig, neTypeLower)
|
||||
apiUri := fmt.Sprintf("%s/systemManagement/v1/elementType/%s/objectType/config/omcNeConfig", config.DefaultUriPrefix, neTypeLower)
|
||||
requestURI2NF := fmt.Sprintf("%s%s", hostUri, apiUri)
|
||||
log.Debug("requestURI2NF:", requestURI2NF)
|
||||
|
||||
@@ -338,28 +334,6 @@ func PutNeInfo(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
|
||||
func PutOMCNeConfig(w http.ResponseWriter, r *http.Request) {
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["elementTypeValue"]
|
||||
if neType == "" {
|
||||
log.Error("elementTypeValue is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
|
||||
if err != nil {
|
||||
log.Error("Failed to io.ReadAll:", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
neInfo := new(dborm.NeInfo)
|
||||
_ = json.Unmarshal(body, neInfo)
|
||||
neInfo.NeType = strings.ToUpper(neType)
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
}
|
||||
|
||||
func DeleteNeInfo(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("DeleteNeInfo processing... ")
|
||||
|
||||
|
||||
@@ -1,18 +1,20 @@
|
||||
package cm
|
||||
|
||||
import (
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"strings"
|
||||
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/global"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
|
||||
tokenConst "ems.agt/src/framework/constants/token"
|
||||
tokenConst "be.ems/src/framework/constants/token"
|
||||
"github.com/go-resty/resty/v2"
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
@@ -163,8 +165,14 @@ func PutParamConfigToNF(w http.ResponseWriter, r *http.Request) {
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
neId := services.GetUriParamString(r, "ne_id", ",", false, false)
|
||||
|
||||
// OMC配置接口 /api/rest/systemManagement/v1/elementType/omc/objectType/config/omcNeConfig
|
||||
if v, ok := vars["paraName"]; ok && v == "omcNeConfig" && strings.ToLower(neType) == "omc" {
|
||||
PutOMCNeConfig(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
neId := services.GetUriParamString(r, "ne_id", ",", false, false)
|
||||
// no, _ := strconv.ParseInt(neId, 10, 64)
|
||||
neInfo, err := dborm.XormGetNeInfo(neType, neId)
|
||||
if err != nil {
|
||||
@@ -199,6 +207,31 @@ func PutParamConfigToNF(w http.ResponseWriter, r *http.Request) {
|
||||
services.ResponseWithJson(w, http.StatusNoContent, response)
|
||||
}
|
||||
|
||||
// PutOMCNeConfig 网元OMC配置
|
||||
//
|
||||
// 目前没配置,返回204
|
||||
func PutOMCNeConfig(w http.ResponseWriter, r *http.Request) {
|
||||
// vars := mux.Vars(r)
|
||||
// neType := vars["elementTypeValue"]
|
||||
// if neType == "" {
|
||||
// log.Error("elementTypeValue is empty")
|
||||
// services.ResponseNotFound404UriNotExist(w, r)
|
||||
// return
|
||||
// }
|
||||
// body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
|
||||
// if err != nil {
|
||||
// log.Error("Failed to io.ReadAll:", err)
|
||||
// services.ResponseNotFound404UriNotExist(w, r)
|
||||
// return
|
||||
// }
|
||||
|
||||
// neInfo := new(dborm.NeInfo)
|
||||
// _ = json.Unmarshal(body, neInfo)
|
||||
// neInfo.NeType = strings.ToUpper(neType)
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
}
|
||||
|
||||
func DeleteParamConfigToNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("DeleteParamConfigToNF processing... ")
|
||||
|
||||
|
||||
@@ -10,11 +10,11 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/global"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
|
||||
@@ -10,11 +10,11 @@ import (
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/core/conf"
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/lib/core/conf"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
)
|
||||
|
||||
|
||||
@@ -9,12 +9,12 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/core/utils/ctx"
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/lib/core/utils/ctx"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/global"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
"xorm.io/xorm"
|
||||
|
||||
@@ -5,11 +5,11 @@ import (
|
||||
"io"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
wsService "ems.agt/src/modules/ws/service"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/global"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
wsService "be.ems/src/modules/ws/service"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
|
||||
@@ -5,12 +5,12 @@ import (
|
||||
"net/http"
|
||||
"path/filepath"
|
||||
|
||||
"ems.agt/lib/core/utils/ctx"
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/file"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/lib/core/utils/ctx"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/file"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
"github.com/gorilla/mux"
|
||||
"github.com/shirou/gopsutil/disk"
|
||||
)
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"ems.agt/lib/file"
|
||||
"be.ems/lib/file"
|
||||
"github.com/spf13/afero"
|
||||
)
|
||||
|
||||
|
||||
@@ -1,88 +0,0 @@
|
||||
package firewall
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"ems.agt/features/firewall/model"
|
||||
"ems.agt/features/firewall/service"
|
||||
"ems.agt/lib/core/utils/ctx"
|
||||
"ems.agt/lib/core/vo/result"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
)
|
||||
|
||||
// 防火墙管理接口添加到路由
|
||||
func Routers() []services.RouterItem {
|
||||
// 实例化控制层 FirewallApi 结构体
|
||||
var apis = &FirewallApi{
|
||||
firewallService: *service.NewServiceFirewall,
|
||||
}
|
||||
|
||||
rs := [...]services.RouterItem{
|
||||
{
|
||||
Method: "GET",
|
||||
Pattern: "/base",
|
||||
Handler: apis.BaseInfo,
|
||||
Middleware: nil, //midware.Authorize(nil),
|
||||
},
|
||||
{
|
||||
Method: "POST",
|
||||
Pattern: "/rule",
|
||||
Handler: apis.Rule,
|
||||
Middleware: nil, //midware.Authorize(nil),
|
||||
},
|
||||
// 添加更多的 Router 对象...
|
||||
}
|
||||
|
||||
// 生成两组前缀路由
|
||||
rsPrefix := []services.RouterItem{}
|
||||
for _, v := range rs {
|
||||
path := "/firewallManage/{apiVersion}" + v.Pattern
|
||||
// 固定前缀
|
||||
v.Pattern = config.DefaultUriPrefix + path
|
||||
rsPrefix = append(rsPrefix, v)
|
||||
// 可配置
|
||||
v.Pattern = config.UriPrefix + path
|
||||
rsPrefix = append(rsPrefix, v)
|
||||
}
|
||||
return rsPrefix
|
||||
}
|
||||
|
||||
// 防火墙管理
|
||||
//
|
||||
// PATH /firewallManage
|
||||
type FirewallApi struct {
|
||||
firewallService service.ServiceFirewall
|
||||
}
|
||||
|
||||
// 获取防火墙基础信息
|
||||
//
|
||||
// GET /base
|
||||
func (s *FirewallApi) BaseInfo(w http.ResponseWriter, r *http.Request) {
|
||||
data, err := s.firewallService.LoadBaseInfo()
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
ctx.JSON(w, 200, result.OkData(data))
|
||||
}
|
||||
|
||||
// 获取防火墙规则列表分页
|
||||
//
|
||||
// GET /rule
|
||||
func (s *FirewallApi) Rule(w http.ResponseWriter, r *http.Request) {
|
||||
var body model.RuleQuerys
|
||||
err := ctx.ShouldBindJSON(r, &body)
|
||||
if err != nil || body.Type == "" {
|
||||
ctx.JSON(w, 400, result.CodeMsg(400, "parameter error"))
|
||||
return
|
||||
}
|
||||
data, err := s.firewallService.RulePage(body)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 400, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
ctx.JSON(w, 200, result.OkData(data))
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
package model
|
||||
|
||||
type Firewall struct {
|
||||
ID int64 `json:"id" xorm:"id"`
|
||||
CreatedAt int64 `json:"createdAt" xorm:"created_at"`
|
||||
UpdatedAt int64 `json:"updatedAt" xorm:"updated_at"`
|
||||
Type string `json:"type" xorm:"type"`
|
||||
Port string `json:"port" xorm:"port"`
|
||||
Protocol string `json:"protocol" xorm:"protocol"`
|
||||
Address string `json:"address" xorm:"address"`
|
||||
Strategy string `json:"strategy" xorm:"strategy"`
|
||||
Description string `json:"description" xorm:"description"`
|
||||
}
|
||||
@@ -1,64 +0,0 @@
|
||||
package model
|
||||
|
||||
type FirewallBaseInfo struct {
|
||||
Name string `json:"name"`
|
||||
Status string `json:"status"`
|
||||
Version string `json:"version"`
|
||||
PingStatus string `json:"pingStatus"`
|
||||
}
|
||||
|
||||
type RuleQuerys struct {
|
||||
PageNum int `json:"pageNum" validate:"required,number"`
|
||||
PageSize int `json:"pageSize" validate:"required,number"`
|
||||
Info string `json:"info"`
|
||||
Status string `json:"status"`
|
||||
Strategy string `json:"strategy"`
|
||||
Type string `json:"type" validate:"required"`
|
||||
}
|
||||
|
||||
type FirewallOperation struct {
|
||||
Operation string `json:"operation" validate:"required,oneof=start stop disablePing enablePing"`
|
||||
}
|
||||
|
||||
type PortRuleOperate struct {
|
||||
Operation string `json:"operation" validate:"required,oneof=add remove"`
|
||||
Address string `json:"address"`
|
||||
Port string `json:"port" validate:"required"`
|
||||
Protocol string `json:"protocol" validate:"required,oneof=tcp udp tcp/udp"`
|
||||
Strategy string `json:"strategy" validate:"required,oneof=accept drop"`
|
||||
|
||||
Description string `json:"description"`
|
||||
}
|
||||
|
||||
type UpdateFirewallDescription struct {
|
||||
Type string `json:"type"`
|
||||
Address string `json:"address"`
|
||||
Port string `json:"port"`
|
||||
Protocol string `json:"protocol"`
|
||||
Strategy string `json:"strategy" validate:"required,oneof=accept drop"`
|
||||
|
||||
Description string `json:"description"`
|
||||
}
|
||||
|
||||
type AddrRuleOperate struct {
|
||||
Operation string `json:"operation" validate:"required,oneof=add remove"`
|
||||
Address string `json:"address" validate:"required"`
|
||||
Strategy string `json:"strategy" validate:"required,oneof=accept drop"`
|
||||
|
||||
Description string `json:"description"`
|
||||
}
|
||||
|
||||
type PortRuleUpdate struct {
|
||||
OldRule PortRuleOperate `json:"oldRule"`
|
||||
NewRule PortRuleOperate `json:"newRule"`
|
||||
}
|
||||
|
||||
type AddrRuleUpdate struct {
|
||||
OldRule AddrRuleOperate `json:"oldRule"`
|
||||
NewRule AddrRuleOperate `json:"newRule"`
|
||||
}
|
||||
|
||||
type BatchRuleOperate struct {
|
||||
Type string `json:"type" validate:"required"`
|
||||
Rules []PortRuleOperate `json:"rules"`
|
||||
}
|
||||
@@ -1,133 +0,0 @@
|
||||
package repo
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"ems.agt/features/firewall/model"
|
||||
"ems.agt/lib/core/datasource"
|
||||
"ems.agt/lib/log"
|
||||
)
|
||||
|
||||
// 实例化数据层 RepoFirewall 结构体
|
||||
var NewRepoFirewall = &RepoFirewall{
|
||||
selectSql: `select
|
||||
id, created_at, updated_at, type, port, protocol, address, strategy, description
|
||||
from monitor_firewall`,
|
||||
|
||||
resultMap: map[string]string{
|
||||
"id": "ID",
|
||||
"created_at": "CreatedAt",
|
||||
"updated_at": "UpdatedAt",
|
||||
"type": "Type",
|
||||
"port": "Port",
|
||||
"protocol": "Protocol",
|
||||
"address": "Address",
|
||||
"strategy": "Strategy",
|
||||
"description": "Description",
|
||||
},
|
||||
}
|
||||
|
||||
// RepoFirewall 防火墙 数据层处理
|
||||
type RepoFirewall struct {
|
||||
// 查询视图对象SQL
|
||||
selectSql string
|
||||
// 结果字段与实体映射
|
||||
resultMap map[string]string
|
||||
}
|
||||
|
||||
// convertResultRows 将结果记录转实体结果组
|
||||
func (r *RepoFirewall) convertResultRows(rows []map[string]any) []model.Firewall {
|
||||
arr := make([]model.Firewall, 0)
|
||||
for _, row := range rows {
|
||||
UdmUser := model.Firewall{}
|
||||
for key, value := range row {
|
||||
if keyMapper, ok := r.resultMap[key]; ok {
|
||||
datasource.SetFieldValue(&UdmUser, keyMapper, value)
|
||||
}
|
||||
}
|
||||
arr = append(arr, UdmUser)
|
||||
}
|
||||
return arr
|
||||
}
|
||||
|
||||
// List 根据实体查询
|
||||
func (r *RepoFirewall) List(f model.Firewall) []model.Firewall {
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
var params []any
|
||||
if f.Type != "" {
|
||||
conditions = append(conditions, "type = ?")
|
||||
params = append(params, f.Type)
|
||||
}
|
||||
if f.Protocol != "" {
|
||||
conditions = append(conditions, "protocol = ?")
|
||||
params = append(params, f.Protocol)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := ""
|
||||
if len(conditions) > 0 {
|
||||
whereSql += " where " + strings.Join(conditions, " and ")
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
querySql := r.selectSql + whereSql
|
||||
results, err := datasource.RawDB("", querySql, params)
|
||||
if err != nil {
|
||||
log.Errorf("query err => %v", err)
|
||||
}
|
||||
|
||||
// 转换实体
|
||||
return r.convertResultRows(results)
|
||||
}
|
||||
|
||||
// Insert 新增实体
|
||||
func (r *RepoFirewall) Insert(f model.Firewall) int64 {
|
||||
results, err := datasource.DefaultDB().Table("monitor_firewall").Insert(f)
|
||||
if err != nil {
|
||||
return results
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
// Update 修改更新
|
||||
func (r *RepoFirewall) Update(f model.Firewall) int64 {
|
||||
// 查询先
|
||||
var fd model.Firewall
|
||||
if f.Type == "port" {
|
||||
has, err := datasource.DefaultDB().Table("monitor_firewall").Where("type = ? AND port = ? AND protocol = ? AND address = ? AND strategy = ?", "port", f.Port, f.Protocol, f.Address, f.Strategy).Get(&fd)
|
||||
if !has || err != nil {
|
||||
return 0
|
||||
}
|
||||
} else {
|
||||
has, err := datasource.DefaultDB().Table("monitor_firewall").Where("type = ? AND address = ? AND strategy = ?", "address", f.Address, f.Strategy).Get(&fd)
|
||||
if !has || err != nil {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
f.ID = fd.ID
|
||||
|
||||
results, err := datasource.DefaultDB().Table("monitor_firewall").Where("id = ?", f.ID).Update(f)
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
// Delete 删除实体
|
||||
func (r *RepoFirewall) Delete(id int64) int64 {
|
||||
results, err := datasource.DefaultDB().Table("u_sub_user").Where("id = ?", id).Delete()
|
||||
if err != nil {
|
||||
return results
|
||||
}
|
||||
return results
|
||||
}
|
||||
|
||||
// DeleteFirewallRecord 删除实体
|
||||
func (r *RepoFirewall) DeleteFirewallRecord(fType, port, protocol, address, strategy string) int64 {
|
||||
results, err := datasource.DefaultDB().Table("u_sub_user").Where("type = ? AND port = ? AND protocol = ? AND address = ? AND strategy = ?", fType, port, protocol, address, strategy).Delete()
|
||||
if err != nil {
|
||||
return results
|
||||
}
|
||||
return results
|
||||
}
|
||||
@@ -1,207 +0,0 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"ems.agt/features/firewall/model"
|
||||
"ems.agt/features/firewall/repo"
|
||||
"ems.agt/lib/core/cmd"
|
||||
"ems.agt/lib/core/utils/firewall"
|
||||
fireClient "ems.agt/lib/core/utils/firewall/client"
|
||||
"ems.agt/lib/core/utils/scan"
|
||||
)
|
||||
|
||||
// 实例化服务层 ServiceFirewall 结构体
|
||||
var NewServiceFirewall = &ServiceFirewall{
|
||||
repoFirewall: *repo.NewRepoFirewall,
|
||||
}
|
||||
|
||||
// ServiceFirewall 防火墙 服务层处理
|
||||
type ServiceFirewall struct {
|
||||
repoFirewall repo.RepoFirewall
|
||||
}
|
||||
|
||||
// LoadBaseInfo 获取防火墙基础信息
|
||||
func (s *ServiceFirewall) LoadBaseInfo() (model.FirewallBaseInfo, error) {
|
||||
var baseInfo model.FirewallBaseInfo
|
||||
baseInfo.PingStatus = s.pingStatus()
|
||||
baseInfo.Status = "not running"
|
||||
baseInfo.Version = "-"
|
||||
baseInfo.Name = "-"
|
||||
client, err := firewall.NewFirewallClient()
|
||||
if err != nil {
|
||||
if err.Error() == "no such type" {
|
||||
return baseInfo, nil
|
||||
}
|
||||
return baseInfo, err
|
||||
}
|
||||
baseInfo.Name = client.Name()
|
||||
baseInfo.Status, err = client.Status()
|
||||
if err != nil {
|
||||
return baseInfo, err
|
||||
}
|
||||
if baseInfo.Status == "not running" {
|
||||
return baseInfo, err
|
||||
}
|
||||
baseInfo.Version, err = client.Version()
|
||||
if err != nil {
|
||||
return baseInfo, err
|
||||
}
|
||||
return baseInfo, nil
|
||||
}
|
||||
|
||||
// LoadBaseInfo 获取防火墙基础信息
|
||||
func (s *ServiceFirewall) RulePage(querys model.RuleQuerys) (map[string]any, error) {
|
||||
var (
|
||||
datas []fireClient.FireInfo
|
||||
backDatas []fireClient.FireInfo
|
||||
)
|
||||
|
||||
data := map[string]any{
|
||||
"total": 0,
|
||||
"rows": backDatas,
|
||||
}
|
||||
|
||||
client, err := firewall.NewFirewallClient()
|
||||
if err != nil {
|
||||
return data, err
|
||||
}
|
||||
if querys.Type == "port" {
|
||||
ports, err := client.ListPort()
|
||||
if err != nil {
|
||||
return data, err
|
||||
}
|
||||
if len(querys.Info) != 0 {
|
||||
for _, port := range ports {
|
||||
if strings.Contains(port.Port, querys.Info) {
|
||||
datas = append(datas, port)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
datas = ports
|
||||
}
|
||||
} else {
|
||||
addrs, err := client.ListAddress()
|
||||
if err != nil {
|
||||
return data, err
|
||||
}
|
||||
if len(querys.Info) != 0 {
|
||||
for _, addr := range addrs {
|
||||
if strings.Contains(addr.Address, querys.Info) {
|
||||
datas = append(datas, addr)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
datas = addrs
|
||||
}
|
||||
}
|
||||
|
||||
var datasFilterStatus []fireClient.FireInfo
|
||||
if len(querys.Status) != 0 {
|
||||
for _, data := range datas {
|
||||
portItem, _ := strconv.Atoi(data.Port)
|
||||
if querys.Status == "free" && !scan.ScanPortWithProto(portItem, data.Protocol) {
|
||||
datasFilterStatus = append(datasFilterStatus, data)
|
||||
}
|
||||
if querys.Status == "used" && scan.ScanPortWithProto(portItem, data.Protocol) {
|
||||
datasFilterStatus = append(datasFilterStatus, data)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
datasFilterStatus = datas
|
||||
}
|
||||
var datasFilterStrategy []fireClient.FireInfo
|
||||
if len(querys.Strategy) != 0 {
|
||||
for _, data := range datasFilterStatus {
|
||||
if querys.Strategy == data.Strategy {
|
||||
datasFilterStrategy = append(datasFilterStrategy, data)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
datasFilterStrategy = datasFilterStatus
|
||||
}
|
||||
|
||||
total, start, end := len(datasFilterStrategy), (querys.PageNum-1)*querys.PageSize, querys.PageNum*querys.PageSize
|
||||
if start > total {
|
||||
backDatas = make([]fireClient.FireInfo, 0)
|
||||
} else {
|
||||
if end >= total {
|
||||
end = total
|
||||
}
|
||||
backDatas = datasFilterStrategy[start:end]
|
||||
}
|
||||
|
||||
datasFromDB := s.repoFirewall.List(model.Firewall{})
|
||||
for i := 0; i < len(backDatas); i++ {
|
||||
for _, des := range datasFromDB {
|
||||
if querys.Type != des.Type {
|
||||
continue
|
||||
}
|
||||
if backDatas[i].Port == des.Port && querys.Type == "port" &&
|
||||
backDatas[i].Protocol == des.Protocol &&
|
||||
backDatas[i].Strategy == des.Strategy &&
|
||||
backDatas[i].Address == des.Address {
|
||||
backDatas[i].Description = des.Description
|
||||
break
|
||||
}
|
||||
if querys.Type == "address" && backDatas[i].Strategy == des.Strategy && backDatas[i].Address == des.Address {
|
||||
backDatas[i].Description = des.Description
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if querys.Type == "port" {
|
||||
for i := 0; i < len(backDatas); i++ {
|
||||
port, _ := strconv.Atoi(backDatas[i].Port)
|
||||
backDatas[i].IsUsed = scan.ScanPort(port)
|
||||
if backDatas[i].Protocol == "udp" {
|
||||
backDatas[i].IsUsed = scan.ScanUDPPort(port)
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
go s.cleanUnUsedData(client)
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (s *ServiceFirewall) pingStatus() string {
|
||||
if _, err := os.Stat("/etc/sysctl.conf"); err != nil {
|
||||
return "None"
|
||||
}
|
||||
sudo := cmd.SudoHandleCmd()
|
||||
command := fmt.Sprintf("%s cat /etc/sysctl.conf | grep net/ipv4/icmp_echo_ignore_all= ", sudo)
|
||||
stdout, _ := cmd.Exec(command)
|
||||
if stdout == "net/ipv4/icmp_echo_ignore_all=1\n" {
|
||||
return "Enable"
|
||||
}
|
||||
return "Disable"
|
||||
}
|
||||
|
||||
func (s *ServiceFirewall) cleanUnUsedData(client firewall.FirewallClient) {
|
||||
list, _ := client.ListPort()
|
||||
addressList, _ := client.ListAddress()
|
||||
list = append(list, addressList...)
|
||||
if len(list) == 0 {
|
||||
return
|
||||
}
|
||||
records := s.repoFirewall.List(model.Firewall{})
|
||||
if len(records) == 0 {
|
||||
return
|
||||
}
|
||||
for _, item := range list {
|
||||
for i := 0; i < len(records); i++ {
|
||||
if records[i].Port == item.Port && records[i].Protocol == item.Protocol && records[i].Strategy == item.Strategy && records[i].Address == item.Address {
|
||||
records = append(records[:i], records[i+1:]...)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for _, record := range records {
|
||||
_ = s.repoFirewall.Delete(record.ID)
|
||||
}
|
||||
}
|
||||
@@ -10,11 +10,11 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/global"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
"xorm.io/xorm"
|
||||
|
||||
"github.com/go-resty/resty/v2"
|
||||
@@ -115,6 +115,27 @@ var (
|
||||
CustomUriAlarmsFmt = config.UriPrefix + "/faultManagement/v1/elementType/%s/objectType/alarms"
|
||||
)
|
||||
|
||||
var client = resty.New()
|
||||
|
||||
func init() {
|
||||
/*
|
||||
client.
|
||||
SetTimeout(10 * time.Second).
|
||||
SetRetryCount(1).
|
||||
SetRetryWaitTime(1 * time.Second).
|
||||
SetRetryMaxWaitTime(2 * time.Second).
|
||||
SetRetryAfter(func(client *resty.Client, resp *resty.Response) (time.Duration, error) {
|
||||
return 0, errors.New("quota exceeded")
|
||||
})
|
||||
*/
|
||||
client.
|
||||
SetTimeout(time.Duration(500 * time.Millisecond))
|
||||
// SetRetryCount(1).
|
||||
// SetRetryWaitTime(time.Duration(1 * time.Second)).
|
||||
// SetRetryMaxWaitTime(time.Duration(2 * time.Second))
|
||||
//client.SetTimeout(2 * time.Second)
|
||||
}
|
||||
|
||||
var xEngine *xorm.Engine
|
||||
|
||||
type DatabaseClient struct {
|
||||
@@ -439,8 +460,8 @@ func PostAlarmFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
if err = AlarmEmailForward(&alarmData); err != nil {
|
||||
log.Error("Failed to AlarmEmailForward:", err)
|
||||
}
|
||||
if err = AlarmForwardBySMS(&alarmData); err != nil {
|
||||
log.Error("Failed to AlarmForwardBySMS:", err)
|
||||
if err = AlarmForwardBySMSC(&alarmData); err != nil {
|
||||
log.Error("Failed to AlarmForwardBySMSC:", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -482,7 +503,7 @@ func GetAlarmFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
apiUri := fmt.Sprintf(UriAlarmsFmt, strings.ToLower(ne.NeType))
|
||||
requestURI2NF := fmt.Sprintf("%s%s", hostUri, apiUri)
|
||||
log.Debug("requestURI2NF: Get ", requestURI2NF)
|
||||
client := resty.New()
|
||||
// client := resty.New()
|
||||
response, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
@@ -498,7 +519,12 @@ func GetAlarmFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
switch response.StatusCode() {
|
||||
case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted:
|
||||
body := response.Body()
|
||||
log.Debug("Request body:", string(body))
|
||||
if len(body) == 0 || body == nil {
|
||||
log.Infof("Empty alarm body from neType=%s, neId=%s", ne.NeType, ne.NeId)
|
||||
//services.ResponseInternalServerError500ProcessError(w, err)
|
||||
continue
|
||||
}
|
||||
//log.Debug("Request body:", string(body))
|
||||
|
||||
err = json.Unmarshal(body, &alarmArray)
|
||||
if err != nil {
|
||||
@@ -518,7 +544,7 @@ func GetAlarmFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
continue
|
||||
}
|
||||
if alarmArray == nil {
|
||||
log.Info("Not found sync alarms, neType=%s, neId=%s", ne.NeType, ne.NeId)
|
||||
log.Infof("Not found sync alarms, neType=%s, neId=%s", ne.NeType, ne.NeId)
|
||||
//services.ResponseInternalServerError500ProcessError(w, err)
|
||||
continue
|
||||
}
|
||||
@@ -536,7 +562,7 @@ func GetAlarmFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
Where("ne_type=? and ne_id=? and alarm_id=? and alarm_status=1", alarmData.NeType, alarmData.NeId, alarmData.AlarmId).
|
||||
Exist()
|
||||
if err == nil || !exist {
|
||||
log.Info("Not found active alarm: ne_id=%s, alarm_id=%s", alarmData.NeId, alarmData.AlarmId)
|
||||
log.Infof("Not found active alarm: ne_id=%s, alarm_id=%s", alarmData.NeId, alarmData.AlarmId)
|
||||
continue
|
||||
}
|
||||
alarmData.ClearType = ClearTypeAutoClear
|
||||
@@ -708,8 +734,8 @@ func GetAlarmFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
if err = AlarmEmailForward(&alarmData); err != nil {
|
||||
log.Error("Failed to AlarmEmailForward:", err)
|
||||
}
|
||||
if err = AlarmForwardBySMS(&alarmData); err != nil {
|
||||
log.Error("Failed to AlarmForwardBySMS:", err)
|
||||
if err = AlarmForwardBySMSC(&alarmData); err != nil {
|
||||
log.Error("Failed to AlarmForwardBySMSC:", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -717,5 +743,5 @@ func GetAlarmFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
}
|
||||
services.ResponseStatusOK200Null(w)
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
}
|
||||
|
||||
@@ -6,9 +6,9 @@ import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/restagent/config"
|
||||
|
||||
"gopkg.in/gomail.v2"
|
||||
)
|
||||
|
||||
@@ -5,10 +5,14 @@ import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/restagent/config"
|
||||
"github.com/linxGnu/gosmpp"
|
||||
"github.com/linxGnu/gosmpp/data"
|
||||
"github.com/linxGnu/gosmpp/pdu"
|
||||
)
|
||||
|
||||
func AlarmForwardBySMS(alarmData *Alarm) error {
|
||||
@@ -80,8 +84,8 @@ func AlarmForwardBySMS(alarmData *Alarm) error {
|
||||
|
||||
// 解析响应
|
||||
if resp.StatusCode == http.StatusOK {
|
||||
log.Info("SMS sent successfully!")
|
||||
operResult := fmt.Sprintf("SMS sent successfully!")
|
||||
operResult := "SMS sent successfully!"
|
||||
log.Info(operResult)
|
||||
forwardLog.OperResult = operResult
|
||||
affected, err := dborm.XormInsertAlarmForwardLog(forwardLog)
|
||||
if err != nil && affected <= 0 {
|
||||
@@ -101,3 +105,144 @@ func AlarmForwardBySMS(alarmData *Alarm) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func AlarmForwardBySMPP(alarmData *Alarm) error {
|
||||
log.Info("AlarmForwardBySMPP processing... ")
|
||||
|
||||
auth := gosmpp.Auth{
|
||||
SMSC: config.GetYamlConfig().Alarm.SMSC.Addr,
|
||||
SystemID: config.GetYamlConfig().Alarm.SMSC.UserName,
|
||||
Password: config.GetYamlConfig().Alarm.SMSC.Password,
|
||||
SystemType: "",
|
||||
}
|
||||
|
||||
// conn, err := gosmpp.NonTLSDialer(auth.SMSC)
|
||||
// connection := gosmpp.NewConnection(conn)
|
||||
|
||||
trans, err := gosmpp.NewSession(
|
||||
gosmpp.TXConnector(gosmpp.NonTLSDialer, auth),
|
||||
gosmpp.Settings{
|
||||
ReadTimeout: 2 * time.Second,
|
||||
|
||||
OnPDU: func(p pdu.PDU, _ bool) {
|
||||
log.Debug("%+v", p)
|
||||
},
|
||||
|
||||
OnSubmitError: func(_ pdu.PDU, err error) {
|
||||
log.Error(err)
|
||||
},
|
||||
|
||||
OnRebindingError: func(err error) {
|
||||
log.Error(err)
|
||||
},
|
||||
|
||||
OnClosed: func(state gosmpp.State) {
|
||||
log.Error(state)
|
||||
},
|
||||
}, -1)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
_ = trans.Close()
|
||||
}()
|
||||
|
||||
toUsers, err := dborm.XormGetAlarmForward("SMS")
|
||||
if err != nil {
|
||||
log.Error("Failed to XormGetAlarmForward:", err)
|
||||
return err
|
||||
} else if toUsers == nil {
|
||||
err := errors.New("not found forward phone number")
|
||||
log.Error(err)
|
||||
return err
|
||||
}
|
||||
// sending SMS(s)
|
||||
for _, toUser := range *toUsers {
|
||||
forwardLog := &dborm.AlarmForwardLog{
|
||||
NeType: alarmData.NeType,
|
||||
NeID: alarmData.NeId,
|
||||
AlarmID: alarmData.AlarmId,
|
||||
AlarmTitle: alarmData.AlarmTitle,
|
||||
AlarmSeq: alarmData.AlarmSeq,
|
||||
EventTime: alarmData.EventTime,
|
||||
ToUser: toUser,
|
||||
}
|
||||
message := alarmData.AlarmTitle + "from" + alarmData.NeType + alarmData.NeId + "at" + alarmData.EventTime
|
||||
if err = trans.Transceiver().Submit(newSubmitSM(toUser, message)); err != nil {
|
||||
operResult := fmt.Sprintf("Failed to submit short message:%v", err)
|
||||
log.Error(operResult)
|
||||
forwardLog.OperResult = operResult
|
||||
} else {
|
||||
operResult := "SMS sent successfully!"
|
||||
log.Trace(operResult)
|
||||
forwardLog.OperResult = operResult
|
||||
}
|
||||
|
||||
affected, err := dborm.XormInsertAlarmForwardLog(forwardLog)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to insert data:", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func handlePDU() func(pdu.PDU) (pdu.PDU, bool) {
|
||||
return func(p pdu.PDU) (pdu.PDU, bool) {
|
||||
switch pd := p.(type) {
|
||||
case *pdu.Unbind:
|
||||
log.Trace("Unbind Received")
|
||||
return pd.GetResponse(), true
|
||||
|
||||
case *pdu.UnbindResp:
|
||||
log.Trace("UnbindResp Received")
|
||||
|
||||
case *pdu.SubmitSMResp:
|
||||
log.Trace("SubmitSMResp Received")
|
||||
|
||||
case *pdu.GenericNack:
|
||||
log.Trace("GenericNack Received")
|
||||
|
||||
case *pdu.EnquireLinkResp:
|
||||
fmt.Println("EnquireLinkResp Received")
|
||||
|
||||
case *pdu.EnquireLink:
|
||||
log.Trace("EnquireLink Received")
|
||||
return pd.GetResponse(), false
|
||||
|
||||
case *pdu.DataSM:
|
||||
log.Trace("DataSM receiver")
|
||||
return pd.GetResponse(), false
|
||||
|
||||
case *pdu.DeliverSM:
|
||||
log.Trace("DeliverSM receiver")
|
||||
return pd.GetResponse(), false
|
||||
}
|
||||
return nil, false
|
||||
}
|
||||
}
|
||||
|
||||
func newSubmitSM(phoneNumber string, message string) *pdu.SubmitSM {
|
||||
// build up submitSM
|
||||
srcAddr := pdu.NewAddress()
|
||||
srcAddr.SetTon(5)
|
||||
srcAddr.SetNpi(0)
|
||||
_ = srcAddr.SetAddress("alarm notification:")
|
||||
|
||||
destAddr := pdu.NewAddress()
|
||||
destAddr.SetTon(1)
|
||||
destAddr.SetNpi(1)
|
||||
_ = destAddr.SetAddress(phoneNumber)
|
||||
|
||||
submitSM := pdu.NewSubmitSM().(*pdu.SubmitSM)
|
||||
submitSM.SourceAddr = srcAddr
|
||||
submitSM.DestAddr = destAddr
|
||||
_ = submitSM.Message.SetMessageWithEncoding(message, data.UCS2)
|
||||
submitSM.ProtocolID = 0
|
||||
submitSM.RegisteredDelivery = 1
|
||||
submitSM.ReplaceIfPresentFlag = 0
|
||||
submitSM.EsmClass = 0
|
||||
|
||||
return submitSM
|
||||
}
|
||||
|
||||
60
features/fm/ucpcli.go
Normal file
60
features/fm/ucpcli.go
Normal file
@@ -0,0 +1,60 @@
|
||||
package fm
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"be.ems/lib/log"
|
||||
"be.ems/restagent/config"
|
||||
"github.com/chzyer/readline"
|
||||
"github.com/go-gsm/ucp"
|
||||
)
|
||||
|
||||
func AlarmForwardBySMSC(alarmData *Alarm) error {
|
||||
opt := &ucp.Options{
|
||||
Addr: config.GetYamlConfig().Alarm.SMSC.Addr,
|
||||
User: config.GetYamlConfig().Alarm.SMSC.UserName,
|
||||
Password: config.GetYamlConfig().Alarm.SMSC.Password,
|
||||
AccessCode: "",
|
||||
}
|
||||
|
||||
client := ucp.New(opt)
|
||||
if err := client.Connect(); err != nil {
|
||||
log.Error("Failed to connect:", err)
|
||||
return err
|
||||
}
|
||||
defer client.Close()
|
||||
|
||||
reader, _ := readline.New(">>> ")
|
||||
defer reader.Close()
|
||||
|
||||
for {
|
||||
fmt.Print(">>> ")
|
||||
lines, _ := reader.Readline()
|
||||
fields := strings.Fields(lines)
|
||||
|
||||
if len(fields) == 1 {
|
||||
// exit CLI
|
||||
if fields[0] == "exit" {
|
||||
return nil
|
||||
}
|
||||
// display help message
|
||||
if fields[0] == "help" {
|
||||
log.Trace("\n\tSend a 'message' to 'receiver' with a 'sender' mask\n\t>>> sender receiver message\n\n\tExit the cli\n\t>>> exit\n")
|
||||
}
|
||||
}
|
||||
|
||||
// sender receiver message...
|
||||
if len(fields) >= 3 {
|
||||
sender := fields[0]
|
||||
receiver := fields[1]
|
||||
message := strings.Join(fields[2:], " ")
|
||||
ids, err := client.Send(sender, receiver, message)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
} else {
|
||||
log.Debug("%v", ids)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,17 +8,17 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"be.ems/lib/dborm"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
g "github.com/gosnmp/gosnmp"
|
||||
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/oauth"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/lib/session"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/lib/global"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/oauth"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/lib/session"
|
||||
"be.ems/restagent/config"
|
||||
)
|
||||
|
||||
var TodoList []stTodo
|
||||
|
||||
@@ -6,10 +6,10 @@ import (
|
||||
"os/exec"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/lib/global"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
"xorm.io/xorm"
|
||||
|
||||
@@ -10,11 +10,11 @@ import (
|
||||
"runtime"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/core/utils/ctx"
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/lib/core/utils/ctx"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
"github.com/shirou/gopsutil/cpu"
|
||||
"github.com/shirou/gopsutil/disk"
|
||||
"github.com/shirou/gopsutil/mem"
|
||||
|
||||
@@ -10,20 +10,21 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/mmlp"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/global"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/mmlp"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
|
||||
tokenConst "ems.agt/src/framework/constants/token"
|
||||
tokenConst "be.ems/src/framework/constants/token"
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
|
||||
// const (
|
||||
// //经过测试,linux下,延时需要大于100ms
|
||||
// TIME_DELAY_AFTER_WRITE = 200
|
||||
// TIME_DEAD_LINE = 10
|
||||
// )
|
||||
|
||||
type Response struct {
|
||||
@@ -37,25 +38,150 @@ type MMLRequest struct {
|
||||
var (
|
||||
// MML interface
|
||||
UriMML = config.DefaultUriPrefix + "/operationManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/mml"
|
||||
UriMML2 = config.DefaultUriPrefix + "/operationManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/mml2"
|
||||
UriMMLDiscard = config.DefaultUriPrefix + "/opeartionManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/mml"
|
||||
UriNeOmMml = config.DefaultUriPrefix + "/omManagement/{apiVersion}/mml/{netype}/{neid}"
|
||||
UriOmMmlExt = config.DefaultUriPrefix + "/{managedType}/{apiVersion}/elementType/OMC/objectType/mml"
|
||||
UriOmMmlInt = config.DefaultUriPrefix + "/omManagement/{apiVersion}/mml/{neType}/{neId}"
|
||||
|
||||
CustomUriMML = config.UriPrefix + "/operationManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/mml"
|
||||
CustomUriMML2 = config.UriPrefix + "/operationManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/mml2"
|
||||
CustomUriNeOmMml = config.UriPrefix + "/omManagement/{apiVersion}/mml/{netype}/{neid}"
|
||||
CustomUriOmMmlExt = config.UriPrefix + "/opeartionManagement/{apiVersion}/elementType/OMC/objectType/mml"
|
||||
CustomUriOmMmlInt = config.UriPrefix + "/omManagement/{apiVersion}/mml/{neType}/{neId}"
|
||||
)
|
||||
|
||||
// func init() {
|
||||
// if config.GetYamlConfig().MML.Sleep != 0 {
|
||||
// TIME_DELAY_AFTER_WRITE = time.Duration(config.GetYamlConfig().MML.Sleep)
|
||||
// }
|
||||
// if config.GetYamlConfig().MML.DeadLine != 0 {
|
||||
// TIME_DEAD_LINE = time.Duration(config.GetYamlConfig().MML.DeadLine)
|
||||
// }
|
||||
// }
|
||||
var TIME_DELAY_AFTER_WRITE time.Duration = 200
|
||||
var TIME_DEAD_LINE time.Duration = 10
|
||||
|
||||
func init() {
|
||||
if config.GetYamlConfig().MML.Sleep != 0 {
|
||||
TIME_DELAY_AFTER_WRITE = time.Duration(config.GetYamlConfig().MML.Sleep)
|
||||
}
|
||||
if config.GetYamlConfig().MML.DeadLine != 0 {
|
||||
TIME_DEAD_LINE = time.Duration(config.GetYamlConfig().MML.DeadLine)
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
return
|
||||
}
|
||||
|
||||
var buf [20 * 1024]byte
|
||||
//buf := make([]byte, 0)
|
||||
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)
|
||||
conn, err := net.Dial("tcp", hostMML)
|
||||
if err != nil {
|
||||
errMsg := fmt.Sprintf("Failed to dial %s: %v", hostMML, err)
|
||||
log.Error(errMsg)
|
||||
mmlResult = append(mmlResult, errMsg)
|
||||
response := Response{mmlResult}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
return
|
||||
}
|
||||
defer conn.Close()
|
||||
|
||||
// localAddr := conn.LocalAddr()
|
||||
// remoteAddr := conn.RemoteAddr()
|
||||
// if localAddr == nil || remoteAddr == nil {
|
||||
// errMsg := fmt.Sprintf("connect invalid: localAddr=%v, remoteAddr=%v", localAddr, remoteAddr)
|
||||
// log.Error(errMsg)
|
||||
// mmlResult = append(mmlResult, errMsg)
|
||||
// response := Response{mmlResult}
|
||||
// services.ResponseWithJson(w, http.StatusOK, response)
|
||||
// return
|
||||
// }
|
||||
|
||||
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)
|
||||
_, err = conn.Write([]byte(loginStr))
|
||||
if err != nil {
|
||||
log.Error("Failed to write:", err)
|
||||
mmlResult = append(mmlResult, err.Error())
|
||||
response := Response{mmlResult}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
return
|
||||
}
|
||||
|
||||
time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE)
|
||||
|
||||
n, err = conn.Read(buf[0:])
|
||||
if err != nil {
|
||||
log.Error("Failed to read:", err)
|
||||
mmlResult = append(mmlResult, err.Error())
|
||||
response := Response{mmlResult}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
return
|
||||
}
|
||||
log.Trace(string(buf[0:n]))
|
||||
|
||||
body, err := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
|
||||
if err != nil {
|
||||
log.Error("Failed to ReadAll:", err)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
log.Trace("Body:", string(body))
|
||||
|
||||
mmlRequest := new(MMLRequest)
|
||||
_ = json.Unmarshal(body, mmlRequest)
|
||||
|
||||
for _, mml := range mmlRequest.MML {
|
||||
mmlCommand := fmt.Sprintf("%s\n", mml)
|
||||
_, err = conn.Write([]byte(mmlCommand))
|
||||
if err != nil {
|
||||
log.Error("Failed to write:", err)
|
||||
mmlResult = append(mmlResult, err.Error())
|
||||
// response := Response{mmlResult}
|
||||
// services.ResponseWithJson(w, http.StatusOK, response)
|
||||
// return
|
||||
continue
|
||||
}
|
||||
time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE)
|
||||
|
||||
n, err = conn.Read(buf[0:])
|
||||
if err != nil {
|
||||
log.Error("Failed to read:", err)
|
||||
mmlResult = append(mmlResult, err.Error())
|
||||
// response := Response{mmlResult}
|
||||
// services.ResponseWithJson(w, http.StatusOK, response)
|
||||
// return
|
||||
continue
|
||||
}
|
||||
log.Trace(string(buf[0 : n-len(neType)-2]))
|
||||
re1 := regexp.MustCompile(`\x1B\[[0-9;]*[a-zA-Z]`) // 匹配包含␛的控制字符
|
||||
//re2 := regexp.MustCompile(`\x00`) // 匹配空字符
|
||||
re2 := regexp.MustCompile(`[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x1B]`) // 匹配空字符和包含␛的控制字符
|
||||
//re := regexp.MustCompile(`[\x00-\x1F\x7F]`)
|
||||
result := re1.ReplaceAllString(string(buf[0:n-len(neType)-2]), "")
|
||||
result = re2.ReplaceAllString(result, "")
|
||||
mmlResult = append(mmlResult, result)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
response := Response{mmlResult}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
}
|
||||
|
||||
func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("PostMMLToNF processing... ")
|
||||
@@ -66,14 +192,14 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
// 经过测试,linux下,延时需要大于100ms
|
||||
var TIME_DELAY_AFTER_WRITE time.Duration = 200
|
||||
var TIME_DEAD_LINE time.Duration = 10
|
||||
if config.GetYamlConfig().MML.Sleep != 0 {
|
||||
TIME_DELAY_AFTER_WRITE = time.Duration(config.GetYamlConfig().MML.Sleep)
|
||||
}
|
||||
if config.GetYamlConfig().MML.DeadLine != 0 {
|
||||
TIME_DEAD_LINE = time.Duration(config.GetYamlConfig().MML.DeadLine)
|
||||
}
|
||||
// var TIME_DELAY_AFTER_WRITE time.Duration = 200
|
||||
// var TIME_DEAD_LINE time.Duration = 10
|
||||
// if config.GetYamlConfig().MML.Sleep != 0 {
|
||||
// TIME_DELAY_AFTER_WRITE = time.Duration(config.GetYamlConfig().MML.Sleep)
|
||||
// }
|
||||
// if config.GetYamlConfig().MML.DeadLine != 0 {
|
||||
// TIME_DEAD_LINE = time.Duration(config.GetYamlConfig().MML.DeadLine)
|
||||
// }
|
||||
|
||||
pack := "mml"
|
||||
vars := mux.Vars(r)
|
||||
@@ -242,9 +368,10 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
|
||||
if err != nil {
|
||||
log.Error("Failed to write:", err)
|
||||
mmlResult = append(mmlResult, err.Error())
|
||||
response := Response{mmlResult}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
return
|
||||
//response := Response{mmlResult}
|
||||
//services.ResponseWithJson(w, http.StatusOK, response)
|
||||
//return
|
||||
continue
|
||||
}
|
||||
time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE)
|
||||
mmlCommand := fmt.Sprintf("%s\n", mml)
|
||||
@@ -253,9 +380,10 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
|
||||
if err != nil {
|
||||
log.Error("Failed to write:", err)
|
||||
mmlResult = append(mmlResult, err.Error())
|
||||
response := Response{mmlResult}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
return
|
||||
//response := Response{mmlResult}
|
||||
//services.ResponseWithJson(w, http.StatusOK, response)
|
||||
//return
|
||||
continue
|
||||
}
|
||||
time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE)
|
||||
|
||||
@@ -263,9 +391,10 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
|
||||
if err != nil {
|
||||
log.Error("Failed to read:", err)
|
||||
mmlResult = append(mmlResult, err.Error())
|
||||
response := Response{mmlResult}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
return
|
||||
//response := Response{mmlResult}
|
||||
//services.ResponseWithJson(w, http.StatusOK, response)
|
||||
//return
|
||||
continue
|
||||
}
|
||||
log.Trace(string(buf[0 : n-len(neType)-2]))
|
||||
|
||||
@@ -327,7 +456,7 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
return
|
||||
}
|
||||
log.Debug(string(buf[0:n]))
|
||||
log.Trace(string(buf[0:n]))
|
||||
|
||||
_, err = conn.Write([]byte(config.GetYamlConfig().MML.Password + "\r\n"))
|
||||
if err != nil {
|
||||
@@ -377,9 +506,10 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
|
||||
if err != nil {
|
||||
log.Error("Failed to write:", err)
|
||||
mmlResult = append(mmlResult, err.Error())
|
||||
response := Response{mmlResult}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
return
|
||||
// response := Response{mmlResult}
|
||||
// services.ResponseWithJson(w, http.StatusOK, response)
|
||||
// return
|
||||
continue
|
||||
}
|
||||
time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE)
|
||||
|
||||
@@ -387,9 +517,10 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
|
||||
if err != nil {
|
||||
log.Error("Failed to read:", err)
|
||||
mmlResult = append(mmlResult, err.Error())
|
||||
response := Response{mmlResult}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
return
|
||||
// response := Response{mmlResult}
|
||||
// services.ResponseWithJson(w, http.StatusOK, response)
|
||||
// return
|
||||
continue
|
||||
}
|
||||
log.Trace(string(buf[0 : n-len(neType)-2]))
|
||||
|
||||
@@ -397,7 +528,6 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
|
||||
//re2 := regexp.MustCompile(`\x00`) // 匹配空字符
|
||||
re2 := regexp.MustCompile(`[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x1B]`) // 匹配空字符和包含␛的控制字符
|
||||
//re := regexp.MustCompile(`[\x00-\x1F\x7F]`)
|
||||
// upf telnet buffer只能读取一次,需要去掉前面的多余字符
|
||||
result := re1.ReplaceAllString(string(buf[0:n-len(neType)-2]), "")
|
||||
result = re2.ReplaceAllString(result, "")
|
||||
mmlResult = append(mmlResult, result)
|
||||
@@ -466,9 +596,10 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
|
||||
if err != nil {
|
||||
log.Error("Failed to write:", err)
|
||||
mmlResult = append(mmlResult, err.Error())
|
||||
response := Response{mmlResult}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
return
|
||||
// response := Response{mmlResult}
|
||||
// services.ResponseWithJson(w, http.StatusOK, response)
|
||||
// return
|
||||
continue
|
||||
}
|
||||
time.Sleep(time.Millisecond * TIME_DELAY_AFTER_WRITE)
|
||||
|
||||
@@ -476,9 +607,10 @@ func PostMMLToNF(w http.ResponseWriter, r *http.Request) {
|
||||
if err != nil {
|
||||
log.Error("Failed to read:", err)
|
||||
mmlResult = append(mmlResult, err.Error())
|
||||
response := Response{mmlResult}
|
||||
services.ResponseWithJson(w, http.StatusOK, response)
|
||||
return
|
||||
// response := Response{mmlResult}
|
||||
// services.ResponseWithJson(w, http.StatusOK, response)
|
||||
// return
|
||||
continue
|
||||
}
|
||||
log.Trace(string(buf[0 : n-len(neType)-2]))
|
||||
re1 := regexp.MustCompile(`\x1B\[[0-9;]*[a-zA-Z]`) // 匹配包含␛的控制字符
|
||||
@@ -533,7 +665,7 @@ func PostMMLToOMC(w http.ResponseWriter, r *http.Request) {
|
||||
hostUri := fmt.Sprintf("http://%s:%s", neInfo.Ip, neInfo.Port)
|
||||
|
||||
omcMmlVar := &mmlp.MmlVar{
|
||||
Version: "16.1.1",
|
||||
Version: global.Version,
|
||||
Output: mmlp.DefaultFormatType,
|
||||
MmlHome: config.GetYamlConfig().MML.MmlHome,
|
||||
Limit: 50,
|
||||
|
||||
@@ -6,10 +6,10 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/core/utils/ctx"
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/lib/core/utils/ctx"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
"github.com/shirou/gopsutil/disk"
|
||||
"github.com/shirou/gopsutil/net"
|
||||
)
|
||||
|
||||
@@ -6,9 +6,9 @@ import (
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/restagent/config"
|
||||
"github.com/robfig/cron/v3"
|
||||
"github.com/shirou/gopsutil/v3/cpu"
|
||||
"github.com/shirou/gopsutil/v3/disk"
|
||||
|
||||
@@ -6,11 +6,11 @@ import (
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/core/utils/ctx"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/lib/wsinfo"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/lib/core/utils/ctx"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/lib/wsinfo"
|
||||
"be.ems/restagent/config"
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/shirou/gopsutil/process"
|
||||
)
|
||||
|
||||
@@ -6,17 +6,17 @@ import (
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"be.ems/lib/dborm"
|
||||
"github.com/go-resty/resty/v2"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/oauth"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/lib/session"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/lib/global"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/oauth"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/lib/session"
|
||||
"be.ems/restagent/config"
|
||||
)
|
||||
|
||||
type ErrorOAuthResponse struct {
|
||||
|
||||
@@ -9,9 +9,9 @@ import (
|
||||
"github.com/gorilla/mux"
|
||||
g "github.com/gosnmp/gosnmp"
|
||||
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
||||
@@ -10,14 +10,14 @@ import (
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/global"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
"xorm.io/xorm"
|
||||
|
||||
wsService "ems.agt/src/modules/ws/service"
|
||||
wsService "be.ems/src/modules/ws/service"
|
||||
"github.com/go-resty/resty/v2"
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"github.com/gorilla/mux"
|
||||
|
||||
@@ -10,21 +10,21 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"ems.agt/features/security/service"
|
||||
sysConfigService "ems.agt/features/sys_config/service"
|
||||
"ems.agt/lib/core/account"
|
||||
"ems.agt/lib/core/cache"
|
||||
"ems.agt/lib/core/constants/cachekey"
|
||||
"ems.agt/lib/core/utils/ctx"
|
||||
"ems.agt/lib/core/vo/result"
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/oauth"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
srcConfig "ems.agt/src/framework/config"
|
||||
"ems.agt/src/framework/redis"
|
||||
"be.ems/features/security/service"
|
||||
sysConfigService "be.ems/features/sys_config/service"
|
||||
"be.ems/lib/core/account"
|
||||
"be.ems/lib/core/cache"
|
||||
"be.ems/lib/core/constants/cachekey"
|
||||
"be.ems/lib/core/utils/ctx"
|
||||
"be.ems/lib/core/vo/result"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/global"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/oauth"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
srcConfig "be.ems/src/framework/config"
|
||||
"be.ems/src/framework/redis"
|
||||
"github.com/mojocn/base64Captcha"
|
||||
)
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
menuService "ems.agt/features/sys_menu/service"
|
||||
roleService "ems.agt/features/sys_role/service"
|
||||
userService "ems.agt/features/sys_user/service"
|
||||
"ems.agt/lib/core/utils/parse"
|
||||
"ems.agt/lib/core/vo"
|
||||
menuService "be.ems/features/sys_menu/service"
|
||||
roleService "be.ems/features/sys_role/service"
|
||||
userService "be.ems/features/sys_user/service"
|
||||
"be.ems/lib/core/utils/parse"
|
||||
"be.ems/lib/core/vo"
|
||||
)
|
||||
|
||||
// 实例化服务层 ServiceAccount 结构体
|
||||
|
||||
@@ -8,9 +8,9 @@ import (
|
||||
"os/exec"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
)
|
||||
|
||||
|
||||
@@ -14,12 +14,12 @@ import (
|
||||
"github.com/go-resty/resty/v2"
|
||||
"github.com/gorilla/mux"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
tokenConst "ems.agt/src/framework/constants/token"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/global"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
tokenConst "be.ems/src/framework/constants/token"
|
||||
)
|
||||
|
||||
type CpuUsage struct {
|
||||
@@ -756,6 +756,8 @@ func GetStateFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
result["ipAddress"] = ne.Ip
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{tokenConst.HEADER_KEY: r.Header.Get(tokenConst.HEADER_KEY)}).
|
||||
//SetHeaders(map[string]string{"accessToken": token}).
|
||||
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
|
||||
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
|
||||
Get(requestURI2NF)
|
||||
|
||||
@@ -11,7 +11,7 @@ import (
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/log"
|
||||
"be.ems/lib/log"
|
||||
"github.com/shirou/gopsutil/v3/cpu"
|
||||
"github.com/shirou/gopsutil/v3/disk"
|
||||
"github.com/shirou/gopsutil/v3/mem"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package state
|
||||
|
||||
import (
|
||||
"ems.agt/lib/log"
|
||||
"be.ems/lib/log"
|
||||
"github.com/shirou/gopsutil/cpu"
|
||||
"github.com/shirou/gopsutil/disk"
|
||||
"github.com/shirou/gopsutil/host"
|
||||
|
||||
@@ -5,14 +5,14 @@ import (
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"ems.agt/features/sys_config/model"
|
||||
"ems.agt/features/sys_config/service"
|
||||
"ems.agt/lib/core/utils/ctx"
|
||||
"ems.agt/lib/core/utils/parse"
|
||||
"ems.agt/lib/core/vo/result"
|
||||
"ems.agt/lib/midware"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/features/sys_config/model"
|
||||
"be.ems/features/sys_config/service"
|
||||
"be.ems/lib/core/utils/ctx"
|
||||
"be.ems/lib/core/utils/parse"
|
||||
"be.ems/lib/core/vo/result"
|
||||
"be.ems/lib/midware"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
)
|
||||
|
||||
// 参数配置信息接口添加到路由
|
||||
|
||||
@@ -5,11 +5,11 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"ems.agt/features/sys_config/model"
|
||||
"ems.agt/lib/core/datasource"
|
||||
"ems.agt/lib/core/utils/date"
|
||||
"ems.agt/lib/core/utils/parse"
|
||||
"ems.agt/lib/log"
|
||||
"be.ems/features/sys_config/model"
|
||||
"be.ems/lib/core/datasource"
|
||||
"be.ems/lib/core/utils/date"
|
||||
"be.ems/lib/core/utils/parse"
|
||||
"be.ems/lib/log"
|
||||
)
|
||||
|
||||
// 实例化数据层 RepoSysConfig 结构体
|
||||
@@ -181,11 +181,7 @@ func (r *RepoSysConfig) SelectConfigValueByKey(configKey string) string {
|
||||
return ""
|
||||
}
|
||||
if len(results) > 0 {
|
||||
v, ok := results[0]["str"].(string)
|
||||
if ok {
|
||||
return v
|
||||
}
|
||||
return ""
|
||||
return fmt.Sprint(results[0]["str"])
|
||||
}
|
||||
return ""
|
||||
}
|
||||
@@ -230,11 +226,7 @@ func (r *RepoSysConfig) CheckUniqueConfig(sysConfig model.SysConfig) string {
|
||||
return ""
|
||||
}
|
||||
if len(results) > 0 {
|
||||
v, ok := results[0]["str"].(string)
|
||||
if ok {
|
||||
return v
|
||||
}
|
||||
return ""
|
||||
return fmt.Sprint(results[0]["str"])
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
@@ -3,9 +3,9 @@ package service
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"ems.agt/features/sys_config/model"
|
||||
"ems.agt/lib/core/cache"
|
||||
"ems.agt/lib/core/constants/cachekey"
|
||||
"be.ems/features/sys_config/model"
|
||||
"be.ems/lib/core/cache"
|
||||
"be.ems/lib/core/constants/cachekey"
|
||||
)
|
||||
|
||||
// 实例化服务层 ServiceSysConfig 结构体
|
||||
|
||||
@@ -5,15 +5,15 @@ import (
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"ems.agt/features/sys_dict_data/model"
|
||||
sysDictDataService "ems.agt/features/sys_dict_data/service"
|
||||
sysDictTypeService "ems.agt/features/sys_dict_type/service"
|
||||
"ems.agt/lib/core/utils/ctx"
|
||||
"ems.agt/lib/core/utils/parse"
|
||||
"ems.agt/lib/core/vo/result"
|
||||
"ems.agt/lib/midware"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/features/sys_dict_data/model"
|
||||
sysDictDataService "be.ems/features/sys_dict_data/service"
|
||||
sysDictTypeService "be.ems/features/sys_dict_type/service"
|
||||
"be.ems/lib/core/utils/ctx"
|
||||
"be.ems/lib/core/utils/parse"
|
||||
"be.ems/lib/core/vo/result"
|
||||
"be.ems/lib/midware"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
)
|
||||
|
||||
// 字典类型对应的字典数据信息接口添加到路由
|
||||
|
||||
@@ -5,10 +5,10 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"ems.agt/features/sys_dict_data/model"
|
||||
"ems.agt/lib/core/datasource"
|
||||
"ems.agt/lib/core/utils/parse"
|
||||
"ems.agt/lib/log"
|
||||
"be.ems/features/sys_dict_data/model"
|
||||
"be.ems/lib/core/datasource"
|
||||
"be.ems/lib/core/utils/parse"
|
||||
"be.ems/lib/log"
|
||||
)
|
||||
|
||||
// 实例化数据层 RepoSysDictData 结构体
|
||||
@@ -215,11 +215,7 @@ func (r *RepoSysDictData) CheckUniqueDictData(sysDictData model.SysDictData) str
|
||||
return ""
|
||||
}
|
||||
if len(results) > 0 {
|
||||
v, ok := results[0]["str"].(string)
|
||||
if ok {
|
||||
return v
|
||||
}
|
||||
return ""
|
||||
return fmt.Sprint(results[0]["str"])
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
@@ -3,9 +3,9 @@ package service
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"ems.agt/features/sys_dict_data/model"
|
||||
"ems.agt/features/sys_dict_data/repo"
|
||||
sysDictTypeService "ems.agt/features/sys_dict_type/service"
|
||||
"be.ems/features/sys_dict_data/model"
|
||||
"be.ems/features/sys_dict_data/repo"
|
||||
sysDictTypeService "be.ems/features/sys_dict_type/service"
|
||||
)
|
||||
|
||||
// 实例化服务层 ServiceSysDictData 结构体
|
||||
|
||||
@@ -5,14 +5,14 @@ import (
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"ems.agt/features/sys_dict_type/model"
|
||||
sysDictTypeService "ems.agt/features/sys_dict_type/service"
|
||||
"ems.agt/lib/core/utils/ctx"
|
||||
"ems.agt/lib/core/utils/parse"
|
||||
"ems.agt/lib/core/vo/result"
|
||||
"ems.agt/lib/midware"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/features/sys_dict_type/model"
|
||||
sysDictTypeService "be.ems/features/sys_dict_type/service"
|
||||
"be.ems/lib/core/utils/ctx"
|
||||
"be.ems/lib/core/utils/parse"
|
||||
"be.ems/lib/core/vo/result"
|
||||
"be.ems/lib/midware"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
)
|
||||
|
||||
// 字典类型信息接口添加到路由
|
||||
|
||||
@@ -5,11 +5,11 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"ems.agt/features/sys_dict_type/model"
|
||||
"ems.agt/lib/core/datasource"
|
||||
"ems.agt/lib/core/utils/date"
|
||||
"ems.agt/lib/core/utils/parse"
|
||||
"ems.agt/lib/log"
|
||||
"be.ems/features/sys_dict_type/model"
|
||||
"be.ems/lib/core/datasource"
|
||||
"be.ems/lib/core/utils/date"
|
||||
"be.ems/lib/core/utils/parse"
|
||||
"be.ems/lib/log"
|
||||
)
|
||||
|
||||
// 实例化数据层 RepoSysDictType 结构体
|
||||
@@ -227,11 +227,7 @@ func (r *RepoSysDictType) CheckUniqueDictType(sysDictType model.SysDictType) str
|
||||
return ""
|
||||
}
|
||||
if len(results) > 0 {
|
||||
v, ok := results[0]["str"].(string)
|
||||
if ok {
|
||||
return v
|
||||
}
|
||||
return ""
|
||||
return fmt.Sprint(results[0]["str"])
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
@@ -5,12 +5,12 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
sysDictDataModel "ems.agt/features/sys_dict_data/model"
|
||||
sysDictDataRepo "ems.agt/features/sys_dict_data/repo"
|
||||
sysDictTypeModel "ems.agt/features/sys_dict_type/model"
|
||||
"ems.agt/features/sys_dict_type/repo"
|
||||
"ems.agt/lib/core/cache"
|
||||
"ems.agt/lib/core/constants/cachekey"
|
||||
sysDictDataModel "be.ems/features/sys_dict_data/model"
|
||||
sysDictDataRepo "be.ems/features/sys_dict_data/repo"
|
||||
sysDictTypeModel "be.ems/features/sys_dict_type/model"
|
||||
"be.ems/features/sys_dict_type/repo"
|
||||
"be.ems/lib/core/cache"
|
||||
"be.ems/lib/core/constants/cachekey"
|
||||
)
|
||||
|
||||
// 实例化服务层 ServiceSysDictType 结构体
|
||||
|
||||
@@ -4,16 +4,16 @@ import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"ems.agt/features/sys_menu/consts"
|
||||
"ems.agt/features/sys_menu/model"
|
||||
"ems.agt/features/sys_menu/service"
|
||||
"ems.agt/lib/core/utils/ctx"
|
||||
"ems.agt/lib/core/utils/regular"
|
||||
"ems.agt/lib/core/vo/result"
|
||||
"ems.agt/lib/midware"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
srcConfig "ems.agt/src/framework/config"
|
||||
"be.ems/features/sys_menu/consts"
|
||||
"be.ems/features/sys_menu/model"
|
||||
"be.ems/features/sys_menu/service"
|
||||
"be.ems/lib/core/utils/ctx"
|
||||
"be.ems/lib/core/utils/regular"
|
||||
"be.ems/lib/core/vo/result"
|
||||
"be.ems/lib/midware"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
srcConfig "be.ems/src/framework/config"
|
||||
)
|
||||
|
||||
// 菜单接口添加到路由
|
||||
|
||||
@@ -5,11 +5,11 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"ems.agt/features/sys_menu/consts"
|
||||
"ems.agt/features/sys_menu/model"
|
||||
"ems.agt/lib/core/datasource"
|
||||
"ems.agt/lib/core/utils/parse"
|
||||
"ems.agt/lib/log"
|
||||
"be.ems/features/sys_menu/consts"
|
||||
"be.ems/features/sys_menu/model"
|
||||
"be.ems/lib/core/datasource"
|
||||
"be.ems/lib/core/utils/parse"
|
||||
"be.ems/lib/log"
|
||||
)
|
||||
|
||||
// 实例化数据层 RepoSysMenu 结构体
|
||||
@@ -469,11 +469,7 @@ func (r *RepoSysMenu) CheckUniqueMenu(sysMenu model.SysMenu) string {
|
||||
return ""
|
||||
}
|
||||
if len(results) > 0 {
|
||||
v, ok := results[0]["str"].(string)
|
||||
if ok {
|
||||
return v
|
||||
}
|
||||
return ""
|
||||
return fmt.Sprint(results[0]["str"])
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
@@ -4,13 +4,13 @@ import (
|
||||
"encoding/base64"
|
||||
"strings"
|
||||
|
||||
"ems.agt/features/sys_menu/consts"
|
||||
"ems.agt/features/sys_menu/model"
|
||||
sysRoleService "ems.agt/features/sys_role/service"
|
||||
sysrolemenu "ems.agt/features/sys_role_menu"
|
||||
"ems.agt/lib/core/utils/parse"
|
||||
"ems.agt/lib/core/utils/regular"
|
||||
"ems.agt/lib/core/vo"
|
||||
"be.ems/features/sys_menu/consts"
|
||||
"be.ems/features/sys_menu/model"
|
||||
sysRoleService "be.ems/features/sys_role/service"
|
||||
sysrolemenu "be.ems/features/sys_role_menu"
|
||||
"be.ems/lib/core/utils/parse"
|
||||
"be.ems/lib/core/utils/regular"
|
||||
"be.ems/lib/core/vo"
|
||||
)
|
||||
|
||||
// 实例化服务层 ServiceSysMenu 结构体
|
||||
|
||||
@@ -5,15 +5,15 @@ import (
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"ems.agt/features/sys_role/model"
|
||||
"ems.agt/features/sys_role/service"
|
||||
userService "ems.agt/features/sys_user/service"
|
||||
"ems.agt/lib/core/utils/ctx"
|
||||
"ems.agt/lib/core/utils/parse"
|
||||
"ems.agt/lib/core/vo/result"
|
||||
"ems.agt/lib/midware"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/features/sys_role/model"
|
||||
"be.ems/features/sys_role/service"
|
||||
userService "be.ems/features/sys_user/service"
|
||||
"be.ems/lib/core/utils/ctx"
|
||||
"be.ems/lib/core/utils/parse"
|
||||
"be.ems/lib/core/vo/result"
|
||||
"be.ems/lib/midware"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
)
|
||||
|
||||
// 角色接口添加到路由
|
||||
|
||||
@@ -5,11 +5,11 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"ems.agt/features/sys_role/model"
|
||||
"ems.agt/lib/core/datasource"
|
||||
"ems.agt/lib/core/utils/date"
|
||||
"ems.agt/lib/core/utils/parse"
|
||||
"ems.agt/lib/log"
|
||||
"be.ems/features/sys_role/model"
|
||||
"be.ems/lib/core/datasource"
|
||||
"be.ems/lib/core/utils/date"
|
||||
"be.ems/lib/core/utils/parse"
|
||||
"be.ems/lib/log"
|
||||
)
|
||||
|
||||
// 实例化数据层 RepoSysRole 结构体
|
||||
@@ -356,11 +356,7 @@ func (r *RepoSysRole) CheckUniqueRole(sysRole model.SysRole) string {
|
||||
return ""
|
||||
}
|
||||
if len(results) > 0 {
|
||||
v, ok := results[0]["str"].(string)
|
||||
if ok {
|
||||
return v
|
||||
}
|
||||
return ""
|
||||
return fmt.Sprint(results[0]["str"])
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
@@ -4,9 +4,9 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"ems.agt/features/sys_role/model"
|
||||
sysrolemenu "ems.agt/features/sys_role_menu"
|
||||
sysuserrole "ems.agt/features/sys_user_role"
|
||||
"be.ems/features/sys_role/model"
|
||||
sysrolemenu "be.ems/features/sys_role_menu"
|
||||
sysuserrole "be.ems/features/sys_user_role"
|
||||
)
|
||||
|
||||
// 实例化服务层 ServiceSysRole 结构体
|
||||
|
||||
@@ -4,9 +4,9 @@ import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"ems.agt/lib/core/datasource"
|
||||
"ems.agt/lib/core/utils/parse"
|
||||
"ems.agt/lib/log"
|
||||
"be.ems/lib/core/datasource"
|
||||
"be.ems/lib/core/utils/parse"
|
||||
"be.ems/lib/log"
|
||||
)
|
||||
|
||||
// 实例化数据层 RepoSysRoleMenu 结构体
|
||||
|
||||
@@ -5,17 +5,17 @@ import (
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
sysRoleModel "ems.agt/features/sys_role/model"
|
||||
sysRoleService "ems.agt/features/sys_role/service"
|
||||
sysUserModel "ems.agt/features/sys_user/model"
|
||||
"ems.agt/features/sys_user/service"
|
||||
"ems.agt/lib/core/utils/ctx"
|
||||
"ems.agt/lib/core/utils/parse"
|
||||
"ems.agt/lib/core/vo/result"
|
||||
"ems.agt/lib/midware"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
srcConfig "ems.agt/src/framework/config"
|
||||
sysRoleModel "be.ems/features/sys_role/model"
|
||||
sysRoleService "be.ems/features/sys_role/service"
|
||||
sysUserModel "be.ems/features/sys_user/model"
|
||||
"be.ems/features/sys_user/service"
|
||||
"be.ems/lib/core/utils/ctx"
|
||||
"be.ems/lib/core/utils/parse"
|
||||
"be.ems/lib/core/vo/result"
|
||||
"be.ems/lib/midware"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
srcConfig "be.ems/src/framework/config"
|
||||
)
|
||||
|
||||
// 用户接口添加到路由
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package model
|
||||
|
||||
import "ems.agt/features/sys_role/model"
|
||||
import "be.ems/features/sys_role/model"
|
||||
|
||||
type SysUser struct {
|
||||
Id string `json:"id" xorm:"pk 'id' autoincr"`
|
||||
|
||||
@@ -5,13 +5,13 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
sysRoleModel "ems.agt/features/sys_role/model"
|
||||
sysUserModel "ems.agt/features/sys_user/model"
|
||||
"ems.agt/lib/core/datasource"
|
||||
"ems.agt/lib/core/utils/date"
|
||||
"ems.agt/lib/core/utils/parse"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/src/framework/utils/crypto"
|
||||
sysRoleModel "be.ems/features/sys_role/model"
|
||||
sysUserModel "be.ems/features/sys_user/model"
|
||||
"be.ems/lib/core/datasource"
|
||||
"be.ems/lib/core/utils/date"
|
||||
"be.ems/lib/core/utils/parse"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/src/framework/utils/crypto"
|
||||
)
|
||||
|
||||
// 实例化数据层 RepoSysUser 结构体
|
||||
@@ -572,11 +572,7 @@ func (r *RepoSysUser) CheckUniqueUser(sysUser sysUserModel.SysUser) string {
|
||||
log.Errorf("query err %v", err)
|
||||
}
|
||||
if len(results) > 0 {
|
||||
v, ok := results[0]["str"].(string)
|
||||
if ok {
|
||||
return v
|
||||
}
|
||||
return ""
|
||||
return fmt.Sprint(results[0]["str"])
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
@@ -4,8 +4,8 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
sysUserModel "ems.agt/features/sys_user/model"
|
||||
sysuserrole "ems.agt/features/sys_user_role"
|
||||
sysUserModel "be.ems/features/sys_user/model"
|
||||
sysuserrole "be.ems/features/sys_user_role"
|
||||
)
|
||||
|
||||
// 实例化服务层 ServiceSysUser 结构体
|
||||
|
||||
@@ -4,9 +4,9 @@ import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"ems.agt/lib/core/datasource"
|
||||
"ems.agt/lib/core/utils/parse"
|
||||
"ems.agt/lib/log"
|
||||
"be.ems/lib/core/datasource"
|
||||
"be.ems/lib/core/utils/parse"
|
||||
"be.ems/lib/log"
|
||||
)
|
||||
|
||||
// 实例化数据层 RepoSysUserRole 结构体
|
||||
|
||||
@@ -7,14 +7,14 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/core/conf"
|
||||
"ems.agt/lib/core/utils/ctx"
|
||||
"ems.agt/lib/core/vo/result"
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/restagent/config"
|
||||
"ems.agt/src/framework/cmd"
|
||||
"ems.agt/src/framework/utils/ssh"
|
||||
"be.ems/lib/core/conf"
|
||||
"be.ems/lib/core/utils/ctx"
|
||||
"be.ems/lib/core/vo/result"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/restagent/config"
|
||||
"be.ems/src/framework/utils/cmd"
|
||||
"be.ems/src/framework/utils/ssh"
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
@@ -12,12 +12,12 @@ import (
|
||||
"github.com/go-resty/resty/v2"
|
||||
"github.com/gorilla/mux"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/run"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/global"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/run"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
@@ -7,20 +7,20 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"ems.agt/features/udm_user/model"
|
||||
"ems.agt/features/udm_user/service"
|
||||
"ems.agt/lib/core/conf"
|
||||
mmlclient "ems.agt/lib/core/mml_client"
|
||||
"ems.agt/lib/core/utils/ctx"
|
||||
"ems.agt/lib/core/vo/result"
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/midware"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
"ems.agt/src/framework/middleware/collectlogs"
|
||||
"ems.agt/src/framework/utils/file"
|
||||
"ems.agt/src/framework/utils/ssh"
|
||||
"be.ems/features/udm_user/model"
|
||||
"be.ems/features/udm_user/service"
|
||||
"be.ems/lib/core/conf"
|
||||
mmlclient "be.ems/lib/core/mml_client"
|
||||
"be.ems/lib/core/utils/ctx"
|
||||
"be.ems/lib/core/vo/result"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/midware"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
"be.ems/src/framework/middleware/collectlogs"
|
||||
"be.ems/src/framework/utils/file"
|
||||
"be.ems/src/framework/utils/ssh"
|
||||
)
|
||||
|
||||
// UDM 用户信息接口添加到路由
|
||||
@@ -516,7 +516,7 @@ func (s *UdmUserApi) UdmAuthUserExport(w http.ResponseWriter, r *http.Request) {
|
||||
data = append(data, []string{v.Imsi, v.Ki, v.AlgoIndex, v.Amf, v.Opc})
|
||||
}
|
||||
// 输出到文件
|
||||
err := file.WriterCSVFile(data, filePath)
|
||||
err := file.WriterFileCSV(data, filePath)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -530,7 +530,7 @@ func (s *UdmUserApi) UdmAuthUserExport(w http.ResponseWriter, r *http.Request) {
|
||||
data = append(data, []string{v.Imsi, v.Ki, v.AlgoIndex, v.Amf, v.Opc})
|
||||
}
|
||||
// 输出到文件
|
||||
err = file.WriterTxtFile(data, filePath)
|
||||
err = file.WriterFileTXT(data, ",", filePath)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -597,12 +597,12 @@ func (s *UdmUserApi) UdmAuthUserImport(w http.ResponseWriter, r *http.Request) {
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
if strings.HasSuffix(fileHeader.Filename, ".csv") {
|
||||
data := file.ReadCSVFile(localPath)
|
||||
data := file.ReadFileCSV(localPath)
|
||||
neId = ""
|
||||
go s.authUser.InsertCSV(neId, data)
|
||||
}
|
||||
if strings.HasSuffix(fileHeader.Filename, ".txt") {
|
||||
data := file.ReadTxtFile(localPath)
|
||||
data := file.ReadFileTXT(",", localPath)
|
||||
neId = ""
|
||||
go s.authUser.InsertTxt(neId, data)
|
||||
}
|
||||
@@ -1116,7 +1116,7 @@ func (s *UdmUserApi) UdmSubUserExport(w http.ResponseWriter, r *http.Request) {
|
||||
data = append(data, []string{v.Imsi, v.Msisdn, v.Ambr, v.Nssai, v.Arfb, v.Sar, v.Rat, v.Cn, v.SmfSel, v.SmData, epsDat})
|
||||
}
|
||||
// 输出到文件
|
||||
err = file.WriterCSVFile(data, filePath)
|
||||
err = file.WriterFileCSV(data, filePath)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -1131,7 +1131,7 @@ func (s *UdmUserApi) UdmSubUserExport(w http.ResponseWriter, r *http.Request) {
|
||||
data = append(data, []string{v.Imsi, v.Msisdn, v.Ambr, v.Nssai, v.Arfb, v.Sar, v.Rat, v.Cn, v.SmfSel, v.SmData, epsDat})
|
||||
}
|
||||
// 输出到文件
|
||||
err = file.WriterTxtFile(data, filePath)
|
||||
err = file.WriterFileTXT(data, ",", filePath)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -1197,12 +1197,12 @@ func (s *UdmUserApi) UdmSubUserImport(w http.ResponseWriter, r *http.Request) {
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
if strings.HasSuffix(fileHeader.Filename, ".csv") {
|
||||
data := file.ReadCSVFile(localPath)
|
||||
data := file.ReadFileCSV(localPath)
|
||||
neId = ""
|
||||
go s.subUser.InsertCSV(neId, data)
|
||||
}
|
||||
if strings.HasSuffix(fileHeader.Filename, ".txt") {
|
||||
data := file.ReadTxtFile(localPath)
|
||||
data := file.ReadFileTXT(",", localPath)
|
||||
neId = ""
|
||||
go s.subUser.InsertTxt(neId, data)
|
||||
}
|
||||
|
||||
@@ -4,10 +4,10 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"ems.agt/features/udm_user/model"
|
||||
"ems.agt/lib/core/datasource"
|
||||
"ems.agt/lib/core/utils/parse"
|
||||
"ems.agt/lib/log"
|
||||
"be.ems/features/udm_user/model"
|
||||
"be.ems/lib/core/datasource"
|
||||
"be.ems/lib/core/utils/parse"
|
||||
"be.ems/lib/log"
|
||||
)
|
||||
|
||||
// 实例化数据层 RepoUdmAuthUser 结构体
|
||||
|
||||
@@ -5,10 +5,10 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"ems.agt/features/udm_user/model"
|
||||
"ems.agt/lib/core/datasource"
|
||||
"ems.agt/lib/core/utils/parse"
|
||||
"ems.agt/lib/log"
|
||||
"be.ems/features/udm_user/model"
|
||||
"be.ems/lib/core/datasource"
|
||||
"be.ems/lib/core/utils/parse"
|
||||
"be.ems/lib/log"
|
||||
)
|
||||
|
||||
// 实例化数据层 RepoUdmSubUser 结构体
|
||||
|
||||
@@ -3,8 +3,8 @@ package service
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"ems.agt/features/udm_user/model"
|
||||
"ems.agt/src/framework/redis"
|
||||
"be.ems/features/udm_user/model"
|
||||
"be.ems/src/framework/redis"
|
||||
)
|
||||
|
||||
// phoneImsiList 获取所有imsi
|
||||
|
||||
@@ -4,8 +4,8 @@ import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
"ems.agt/features/udm_user/model"
|
||||
"ems.agt/features/udm_user/repo"
|
||||
"be.ems/features/udm_user/model"
|
||||
"be.ems/features/udm_user/repo"
|
||||
)
|
||||
|
||||
// 实例化服务层 ServiceUdmAuthUser 结构体
|
||||
|
||||
@@ -5,8 +5,8 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"ems.agt/features/udm_user/model"
|
||||
"ems.agt/features/udm_user/repo"
|
||||
"be.ems/features/udm_user/model"
|
||||
"be.ems/features/udm_user/repo"
|
||||
)
|
||||
|
||||
// 实例化服务层 ServiceUdmSubUser 结构体
|
||||
|
||||
@@ -8,12 +8,12 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"ems.agt/lib/dborm"
|
||||
"ems.agt/lib/global"
|
||||
"ems.agt/lib/log"
|
||||
"ems.agt/lib/services"
|
||||
"ems.agt/restagent/config"
|
||||
tokenConst "ems.agt/src/framework/constants/token"
|
||||
"be.ems/lib/dborm"
|
||||
"be.ems/lib/global"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
"be.ems/restagent/config"
|
||||
tokenConst "be.ems/src/framework/constants/token"
|
||||
"github.com/go-resty/resty/v2"
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
@@ -354,6 +354,7 @@ func PostPCFUserInfo(w http.ResponseWriter, r *http.Request) {
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
client.SetTimeout(1 * time.Minute)
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{tokenConst.HEADER_KEY: r.Header.Get(tokenConst.HEADER_KEY)}).
|
||||
@@ -426,6 +427,7 @@ func PutPCFUserInfo(w http.ResponseWriter, r *http.Request) {
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
client.SetTimeout(1 * time.Minute)
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{tokenConst.HEADER_KEY: r.Header.Get(tokenConst.HEADER_KEY)}).
|
||||
@@ -504,9 +506,11 @@ func DeletePCFUserInfo(w http.ResponseWriter, r *http.Request) {
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
} else {
|
||||
var response services.MapResponse
|
||||
_ = json.Unmarshal(resp.Body(), &response)
|
||||
services.ResponseWithJson(w, resp.StatusCode(), response)
|
||||
w.WriteHeader(resp.StatusCode())
|
||||
w.Write(resp.Body())
|
||||
// var response services.MapResponse
|
||||
// _ = json.Unmarshal(resp.Body(), &response)
|
||||
// services.ResponseWithJson(w, resp.StatusCode(), response)
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -761,6 +765,7 @@ func GetUEInfoFileExportNF(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
log.Debug("requestURI2NF:", requestURI2NF)
|
||||
|
||||
client.SetTimeout(3 * time.Minute)
|
||||
resp, err := client.R().
|
||||
EnableTrace().
|
||||
SetHeaders(map[string]string{tokenConst.HEADER_KEY: r.Header.Get(tokenConst.HEADER_KEY)}).
|
||||
|
||||
Reference in New Issue
Block a user