From 1fa9442c1f4a40068b2d11e8ff9fc4c1b6ff430c Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 11 Dec 2024 16:15:13 +0800 Subject: [PATCH] =?UTF-8?q?merge:=20=E5=90=88=E5=B9=B6=E4=BB=A3=E7=A0=8120?= =?UTF-8?q?241211?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/extensions.json | 3 - .vscode/launch.json | 25 ++- .vscode/settings.json | 11 -- features/pm/kpi_c_report/controller.go | 20 +- features/pm/kpi_c_title/controller.go | 84 +++++++- features/pm/kpi_c_title/model.go | 5 + features/state/getstate.go | 95 +++++---- lib/core/conf/conf.go | 2 +- lib/eval/evaluate.go | 8 + lib/log/syslogger.go.bak | 89 +++++++++ restagent/makefile | 2 +- .../deb/iperf_2.0.13+dfsg1-1build1_amd64.deb | Bin 0 -> 76492 bytes .../iperf/rpm/iperf-2.1.6-2.el8.aarch64.rpm | Bin 0 -> 133076 bytes .../iperf/rpm/iperf3-3.6-6.ky10.aarch64.rpm | Bin 0 -> 76348 bytes src/framework/config/config.go | 2 +- .../config/config/config.default.yaml | 9 +- src/framework/datasource/datasource.go | 3 + src/framework/middleware/crypto_api.go | 10 + src/framework/middleware/pre_authorize.go | 17 ++ src/framework/redis/conn.go | 18 ++ src/framework/redis/redis.go | 111 +++++++++-- src/modules/common/controller/index.go | 6 +- src/modules/common/service/commont.impl.go | 3 +- .../network_data/controller/udm_auth.go | 9 +- .../network_data/controller/udm_sub.go | 16 +- .../network_data/model/cdr_event_ims.go | 4 +- .../network_data/repository/udm_auth.go | 146 +++----------- .../network_data/repository/udm_sub.go | 182 ++++-------------- src/modules/network_data/service/udm_auth.go | 14 +- src/modules/network_data/service/udm_sub.go | 26 ++- .../network_element/controller/ne_config.go | 34 ++-- .../network_element/controller/ne_host.go | 7 + .../network_element/repository/ne_host.go | 22 ++- .../network_element/repository/ne_info.go | 1 + .../service/ne_config_backup.go | 6 + .../network_element/service/ne_host.go | 7 + .../network_element/service/ne_info.go | 57 ++++-- .../network_element/service/ne_version.go | 41 +++- src/modules/tool/controller/iperf.go | 14 +- src/modules/tool/service/iperf.go | 101 +++++++--- src/modules/ws/controller/ws_redis.go | 69 +++++++ src/modules/ws/service/ws_receive.go | 80 +++++++- src/modules/ws/ws.go | 5 + 43 files changed, 885 insertions(+), 479 deletions(-) delete mode 100644 .vscode/extensions.json delete mode 100644 .vscode/settings.json create mode 100644 lib/log/syslogger.go.bak create mode 100644 src/assets/dependency/iperf/deb/iperf_2.0.13+dfsg1-1build1_amd64.deb create mode 100644 src/assets/dependency/iperf/rpm/iperf-2.1.6-2.el8.aarch64.rpm create mode 100644 src/assets/dependency/iperf/rpm/iperf3-3.6-6.ky10.aarch64.rpm create mode 100644 src/modules/ws/controller/ws_redis.go diff --git a/.vscode/extensions.json b/.vscode/extensions.json deleted file mode 100644 index 7e257db..0000000 --- a/.vscode/extensions.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "recommendations": [] -} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index 60a0819..50fad3c 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -18,7 +18,7 @@ "type": "go", "request": "launch", "mode": "debug", - "program": "d:/local.git/ems.agt/restagent/", + "program": "d:/omc.git/be.ems/restagent/", "console": "integratedTerminal" }, { @@ -26,16 +26,7 @@ "type": "go", "request": "launch", "mode": "debug", - "program": "d:/local.git/ems.agt/sshsvc/sshsvc.go", - "console": "integratedTerminal" - }, - { - "name": "debug loadpconf", - "type": "go", - "request": "launch", - "mode": "debug", - "program": "d:/local.git/ems.agt/tools/loadpconf", - "args": ["-p","../../config/param/upf_param_config.yaml"], + "program": "d:/omc.git/be.ems/sshsvc/sshsvc.go", "console": "integratedTerminal" }, { @@ -43,8 +34,16 @@ "type": "go", "request": "launch", "mode": "debug", - "program": "d:/local.git/ems.agt/crontask", + "program": "d:/omc.git/be.ems/crontask", "console": "integratedTerminal" - } + }, + { + "name": "debug encyaml", + "type": "go", + "request": "launch", + "mode": "debug", + "program": "d:/omc.git/be.ems/tools/encode", + "console": "integratedTerminal" + } ] } \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index d844704..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "go.toolsEnvVars": { - "GOARCH": "amd64", - "GOOS": "windows" - }, - "go.testEnvVars": { - "GOARCH": "wasm", - "GOOS": "js" - }, - "commentTranslate.hover.enabled": true -} \ No newline at end of file diff --git a/features/pm/kpi_c_report/controller.go b/features/pm/kpi_c_report/controller.go index 1b88013..03f6ae2 100644 --- a/features/pm/kpi_c_report/controller.go +++ b/features/pm/kpi_c_report/controller.go @@ -40,13 +40,14 @@ func (k *KpiCReport) Get(c *gin.Context) { return } if querys.StartTime != "" { - conditions = append(conditions, "created_at >= ?") + conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) >= ?") params = append(params, querys.StartTime) } if querys.EndTime != "" { - conditions = append(conditions, "created_at <= ?") + conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) <= ?") params = append(params, querys.EndTime) } + conditions = append(conditions, "kpi_values != 'null'") whereSql := "" if len(conditions) > 0 { @@ -106,13 +107,14 @@ func (k *KpiCReport) GetReport2FE(c *gin.Context) { return } if querys.StartTime != "" { - conditions = append(conditions, "created_at >= ?") + conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) >= ?") params = append(params, querys.StartTime) } if querys.EndTime != "" { - conditions = append(conditions, "created_at <= ?") + conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) <= ?") params = append(params, querys.EndTime) } + conditions = append(conditions, "kpi_values != 'null'") whereSql := "" if len(conditions) > 0 { @@ -185,13 +187,14 @@ func (k *KpiCReport) GetTotalList(c *gin.Context) { dbg := dborm.DefaultDB().Table(tableName) if querys.StartTime != "" { - conditions = append(conditions, "created_at >= ?") + conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) >= ?") params = append(params, querys.StartTime) } if querys.EndTime != "" { - conditions = append(conditions, "created_at <= ?") + conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) <= ?") params = append(params, querys.EndTime) } + conditions = append(conditions, "kpi_values != 'null'") whereSql := "" if len(conditions) > 0 { @@ -253,13 +256,14 @@ func (k *KpiCReport) Total(c *gin.Context) { dbg := dborm.DefaultDB().Table(tableName) if querys.StartTime != "" { - conditions = append(conditions, "created_at >= ?") + conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) >= ?") params = append(params, querys.StartTime) } if querys.EndTime != "" { - conditions = append(conditions, "created_at <= ?") + conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) <= ?") params = append(params, querys.EndTime) } + conditions = append(conditions, "kpi_values != 'null'") whereSql := "" if len(conditions) > 0 { diff --git a/features/pm/kpi_c_title/controller.go b/features/pm/kpi_c_title/controller.go index aa2912c..1aadbcd 100644 --- a/features/pm/kpi_c_title/controller.go +++ b/features/pm/kpi_c_title/controller.go @@ -3,17 +3,23 @@ package kpi_c_title import ( "fmt" "net/http" + "regexp" + "strconv" "strings" "be.ems/lib/dborm" + "be.ems/lib/log" "be.ems/lib/services" + "be.ems/src/framework/utils/ctx" "github.com/gin-gonic/gin" ) +// get customize kpi total and list func (k *KpiCTitle) GetToalList(c *gin.Context) { var titles []KpiCTitle var conditions []string var params []any + i18n := ctx.AcceptLanguage(c) var querys KpiCTitleQuery if err := c.ShouldBindQuery(&querys); err != nil { @@ -30,7 +36,10 @@ func (k *KpiCTitle) GetToalList(c *gin.Context) { if status := querys.Status; status != "" { conditions = append(conditions, "status = ?") params = append(params, status) + } else { + conditions = append(conditions, "status != 'Deleted'") } + whereSql := "" if len(conditions) > 0 { whereSql += strings.Join(conditions, " and ") @@ -62,6 +71,8 @@ func (k *KpiCTitle) GetToalList(c *gin.Context) { return } + k.expressionAlias(titles, i18n) + c.JSON(http.StatusOK, services.TotalDataResp(titles, total)) //c.JSON(http.StatusOK, titles) } @@ -70,6 +81,7 @@ func (k *KpiCTitle) Get(c *gin.Context) { var titles []KpiCTitle var conditions []string var params []any + i18n := ctx.AcceptLanguage(c) // construct condition to get if neType := c.Query("neType"); neType != "" { @@ -79,7 +91,10 @@ func (k *KpiCTitle) Get(c *gin.Context) { if status := c.Query("status"); status != "" { conditions = append(conditions, "status = ?") params = append(params, status) + } else { + conditions = append(conditions, "status != 'Deleted'") } + whereSql := "" if len(conditions) > 0 { whereSql += strings.Join(conditions, " and ") @@ -89,10 +104,38 @@ func (k *KpiCTitle) Get(c *gin.Context) { return } + k.expressionAlias(titles, i18n) + c.JSON(http.StatusOK, services.DataResp(titles)) //c.JSON(http.StatusOK, titles) } +// alias customized kpi expression with cn/en title +func (k *KpiCTitle) expressionAlias(titles []KpiCTitle, i18n string) { + var title *KpiCTitle + for i := 0; i < len(titles); i++ { + title = &titles[i] + title.ExprAlias = *title.Expression + re := regexp.MustCompile(`'([^']+)'`) + matches := re.FindAllStringSubmatch(title.ExprAlias, -1) + + for _, match := range matches { + var alias, sql string + if i18n == "zh" { + sql = fmt.Sprintf("SELECT cn_title FROM kpi_title WHERE kpi_id='%s'", match[1]) + } else { + sql = fmt.Sprintf("SELECT en_title FROM kpi_title WHERE kpi_id='%s'", match[1]) + } + err := dborm.XCoreDB().QueryRow(sql).Scan(&alias) + if err != nil { + log.Warn("Failed to QueryRow:", err) + continue + } + title.ExprAlias = regexp.MustCompile(match[1]).ReplaceAllString(title.ExprAlias, alias) + } + } +} + func (k *KpiCTitle) Total(c *gin.Context) { var conditions []string var params []any @@ -105,7 +148,10 @@ func (k *KpiCTitle) Total(c *gin.Context) { if status := c.Query("status"); status != "" { conditions = append(conditions, "status = ?") params = append(params, status) + } else { + conditions = append(conditions, "status != 'Deleted'") } + whereSql := "" if len(conditions) > 0 { whereSql += strings.Join(conditions, " and ") @@ -120,17 +166,49 @@ func (k *KpiCTitle) Total(c *gin.Context) { } func (k *KpiCTitle) Post(c *gin.Context) { - var title KpiCTitle + var title, res KpiCTitle if err := c.ShouldBindJSON(&title); err != nil { c.JSON(http.StatusOK, services.ErrResp(err.Error())) return } + userName := ctx.LoginUserToUserName(c) + title.CreatedBy = &userName result := dborm.DefaultDB().Where("ne_type=? and (kpi_id=? or title=?)", title.NeType, title.KpiID, title.Title).First(&title) if result.RowsAffected > 0 { c.JSON(http.StatusOK, services.ErrResp("custom indicator already exist")) return } + + // Regexp match like AMF.C.01 + kpiIDRegexp := "^" + *title.NeType + "\\.C\\.[0-9]{2}$" + ret := dborm.DefaultDB().Table("kpi_c_title"). + Where("ne_type=? and kpi_id REGEXP ? ORDER BY kpi_id DESC LIMIT 1", title.NeType, kpiIDRegexp).Scan(&res) + if err := ret.Error; err != nil { + c.JSON(http.StatusOK, services.ErrResp(err.Error())) + return + } + newKpiID := *title.NeType + ".C" + ".01" + if ret.RowsAffected != 0 { + maxKpiID := *res.KpiID + prefix := maxKpiID[:len(maxKpiID)-2] + suffix := maxKpiID[len(maxKpiID)-2:] + suffixInt, err := strconv.Atoi(suffix) + if err != nil { + c.JSON(http.StatusOK, services.ErrResp(err.Error())) + return + } + if suffixInt >= MAX_KPI_C_ID { + err := fmt.Errorf("exceed the max customized KPI ID") + c.JSON(http.StatusOK, services.ErrResp(err.Error())) + return + } + + suffixInt++ + newSuffix := fmt.Sprintf("%02d", suffixInt) + newKpiID = prefix + newSuffix + } + title.KpiID = &newKpiID if err := dborm.DefaultDB().Create(&title).Error; err != nil { c.JSON(http.StatusOK, services.ErrResp(err.Error())) return @@ -178,8 +256,8 @@ func (k *KpiCTitle) Put(c *gin.Context) { func (k *KpiCTitle) Delete(c *gin.Context) { id := c.Param("id") - if err := dborm.DefaultDB().Delete(&KpiCTitle{}, id).Error; err != nil { - c.JSON(http.StatusOK, services.ErrResp("custom indicator not found")) + if err := dborm.DefaultDB().Table(k.TableName()).Where("id=?", id).Update("status", "Deleted").Error; err != nil { + c.JSON(http.StatusOK, services.ErrResp(err.Error())) return } diff --git a/features/pm/kpi_c_title/model.go b/features/pm/kpi_c_title/model.go index 77bb942..cdc2b5c 100644 --- a/features/pm/kpi_c_title/model.go +++ b/features/pm/kpi_c_title/model.go @@ -2,12 +2,17 @@ package kpi_c_title import "time" +const ( + MAX_KPI_C_ID = 99 +) + type KpiCTitle struct { ID int `gorm:"column:id;primary_key;auto_increment" json:"id"` NeType *string `gorm:"column:ne_type;default:NULL," json:"neType,omitempty"` KpiID *string `gorm:"column:kpi_id;default:NULL," json:"kpiId,omitempty"` Title *string `gorm:"column:title;default:NULL," json:"title,omitempty"` Expression *string `gorm:"column:expression;default:NULL," json:"expression,omitempty"` + ExprAlias string `gorm:"-" json:"exprAlias"` Status string `gorm:"column:status;default:'Active'" json:"status"` Unit *string `gorm:"column:unit" json:"unit,omitempty"` Description *string `gorm:"column:description;default:NULL," json:"description,omitempty"` diff --git a/features/state/getstate.go b/features/state/getstate.go index 9a79e50..61cb781 100644 --- a/features/state/getstate.go +++ b/features/state/getstate.go @@ -762,14 +762,14 @@ func GetStateFromNF(w http.ResponseWriter, r *http.Request) { SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). Get(requestURI2NF) if err != nil { - log.Error("Get system state from NF is failed:", err) + log.Error("Fail to get state:", err) + errorMessage := services.ErrorMessage{ ErrorCode: "1", ErrorInfo: "Internal server error, NF connnect refused", } - result["error"] = errorMessage - SN, Version, _ := dborm.XormGetNEStateInfo(ne.NeType, ne.NeId) - result["serialNum"] = SN - result["version"] = Version + systemState := make(map[string]interface{}) + systemState["error"] = errorMessage + result["systemState"] = systemState } else { systemState := make(map[string]interface{}) _ = json.Unmarshal(resp.Body(), &systemState) @@ -786,49 +786,62 @@ func GetStateFromNF(w http.ResponseWriter, r *http.Request) { response.Data = data services.ResponseWithJson(w, http.StatusOK, response) return - } - - if neType == "omc" { + } else if neType == "omc" { emsState := GetEMSState("127.0.0.1") services.ResponseWithJson(w, http.StatusOK, emsState) return } - var neList []dborm.NeInfo - err := dborm.XormGetNeInfoByNeType(neType, &neList) - if err != nil { - log.Error("Failed to dborm.XormGetNeInfoByNeType:", err) - services.ResponseInternalServerError500ProcessError(w, err) - return - } - data := make([]map[string]interface{}, 0) - for _, ne := range neList { - hostUri := fmt.Sprintf("http://%s:%v", ne.Ip, ne.Port) - requestURI2NF := fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", - hostUri, strings.ToLower(ne.NeType)) - log.Debug("requestURI2NF:", requestURI2NF) + // only support omc and all elementType + err := fmt.Errorf("only support omc or all elementTypeValue") + log.Error("Fail to get state:", err) + services.ResponseInternalServerError500ProcessError(w, err) - resp, err := client.R(). - EnableTrace(). - 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("Get system state from NF is failed:", err) - } else { - systemState := make(map[string]interface{}) - _ = json.Unmarshal(resp.Body(), &systemState) - data = append(data, systemState) - } - } + // var neList []dborm.NeInfo + // err := dborm.XormGetNeInfoByNeType(neType, &neList) + // if err != nil { + // log.Error("Failed to dborm.XormGetNeInfoByNeType:", err) + // services.ResponseInternalServerError500ProcessError(w, err) + // return + // } + // var omcList []dborm.NeInfo + // err = dborm.XormGetNeInfoByNeType("omc", &omcList) + // if err != nil { + // log.Error("Failed to omc ne list:", err) + // services.ResponseInternalServerError500ProcessError(w, err) + // return + // } + // for i, ne := range neList { - if len(data) == 1 { - services.ResponseWithJson(w, http.StatusOK, data[0]) - return - } - var response Response - response.Data = data - services.ResponseWithJson(w, http.StatusOK, response) + // } + // data := make([]map[string]interface{}, 0) + // for _, ne := range neList { + // hostUri := fmt.Sprintf("http://%s:%v", ne.Ip, ne.Port) + // requestURI2NF := fmt.Sprintf("%s/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", + // hostUri, strings.ToLower(ne.NeType)) + // log.Debug("requestURI2NF:", requestURI2NF) + + // resp, err := client.R(). + // EnableTrace(). + // 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("Get system state from NF is failed:", err) + // } else { + // systemState := make(map[string]interface{}) + // _ = json.Unmarshal(resp.Body(), &systemState) + // data = append(data, systemState) + // } + // } + + // if len(data) == 1 { + // services.ResponseWithJson(w, http.StatusOK, data[0]) + // return + // } + // var response Response + // response.Data = data + // services.ResponseWithJson(w, http.StatusOK, response) } // GetStateFromNF 旧函数 diff --git a/lib/core/conf/conf.go b/lib/core/conf/conf.go index c5e2586..7e22479 100644 --- a/lib/core/conf/conf.go +++ b/lib/core/conf/conf.go @@ -25,7 +25,7 @@ func InitConfig(configFile string) { // Get 获取配置信息 // -// Get("framework.name") +// Get("server.port") func Get(key string) any { return v.Get(key) } diff --git a/lib/eval/evaluate.go b/lib/eval/evaluate.go index d0ff37e..664d717 100644 --- a/lib/eval/evaluate.go +++ b/lib/eval/evaluate.go @@ -5,6 +5,7 @@ import ( "go/ast" "go/parser" "go/token" + "math" "regexp" "strconv" "strings" @@ -29,6 +30,9 @@ func CalcExpr(expr string, paramValues map[string]any) (float64, error) { // expression to evaluate result, err := evalExpr(expr) + if math.IsNaN(result) { + return 0.0, err + } return result, err } @@ -87,6 +91,10 @@ func evalNode(node ast.Node) (float64, error) { case token.MUL: result = left * right case token.QUO: + if right == 0 { + return math.NaN(), fmt.Errorf("divisor cannot be zero") + } + result = left / right } case *ast.BasicLit: diff --git a/lib/log/syslogger.go.bak b/lib/log/syslogger.go.bak new file mode 100644 index 0000000..e599020 --- /dev/null +++ b/lib/log/syslogger.go.bak @@ -0,0 +1,89 @@ +//go:build !windows && !nacl && !plan9 +// +build !windows,!nacl,!plan9 + +package log + +import ( + "fmt" + "log/syslog" +) + +var _ Logger = &SyslogLogger{} + +// SyslogLogger will be depricated +type SyslogLogger struct { + w *syslog.Writer +} + +// NewSyslogLogger implements Logger +func NewSyslogLogger(w *syslog.Writer) *SyslogLogger { + return &SyslogLogger{w: w} +} + +// Trace log content as Trace +func (s *SyslogLogger) Trace(v ...interface{}) { + _ = s.w.Trace(fmt.Sprint(v...)) +} + +// Tracef log content as Trace and format +func (s *SyslogLogger) Tracef(format string, v ...interface{}) { + _ = s.w.Trace(fmt.Sprintf(format, v...)) +} + +// Debug log content as Debug +func (s *SyslogLogger) Debug(v ...interface{}) { + _ = s.w.Debug(fmt.Sprint(v...)) +} + +// Debugf log content as Debug and format +func (s *SyslogLogger) Debugf(format string, v ...interface{}) { + _ = s.w.Debug(fmt.Sprintf(format, v...)) +} + +// Error log content as Error +func (s *SyslogLogger) Error(v ...interface{}) { + _ = s.w.Err(fmt.Sprint(v...)) +} + +// Errorf log content as Errorf and format +func (s *SyslogLogger) Errorf(format string, v ...interface{}) { + _ = s.w.Err(fmt.Sprintf(format, v...)) +} + +// Info log content as Info +func (s *SyslogLogger) Info(v ...interface{}) { + _ = s.w.Info(fmt.Sprint(v...)) +} + +// Infof log content as Infof and format +func (s *SyslogLogger) Infof(format string, v ...interface{}) { + _ = s.w.Info(fmt.Sprintf(format, v...)) +} + +// Warn log content as Warn +func (s *SyslogLogger) Warn(v ...interface{}) { + _ = s.w.Warn(fmt.Sprint(v...)) +} + +// Warnf log content as Warnf and format +func (s *SyslogLogger) Warnf(format string, v ...interface{}) { + _ = s.w.Warn(fmt.Sprintf(format, v...)) +} + +// Fatal log content as Fatal +func (s *SyslogLogger) Fatal(v ...interface{}) { + _ = s.w.Fatal(fmt.Sprint(v...)) +} + +// Fatalf log content as Fatalf and format +func (s *SyslogLogger) Fatalf(format string, v ...interface{}) { + _ = s.w.Fatal(fmt.Sprintf(format, v...)) +} + +// Level shows log level +func (s *SyslogLogger) Level() LogLevel { + return LOG_NODEF +} + +// SetLevel always return error, as current log/syslog package doesn't allow to set priority level after syslog.Writer created +func (s *SyslogLogger) SetLevel(l LogLevel) {} diff --git a/restagent/makefile b/restagent/makefile index a8c2f1b..b61249b 100644 --- a/restagent/makefile +++ b/restagent/makefile @@ -1,7 +1,7 @@ # Makefile for rest agent project PROJECT = OMC -VERSION = 2.2410.4 +VERSION = 2.2412.1 PLATFORM = amd64 ARMPLATFORM = aarch64 BUILDDIR = ../../build diff --git a/src/assets/dependency/iperf/deb/iperf_2.0.13+dfsg1-1build1_amd64.deb b/src/assets/dependency/iperf/deb/iperf_2.0.13+dfsg1-1build1_amd64.deb new file mode 100644 index 0000000000000000000000000000000000000000..323ae584e25836b48e96189ba31566993acc6912 GIT binary patch literal 76492 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%0D&T{`8h>A&3R8R-7O~S1%i=^!- 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%0D-o0fIp*nN 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 a0hyNvxc(Fg=Ve^B>E9dz000003RzmHLZ{XM literal 0 HcmV?d00001 diff --git a/src/assets/dependency/iperf/rpm/iperf3-3.6-6.ky10.aarch64.rpm b/src/assets/dependency/iperf/rpm/iperf3-3.6-6.ky10.aarch64.rpm new file mode 100644 index 0000000000000000000000000000000000000000..b5d5a4a558a3a6685b6678a3f171ab2589710be2 GIT binary patch literal 76348 zcmeFWcQl>N*FSvp7LjN{l!Itd4+n?nooG>_m*bS^MDM+m=q+jxEkub<1kp>>AfgjN zh%TbUd%5F&zTfZjJnOgCZ@uqY??3mPHP@cco;@>r_LO~H`)t4d@dXP6Br+>UloMKj zTYyK1TZqTT6T)}J{l7~XAe{f+;CcBv#x;)s1iF<3lqG zkcoi;?w>LUXp3?C8k=1SfIwL50L2E1xz~6Tpg?~Z1waPcV{QGxm@@zc`p4PbH?3Yub~!khD9i~ch>+mc z-yDs0d{9l&p~Epne**(+|3xguyA9Wg%lD7;i+)`)=>-op2|sk|%Pd+lwtu1g=68(S zi{m~G@$ZITu$Gja66SbLS-of720DErZu3u-Cu;lNJm7kjSNh!SR4U0*%ZWm;8uGG> zYNWO5M<~VehlWjBA&&!0_oP8Z3X`S%go|f1&rwFA^%w7JBd zh9J6Pm}{@muv&YEUNVP0JcVgWjsDpe$d=Zr?n!b9o1OeEapG7g*4Kp<8B|TrF^;ot zVeZCQNjdc=&njMGEyR~H4@*psQN6a(mv#9*RIvB558g0J9ZjoP=WtW7VMjl$L-s)* z_Re8j@$vH^1qIMB2pTOSf)IuygoFh6MflK2xCH`<78JJNgY!cyU{DZ}PXs9<022@p zu;7CVh(Lspf@mQD2vP_wA|N1$Mxs#yP?(SaiVrP}=0gftK;a_7!Z1O!02<0?Ap}JM zD@IlDf4@fM_whmH0?*?^Ioo%kdQl&z&u~-QFAmkLwc)r6Zwb`yG+yWx7;UJfnB2;q zT>Aa9fj%_9Fa&pju)+P;rjHGcUwS9?*n8Ot!)ZNH4uRrQF;?rOp1VZhc1XVsNEJP)>|^&%G}Z4DH&3Y;XKY@)s!|*6-<^# z%SXYg^||;>e8>uIPvk`EVisc^*-No6g!H$^)t>8!Vka10hHnmAYG%2~f9|-`oP9K! ze-_tusLI<{>qFK(R4E%juDc%d9^DMZL8xrpu5d(pUfcOPS639TDgYXcbS29Q- z;{*9B{T℘wB)>YrFx_D-6V4{;I!QscU?3jZLrd?`wQz2VgwxD_yVju>~k#7wjutfzTF4%r(B6>lMzt#)JU9k}tc) zM1Ls8;5EMShhkmX=c>Oey8-f8eAk%dx?b}dU(Fkk!}7SsSM2~DuyO%0Kmon5ss7YsUyTc7Z0bMt*kafC%8o!g9OG-u4p5+foG5@^^$!Cm&_7Pn zH5LKrm3-PY7QM!8*H{stSMt+;_}EI<_~aTZ|Dm{4*I55gJuVoaSNayg*^YTW>Ra2o*%=#6dhhvKmT^h*CLIe?GPe2szN&tLdzo>%qgYs`6# zZLcx+HFg0gFh2g(Jb-bqU9Yj_HFo<$@go2VoFi=aKlOyr>w1rCtaFV$uklsCzX@zowTiBxh)j6SqJy`j_26g5EE4zT5 zT^$`AoLrp2F0S@g_D`<5af3TqIk-B59pO%JJCqB`$r0dt55mEY7v&6?i}x?9f`GmN zc{tn&VJQSGCk8$ku=#Be*3GN61`;hL2n1L9Q|6%#+XF zNInRfPgu|bg+lN{;T8fYC<@7k5CDNJ5EddRK_MXvxR3=u91Rl^7J$Lg{1B+11ym3! zECfVCEd&HaEcjs}NI292Dr_N)21Z0eAt)e_3Ik3K3JOGC1yKA*6ci2@;X??+_~HCW zA(#jn2%jS10>UEvFqjYo2)FX_LlOLF3t^ZLzYqcq2nqA?2?>Mv1^JLdd~gdvsDOot z5L^fW0d$4~p;|s9N*Dp>;|IdCa5U5cf#5>{;a#|}08+>Tg%l708lr{Jz~L0+M?m>S zAW)<*Qdk6y5=4mr6Gj4IUw(+7pb%07%_n4m78VqOBSav4XcQkz5DpbW@&hv!5I_lv z0PAFHW%1Yg@i;s1@Lm1>wFdu7>B_HN<*O9n}9J zz%TzF)1S822b}${UC1p2<@nF(v2(BsK`pFYIR4TfxF@85!vD;`#X|V+`AX(mH%pYQ zBghuX{nuvazTWItri1*e@Bh78QB_$+){LJABK%)U0H#M=wH5lew*STY-{t?cRR7V& z?!R>d*bL~LUDmj3{t*jWkg zhSGFGp{+drtI2h>va`Myz;m%hvMZ|Vnkh+ZD{)+1ssH(xl>o4ppxh7;lt+k%?=O1w z6y)Ito&Xaf$OBN|1!`or%@gk6VPy{%1E?8L;NycxSvmlBtgHRiB_jdm2LIJNh#Rb6 zt`GddyBLn=#l@Ge|7yp&6%0LeI z_xb#fsR1&7kM(z-|JCpHKKzeU^`D#YuQPTnrX?>erzX#1hXiTKtIA7j%bTfd=*VmT z?Wa_gW#!ei1hwQvqAu?;t2+( zZi7N{fvxO;R|4Rq15YsTm1X|dD~Jm$bM*qCEN29a2r&^ChVUVf0#HE#2visa`7H~m0A0Iyq2{=!f2t*JjfDjZBLh+$2fWIkWNVqTr1`!s5{F_EdD`5Ko z+sPB8h0=C$az(fR?{7#Ql!pr#4P1MGjkRT!mBB6m1N3i2T^$8(7+BZd3gLi6{i*%; z6~*~?@Neb6`B!(z|43TEeFJ11AmaiV3&@1P#|kDuukuyh-+YX#I-mo5R~Ixl41@+8 zzXbv%fUrPYK!Ei?0R;pCjTT10`1u8pBFL*r3nBz9EFf?ZBovK?3nGxfivS;tPZ$A3 zS^TBS)qVEYH|yo)xfD>obs_AfZwQRDbavw4izzhClMSJ%=`E3)TMuo;(o@44*8jNYk7O`_={44ik;7M z+bPq6&pIYmRcB^rp9gvvm~VLU=-9g&>nJGFuHYSi_jon%B-dLjVHodeosS1hAW~YCnZEs}B?4{dA_hGDJ$rY0 zM4Ba%*3F<8&3D^@B8rzRJLw}vVDG?+p12g(Nmgv#XS{c{bvhi);jbIB12}NRglP;9 zF0%+5W}>>rmu&3RcLQIQ&O+_Vmngg9T^VlpTs(_r(W8LV(y;uX>rdiY&i(bJfuKf* zAVeTu0sk>J#-|0Ro&%AiTlrJ7UmnV_7FC;gc5uIeT z=xH9?ZVl^?^;%s{cfWcSC#u1o)n-mV$&-+kBeG$150Z{qOsmwrK*uC6CdSb~{`1~B zXKyQ2i8@70R^8`p(l8xA5hD=9>g62ZCN!VMSuqL;6Y?lWgYq?;}ub zCjHMn>)@~0nKEwkk>5Q=$%M>oF=uwoWb^X}@4d=?>u*$wX!O^ibF%agX%XZ;H!uj}b-p(U^Pfcb{aIuJi{vo?ugSehGJsO6#7d!_!S-8KBqVoY`Iy ziaXr0vXp#EmH`P8`H}FN?cUv|UkG_Y<_~N`!^t~tTt;s(T*x-_CPszaQ5nq`YFe|` z{x-_t0lvXV^qrBHJCA-v#VvL)Bz*GAF(q@xxv)+fFMgxzeaf;bJVfrwLR&O5xPt@+i81?hiCFOs2U^i5zoq*M=Gy)-GxB`P^inHxJ#5ZQO;MCFxYPkktF z*kfb78%c6Iv}4rRYUUDlY4*pupwh4_^?QzE@^RzKr852R2X9f`z4_c0+=29`6J+U~ zUqm_r9;>w4kt-_GBC;_DS2rEo=CQ-kB6(*E;%Z35{Xqxt#dc z1$^eHtpR_pdv+=FwSTsDyae-OO^g%6L+uWzBK|;BkE4)is;UL-u$Y~WsquG~`(lu5 z^SH;z`@?~(KDAzH+%M~Otd|}nu(=mg3rb^?ghHE?Nu{&lGf+~Npz!kgPHBIy_#@+# zdjZpKm9_Yd#t?(v6wx86sts?s2s=p*_A!Fw~5y9j~0`^`KuN+pl!$!NwZh8uQn z9o^D*dV98pM4I~cK&j#iMazYF9$PPzby)-Qjqy zQ8kx8qat@m<-sWVJt5?@2cJlApG;d8i14_)Dg+BW3AV z0-axKeFbf~=&W$tO*uLB3ceK3ubB z<9B`%E6%uOXiGUg6>)~r1KT^dC9q#rRB#94f_}?OIU`-_a#`lf??+R_{3J7Bu|U14 zE@LBM@r%3bo&|x&y*EBKS{*i*)?LT(K)tVyn^XQTywy87qTX)aCd&3`Vp;)B zFf1$(v(EL%1xlQ9Y?Ccz)6N98BxkV62)8{*e#BHJ73!5>vk_THA^C$OvV1DT9}oXU z1LIo)?42Bkfw8yq`3$s$<)P(Po&<8zZ<~JQJ+0Zt*jkKOe=vPQ-ihLRKzqP+)7ar< zRp9>X?%gRF&kgh~v(SVT^Cmu8J*$aO}Rb52oKkF=n+l`p4KzV)yn~o*`}Z z$OAFE9>iSAVCVXziqgCljxg6)dnR;Hoqa-Vkw}d{-=tWgwPxHu75rFxl;fMmH~fO7 zV`+}|G-E7=%pg*F+uVu;+)sIx`}T>{rqWfMu$5n>#7tr`^+H50-Ycl*6Vw72hD2eF zrJ=+fhKY8EK2MrW=1XgC;swZnZTEN<<0=N%ZnWV9*_8iIQKT|rqL6$-!rE2q{O$b* zL+V$7_P=*~ZOcGy<65O{1T00nemgJ%eQjQO@&#-4?4Ibxx76nT?Sug(dMYnE5A7ok z@M^kl-*4GZpDP*5WjDdn-cT)=H52_|=yqez4NoAl6%_4Cwz<7Fz+5zt-;`6E9ZhvI z1d`87W-Q-h!46+~a(;0lGMhN_J1Q*QSXDUnz?&U*;suG|qO|FKuZ}-%TkIF>ok-bHUr6-BPp$z0TnCju^&*tn zGZwm|^}CMuw;xprY~JY66Z$Zh8of6xO|etkScx1gSqvT^F|$*5%x9$$lxoL{WR5DQ zryI>m$LL~gJEuvgpRR$uKfUI1t$-%J5?LhcR zyj^6)c3@Sl%-aUPG3jYFy5o--)lQc8Is(O}@bfb*eM{~60$;~Yf;}_OWZ#~czeSZ9 zFZ@dFLv?&u)A!UiQZ=h>JxErfPS`$rSvaY($7$5yrc$CeMBYDZtaM{K?Zu-ze5!Pl z1mZ{X%^)sf-#)5L_hmE&K z$D_(hi~IT1TUt+PkEOCUC!9|{awa65!6`B4~>|>DwC$UOyk&7*qB= zCu|-;mn1Bvyh_|vWMX?qDy}mij~nbK+H*D%D9xK-vO5ie_qQ>m@?k?WdoY- zch(t2qWwm%nfQJmg_d4=WsuIFCGqOzzEoT{*6sS<&|rx+Js}^Nc_Fd%Ak&S#?6vXF zw_&oc4SRkae0d{u@|qIM#LDG)V(6o>ldzqPVui4!-v$TpA-1DmELaJU?(Y(ipCSjg$yIkgOHuA?2IyS48ONVnl_=Ujyu_3s zRzJgcz`)iQ8>{lJcYwUXAgQq*td4`nF5u(7!J-`n(ugdpQx+_t4e9Rk2$%yZk3iYW|53eAzbZ; zco@e=LL%?UTQmc&JV^qin+Z~n<^`7BN|se%6G@xTbFgBm3#4`)-vp;CbYYOu!Q1e( z8KY>c_Fxh&hWo{~F5&(36VV7EMTy_srTpSWEaXK{{Ze z_PZwQyK%sR+T@2Ah>H2XQpoJBcbbQkU%7g@pV^OF45uai&UV%n&rX|vj%Vd(PQ33; zrYZVSAGY7cie4iGlRt{WV>vcSY}3Py7D;y>LQ{u^_Hly(dIl&tZpPm7L0t- zEHo`5wfCA@5)O2q~& zu+vvWeXoZo6)n-HGBn8+q*hMnyR(1df*${+jjORrVy)}nN7YV6lqFz5@rz|j+bBRLYXU zo``(2ucu7;7Rkh_m(v@G8f<%Mo^9B7R9+IrZodcKT%;jDt8Oj_ez=wM!oI$kCMvH5 z)%kr76%hlqAC@Rp!@zY+JL7q`+Bmd`#}5zvEHYBu?Wn~|MZ|LPnEj#tbWnB80|Qai z6XI1SvuVbd;JFfvtl9en%K1-i$(a==qMs9KxHnJW@(a7DW-(ZB>-2`enQ(>f_azjv zrc95naCUUu4=94oeu3wve7)P3>5C_e^b~Jvkddtn#QvqgkzO!m^o0B|^#DjF`Y3wc zuA@d)&G9qevErD?86rbcx0&z+RiFDWH87VdIf zAcl?)6~YHy%w|RgN~(V4a9NTPVKSQMrMD@3n#F5kd!baxM(a5Pq3=TFhIf*SKfj;) zcFPF=qMIY|M*=Hp4%r{B+YrJ}mMTF$mb5sr73C*!O?i(uL z|L|UZoIGbVLC}B@;eQ10=0^>2@_X+!=b89++$_elo$wJw-?B6={kgNA#Fu_&`)1Xw z_$YQimVDwpA)WA*3rigO9KTTmBO7P@Q7=u;pNKw=3C)Y{X&N7GX7!CG!O>3&vrm@} zy`tj7%M+rK6a1@tVz7O3et{sd`m}OCLWy&GzGpp;=C2&-IJUP6qZVcoos>hn zBb+z<)igUSydSi`J3m;F!xx=+{q*JJhRdW)@t#2pDNes@@^{uM_Arr1lx&`A+s3Dh zK^Vp}pz1ZkS($o7XO0hi~vv zQbcksJZfMJKQtW7)$Y+wpY-7DMWtk&p|O#+)c@pSd5L4|bMVKU1^~RuU+gb$fq4#P%)FT`1aC`%(Y4f?Rhu z3}HXi$>D;`A5LPp*3X9{sG{u8Lb`g-Yw3EHp{|96ui^yS>y_Q!yu@ z7k-NYJt;ngjuutLe^ODbPHg((S@xA=m1_UtYprD1nIqQFgDeuddgsE}Pb0O<93JmS z$16Q`c6nfkPpL!Nx#o}Q4z!G%*D??XU=M3?Qn5D)&vYn%`QNe*vlT-ovn-LwN^^5? z*n;e+ar2~|gVdwG`LewN-_Q`_y4}0XJ-?5_ak?6$bV)vbtEN%pKHeoUy7FvK{!==y<#5BV@gs;OG#)(1^~iR(I{E z59}h%^2k3ax%k~6h5`S9o6xKM9n1BxomLO&BE|^oKu|~zA#IBJ5BF8&fhyRvT>jmc z)i=(FeoIng@fv((moPhd&2ylU@)IWGz#`SmgG;~l=_!jz;nzv?`iXZ%^PKE2GweR$ zS-p-k8=5{!bm+pws@n@DUA6h;gwhBUOMxYN_?n&lJv{6++_M-;#Z7oDr6} z9uu=dg+xh8zwK~>RAbZ4_Bx`7)n^>egm%NIqLc-i?FfiPylwcR#CkIxJY^~r@@|@( zcE-zXH;^FGWxSnqJHgWLqjcivo!No4P;%HzxQn-54@FZ3;(hayxe!g9nYAM zCQdK2btF`YLVmJ%|7rK{k54dV>BmIo*la1c9^5R9z5TwY;A2(mvxi2u|RCRdZ*-igdH$Mx7omGxUBG!Q?*Q<8+Eed=9|_A_mIZR9E~FECUL47iwe%s=6; zhOmtdS7LkT?BO*SO%>^S^E|UB@%AAb&u7>Bs^w|ay@TG?QB$= zTvA!*@lfRQ`%sC}STlN~nV6%oR{mc}%9Qi-Z<|>4`BO?lBK(8n6&VU0+uuqpzBguW zuCQo*@xlo*BvD|^UlvOt(W`4J^sf2Q)K19CsK`F_{IQ~JsVMBQ^m~`7TYpl#PHeyn zJNZxk&@WuCeac%#j`ipldeSklzH@Kwy>H96W;4ZHQmTLLh$o1`@OB6>F9HutmcJF4 zAYfXIjFY3R%D5v}%A}xbEcR*iv=d2Rp%ZpirgtI`%Fei6rcaVJX2?*kbZo$7c_47V z=SdHF$5T?V95?;syUfIwE`uZ^N{s?_jK>82l?>hP?=^I8Xg&PNB+@yVXRHZHY7nbp z{gK8Cu@bu{eOX_xInVFZRPUbVzoO@)?-BT_0v4*?jrlf}g&w0mBHToKS=Z+~pJ`Vy zQ}(#D%$eos;KGArJMT%jJy1I6OWEXvWM*H$L-HIU3zx{lIsoDtZy&+7;h6+FFtvxx;=iGOxihCO_0hE zuJJK8_ffyk?CS>ho>u-SOD`jtybozSVZWUNNKOcK7(KCv%3>u1Fqys}EsviR@u)*m zPt9b#G8uaBY}wH}THf5Dn8wElAKChvi}#S2H1|SYCJ-I?Y43M|m6g2pP*0jGISn_> z=MN;~`cZ1r56@VKH=!QMggvQ*#F)kKkbR2H12-IM=QvD16WgRkaycy_p@grsr7b** zyZQ-VpFVNS!wRe$6IpUsCjG9!YJaW}zP%4dXTbfKMrV{D*Btqm`h zWkvMuZ@zo`q<7{`pS)R_6LsCsm&uXeUQVO*_R0`qdf`lLUHw9^>@pTb}m!(L@s)_t;V zf4_8+XpYT>AgU<|lAfYU6@9B=m5t*wYJKZgxhSX9@Fxp3X}BSxdUN&$%yxy}a!yXA ztkP!=BG2w}Jl*L@q%QuVR31{5F6ESPM}z86yoLXGK}5v8V$eK;K2hdYkiAq1w3ijot4+mOvau(!Z{VjJ^l(C-HtBTef>g*&JLQ8KSCkh@>FMmxMKU! zC#-rw#SpyAc+y$<$Dy3Q#BLhq>u9>Z>LY52;a7$erN+5w&|9tB?%JD;hrx%nRFm60 zYe8NnFPe?-F+_wV&hSx(KPok{VrD$oyCzb@EV)NwxnW7Y#(Nb{yM4j5 z_OU~Cnz4j)pQ^-p3?I%5auQWQ?l?srZG!!BG!2?|dhu;|KL*y-X{9GLE{Qfh{$*rW zoW#Ovh#K8sV{Uyi@yd6c*FMLGRdV-cUEQS5>lm5rc~R|6lWwd{&M z=Amr%rdd`ZzKn3mPBD(+cXyOxwkU3>(8;of&qAKpf3an*67o8~+};KJBgZEg z)VCdD6{0ijU2bt{v&)Q-3IgvCa3?VIw8Vg9*pn>aeI?m=!8onhTraT%^$uRI6zs3=Xe zoHTNtwlbdYzE9>T|BMS}UCL^6UmBhmJdvVtHuLt2G2^ce_sHGh;{>+Hogz*gU679f zA7jCCjmt^+Lr3Sp7l6Y4lT^BaHY=7}{BPJiGnb@GhCX-1hFmJ;iC{#qRLkS&wZbQY z)cwZOlpoDeJ>!3>aIqw~0F@X~ijy}u_t4FIuSWeF?|UHMJkQ&%XJsa=4v{Im)GM)$ z^6?tKstQ>6B=J`kW7fYECpPbZ@$6l@=NhGO_bdXJA7wt>R<4`tXtxu7up4#i_spXo z>9^(tWp&s&Nyx<{o0AIf0O9n-`Ai&EhFXvY*)vWP7L%tp4@C@}J-2%$j8Pi%0;1!# zJ^E;wLVC@cmE4;HqSw6i>M03U`geDoZUb*04!ST!8`@gfW4mp9cgOnCHhOiBHG z6f*Zx;3gG6N&1@CT{MxU{-$^3yoUiJi^G?T``dv`6nB5HR#WW$GE`WNlT`g8>take ztdXxPkRPD-*pDL8?Q)yb5 zggca!SAQeK*L}6P|5A8F=M{UDlH_ifYv(IlYf6qI$_zzNmeQz&)f$c|>~YV5ppq_A ztOhapeDdG{efP##C(eD5y__lI`*UsF+@?!t(e)e9rN(5SM85?HeaeuLlQ0n_-6MAU%?#$^4;{`i;2j3&pp`p+-~)~=_(q6 ze&n%yrbX(&2C9Dl%@sq2JFwHQpe!uVAbFjzEarnJf#c~$N)6PxR&A{kzkT>~3CFzM zkweYy1#ljtc!nJvtBE0@@V)kpA-pH7E8yXZH2!PT!8W zKOkC=dH%zV>uur+8`8vv-MpOf-5x~{=gpC43*C@04$yMq3k=lE(Za;z9@Wn+hr!*6 zt`8R1{rZYhb|)0t?Q_*ZBMi0i&<$_3hu;Hf=*nF-Qf@kzN#)l>mZf={sXY-qsaSMg*__oF1>@2aDwD*%T+%rDK zF+Zkr*t)<@NiQ~5ohKxlEAGUv4XTz8@j3eRQJYi9o0ZPK&aL2W$m=SCjqo2y$+4bF zNva1Qa7d#Ey2z(OYBHo`jo4GIbPB&R_KAY2zcxa)&IsT893EDOMxP&^qeL%pUePs6 zRJpRpCugd!EO#HdZaD6CwOSM$D7@*#9=1ezPUN zQNHR#OQ{&$VhiCPvc1REBC{`g=e*Z+lNEbhU$kt|&PK&O#wze}idM>IQ({fR(E5Q{ zy#90j^>5(p6zh))(b>N)80gb1O|t4=tFF?s?_%VB(a-A)|(K0=;0N-@=&cPZe6=wfEhPTLTRr94|gXg`meK$JY zAyUz0(0t=1eIQ|_wHc|?O8%f%D@Au=NF&iwF^0+ARIUpLu72_1{RnOduCZWO!Bfwp z{o-f}dBrbB;rZ(Ro=4z=zI&lU-rtD!x$xV&*guh2A2+^X25N zV{E10?5rN(CPjKjde%=%>$7*wj>cnQLQR7FQx-`g(pG{AGia@rwVO4ZVC(#Djm9`T z$}lMb4J>Ldkhjh^>i~lREM{-h(Rh|$83Ok-h3Y?CFd(&e)JWFL>KCZ2Jd}e$9t)S9 zxUz4}0>-i*!y45bjKr94Semt*-wrz(IeR!O^rP1J+bO;;x})DNL!V1wF6U>lPS05F zi?VP#jNGl5S2$;Wi#YuCwGFX&&x2TE_hZ&iIa-v~@U~vHMIC=0OI_a$pW%*4S$sGB zBus>%Kk)Re%!1#MaD;q1L49)aYg4wT!#6bIDC9Hh$e&V@MkGitVk|YkGLn5R^`Q=} z)Kbd+5T(D>!(#Y@NyhqSKO;uVC(69nn@Z_=A3o92&}JiN|7F~*0C#B^Tx5} zPoAVSdbxif3C7-5KkdE9%9At3ed{^i#k4vhG-G#OPr0a$^3#o_Sk=zkee7>T_j%qP zJ4=geGElERqHCsSV2U6%z+msktOUVxMd1mr1uu)bAp43;nFw7at3+J2^bqyRZqpuJ ztNP>({JXfi>RIOW+a=XyuIt#5!x6a^<<8y$Gu_lCFOl;bxRY?k6IW}31mfDSLCrFK zhANCjq(5=>Tm&1#;@f+4_Vo5jx17c{V5vOBO$F~dzuI>;+V&)x*>xMAlXVtH-B`}2 z`~o|;OASN46|eum%Y!ZHM-bdM6SSQXw-Otnzg_r1vQT8|0ZSn^m7jVYrQs6|JH=6Q z?O7`pWikgYji5|b>-^H>F^>WY{rr&pB5gP1G4AURS!1G?Us5ttRh?$_N6Pq3ohbRY z0!le7U0uD(`Q{u7r|tAPgIu};{p6pOow6uLN9o8dNURz(p0SPMGp##17Fox2WalxX zka%lNrn=uhLITRfdPWb!aUSxuRS};njcbxEd68X2X4vqDGqWO{PwpyxK8S3wFm8R2 zX?eb;G_^aCB4bPAT-*PslrsT0KKzHQd)IBcQb93UnySm*yHgi|(L?5~(NtwBr#Mkr zI*;0uBcIdpAMk7VcGvLc+@rK|UUwx;maTi2L~)o&FIkSi8QRDPQkwrPnoH`JGk&rn z6?&ToQb>g3QJkN=mph}raXXTJk##g*VA@#nqYoDK9kS=yTbKb2!7i=U6WDD9c~hZ; zo;#boF{UR{fgZItmBbHxq>&b|UvG~>?lfw{kknJ%cQ`YkCnn_G+c~4};_exG4&F>y zo`|{Mu-N$S^LLrI1P@^!dKjrqovRX+ix24=>d%c^{Hcgte*Ng*_( zsUao1e7v_3MjeXr*(+7$B^lncpgXs)Wg@=_C@UCUJR$tH1XtMkRqTt2LD3=YE#6)c z?A~bYpO?g}Ka$d@-7TS3ZB&4!a>;zueR+xlOHOw*if6$eS#hJCaV6n#ZP~|5ATl|` z!T{%_l5Ua55Pc6Du@t5*7GBe5a$`7rnF4U~+=z408mfg<13$Lpyx^1~PT zDOx&VpH7ZNPU(o?Hhzzz6w9)!RXks%4*T`+=lVsxf?yP08SnZB7SEEqDXG*kdJk)M z9KvDPsNbVm4)s_`-}c>)`Ed8Sq+`;JM_v{5ByE05y^yuWZ=heBqx`!C1L>fs;keS8}%@v|3&K590<>-(5r zRygeA!}jyGevq#~lfu(mcAVd!TbcrE*w{F-$Xgit%{7+;dQRj_9vXZiQaF5a&+D0< z%6MGdt13Pkkge}D(Td~Ifb91M(t?AaOp}-HRo_t;1Zm=Aht*QlUm?Z%yY`5OTqj3K zdyUe+I9eQI#5=HD5MBh4qWL?~gw<0)zwkXdm(Li;&w>?g747J3&SvE9e37*E{bA3?Om7tS$xY#b zMDf%^jo>NCz&`Vqm;TScvc^|Am543yNk7BywGvTIkSaf=R`TK7vf_Wn=XoeTzCLGs z(Y8QgRW!2eEt}N1PBU*oEf8^0z4=6gvyKV!xTjlUso3;)xhu4npTpww4Drj%$J)$A zZTr5w+DAzr;LT6^rZlu*EYAwxK9LzC_L!J1?)kO6D--V6Ej1WN|Ep+;mqvatTLcj% zzA;;6QMa%{$ng7>08HZMr7-ss_qC9b24?E05$)2Z!NWD#cp}Dop^EyP_C67U(B}8S&Wd zeRd52W6}pmF~7Y%$?AqZdWfbkeDSl#MB3(^xzL{+I)X<883o{F;2+E_4HsyR^7|hd zc_MAKE3!pjv*+e%h&=8?rp(vcI*_n3J&8^6t(H55O~G(c2 ziIbdgt#F@e4H*Ai90b2 z#dl<2Z)SS)k&2URkAgGvz0w#X_Obo){Pe=<0{<$r-`LBlh$q9!9xS|fC=0vPw{z}) z?chrxmBz@cm=!Z_RTM5~ZjM>*c6w*HGWDMAQ9w?#UaF{ z>T|gf$YMPe#^;SGr(Wb?tG@~+jo;^+x5nVF6=AHFBEDw4@QCktZIPta*{~s<{Fb=l z_$fo$p;*I;StLwr0(MG#_BGFt@j=ZyaHpIs*zG zOW8g&oe9dJO7)YIj*EPBAu(_1U(oK;Qss6lnK{M4u(M_FcJNR2ih6UleZ$DvYJ}E9 z*t2-DQ6qZ8d+g?g=_eWwtQ@O8GLQ^wN|-mseAgDmc!$VD<$0Ot9Asot*q&2;3C$SMz(yTH-^||zB&A(<8PE+f-{~)u8ce9HcQe-9@qLA zve7raV?dd1Ka&DKg_W%k2OXZojZFJ1ujYIXa_?xba1;%&UyjcG5+C2|aNHB8YxCGscX%eW=0MWtQN)~qp;>v;VJHss>?RzPG>p zvZ3lX4u7s|Ya+RtxRjtt_mW4A=gdANss*R0eoJr-8U8-#mdnF8+DPeNApB`+^;s=C{*F5(8PR_>{B@*$Q4S!BZU-hKd9y8~~ zD$$bPk784@(88|JodE-Hji?)*pD=OZ!pUbwx<;#}s; zpMC~!y!6-~(O&KfBY&aqa4;@0(3jO$Jst(UjcZCh*lCsd&7}PsR#>ZqI8gi9WcQ>X zX@%S}RB==2J1Q&_Tj}UoErUnQaH>2zoyyE9=?29k(pHucA?kWfd%{;n>Grw{<35A3 zS}i|_G12dJ(rTF&8M+p|?`D1qY?wy`}TAUp(+F>{cg=&pqK}R|#q}GUU?;S?A-xmw- z%iyw7jqyx9b%ik)BB%w*T74txnQgn?_s+dAwQxD7!wqhEXcH||@YuPcmwQld4_64x(L=R@!bpKh|yyXA`)z-Nj(o zW93^e@99&VVP2^$Z4qgW=Ya`E1qD{0v#Bur z#mCF&pNtnG4oTzhZ7t}l^_^(C%G7@P_3MqJ1q>@MAj>%%kO zznX}BBXm)vw!q)^*?MzZuuWZViV+iybvn7I-yP8pr6Oc|ef8Nj9;u#u%J1(A1Ul8R zQsIWoeDzb^w4n=s+%ZM|?!s@)fI;duO;?PA6>+p%7ckBq9!9w)AM2Zre3w@bU!t5j(Yi^sq5 zcXEuMJm;;~A}*;@YHMNx%O>-1EQ{9;TqlpI2 z!30N6Zi!IMn425aSe;7=erhWGTQZv5aXT@5Dx7MJQEc#A1u~d5Y|Hf}H->3sB8SN| za$$!zr33>C%V0JwnTh4G;qDnu#g=!c2-uCMyKbj1P;^?rJFyDFZ+wj0Cul z9^D6{VuCj5E9YIGJ*x?Kg(2Sd7qP!&Jnr=bvt)JmBgG?LfDN_oA%k8Ycqpoll7SW@ z8p=*g@)*ET=`ArOrfnd~n$jZ7Zm4})xVBMc@ad7bGO zWUc8POuFl(pSS|hJIPfF+yP3cv#J+P1WIedS;1=ws#=R$ z^vy~%j3-!}eUXg|6(JAlgGRFLQ6NHnK?EoM?nvUUa*#-kNy)%wvY7LV^fF1!3?f>i ztv27IPah0(jK{BjHp2YzljVoD5CQHmP|7^jL-5;mn}0aUNJ3XVqc48zZhss^xt;ex zX+E8TSdW+vGu#<$w!!u(Y2zf>lw*0G(W=9Ehx-bO2U^bZ#Fu`pUzpT$b`p>@2ig2a zTZEovGv(eF)0zx%#{F%E4PT3EjlSEk81EuBmcC`^Z?b-8SGLy6D_Y`0s3i6ADJ(u1 z(eJG{qSz8-#+GI8+nqjsq=CX7eLMd~H?9~4R$;W9>I7lKT8fWu3FRzL2W$>C zDJ-;Pg2;SiyOw53?lSFc->FE$Qd-pgqy9~o6u0)QC;Kra)yk4oc9U9t0u?(;D)S!zqCcK@0yqoVChqS56MHMAVN3de zymyw-ZNg?xhbBB%UAgW=yui{^*>K&VuhDV1VLD*+8l-T4J17=7;xg zY2nU@l8>#65?&g0JOR!MVkvTHVn8uD#FaY4$yJgi>Yc9DY}lA6y66fLuOsJR^3Xwo zt#)MfZg^t}hANbT)KhC@B{8OO1tvp`BRk-HfPG9!2m+rw7}$>XuV45qr?%ZZ;?nmhp9hzpj~|5B75uAk{zWg{loT z&7Xq>YKS&uw$%;y5Yy&YjkVqvouI2d5cCQYqTk+y2}@X(HCUCgDP<>{>r1Q<6IFL? zbeEIkvu^>tHfERVBuVHlipDG<4(YX&E&L z7fR+Jto_pG5+Qj%rh`#zQHkOvu>^BqgzSg+sY!uOS!8R4GY+I@61v^wh5h(v_5cTM9%s(+Ki4V zuiq^CzZ3&U_=dT^O1ioD71@ie9ERL}9OM6xxT2f7fp(~(w2okBbYnLA)o&kFU)QPK zw2Z><3v_V%eitDm27tID--_8~uJExp4LyhNO5%cfjYG3{RVHqdK};1cV;}JohFBuo zO#5;#*cZ*)Z1a}gsryiE1=he4p+X?OKDq;~(#Iw{t_hvB%K{>QR@rW8rXA@1dAd1{ zGtVUIKm?Q;rwn*A=_Y3H>0be7hMNn_Xjd6|7FuTSf!e``EUzgx$gLb0w|evu2;y1e zGiMnYU!NAb{Gja-JycRZ9Sf{KwYi;KgG@+fU@GFEh;0@T@j;@}e{pWc*UM2EIyb0u z*5_eFEanhuh~+5%WCnO8o3pQ^#YtRZf0Z+1BM8(7QR$IvuV&F|OEsFpkTk8Fc)X$q zUOIbGLd1(u>lVV?WfONt`7-oin`SuxnqHNLpp8_KQ1pG8j#P7$pbY-BEv^FGP z@4*YQb)7%mRz|g|E+K^x>oK5(s;dFt>gpU%4yXAdyG(Nr{o$tnVfCpQ1f{vtpWsK> z&lvm%f*keOM@xso{E{7$j(A~N{iG>d)2+dC7%}ycvQK{E*&>$r-B?|YKF$VS`fFUM z*^ud442o=blILw*{OfLn3~nn?S>v^xvH~Orw($o^;I-M@C%p@>eZzq)eY~a|EJV_* zhNxEam6t`&rE-_TJC;g3Fgw%coAw4c!8EwUss4PRUbub>^~1K@Ejj4RIb^FG$+xEF%K8=tAAuyITcgj$}y)-0{+t((wFdOtxi zw$SAfX@O+W`yXUxN~gL_b;k^czj-kE^wgf{MGI(S%)4~SfE&m+w}kzRD%fh(1ewz1 zY12C@NPRDTvL2mVBiK-@)dX7DoVI;Ht=nPa*Td@GXA-k-sBE0J}1z_uCV zd)fQ%oBJTp7Cz(@QE44*xx=76iYe~c_Q><7GCCDH^ zW41F?YaAdjX@&0_WPA(a`@vv_BXnxB=L^h+FiPW#(PKORkl6*Oi_Ym}E{sY#3pbS8 z={7(FqXxljIO$AuxMKPDzO}G$oCQd2&x?0TEr=J83a+|S$c{F#X;V9`y{8QAqmj0$WXXCxTOE{i?K5mVI)_tcUW>hZuUm)I{as2U!V5tP3fjv#% z3zz%LT2t4%wuN+EZD zNPB8*GXsY0gP~2}*$8&4A=J`sf=|rwudk^@YnELoPFg#Dp5lJ5BFC+z1}Hh}Y7z=u zn|C!&vg)Y!4!dcgN#1f}XJo*;sO+WXvGHy1Ab|Ox;XIj*+z(;(mL~h|qoiVD`>Mt~ zfym?~7!15eb~*KRl&>5nBR6HAPzSHnM|}Gm1Jma3>*7;QsS~<625M5G15oj2{l1yr zY+AK?=zMyd!M_*tcR=lYJ{1bK%{~KbdnG~M62gI}vi4-vM6gN)(F%QAFr$-+h62YZ zWBECxf>Z$U7{_l6dsahHNEDXANjOau9~O~m;xlF z{9QkWt*2t-JD4m GWkh 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%0Dm+V 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 total { + end = total + } + pipe := rdb.Pipeline() + for _, key := range keys[start:end] { + pipe.HGetAll(ctx, key) + } + + cmds, err := pipe.Exec(ctx) + if err != nil { + logger.Errorf("Failed to get hash batch exec err: %v", err) + return + } + + // 将结果添加到 result map 并发访问 + mt.Lock() + defer mt.Unlock() + + // 处理命令结果 + for _, cmd := range cmds { + if cmd.Err() != nil { + logger.Errorf("Failed to get hash batch cmds err: %v", cmd.Err()) + continue + } + // 将结果转换为 *redis.StringStringMapCmd 类型 + rcmd, ok := cmd.(*redis.MapStringStringCmd) + if !ok { + logger.Errorf("Failed to get hash batch type err: %v", cmd.Err()) + continue + } + + key := "-" + args := rcmd.Args() + if len(args) > 0 { + key = fmt.Sprint(args[1]) + } + + result[key] = rcmd.Val() + } + }(i) + } + + wg.Wait() + return result, nil +} + // 判断是否存在 func Has(source string, keys ...string) (bool, error) { // 数据源 diff --git a/src/modules/common/controller/index.go b/src/modules/common/controller/index.go index 020b5be..b61ce81 100644 --- a/src/modules/common/controller/index.go +++ b/src/modules/common/controller/index.go @@ -3,7 +3,7 @@ package controller import ( "fmt" - "be.ems/src/framework/config" + libGlobal "be.ems/lib/global" "be.ems/src/framework/vo/result" "github.com/gin-gonic/gin" @@ -21,8 +21,8 @@ type IndexController struct{} // // GET / func (s *IndexController) Handler(c *gin.Context) { - name := config.Get("framework.name").(string) - version := config.Get("framework.version").(string) + name := "OMC" + version := libGlobal.Version // str := "欢迎使用%s核心网管理平台,当前版本:%s,请通过前台地址访问。" str := "Welcome to the %s Core Network Management Platform, current version: %s, please access via the frontend address." c.JSON(200, result.OkMsg(fmt.Sprintf(str, name, version))) diff --git a/src/modules/common/service/commont.impl.go b/src/modules/common/service/commont.impl.go index 10ad3f8..b84b4d4 100644 --- a/src/modules/common/service/commont.impl.go +++ b/src/modules/common/service/commont.impl.go @@ -30,7 +30,6 @@ func (s *CommontImpl) SystemConfigInfo() map[string]string { // 获取打包注入的全局变量信息 infoMap["version"] = global.Version infoMap["buildTime"] = global.BuildTime - infoMap["goVer"] = global.GoVer // 系统首次使用标记 launchInfo := machine.LaunchInfo if launchInfo != nil { @@ -42,6 +41,8 @@ func (s *CommontImpl) SystemConfigInfo() map[string]string { } else { infoMap[common.LAUNCH_BOOTLOADER] = "true" } + // 用户登录认证 + infoMap["loginAuth"] = fmt.Sprint(config.Get("user.loginAuth")) // 序列号 infoMap["serialNum"] = fmt.Sprint(config.Get("omc.sn")) // 获取LOGO类型 diff --git a/src/modules/network_data/controller/udm_auth.go b/src/modules/network_data/controller/udm_auth.go index d72b6ba..90ee876 100644 --- a/src/modules/network_data/controller/udm_auth.go +++ b/src/modules/network_data/controller/udm_auth.go @@ -55,8 +55,8 @@ func (s *UDMAuthController) ResetData(c *gin.Context) { // GET /list func (s *UDMAuthController) List(c *gin.Context) { querys := ctx.QueryMap(c) - data := s.udmAuthService.SelectPage(querys) - c.JSON(200, result.Ok(data)) + total, rows := s.udmAuthService.SelectPage(querys) + c.JSON(200, result.Ok(map[string]any{"total": total, "rows": rows})) } // UDM鉴权用户信息 @@ -364,13 +364,12 @@ func (s *UDMAuthController) Export(c *gin.Context) { querys["pageNum"] = 1 querys["pageSize"] = 10000 - data := s.udmAuthService.SelectPage(querys) - if parse.Number(data["total"]) == 0 { + total, rows := s.udmAuthService.SelectPage(querys) + if total == 0 { // 导出数据记录为空 c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.exportEmpty"))) return } - rows := data["rows"].([]model.UDMAuthUser) // rows := s.udmAuthService.SelectList(model.UDMAuthUser{NeId: neId}) if len(rows) <= 0 { diff --git a/src/modules/network_data/controller/udm_sub.go b/src/modules/network_data/controller/udm_sub.go index 0b9150b..02ae5dc 100644 --- a/src/modules/network_data/controller/udm_sub.go +++ b/src/modules/network_data/controller/udm_sub.go @@ -54,8 +54,8 @@ func (s *UDMSubController) ResetData(c *gin.Context) { // GET /list func (s *UDMSubController) List(c *gin.Context) { querys := ctx.QueryMap(c) - data := s.udmSubService.SelectPage(querys) - c.JSON(200, result.Ok(data)) + total, rows := s.udmSubService.SelectPage(querys) + c.JSON(200, result.Ok(map[string]any{"total": total, "rows": rows})) } // UDM签约用户信息 @@ -188,10 +188,9 @@ func (s *UDMSubController) Adds(c *gin.Context) { // 发送MML cmd := fmt.Sprintf("baa udmuser:start_imsi=%s,start_msisdn=%s,sub_num=%s,", body.IMSI, body.MSISDN, num) cmd += s.udmSubService.ParseCommandParams(body) - // static_ip指给4G UE分配的静态IP,没有可不带此字段名,批量添加IP会自动递增 - if body.StaticIp != "" { - cmd += fmt.Sprintf(",static_ip=%s", body.StaticIp) - } + // 去除msisdn参数,避免重复 + omemsisdn := fmt.Sprintf(",msisdn=%s,", body.MSISDN) + cmd = strings.Replace(cmd, omemsisdn, ",", 1) data, err := telnet.ConvertToStr(telnetClient, cmd) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) @@ -369,13 +368,12 @@ func (s *UDMSubController) Export(c *gin.Context) { querys["pageNum"] = 1 querys["pageSize"] = 10000 - data := s.udmSubService.SelectPage(querys) - if parse.Number(data["total"]) == 0 { + total, rows := s.udmSubService.SelectPage(querys) + if total == 0 { // 导出数据记录为空 c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.exportEmpty"))) return } - rows := data["rows"].([]model.UDMSubUser) // rows := s.udmSubService.SelectList(model.UDMSubUser{NeId: neId}) if len(rows) <= 0 { diff --git a/src/modules/network_data/model/cdr_event_ims.go b/src/modules/network_data/model/cdr_event_ims.go index ffe280c..60973fa 100644 --- a/src/modules/network_data/model/cdr_event_ims.go +++ b/src/modules/network_data/model/cdr_event_ims.go @@ -7,7 +7,7 @@ type CDREventIMS struct { ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` NeType string `json:"neType" gorm:"column:ne_type"` NeName string `json:"neName" gorm:"column:ne_name"` - RmUID string `json:"rmUID" gorm:"column:rm_uid"` // 可能没有 + RmUID string `json:"rmUID" gorm:"column:rm_uid"` Timestamp int64 `json:"timestamp" gorm:"column:timestamp"` CDRJSONStr string `json:"cdrJSON" gorm:"column:cdr_json"` CreatedAt time.Time `json:"createdAt" gorm:"column:created_at;default:CURRENT_TIMESTAMP"` @@ -18,7 +18,7 @@ type CDREventIMSQuery struct { NeType string `json:"neType" form:"neType" binding:"required"` // 网元类型IMS NeID string `json:"neId" form:"neId" binding:"required"` RmUID string `json:"rmUID" form:"rmUID"` - RecordType string `json:"recordType" form:"recordType"` // 记录行为 MOC MTC MOSM MTSM + RecordType string `json:"recordType" form:"recordType"` // 记录行为 MOC MTC CallerParty string `json:"callerParty" form:"callerParty"` // 主叫号码 CalledParty string `json:"calledParty" form:"calledParty"` // 被叫号码 StartTime string `json:"startTime" form:"startTime"` diff --git a/src/modules/network_data/repository/udm_auth.go b/src/modules/network_data/repository/udm_auth.go index 582e957..980ef00 100644 --- a/src/modules/network_data/repository/udm_auth.go +++ b/src/modules/network_data/repository/udm_auth.go @@ -1,120 +1,57 @@ package repository import ( - "fmt" - "strings" - "be.ems/src/framework/datasource" "be.ems/src/framework/logger" - "be.ems/src/framework/utils/parse" "be.ems/src/framework/utils/repo" "be.ems/src/modules/network_data/model" ) // 实例化数据层 UDMAuthUser 结构体 -var NewUDMAuthUser = &UDMAuthUser{ - selectSql: `select id, imsi, ne_id, amf, status, ki, algo_index, opc from u_auth_user`, - - resultMap: map[string]string{ - "id": "ID", - "imsi": "IMSI", - "ne_id": "NeId", - "amf": "Amf", - "status": "Status", - "ki": "Ki", - "algo_index": "AlgoIndex", - "opc": "Opc", - }, -} +var NewUDMAuthUser = &UDMAuthUser{} // UDMAuthUser UDM鉴权信息表 数据层处理 -type UDMAuthUser struct { - // 查询视图对象SQL - selectSql string - // 结果字段与实体映射 - resultMap map[string]string -} - -// convertResultRows 将结果记录转实体结果组 -func (r *UDMAuthUser) convertResultRows(rows []map[string]any) []model.UDMAuthUser { - arr := make([]model.UDMAuthUser, 0) - for _, row := range rows { - item := model.UDMAuthUser{} - for key, value := range row { - if keyMapper, ok := r.resultMap[key]; ok { - repo.SetFieldValue(&item, keyMapper, value) - } - } - arr = append(arr, item) - } - return arr -} +type UDMAuthUser struct{} // ClearAndInsert 清空ne_id后新增实体 func (r *UDMAuthUser) ClearAndInsert(neId string, uArr []model.UDMAuthUser) int64 { // 不指定neID时,用 TRUNCATE 清空表快 // _, err := datasource.ExecDB("", "TRUNCATE TABLE u_auth_user", nil) - _, err := datasource.ExecDB("", "DELETE FROM u_auth_user WHERE ne_id = ?", []any{neId}) - if err != nil { - logger.Errorf("TRUNCATE err => %v", err) + result := datasource.DB("").Where("ne_id = ?", neId).Unscoped().Delete(&model.UDMAuthUser{}) + if result.Error != nil { + logger.Errorf("Delete err => %v", result.Error) } return r.Inserts(uArr) } // SelectPage 根据条件分页查询 -func (r *UDMAuthUser) SelectPage(query map[string]any) map[string]any { +func (r *UDMAuthUser) SelectPage(query map[string]any) (int64, []model.UDMAuthUser) { + tx := datasource.DB("").Model(&model.UDMAuthUser{}) // 查询条件拼接 - var conditions []string - var params []any if v, ok := query["imsi"]; ok && v != "" { - conditions = append(conditions, "imsi like concat(concat('%', ?), '%')") - params = append(params, strings.Trim(v.(string), " ")) + tx = tx.Where("imsi like concat(concat('%',?), '%')", v) } if v, ok := query["neId"]; ok && v != "" { - conditions = append(conditions, "ne_id = ?") - params = append(params, v) + tx = tx.Where("ne_id =?", v) } if v, ok := query["imsis"]; ok && v != "" { - placeholder := repo.KeyPlaceholderByQuery(len(v.([]any))) - conditions = append(conditions, fmt.Sprintf("imsi in (%s)", placeholder)) - for _, v := range v.([]any) { - params = append(params, v.(string)) - } + tx = tx.Where("imsi in ?", v) } - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - result := map[string]any{ - "total": 0, - "rows": []model.UDMAuthUser{}, - } + var total int64 = 0 + rows := []model.UDMAuthUser{} // 查询数量 长度为0直接返回 - totalSql := "select count(1) as 'total' from u_auth_user" - totalRows, err := datasource.RawDB("", totalSql+whereSql, params) - if err != nil { + if err := tx.Count(&total).Error; err != nil || total <= 0 { logger.Errorf("total err => %v", err) - return result - } - total := parse.Number(totalRows[0]["total"]) - if total == 0 { - return result - } else { - result["total"] = total + return total, rows } // 分页 pageNum, pageSize := repo.PageNumSize(query["pageNum"], query["pageSize"]) - pageSql := " limit ?,? " - params = append(params, pageNum*pageSize) - params = append(params, pageSize) + tx = tx.Offset(int(pageNum * pageSize)).Limit(int(pageSize)) // 排序 - orderSql := "" if v, ok := query["sortField"]; ok && v != "" { sortSql := v.(string) if o, ok := query["sortOrder"]; ok && o != nil && v != "" { @@ -124,71 +61,52 @@ func (r *UDMAuthUser) SelectPage(query map[string]any) map[string]any { sortSql += " asc " } } - orderSql = fmt.Sprintf(" order by %s ", sortSql) + tx = tx.Order(sortSql) } // 查询数据 - querySql := r.selectSql + whereSql + orderSql + pageSql - results, err := datasource.RawDB("", querySql, params) - if err != nil { + if err := tx.Find(&rows).Error; err != nil { logger.Errorf("query err => %v", err) } - // 转换实体 - result["rows"] = r.convertResultRows(results) - return result + return total, rows } // SelectList 根据实体查询 func (r *UDMAuthUser) SelectList(u model.UDMAuthUser) []model.UDMAuthUser { + tx := datasource.DB("").Model(&model.UDMAuthUser{}) // 查询条件拼接 - var conditions []string - var params []any if u.IMSI != "" { - conditions = append(conditions, "imsi = ?") - params = append(params, u.IMSI) + tx = tx.Where("imsi = ?", u.IMSI) } if u.NeId != "" { - conditions = append(conditions, "ne_id = ?") - params = append(params, u.NeId) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") + tx = tx.Where("ne_id = ?", u.NeId) } // 查询数据 - querySql := r.selectSql + whereSql + " order by imsi asc " - results, err := datasource.RawDB("", querySql, params) - if err != nil { + arr := []model.UDMAuthUser{} + if err := tx.Order("imsi asc").Find(&arr).Error; err != nil { logger.Errorf("query err => %v", err) } - - // 转换实体 - return r.convertResultRows(results) + return arr } // SelectByIMSIAndNeID 通过imsi和ne_id查询 func (r *UDMAuthUser) SelectByIMSIAndNeID(imsi, neId string) model.UDMAuthUser { - querySql := r.selectSql + " where imsi = ? and ne_id = ?" - results, err := datasource.RawDB("", querySql, []any{imsi, neId}) - if err != nil { + tx := datasource.DB("").Model(&model.UDMAuthUser{}) + item := model.UDMAuthUser{} + // 查询条件拼接 + tx = tx.Where("imsi = ? and ne_id = ?", imsi, neId) + // 查询数据 + if err := tx.Order("imsi asc").Limit(1).Find(&item).Error; err != nil { logger.Errorf("query err => %v", err) - return model.UDMAuthUser{} } - // 转换实体 - rows := r.convertResultRows(results) - if len(rows) > 0 { - return rows[0] - } - return model.UDMAuthUser{} + return item } // Insert 批量添加 func (r *UDMAuthUser) Inserts(uArr []model.UDMAuthUser) int64 { - tx := datasource.DefaultDB().CreateInBatches(uArr, 3000) + tx := datasource.DB("").CreateInBatches(uArr, 3000) if err := tx.Error; err != nil { logger.Errorf("CreateInBatches err => %v", err) } diff --git a/src/modules/network_data/repository/udm_sub.go b/src/modules/network_data/repository/udm_sub.go index b283a1c..7f57dc5 100644 --- a/src/modules/network_data/repository/udm_sub.go +++ b/src/modules/network_data/repository/udm_sub.go @@ -1,156 +1,60 @@ package repository import ( - "fmt" - "strings" - "be.ems/src/framework/datasource" "be.ems/src/framework/logger" - "be.ems/src/framework/utils/parse" "be.ems/src/framework/utils/repo" "be.ems/src/modules/network_data/model" ) // 实例化数据层 UDMSubUser 结构体 -var NewUDMSub = &UDMSubUser{ - selectSql: `select - id, imsi, msisdn, ne_id, - am_dat, ambr, nssai, rat, arfb, sar, cn_type, rfsp_index, reg_timer, ue_usage_type, active_time, mico, odb_ps, group_id, - eps_dat, eps_flag, eps_odb, hplmn_odb, ard, epstpl, context_id, apn_mum, apn_context, static_ip, - sm_data, smf_sel, cag - from u_sub_user`, - - resultMap: map[string]string{ - "id": "ID", - "imsi": "IMSI", - "msisdn": "MSISDN", - "ne_id": "NeId", - - "am_dat": "AmDat", - "ambr": "UeAmbrTpl", - "nssai": "NssaiTpl", - "rat": "RatRestrictions", - "arfb": "AreaForbiddenTpl", - "sar": "ServiceAreaRestrictionTpl", - "cn_type": "CnTypeRestrictions", - "rfsp_index": "RfspIndex", - "reg_timer": "SubsRegTime", - "ue_usage_type": "UeUsageType", - "active_time": "ActiveTime", - "mico": "MicoAllowed", - "odb_ps": "OdbPs", - "group_id": "GroupId", - - "eps_dat": "EpsDat", - "eps_flag": "EpsFlag", - "eps_odb": "EpsOdb", - "hplmn_odb": "HplmnOdb", - "ard": "Ard", - "epstpl": "Epstpl", - "context_id": "ContextId", - "apn_mum": "ApnNum", - "apn_context": "ApnContext", - "static_ip": "StaticIp", - - "sm_data": "SmData", - "smf_sel": "SmfSel", - "cag": "Cag", - }, -} +var NewUDMSub = &UDMSubUser{} // UDMSubUser UDM签约信息表 数据层处理 -type UDMSubUser struct { - // 查询视图对象SQL - selectSql string - // 结果字段与实体映射 - resultMap map[string]string -} - -// convertResultRows 将结果记录转实体结果组 -func (r *UDMSubUser) convertResultRows(rows []map[string]any) []model.UDMSubUser { - arr := make([]model.UDMSubUser, 0) - for _, row := range rows { - item := model.UDMSubUser{} - for key, value := range row { - if keyMapper, ok := r.resultMap[key]; ok { - repo.SetFieldValue(&item, keyMapper, value) - } - } - arr = append(arr, item) - } - return arr -} +type UDMSubUser struct{} // ClearAndInsert 清空ne_id后新增实体 func (r *UDMSubUser) ClearAndInsert(neId string, u []model.UDMSubUser) int64 { // 不指定neID时,用 TRUNCATE 清空表快 // _, err := datasource.ExecDB("", "TRUNCATE TABLE u_sub_user", nil) - _, err := datasource.ExecDB("", "DELETE FROM u_sub_user WHERE ne_id = ?", []any{neId}) - if err != nil { - logger.Errorf("TRUNCATE err => %v", err) + result := datasource.DB("").Where("ne_id = ?", neId).Unscoped().Delete(&model.UDMSubUser{}) + if result.Error != nil { + logger.Errorf("Delete err => %v", result.Error) } - return r.Inserts(u) } // SelectPage 根据条件分页查询字典类型 -func (r *UDMSubUser) SelectPage(query map[string]any) map[string]any { +func (r *UDMSubUser) SelectPage(query map[string]any) (int64, []model.UDMSubUser) { + tx := datasource.DB("").Model(&model.UDMSubUser{}) // 查询条件拼接 - var conditions []string - var params []any if v, ok := query["imsi"]; ok && v != "" { - conditions = append(conditions, "imsi like concat(concat('%', ?), '%')") - params = append(params, strings.Trim(v.(string), " ")) + tx = tx.Where("imsi like concat(concat('%', ?), '%')", v) } if v, ok := query["msisdn"]; ok && v != "" { - conditions = append(conditions, "msisdn like concat(concat('%', ?), '%')") - params = append(params, strings.Trim(v.(string), " ")) + tx = tx.Where("msisdn like concat(concat('%', ?), '%')", v) } if v, ok := query["neId"]; ok && v != "" { - conditions = append(conditions, "ne_id = ?") - params = append(params, v) + tx = tx.Where("ne_id =?", v) } if v, ok := query["imsis"]; ok && v != "" { - placeholder := repo.KeyPlaceholderByQuery(len(v.([]any))) - conditions = append(conditions, fmt.Sprintf("imsi in (%s)", placeholder)) - for _, v := range v.([]any) { - params = append(params, v.(string)) - } + tx = tx.Where("imsi in ?", v) } - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - result := map[string]any{ - "total": 0, - "rows": []model.UDMSubUser{}, - } + var total int64 = 0 + rows := []model.UDMSubUser{} // 查询数量 长度为0直接返回 - totalSql := "select count(1) as 'total' from u_sub_user" - totalRows, err := datasource.RawDB("", totalSql+whereSql, params) - if err != nil { + if err := tx.Count(&total).Error; err != nil || total <= 0 { logger.Errorf("total err => %v", err) - return result - } - total := parse.Number(totalRows[0]["total"]) - if total == 0 { - return result - } else { - result["total"] = total + return total, rows } // 分页 pageNum, pageSize := repo.PageNumSize(query["pageNum"], query["pageSize"]) - pageSql := " limit ?,? " - params = append(params, pageNum*pageSize) - params = append(params, pageSize) + tx = tx.Offset(int(pageNum * pageSize)).Limit(int(pageSize)) // 排序 - orderSql := "" if v, ok := query["sortField"]; ok && v != "" { sortSql := v.(string) if o, ok := query["sortOrder"]; ok && o != nil && v != "" { @@ -160,72 +64,52 @@ func (r *UDMSubUser) SelectPage(query map[string]any) map[string]any { sortSql += " asc " } } - orderSql = fmt.Sprintf(" order by %s ", sortSql) + tx = tx.Order(sortSql) } // 查询数据 - querySql := r.selectSql + whereSql + orderSql + pageSql - results, err := datasource.RawDB("", querySql, params) - if err != nil { + if err := tx.Find(&rows).Error; err != nil { logger.Errorf("query err => %v", err) - return result } - // 转换实体 - result["rows"] = r.convertResultRows(results) - return result + return total, rows } // SelectList 根据实体查询 func (r *UDMSubUser) SelectList(u model.UDMSubUser) []model.UDMSubUser { + tx := datasource.DB("").Model(&model.UDMSubUser{}) // 查询条件拼接 - var conditions []string - var params []any if u.IMSI != "" { - conditions = append(conditions, "imsi = ?") - params = append(params, u.IMSI) + tx = tx.Where("imsi = ?", u.IMSI) } if u.NeId != "" { - conditions = append(conditions, "ne_id = ?") - params = append(params, u.NeId) - } - - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") + tx = tx.Where("ne_id = ?", u.NeId) } // 查询数据 - querySql := r.selectSql + whereSql + " order by imsi asc " - results, err := datasource.RawDB("", querySql, params) - if err != nil { + arr := []model.UDMSubUser{} + if err := tx.Order("imsi asc").Find(&arr).Error; err != nil { logger.Errorf("query err => %v", err) } - - // 转换实体 - return r.convertResultRows(results) + return arr } // SelectByIMSIAndNeID 通过imsi和ne_id查询 func (r *UDMSubUser) SelectByIMSIAndNeID(imsi, neId string) model.UDMSubUser { - querySql := r.selectSql + " where imsi = ? and ne_id = ?" - results, err := datasource.RawDB("", querySql, []any{imsi, neId}) - if err != nil { + tx := datasource.DB("").Model(&model.UDMSubUser{}) + item := model.UDMSubUser{} + // 查询条件拼接 + tx = tx.Where("imsi = ? and ne_id = ?", imsi, neId) + // 查询数据 + if err := tx.Order("imsi asc").Limit(1).Find(&item).Error; err != nil { logger.Errorf("query err => %v", err) - return model.UDMSubUser{} } - // 转换实体 - rows := r.convertResultRows(results) - if len(rows) > 0 { - return rows[0] - } - return model.UDMSubUser{} + return item } // Insert 批量添加 func (r *UDMSubUser) Inserts(uArr []model.UDMSubUser) int64 { - tx := datasource.DefaultDB().CreateInBatches(uArr, 2000) + tx := datasource.DB("").CreateInBatches(uArr, 2000) if err := tx.Error; err != nil { logger.Errorf("CreateInBatches err => %v", err) } diff --git a/src/modules/network_data/service/udm_auth.go b/src/modules/network_data/service/udm_auth.go index 069c673..807b8be 100644 --- a/src/modules/network_data/service/udm_auth.go +++ b/src/modules/network_data/service/udm_auth.go @@ -43,14 +43,18 @@ func (r *UDMAuthUser) dataByRedis(imsi, neId string) []model.UDMAuthUser { if err != nil { return arr } - for _, key := range ausfArr { - m, err := redis.GetHash(source, key) - if err != nil { + mkv, err := redis.GetHashBatch(source, ausfArr) + if err != nil { + return arr + } + + for k, m := range mkv { + if k == "-" { continue } // 跳过-号数据 ausf:360000100000130 - imsi := key[5:] + imsi := k[5:] if strings.Contains(imsi, "-") { continue } @@ -97,7 +101,7 @@ func (r *UDMAuthUser) ParseInfo(imsi, neId string, data map[string]string) model } // SelectPage 分页查询数据库 -func (r *UDMAuthUser) SelectPage(query map[string]any) map[string]any { +func (r *UDMAuthUser) SelectPage(query map[string]any) (int64, []model.UDMAuthUser) { return r.udmAuthRepository.SelectPage(query) } diff --git a/src/modules/network_data/service/udm_sub.go b/src/modules/network_data/service/udm_sub.go index 2332ca0..ba9b37d 100644 --- a/src/modules/network_data/service/udm_sub.go +++ b/src/modules/network_data/service/udm_sub.go @@ -44,14 +44,24 @@ func (r *UDMSubUser) dataByRedis(imsi, neId string) []model.UDMSubUser { if err != nil { return arr } - for _, key := range udmsdArr { - m, err := redis.GetHash(source, key) - if err != nil { + mkv, err := redis.GetHashBatch(source, udmsdArr) + if err != nil { + return arr + } + + for k, m := range mkv { + if k == "-" { + continue + } + + // 跳过-号数据 udm-sd:360000100000130 + imsi := k[7:] + if strings.Contains(imsi, "-") { continue } a := model.UDMSubUser{ - IMSI: key[7:], // udm-sd:360000100000130 + IMSI: imsi, // udm-sd:360000100000130 MSISDN: m["gpsi"], // 8612300000130 NeId: neId, SmfSel: m["smf-sel"], // def_snssai @@ -170,7 +180,7 @@ func (r *UDMSubUser) ParseInfo(imsi, neId string, data map[string]string) model. } // SelectPage 分页查询数据库 -func (r *UDMSubUser) SelectPage(query map[string]any) map[string]any { +func (r *UDMSubUser) SelectPage(query map[string]any) (int64, []model.UDMSubUser) { return r.udmSubRepository.SelectPage(query) } @@ -337,6 +347,7 @@ func (r *UDMSubUser) ParseCommandParams(item model.UDMSubUser) string { if item.ApnContext != "" { conditions = append(conditions, fmt.Sprintf("apn_context=%s", item.ApnContext)) } + // static_ip指给4G UE分配的静态IP,没有可不带此字段名,批量添加IP会自动递增 if item.StaticIp != "" { conditions = append(conditions, fmt.Sprintf("static_ip=%s", item.StaticIp)) } @@ -348,8 +359,7 @@ func (r *UDMSubUser) ParseCommandParams(item model.UDMSubUser) string { if item.SmData != "" { conditions = append(conditions, fmt.Sprintf("sm_data=%s", item.SmData)) } - if item.Cag != "" { - conditions = append(conditions, fmt.Sprintf("cag=%s", item.Cag)) - } + conditions = append(conditions, fmt.Sprintf("cag=%s", item.Cag)) + return strings.Join(conditions, ",") } diff --git a/src/modules/network_element/controller/ne_config.go b/src/modules/network_element/controller/ne_config.go index c6c25be..a46da6f 100644 --- a/src/modules/network_element/controller/ne_config.go +++ b/src/modules/network_element/controller/ne_config.go @@ -199,16 +199,16 @@ func (s *NeConfigController) DataInfo(c *gin.Context) { } c.JSON(200, result.OkData(resData)) return - } else { - // 网元直连 - resData, err := neFetchlink.NeConfigInfo(neInfo, query.ParamName) - if err != nil { - c.JSON(200, result.ErrMsg(err.Error())) - return - } - - c.JSON(200, result.Ok(resData)) } + + // 网元直连 + resData, err := neFetchlink.NeConfigInfo(neInfo, query.ParamName) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + + c.JSON(200, result.Ok(resData)) } // 网元参数配置数据修改 @@ -242,15 +242,15 @@ func (s *NeConfigController) DataEdit(c *gin.Context) { } c.JSON(200, result.OkData(resData)) return - } else { - // 网元直连 - resData, err := neFetchlink.NeConfigUpdate(neInfo, body.ParamName, body.Loc, body.ParamData) - if err != nil { - c.JSON(200, result.ErrMsg(err.Error())) - return - } - c.JSON(200, result.OkData(resData)) } + + // 网元直连 + resData, err := neFetchlink.NeConfigUpdate(neInfo, body.ParamName, body.Loc, body.ParamData) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + c.JSON(200, result.OkData(resData)) } // 网元参数配置数据新增(array) diff --git a/src/modules/network_element/controller/ne_host.go b/src/modules/network_element/controller/ne_host.go index 613a88a..e4719bc 100644 --- a/src/modules/network_element/controller/ne_host.go +++ b/src/modules/network_element/controller/ne_host.go @@ -79,6 +79,13 @@ func (s *NeHostController) Add(c *gin.Context) { return } + if body.GroupID == "1" { + // 主机信息操作【%s】失败,禁止操作网元 + msg := i18n.TKey(language, "neHost.banNE") + c.JSON(200, result.ErrMsg(msg)) + return + } + // 检查属性值唯一 uniqueHost := s.neHostService.CheckUniqueHostTitle(body.GroupID, body.Title, body.HostType, "") if !uniqueHost { diff --git a/src/modules/network_element/repository/ne_host.go b/src/modules/network_element/repository/ne_host.go index 2791978..7079466 100644 --- a/src/modules/network_element/repository/ne_host.go +++ b/src/modules/network_element/repository/ne_host.go @@ -111,8 +111,28 @@ func (r *NeHost) SelectPage(query map[string]any) map[string]any { params = append(params, pageNum*pageSize) params = append(params, pageSize) + // 排序 + orderSql := "" + if sv, ok := query["sortField"]; ok && sv != "" { + sortSql := fmt.Sprint(sv) + if sortSql == "updateTime" { + sortSql = "update_time" + } + if sortSql == "createTime" { + sortSql = "create_time" + } + if ov, ok := query["sortOrder"]; ok && ov != "" { + if fmt.Sprint(ov) == "desc" { + sortSql += " desc " + } else { + sortSql += " asc " + } + } + orderSql = fmt.Sprintf(" order by %s ", sortSql) + } + // 查询数据 - querySql := r.selectSql + whereSql + pageSql + querySql := r.selectSql + whereSql + orderSql + pageSql results, err := datasource.RawDB("", querySql, params) if err != nil { logger.Errorf("query err => %v", err) diff --git a/src/modules/network_element/repository/ne_info.go b/src/modules/network_element/repository/ne_info.go index 0b835c6..6e2a5cc 100644 --- a/src/modules/network_element/repository/ne_info.go +++ b/src/modules/network_element/repository/ne_info.go @@ -18,6 +18,7 @@ var neListSort = []string{ "IMS", "AMF", "AUSF", + "UDR", "UDM", "SMF", "PCF", diff --git a/src/modules/network_element/service/ne_config_backup.go b/src/modules/network_element/service/ne_config_backup.go index 9c2d6ba..80cfffb 100644 --- a/src/modules/network_element/service/ne_config_backup.go +++ b/src/modules/network_element/service/ne_config_backup.go @@ -120,6 +120,9 @@ func (r *NeConfigBackup) NeConfigLocalToNe(neInfo model.NeInfo, localFile string sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p /usr/local/etc/iwf && sudo cp -rf %s/iwf/* /usr/local/etc/iwf && sudo chmod 755 /usr/local/etc/iwf/*.yaml", neDirTemp)) } else if neTypeLower == "omc" { sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p /usr/local/omc/etc && sudo cp -rf %s/* /usr/local/omc/etc && sudo chmod 755 /usr/local/omc/etc/*.{yaml,conf}", neDirTemp)) + } else if neTypeLower == "smsc" { + chmodFile := "sudo chmod 755 /usr/local/etc/smsc/{*sys.conf,*conf.txt,conf/is41_operation.conf}" + sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p /usr/local/etc/smsc/conf && sudo cp -rf %s/* /usr/local/etc/smsc && %s", neDirTemp, chmodFile)) } else { neEtcPath := fmt.Sprintf("/usr/local/etc/%s", neTypeLower) chmodFile := fmt.Sprintf("sudo chmod 755 %s/*.yaml", neEtcPath) @@ -175,6 +178,9 @@ func (r *NeConfigBackup) NeConfigNeToLocal(neInfo model.NeInfo) (string, error) sshClient.RunCMD(fmt.Sprintf("mkdir -p %s/iwf && sudo cp -rf /usr/local/etc/iwf/*.yaml %s/iwf", neDirTemp, neDirTemp)) } else if neTypeLower == "omc" { sshClient.RunCMD(fmt.Sprintf("mkdir -p %s && sudo cp -rf /usr/local/omc/etc/*.{yaml,conf} %s", neDirTemp, neDirTemp)) + } else if neTypeLower == "smsc" { + sshClient.RunCMD(fmt.Sprintf("mkdir -p %s && sudo cp -rf /usr/local/etc/smsc/{*.yaml,*.conf,*conf.txt} %s", neDirTemp, neDirTemp)) + sshClient.RunCMD(fmt.Sprintf("sudo cp -rf /usr/local/etc/smsc/conf %s/conf", neDirTemp)) } else { nePath := fmt.Sprintf("/usr/local/etc/%s/*.yaml", neTypeLower) if neTypeLower == "mme" { diff --git a/src/modules/network_element/service/ne_host.go b/src/modules/network_element/service/ne_host.go index c8ee1c2..fbedaa1 100644 --- a/src/modules/network_element/service/ne_host.go +++ b/src/modules/network_element/service/ne_host.go @@ -149,6 +149,13 @@ func (r *NeHost) DeleteByIds(hostIds []string) (int64, error) { return 0, fmt.Errorf("neHost.noData") } + for _, v := range ids { + if v.GroupID == "1" { + // 主机信息操作【%s】失败,禁止操作网元 + return 0, fmt.Errorf("neHost.banNE") + } + } + if len(ids) == len(hostIds) { rows := r.neHostRepository.DeleteByIds(hostIds) return rows, nil diff --git a/src/modules/network_element/service/ne_info.go b/src/modules/network_element/service/ne_info.go index cdde10e..e01f510 100644 --- a/src/modules/network_element/service/ne_info.go +++ b/src/modules/network_element/service/ne_info.go @@ -79,6 +79,28 @@ func (r *NeInfo) ClearNeCacheByNeType(neType string) bool { return delOk } +// SelectNeInfoByNeType 通过ne_type查询网元信息 +func (r *NeInfo) SelectNeInfoByNeType(neType string) []model.NeInfo { + neInfo := make([]model.NeInfo, 0) + key := fmt.Sprintf("%s%s:*", cachekey.NE_KEY, strings.ToUpper(neType)) + jsonStr, _ := redis.Get("", key) + if len(jsonStr) > 7 { + err := json.Unmarshal([]byte(jsonStr), &neInfo) + if err != nil { + return neInfo + } + } else { + neInfo = r.neInfoRepository.SelectList(model.NeInfo{NeType: neType}) + for _, v := range neInfo { + key := fmt.Sprintf("%s%s:%s", cachekey.NE_KEY, strings.ToUpper(v.NeType), v.NeId) + redis.Del("", key) + values, _ := json.Marshal(v) + redis.Set("", key, string(values)) + } + } + return neInfo +} + // SelectNeInfoByRmuid 通过rmUID查询网元信息 func (r *NeInfo) SelectNeInfoByRmuid(rmUid string) model.NeInfo { var neInfo model.NeInfo @@ -910,22 +932,25 @@ func (r *NeInfo) neConfPara5GDataConvert(content map[string]any) map[string]stri "DNN_IMS": basic["dnn_ims"].(string), // external - "N2_IP": external["amfn2_ip"].(string), - "UE_POOL": external["ue_pool"].(string), - "UE_IP": ueIP, - "UE_MASK": ueMask, - "UE_CIDR": ueCicr, - "UPF_TYPE": external["upf_type"].(string), // StandardUPF LightUPF - "N3_IP": n3IP, - "N3_MASK": n3Mask, - "N3_GW": external["upfn3_gw"].(string), - "N3_PCI": external["upfn3_pci"].(string), - "N3_MAC": external["upfn3_mac"].(string), - "N6_IP": n6IP, - "N6_MASK": n6Mask, - "N6_GW": external["upfn6_gw"].(string), - "N6_PCI": external["upfn6_pci"].(string), - "N6_MAC": external["upfn6_mac"].(string), + "N2_IP": external["amfn2_ip"].(string), + "UE_POOL": external["ue_pool"].(string), // 轻量版才用配置 + "UE_IP": ueIP, + "UE_MASK": ueMask, + "UE_CIDR": ueCicr, + "UPF_TYPE": external["upf_type"].(string), // 类型 StandardUPF LightUPF + "UPF_DRIVER_TYPE": external["upf_driver_type"].(string), // 网卡驱动 vmxnet3 host dpdk + "N3_IP": n3IP, + "N3_MASK": n3Mask, + "N3_GW": external["upfn3_gw"].(string), + "N3_PCI": external["upfn3_pci"].(string), + "N3_MAC": external["upfn3_mac"].(string), + "N3_NIC_NAME": external["upfn3_card_name"].(string), // 网卡名 eth0 + "N6_IP": n6IP, + "N6_MASK": n6Mask, + "N6_GW": external["upfn6_gw"].(string), + "N6_PCI": external["upfn6_pci"].(string), + "N6_MAC": external["upfn6_mac"].(string), + "N6_NIC_NAME": external["upfn6_card_name"].(string), // 网卡名 eth0 "SIP_IP": external["ims_sip_ip"].(string), diff --git a/src/modules/network_element/service/ne_version.go b/src/modules/network_element/service/ne_version.go index ea8152f..31aa4ad 100644 --- a/src/modules/network_element/service/ne_version.go +++ b/src/modules/network_element/service/ne_version.go @@ -239,7 +239,7 @@ func (r *NeVersion) operateCommand(action, neType string, neFilePaths []string) pkgCmdStr := fmt.Sprintf("sudo dpkg -i %s", strings.Join(neFilePaths, " ")) fileExt := filepath.Ext(strings.ToLower(neFilePaths[0])) if strings.HasSuffix(fileExt, "rpm") { - pkgCmdStr = fmt.Sprintf("sudo rpm -Uvh %s", strings.Join(neFilePaths, " ")) + pkgCmdStr = fmt.Sprintf("sudo rpm -Uvh --reinstall %s", strings.Join(neFilePaths, " ")) } // 组合命令输入 @@ -257,7 +257,7 @@ func (r *NeVersion) operateCommand(action, neType string, neFilePaths []string) // 升级软件包 pkgCmdStr = fmt.Sprintf("sudo M_PARAM=upgrade dpkg -i %s", strings.Join(neFilePaths, " ")) if strings.HasSuffix(fileExt, "rpm") { - pkgCmdStr = fmt.Sprintf("sudo M_PARAM=upgrade rpm -Uvh %s", strings.Join(neFilePaths, " ")) + pkgCmdStr = fmt.Sprintf("sudo M_PARAM=upgrade rpm -Uvh --reinstall %s", strings.Join(neFilePaths, " ")) } omcStrArr = append(omcStrArr, pkgCmdStr) } @@ -428,22 +428,35 @@ func (r *NeVersion) operateCommand(action, neType string, neFilePaths []string) cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/upf/default/upfForwarder_1.yaml /usr/local/etc/upf/upfForwarder_1.yaml \n") cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/upf/upfcfg.yaml \n", para5GData["UPF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/localhost/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UPF_IP"])) - // UE - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4: 10.2.1.0/s/ueIpv4: 10.2.1.0/ueIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_IP"])) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4Mask: 255.255.255.0/s/ueIpv4Mask: 255.255.255.0/ueIpv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_MASK"])) // N3 cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.190/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_MASK"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_GW"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/interfacePCI: \"0000:00:00.0\"/s/interfacePCI: \"0000:00:00.0\"/interfacePCI: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_PCI"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/macAddr: \"00:00:00:00:00:00\"/s/macAddr: \"00:00:00:00:00:00\"/macAddr: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_MAC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: N3/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_MASK"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: N3/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_GW"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: N3/,/interfacePCI: \"0000:00:00.0\"/s/interfacePCI: \"0000:00:00.0\"/interfacePCI: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_PCI"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: N3/,/macAddr: \"00:00:00:00:00:00\"/s/macAddr: \"00:00:00:00:00:00\"/macAddr: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_MAC"])) // 标准版 N6 if para5GData["UPF_TYPE"] == "StandardUPF" { cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.191/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/driverType: .*/s/driverType: .*/driverType: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UPF_DRIVER_TYPE"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/systemNetworkCardName: .*/s/systemNetworkCardName: .*/systemNetworkCardName: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_NIC_NAME"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/driverType: .*/s/driverType: .*/driverType: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UPF_DRIVER_TYPE"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/systemNetworkCardName: .*/s/systemNetworkCardName: .*/systemNetworkCardName: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_NIC_NAME"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_MASK"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_GW"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/interfacePCI: \"0000:00:00.0\"/s/interfacePCI: \"0000:00:00.0\"/interfacePCI: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_PCI"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/macAddr: \"00:00:00:00:00:00\"/s/macAddr: \"00:00:00:00:00:00\"/macAddr: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_MAC"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: N3/,/driverType: .*/s/driverType: .*/driverType: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UPF_DRIVER_TYPE"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: N3/,/systemNetworkCardName: .*/s/systemNetworkCardName: .*/systemNetworkCardName: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_NIC_NAME"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: N6/,/driverType: .*/s/driverType: .*/driverType: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UPF_DRIVER_TYPE"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: N6/,/systemNetworkCardName: .*/s/systemNetworkCardName: .*/systemNetworkCardName: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_NIC_NAME"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: N6/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_MASK"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: N6/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_GW"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: N6/,/interfacePCI: \"0000:00:00.0\"/s/interfacePCI: \"0000:00:00.0\"/interfacePCI: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_PCI"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: N6/,/macAddr: \"00:00:00:00:00:00\"/s/macAddr: \"00:00:00:00:00:00\"/macAddr: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_MAC"])) // 路由 cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo ip route add '%s/%s' via '%s' \n", para5GData["UE_IP"], para5GData["UE_CIDR"], para5GData["N6_IP"])) } @@ -451,7 +464,12 @@ func (r *NeVersion) operateCommand(action, neType string, neFilePaths []string) if para5GData["UPF_TYPE"] == "LightUPF" { cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/192.168.8.191/0.0.0.0/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/type: upfd/type: tun/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n") - cmdStrArr = append(cmdStrArr, "sudo sed -i 's/driverType: vmxnet3/driverType: \"\"/g' /usr/local/etc/upf/upfForwarder_1.yaml \n") + cmdStrArr = append(cmdStrArr, "sudo sed -i 's/driverType: .*/driverType: \"\"/g' /usr/local/etc/upf/upfForwarder_1.yaml \n") + // UE + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: N6/,/ueIpv4: 10.2.1.0/s/ueIpv4: 10.2.1.0/ueIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: N6/,/ueIpv4Mask: 255.255.255.0/s/ueIpv4Mask: 255.255.255.0/ueIpv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_MASK"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4: 10.2.1.0/s/ueIpv4: 10.2.1.0/ueIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4Mask: 255.255.255.0/s/ueIpv4Mask: 255.255.255.0/ueIpv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_MASK"])) } cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s upf' /etc/hosts || echo '%s upf' | sudo tee -a /etc/hosts \n", para5GData["UPF_IP"], para5GData["UPF_IP"])) cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s upfn3' /etc/hosts || echo '%s upfn3' | sudo tee -a /etc/hosts \n", para5GData["N3_IP"], para5GData["N3_IP"])) @@ -539,14 +557,14 @@ func (r *NeVersion) operateCommand(action, neType string, neFilePaths []string) if strings.Contains(pkgCmdStr, "adb") { para5GData := NewNeInfo.Para5GData cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/adb/default/adb.conf /usr/local/etc/adb/adb.conf \n") - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/bind 127.0.0.1/bind 127.0.0.1 %s/g\" /usr/local/etc/adb/adb.conf \n", para5GData["DB_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/bind 127.0.0.1/bind %s/g\" /usr/local/etc/adb/adb.conf \n", para5GData["DB_IP"])) cmdStrArr = append(cmdStrArr, "sudo service adb restart \n") } // kvdb if strings.Contains(pkgCmdStr, "kvdb") { para5GData := NewNeInfo.Para5GData cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/kvdb/default/kvdb.conf /usr/local/etc/kvdb/kvdb.conf \n") - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/bind 127.0.0.1/bind 127.0.0.1 %s/g\" /usr/local/etc/kvdb/kvdb.conf \n", para5GData["DB_IP"])) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/bind 127.0.0.1/bind %s/g\" /usr/local/etc/kvdb/kvdb.conf \n", para5GData["DB_IP"])) cmdStrArr = append(cmdStrArr, "sudo service kvdb restart \n") } } @@ -671,17 +689,20 @@ func (r *NeVersion) operateDome(action string, neVersion model.NeVersion) error smscHost := fmt.Sprintf("%s smsc.ims.%s.3gppnetwork.org", para5GData["SMSC_IP"], mnc_mcc) smscHostCMD := fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", smscHost, smscHost) smscIPCMD := fmt.Sprintf("grep -qxF '%s smsc' /etc/hosts || echo '%s smsc' | sudo tee -a /etc/hosts \n", para5GData["SMSC_IP"], para5GData["SMSC_IP"]) + smsHost := fmt.Sprintf("sudo sed -i '/^%s smsc.*smsc$/c\\' /etc/hosts", para5GData["SIP_IP"]) + // IMS 配置 imsNEs := NewNeInfo.SelectList(model.NeInfo{NeType: "IMS"}, false, false) for _, v := range imsNEs { NewNeInfo.NeRunSSHCmd(v.NeType, v.NeId, smscIPCMD) NewNeInfo.NeRunSSHCmd(v.NeType, v.NeId, smscHostCMD) + NewNeInfo.NeRunSSHCmd(v.NeType, v.NeId, smsHost) NewNeInfo.NeRunSSHCmd(v.NeType, v.NeId, "sudo sed -i '/^#!define WITH_SMS/ s/^/#/' /usr/local/etc/ims/vars.cfg") NewNeInfo.NeRunSSHCmd(v.NeType, v.NeId, "ims-stop || true && ims-start") } // UDM 配置 - smscASName := fmt.Sprintf("sudo sed -i '/- name: sms_as/{n;s|serverName: .*|serverName: sip:%s:5060|}' /usr/local/etc/udm/as.yaml", para5GData["SMSC_IP"]) - smscASAddress := fmt.Sprintf("sudo sed -i '/- name: sms_as/{n;s|diameterAddress: .*|diameterAddress: smsc.ims.%s.3gppnetwork.org|}' /usr/local/etc/udm/as.yaml", mnc_mcc) + smscASName := fmt.Sprintf("sudo sed -i \"/- name: 'sms_as'/{n;s|serverName: .*|serverName: 'sip:%s:5060'|}\" /usr/local/etc/udm/as.yaml", para5GData["SMSC_IP"]) + smscASAddress := fmt.Sprintf("sudo sed -i \"/- name: 'sms_as'/{n;n;n;s|diameterAddress: .*|diameterAddress: 'smsc.ims.%s.3gppnetwork.org'|}\" /usr/local/etc/udm/as.yaml", mnc_mcc) udmNEs := NewNeInfo.SelectList(model.NeInfo{NeType: "UDM"}, false, false) for _, v := range udmNEs { NewNeInfo.NeRunSSHCmd(v.NeType, v.NeId, smscIPCMD) diff --git a/src/modules/tool/controller/iperf.go b/src/modules/tool/controller/iperf.go index 71413d6..c684974 100644 --- a/src/modules/tool/controller/iperf.go +++ b/src/modules/tool/controller/iperf.go @@ -37,15 +37,16 @@ type IPerfController struct { func (s *IPerfController) Version(c *gin.Context) { language := ctx.AcceptLanguage(c) var query struct { - NeType string `form:"neType" binding:"required"` // 网元类型 - NeID string `form:"neId" binding:"required"` // 网元ID + NeType string `form:"neType" binding:"required"` // 网元类型 + NeId string `form:"neId" binding:"required"` // 网元ID + Version string `form:"version" binding:"required,oneof=V2 V3"` // 版本 } if err := c.ShouldBindQuery(&query); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } - output, err := s.iperfService.Version(query.NeType, query.NeID) + output, err := s.iperfService.Version(query.NeType, query.NeId, query.Version) if err != nil { c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error()))) return @@ -60,15 +61,16 @@ func (s *IPerfController) Version(c *gin.Context) { func (s *IPerfController) Install(c *gin.Context) { language := ctx.AcceptLanguage(c) var body struct { - NeType string `json:"neType" binding:"required"` // 网元类型 - NeID string `json:"neId" binding:"required"` // 网元ID + NeType string `json:"neType" binding:"required"` // 网元类型 + NeId string `json:"neId" binding:"required"` // 网元ID + Version string `form:"version" binding:"required,oneof=V2 V3"` // 版本 } if err := c.ShouldBindBodyWithJSON(&body); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } - if err := s.iperfService.Install(body.NeType, body.NeID); err != nil { + if err := s.iperfService.Install(body.NeType, body.NeId, body.Version); err != nil { c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error()))) return } diff --git a/src/modules/tool/service/iperf.go b/src/modules/tool/service/iperf.go index 75ffaae..bdb3b7e 100644 --- a/src/modules/tool/service/iperf.go +++ b/src/modules/tool/service/iperf.go @@ -22,17 +22,39 @@ var NewIPerf = &IPerf{} type IPerf struct{} // Version 查询版本信息 -func (s *IPerf) Version(meType, neId string) (string, error) { - // 检查是否安装iperf3 - output, err := neService.NewNeInfo.NeRunSSHCmd(meType, neId, "iperf3 --version") +func (s *IPerf) Version(meType, neId, version string) (string, error) { + if version != "V2" && version != "V3" { + return "", fmt.Errorf("iperf version is required V2 or V3") + } + cmd := "iperf3 --version" + if version == "V2" { + cmd = "iperf -v" + } + + // 网元主机的SSH客户端 + sshClient, err := neService.NewNeInfo.NeRunSSHClient(meType, neId) if err != nil { - return "", fmt.Errorf("iperf3 not installed") + return "", err + } + defer sshClient.Close() + + // 检查是否安装iperf + output, err := sshClient.RunCMD(cmd) + if err != nil { + if version == "V2" && strings.HasSuffix(err.Error(), "status 1") { // V2 版本 + return strings.TrimSpace(output), nil + } + return "", fmt.Errorf("iperf %s not installed", version) } return strings.TrimSpace(output), err } // Install 安装iperf3 -func (s *IPerf) Install(meType, neId string) error { +func (s *IPerf) Install(meType, neId, version string) error { + if version != "V2" && version != "V3" { + return fmt.Errorf("iperf version is required V2 or V3") + } + // 网元主机的SSH客户端 sshClient, err := neService.NewNeInfo.NeRunSSHClient(meType, neId) if err != nil { @@ -56,9 +78,16 @@ func (s *IPerf) Install(meType, neId string) error { depDir = "assets/dependency/iperf3/deb" // sudo apt remove iperf3 libiperf0 libsctp1 libsctp-dev lksctp-tools } else if _, err := sshClient.RunCMD("sudo yum --version"); err == nil { - depPkg = "sudo rpm -Uvh --force" + depPkg = "sudo rpm -Uvh --nosignature --reinstall --force" depDir = "assets/dependency/iperf3/rpm" // yum remove iperf3 iperf3-help.noarch + } else { + return fmt.Errorf("iperf %s not supported install", version) + } + + // V2版本和V3版本的安装包路径不同 + if version == "V2" { + depDir = strings.Replace(depDir, "iperf3", "iperf", 1) } // 从 embed.FS 中读取默认配置文件内容 @@ -72,19 +101,19 @@ func (s *IPerf) Install(meType, neId string) error { // 打开本地文件 localFile, err := assetsDir.Open(fmt.Sprintf("%s/%s", depDir, d.Name())) if err != nil { - return fmt.Errorf("iperf3 file local error") + return fmt.Errorf("iperf %s file local error", version) } defer localFile.Close() // 创建远程文件 remotePath := fmt.Sprintf("%s/%s", nePath, d.Name()) remoteFile, err := sftpClient.Client.Create(remotePath) if err != nil { - return fmt.Errorf("iperf3 file remote error") + return fmt.Errorf("iperf %s file remote error", version) } defer remoteFile.Close() // 使用 io.Copy 将嵌入的文件内容复制到目标文件 if _, err := io.Copy(remoteFile, localFile); err != nil { - return fmt.Errorf("iperf3 file copy error") + return fmt.Errorf("iperf %s file copy error", version) } neFilePaths = append(neFilePaths, remotePath) } @@ -98,7 +127,7 @@ func (s *IPerf) Install(meType, neId string) error { // 安装软件包 pkgInstall := fmt.Sprintf("%s %s", depPkg, strings.Join(neFilePaths, " ")) if _, err := sshClient.RunCMD(pkgInstall); err != nil { - return fmt.Errorf("iperf3 install error") + return fmt.Errorf("iperf %s install error", version) } return err } @@ -108,7 +137,7 @@ func (s *IPerf) Run(client *wsModel.WSClient, reqMsg wsModel.WSRequest) { // 必传requestId确认消息 if reqMsg.RequestID == "" { msg := "message requestId is required" - logger.Infof("ws IPerf3 Run UID %s err: %s", client.BindUid, msg) + logger.Infof("ws IPerf Run UID %s err: %s", client.BindUid, msg) msgByte, _ := json.Marshal(result.ErrMsg(msg)) client.MsgChan <- msgByte return @@ -126,7 +155,7 @@ func (s *IPerf) Run(client *wsModel.WSClient, reqMsg wsModel.WSRequest) { time.Sleep(1 * time.Second) client.StopChan <- struct{}{} return - case "iperf3": + case "iperf": // SSH会话消息接收写入会话 var command string command, err = s.parseOptions(reqMsg.Data) @@ -155,7 +184,7 @@ func (s *IPerf) Run(client *wsModel.WSClient, reqMsg wsModel.WSRequest) { } if err != nil { - logger.Warnf("ws IPerf3 Run UID %s err: %s", client.BindUid, err.Error()) + logger.Warnf("ws IPerf Run UID %s err: %s", client.BindUid, err.Error()) msgByte, _ := json.Marshal(result.ErrMsg(err.Error())) client.MsgChan <- msgByte if err == io.EOF { @@ -175,7 +204,8 @@ func (s *IPerf) parseOptions(reqData any) (string, error) { msgByte, _ := json.Marshal(reqData) var data struct { Command string `json:"command"` // 命令字符串 - Client bool `json:"client"` // 服务端或客户端,默认服务端 + Version string `json:"version"` // 服务版本,默认V3 + Mode string `json:"mode"` // 服务端或客户端,默认客户端client Host string `json:"host"` // 客户端连接到的服务端IP地址 // Server or Client Port int `json:"port"` // 服务端口 @@ -183,17 +213,25 @@ func (s *IPerf) parseOptions(reqData any) (string, error) { // Server OneOff bool `json:"oneOff"` // 只进行一次连接 // Client - UDP bool `json:"udp"` // use UDP rather than TCP - Time int `json:"time"` // 以秒为单位的传输时间(默认为 10 秒) - Reverse bool `json:"reverse"` // 以反向模式运行(服务器发送,客户端接收) - Window string `json:"window"` // 设置窗口大小/套接字缓冲区大小 + UDP bool `json:"udp"` // use UDP rather than TCP + Time int `json:"time"` // 以秒为单位的传输时间(默认为 10 秒) + Reverse bool `json:"reverse"` // 以反向模式运行(服务器发送,客户端接收) + Window string `json:"window"` // 设置窗口大小/套接字缓冲区大小 + Parallel int `json:"parallel"` // 运行的并行客户端流数量 + Bitrate int `json:"bitrate"` // 以比特/秒为单位(0 表示无限制) } if err := json.Unmarshal(msgByte, &data); err != nil { logger.Warnf("ws processor parseClient err: %s", err.Error()) return "", fmt.Errorf("query data structure error") } + if data.Version != "V3" && data.Version != "V2" { + return "", fmt.Errorf("query data version support V3 or V2") + } command := []string{"iperf3"} + if data.Version == "V2" { + command = []string{"iperf"} + } // 命令字符串高优先级 if data.Command != "" { command = append(command, data.Command) @@ -201,16 +239,14 @@ func (s *IPerf) parseOptions(reqData any) (string, error) { return strings.Join(command, " "), nil } - if data.Client && data.Host == "" { + if data.Mode != "client" && data.Mode != "server" { + return "", fmt.Errorf("query data mode support client or server") + } + if data.Mode == "client" && data.Host == "" { return "", fmt.Errorf("query data client host empty") } - if !data.Client { - command = append(command, "-s") - // Server - if data.OneOff { - command = append(command, "-1") - } - } else { + + if data.Mode == "client" { command = append(command, "-c") command = append(command, data.Host) // Client @@ -220,6 +256,12 @@ func (s *IPerf) parseOptions(reqData any) (string, error) { if data.Time > 0 { command = append(command, fmt.Sprintf("-t %d", data.Time)) } + if data.Bitrate > 0 { + command = append(command, fmt.Sprintf("-b %d", data.Bitrate)) + } + if data.Parallel > 0 { + command = append(command, fmt.Sprintf("-P %d", data.Parallel)) + } if data.Reverse { command = append(command, "-R") } @@ -227,6 +269,13 @@ func (s *IPerf) parseOptions(reqData any) (string, error) { command = append(command, fmt.Sprintf("-w %s", data.Window)) } } + if data.Mode == "server" { + command = append(command, "-s") + // Server + if data.OneOff { + command = append(command, "-1") + } + } // Server or Client if data.Port > 0 { diff --git a/src/modules/ws/controller/ws_redis.go b/src/modules/ws/controller/ws_redis.go new file mode 100644 index 0000000..febcd3c --- /dev/null +++ b/src/modules/ws/controller/ws_redis.go @@ -0,0 +1,69 @@ +package controller + +import ( + "be.ems/src/framework/i18n" + "be.ems/src/framework/logger" + "be.ems/src/framework/redis" + "be.ems/src/framework/utils/ctx" + "be.ems/src/framework/vo/result" + neService "be.ems/src/modules/network_element/service" + + "github.com/gin-gonic/gin" +) + +// Redis 终端 +// +// GET /redis?hostId=1 +func (s *WSController) Redis(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var query struct { + HostId string `form:"hostId" binding:"required"` // 连接主机ID + } + if err := c.ShouldBindQuery(&query); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + // 登录用户信息 + loginUser, err := ctx.LoginUser(c) + if err != nil { + c.JSON(401, result.CodeMsg(401, i18n.TKey(language, err.Error()))) + return + } + + neHost := neService.NewNeHost.SelectById(query.HostId) + if neHost.HostID != query.HostId || neHost.HostType != "redis" { + // 没有可访问主机信息数据! + c.JSON(200, result.ErrMsg(i18n.TKey(language, "neHost.noData"))) + return + } + + // 创建链接Redis客户端 + var connRedis redis.ConnRedis + neHost.CopyTo(&connRedis) + client, err := connRedis.NewClient() + if err != nil { + // 连接主机失败,请检查连接参数后重试 + c.JSON(200, result.ErrMsg(i18n.TKey(language, "neHost.errByHostInfo"))) + return + } + defer client.Close() + + // 将 HTTP 连接升级为 WebSocket 连接 + wsConn := s.wsService.UpgraderWs(c.Writer, c.Request) + if wsConn == nil { + return + } + defer wsConn.Close() + + wsClient := s.wsService.ClientCreate(loginUser.UserID, nil, wsConn, client) + go s.wsService.ClientWriteListen(wsClient) + go s.wsService.ClientReadListen(wsClient, s.wsReceiveService.Redis) + + // 等待停止信号 + for value := range wsClient.StopChan { + s.wsService.ClientClose(wsClient.ID) + logger.Infof("ws Stop Client UID %s %s", wsClient.BindUid, value) + return + } +} diff --git a/src/modules/ws/service/ws_receive.go b/src/modules/ws/service/ws_receive.go index f374b3f..1b3b516 100644 --- a/src/modules/ws/service/ws_receive.go +++ b/src/modules/ws/service/ws_receive.go @@ -4,9 +4,12 @@ import ( "encoding/json" "fmt" "io" + "reflect" + "strings" "time" "be.ems/src/framework/logger" + "be.ems/src/framework/redis" "be.ems/src/framework/telnet" "be.ems/src/framework/utils/ssh" "be.ems/src/framework/vo/result" @@ -104,7 +107,7 @@ func (s *WSReceive) Shell(client *model.WSClient, reqMsg model.WSRequest) { command := reqMsg.Data.(string) sshClientSession := client.ChildConn.(*ssh.SSHClientSession) _, err = sshClientSession.Write(command) - case "ssh_resize": + case "resize": // SSH会话窗口重置 msgByte, _ := json.Marshal(reqMsg.Data) var data struct { @@ -225,7 +228,7 @@ func (s *WSReceive) Telnet(client *model.WSClient, reqMsg model.WSRequest) { command := reqMsg.Data.(string) telnetClientSession := client.ChildConn.(*telnet.TelnetClientSession) _, err = telnetClientSession.Write(command) - case "telnet_resize": + case "resize": // Telnet会话窗口重置 msgByte, _ := json.Marshal(reqMsg.Data) var data struct { @@ -256,3 +259,76 @@ func (s *WSReceive) Telnet(client *model.WSClient, reqMsg model.WSRequest) { client.MsgChan <- resByte } } + +// Redis 接收终端交互业务处理 +func (s *WSReceive) Redis(client *model.WSClient, reqMsg model.WSRequest) { + // 必传requestId确认消息 + if reqMsg.RequestID == "" { + msg := "message requestId is required" + logger.Infof("ws Shell UID %s err: %s", client.BindUid, msg) + msgByte, _ := json.Marshal(result.ErrMsg(msg)) + client.MsgChan <- msgByte + return + } + + var resByte []byte + var err error + + switch reqMsg.Type { + case "close": + s.close(client) + return + case "redis": + // Redis会话消息接收写入会话 + command := fmt.Sprint(reqMsg.Data) + redisClientSession := client.ChildConn.(*redis.ConnRedis) + output, err := redisClientSession.RunCMD(command) + dataStr := "" + if err != nil { + dataStr = fmt.Sprintf("%s \r\n", err.Error()) + } else { + // 获取结果的反射类型 + resultType := reflect.TypeOf(output) + switch resultType.Kind() { + case reflect.Slice: + // 如果是切片类型需要进一步判断是否是 []string 或 []interface{} + if resultType.Elem().Kind() == reflect.String { + dataStr = fmt.Sprintf("%s \r\n", strings.Join(output.([]string), "\r\n")) + } else if resultType.Elem().Kind() == reflect.Interface { + arr := []string{} + for _, v := range output.([]any) { + arr = append(arr, fmt.Sprintf("%s", v)) + } + dataStr = fmt.Sprintf("%s \r\n", strings.Join(arr, "\r\n")) + } + case reflect.Ptr: + dataStr = "\r\n" + case reflect.String, reflect.Int64: + dataStr = fmt.Sprintf("%s \r\n", output) + default: + dataStr = fmt.Sprintf("%s \r\n", output) + } + } + resByte, _ = json.Marshal(result.Ok(map[string]any{ + "requestId": reqMsg.RequestID, + "data": dataStr, + })) + default: + err = fmt.Errorf("message type %s not supported", reqMsg.Type) + } + + if err != nil { + logger.Warnf("ws Shell UID %s err: %s", client.BindUid, err.Error()) + msgByte, _ := json.Marshal(result.ErrMsg(err.Error())) + client.MsgChan <- msgByte + if err == io.EOF { + // 等待1s后关闭连接 + time.Sleep(1 * time.Second) + client.StopChan <- struct{}{} + } + return + } + if len(resByte) > 0 { + client.MsgChan <- resByte + } +} diff --git a/src/modules/ws/ws.go b/src/modules/ws/ws.go index 976b901..35e63f8 100644 --- a/src/modules/ws/ws.go +++ b/src/modules/ws/ws.go @@ -35,6 +35,11 @@ func Setup(router *gin.Engine) { collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.ws", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewWSController.Telnet, ) + wsGroup.GET("/redis", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.ws", collectlogs.BUSINESS_TYPE_OTHER)), + controller.NewWSController.Redis, + ) wsGroup.GET("/view", middleware.PreAuthorize(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.ws", collectlogs.BUSINESS_TYPE_OTHER)),