From fb4c6b483d93dc504ab38ca2120e828c68e90a84 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 23 Jul 2024 11:56:30 +0800 Subject: [PATCH 01/34] =?UTF-8?q?feat:=20=E7=BD=91=E5=85=83=5F=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E9=85=8D=E7=BD=AE=E5=8F=AF=E7=94=A8=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E5=80=BC=E7=BC=93=E5=AD=98=E5=B9=B6=E6=94=AF=E6=8C=81=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E4=BF=AE=E6=94=B9=E7=9A=84=E5=8A=9F=E8=83=BD=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/ne_config.go | 147 ++++++++++++++++-- .../network_element/model/ne_config.go | 22 +-- .../repository/ne_config.impl.go | 85 +++++----- .../network_element/service/ne_config.go | 3 + .../network_element/service/ne_config.impl.go | 27 +++- 5 files changed, 211 insertions(+), 73 deletions(-) diff --git a/src/modules/network_element/controller/ne_config.go b/src/modules/network_element/controller/ne_config.go index 9c804ae7..0c74b33c 100644 --- a/src/modules/network_element/controller/ne_config.go +++ b/src/modules/network_element/controller/ne_config.go @@ -60,7 +60,7 @@ func (s *NeConfigController) Info(c *gin.Context) { } // 将字符串转json数据 - if err := json.Unmarshal([]byte(data.ParamJSONStr), &data.ParamData); err != nil { + if err := json.Unmarshal([]byte(data.ParamJson), &data.ParamData); err != nil { c.JSON(400, result.CodeMsg(400, err.Error())) return } @@ -84,7 +84,7 @@ func (s *NeConfigController) Add(c *gin.Context) { c.JSON(400, result.CodeMsg(400, err.Error())) return } - body.ParamJSONStr = string(paramDataByte) + body.ParamJson = string(paramDataByte) insertId := s.neConfigService.Insert(body) if insertId != "" { @@ -120,7 +120,7 @@ func (s *NeConfigController) Edit(c *gin.Context) { c.JSON(400, result.CodeMsg(400, err.Error())) return } - body.ParamJSONStr = string(paramDataByte) + body.ParamJson = string(paramDataByte) rows := s.neConfigService.Update(body) if rows > 0 { @@ -132,16 +132,16 @@ func (s *NeConfigController) Edit(c *gin.Context) { // 网元参数配置可用属性值删除 // -// DELETE /:ids +// DELETE / func (s *NeConfigController) Remove(c *gin.Context) { language := ctx.AcceptLanguage(c) - ids := c.Param("ids") - if ids == "" { + id, okId := c.GetQuery("id") + if id == "" || !okId { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } // 处理字符转id数组后去重 - idsArr := strings.Split(ids, ",") + idsArr := strings.Split(id, ",") uniqueIDs := parse.RemoveDuplicates(idsArr) if len(uniqueIDs) <= 0 { c.JSON(200, result.Err(nil)) @@ -173,26 +173,26 @@ func (s *NeConfigController) ListByNeType(c *gin.Context) { // 网元参数配置数据信息 // // GET /data -func (s *NeConfigController) Data(c *gin.Context) { +func (s *NeConfigController) DataInfo(c *gin.Context) { language := ctx.AcceptLanguage(c) - var querys struct { - NeType string `form:"neType" binding:"required"` // 网元类型 - NeId string `form:"neId" binding:"required"` // 网元ID - TopTag string `form:"topTag" binding:"required"` // 可用属性 + var query struct { + NeType string `form:"neType" binding:"required"` // 网元类型 + NeId string `form:"neId" binding:"required"` // 网元ID + ParamName string `form:"paramName" binding:"required"` // 可用属性 } - if err := c.ShouldBindQuery(&querys); err != nil { + if err := c.ShouldBindQuery(&query); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } - neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(querys.NeType, querys.NeId) - if neInfo.NeId != querys.NeId || neInfo.IP == "" { + neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(query.NeType, query.NeId) + if neInfo.NeId != query.NeId || neInfo.IP == "" { c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) return } // 网元直连 - resData, err := neFetchlink.NeConfigInfo(neInfo, querys.TopTag) + resData, err := neFetchlink.NeConfigInfo(neInfo, query.ParamName) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return @@ -200,3 +200,118 @@ func (s *NeConfigController) Data(c *gin.Context) { c.JSON(200, result.Ok(resData)) } + +// 网元参数配置数据修改 +// +// PUT /data +func (s *NeConfigController) DataEdit(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var body struct { + NeType string `json:"neType" binding:"required"` // 网元类型 + NeId string `json:"neId" binding:"required"` // 网元ID + ParamName string `json:"paramName" binding:"required"` + ParamData map[string]any `json:"paramData" binding:"required"` + Loc string `json:"loc"` // 仅array使用与数据对象内index一致,有多层时划分嵌套层(index/subParamName/index) + } + if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(body.NeType, body.NeId) + if neInfo.NeId != body.NeId || neInfo.IP == "" { + c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + + // 网元直连 + 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) +// +// POST /data +func (s *NeConfigController) DataAdd(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var body struct { + NeType string `json:"neType" binding:"required"` // 网元类型 + NeId string `json:"neId" binding:"required"` // 网元ID + ParamName string `json:"paramName" binding:"required"` // 根据配置可选值 + ParamData map[string]any `json:"paramData" binding:"required"` // 数据对象 + Loc string `json:"loc" binding:"required"` // 与数据对象内index一致,有多层时划分嵌套层(index/subParamName/index) + } + if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + // 检查是否array + info := s.neConfigService.SelectNeConfigByNeTypeAndParamName(body.NeType, body.ParamName) + if info.ParamType != "array" { + c.JSON(400, result.CodeMsg(400, "this attribute does not support adding")) + return + } + // 必须含有index + _, idxOk := body.ParamData["index"] + if info.ParamType == "array" && !idxOk { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(body.NeType, body.NeId) + if neInfo.NeId != body.NeId || neInfo.IP == "" { + c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + + // 网元直连 + resData, err := neFetchlink.NeConfigInstall(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) +// +// DELETE /data +func (s *NeConfigController) DataRemove(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var query struct { + NeType string `form:"neType" binding:"required"` // 网元类型 + NeId string `form:"neId" binding:"required"` // 网元ID + ParamName string `form:"paramName" binding:"required"` + Loc string `form:"loc" binding:"required"` // 与数据对象内index一致,有多层时划分嵌套层(index/subParamName/index) + } + if err := c.ShouldBindQuery(&query); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + // 检查是否array + info := s.neConfigService.SelectNeConfigByNeTypeAndParamName(query.NeType, query.ParamName) + if info.ParamType != "array" { + c.JSON(400, result.CodeMsg(400, "this attribute does not support adding")) + return + } + + neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(query.NeType, query.NeId) + if neInfo.NeId != query.NeId || neInfo.IP == "" { + c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + + // 网元直连 + resData, err := neFetchlink.NeConfigDelete(neInfo, query.ParamName, query.Loc) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + c.JSON(200, result.OkData(resData)) +} diff --git a/src/modules/network_element/model/ne_config.go b/src/modules/network_element/model/ne_config.go index dcc7e054..99ae9941 100644 --- a/src/modules/network_element/model/ne_config.go +++ b/src/modules/network_element/model/ne_config.go @@ -1,21 +1,23 @@ package model -// NeConfig 网元参数配置可用属性值 +// NeConfig 网元_参数配置可用属性值 type NeConfig struct { - ID string `json:"id" gorm:"id"` - NeType string `json:"neType" binding:"required" gorm:"ne_type"` // 网元类型 - NeId string `json:"-" gorm:"ne_id"` - TopTag string `json:"topTag" binding:"required" gorm:"top_tag"` - TopDisplay string `json:"topDisplay" binding:"required" gorm:"top_display"` - Method string `json:"method" gorm:"method"` // 操作属性 get只读强制不可编辑删除 put可编辑 delete可删除 post可新增 - ParamJSONStr string `json:"-" gorm:"param_json"` // accesss属性控制:只读read-only/read/ro 读写read-write + ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` + NeType string `json:"neType" binding:"required" gorm:"ne_type"` // 网元类型 + ParamName string `json:"paramName" binding:"required" gorm:"param_name"` // 参数名 + ParamDisplay string `json:"paramDisplay" binding:"required" gorm:"param_display"` // 参数显示名 + ParamType string `json:"paramType" gorm:"param_type"` // 参数类型 list列表单层 array数组多层 + ParamJson string `json:"-" gorm:"param_json"` // accesss属性控制:只读read-only/read/ro 读写read-write + ParamSort int64 `json:"paramSort" gorm:"param_sort"` // 参数排序 + ParamPerms string `json:"paramPerms" gorm:"param_perms"` // 操作权限 get只读 put可编辑 delete可删除 post可新增 + UpdateTime int64 `json:"updateTime" gorm:"update_time"` // 更新时间 // ====== 非数据库字段属性 ====== - ParamData map[string]any `json:"paramData,omitempty" binding:"required" gorm:"-"` // 与ParamJSONStr配合转换 + ParamData []map[string]any `json:"paramData,omitempty" binding:"required" gorm:"-"` // 与ParamJSONStr配合转换 } // TableName 表名称 func (*NeConfig) TableName() string { - return "param_config" + return "ne_config" } diff --git a/src/modules/network_element/repository/ne_config.impl.go b/src/modules/network_element/repository/ne_config.impl.go index 8ea0db53..d7a845ef 100644 --- a/src/modules/network_element/repository/ne_config.impl.go +++ b/src/modules/network_element/repository/ne_config.impl.go @@ -2,6 +2,7 @@ package repository import ( "strings" + "time" "be.ems/src/framework/datasource" "be.ems/src/framework/logger" @@ -12,18 +13,18 @@ import ( // NewNeConfigImpl 网元参数配置可用属性值 实例化数据层 var NewNeConfigImpl = &NeConfigImpl{ - selectSql: `select - id, ne_type, ne_id, top_tag, top_display, method, param_json - from param_config`, + selectSql: `select id, ne_type, param_name, param_display, param_type, param_json, param_sort, param_perms, update_time from ne_config`, resultMap: map[string]string{ - "id": "ID", - "ne_type": "NeType", - "ne_id": "NeId", - "top_tag": "TopTag", - "top_display": "TopDisplay", - "method": "Method", - "param_json": "ParamJSONStr", + "id": "ID", + "ne_type": "NeType", + "param_name": "ParamName", + "param_display": "ParamDisplay", + "param_type": "ParamType", + "param_json": "ParamJson", + "param_sort": "ParamSort", + "param_perms": "ParamPerms", + "update_time": "UpdateTime", }, } @@ -59,8 +60,8 @@ func (r *NeConfigImpl) SelectPage(query map[string]any) map[string]any { conditions = append(conditions, "ne_type = ?") params = append(params, v) } - if v, ok := query["topTag"]; ok && v != "" { - conditions = append(conditions, "top_tag = ?") + if v, ok := query["paramName"]; ok && v != "" { + conditions = append(conditions, "param_name = ?") params = append(params, v) } @@ -76,7 +77,7 @@ func (r *NeConfigImpl) SelectPage(query map[string]any) map[string]any { } // 查询数量 长度为0直接返回 - totalSql := "select count(id) as 'total' from param_config" + totalSql := "select count(id) as 'total' from ne_config" totalRows, err := datasource.RawDB("", totalSql+whereSql, params) if err != nil { logger.Errorf("total err => %v", err) @@ -117,9 +118,9 @@ func (r *NeConfigImpl) SelectList(param model.NeConfig) []model.NeConfig { conditions = append(conditions, "ne_type = ?") params = append(params, param.NeType) } - if param.TopTag != "" { - conditions = append(conditions, "top_tag = ?") - params = append(params, param.TopTag) + if param.ParamName != "" { + conditions = append(conditions, "param_name = ?") + params = append(params, param.ParamName) } // 构建查询条件语句 @@ -129,7 +130,7 @@ func (r *NeConfigImpl) SelectList(param model.NeConfig) []model.NeConfig { } // 查询数据 - querySql := r.selectSql + whereSql + " order by id asc " + querySql := r.selectSql + whereSql + " order by param_sort asc " results, err := datasource.RawDB("", querySql, params) if err != nil { logger.Errorf("query err => %v", err) @@ -160,25 +161,27 @@ func (r *NeConfigImpl) Insert(param model.NeConfig) string { if param.NeType != "" { params["ne_type"] = param.NeType } - if param.NeId != "" { - params["ne_id"] = param.NeId + if param.ParamName != "" { + params["param_name"] = param.ParamName } - if param.TopTag != "" { - params["top_tag"] = param.TopTag + if param.ParamDisplay != "" { + params["param_display"] = param.ParamDisplay } - if param.TopDisplay != "" { - params["top_display"] = param.TopDisplay + if param.ParamType != "" { + params["param_type"] = param.ParamType } - if param.Method != "" { - params["method"] = param.Method + if param.ParamJson != "" { + params["param_json"] = param.ParamJson } - if param.ParamJSONStr != "" { - params["param_json"] = param.ParamJSONStr + params["param_sort"] = param.ParamSort + if param.ParamPerms != "" { + params["param_perms"] = param.ParamPerms } + params["update_time"] = time.Now().UnixMilli() // 构建执行语句 keys, placeholder, values := repo.KeyPlaceholderValueByInsert(params) - sql := "insert into param_config (" + strings.Join(keys, ",") + ")values(" + placeholder + ")" + sql := "insert into ne_config (" + strings.Join(keys, ",") + ")values(" + placeholder + ")" db := datasource.DefaultDB() // 开启事务 @@ -210,25 +213,27 @@ func (r *NeConfigImpl) Update(param model.NeConfig) int64 { if param.NeType != "" { params["ne_type"] = param.NeType } - if param.NeId != "" { - params["ne_id"] = param.NeId + if param.ParamName != "" { + params["param_name"] = param.ParamName } - if param.TopTag != "" { - params["top_tag"] = param.TopTag + if param.ParamDisplay != "" { + params["param_display"] = param.ParamDisplay } - if param.TopDisplay != "" { - params["top_display"] = param.TopDisplay + if param.ParamType != "" { + params["param_type"] = param.ParamType } - if param.Method != "" { - params["method"] = param.Method + if param.ParamJson != "" { + params["param_json"] = param.ParamJson } - if param.ParamJSONStr != "" { - params["param_json"] = param.ParamJSONStr + params["param_sort"] = param.ParamSort + if param.ParamPerms != "" { + params["param_perms"] = param.ParamPerms } + params["update_time"] = time.Now().UnixMilli() // 构建执行语句 keys, values := repo.KeyValueByUpdate(params) - sql := "update param_config set " + strings.Join(keys, ",") + " where id = ?" + sql := "update ne_config set " + strings.Join(keys, ",") + " where id = ?" // 执行更新 values = append(values, param.ID) @@ -243,7 +248,7 @@ func (r *NeConfigImpl) Update(param model.NeConfig) int64 { // DeleteByIds 批量删除信息 func (r *NeConfigImpl) DeleteByIds(ids []string) int64 { placeholder := repo.KeyPlaceholderByQuery(len(ids)) - sql := "delete from param_config where id in (" + placeholder + ")" + sql := "delete from ne_config where id in (" + placeholder + ")" parameters := repo.ConvertIdsSlice(ids) results, err := datasource.ExecDB("", sql, parameters) if err != nil { diff --git a/src/modules/network_element/service/ne_config.go b/src/modules/network_element/service/ne_config.go index fff9fe7b..e63c0b51 100644 --- a/src/modules/network_element/service/ne_config.go +++ b/src/modules/network_element/service/ne_config.go @@ -13,6 +13,9 @@ type INeConfig interface { // SelectNeConfigByNeType 查询网元类型参数配置 SelectNeConfigByNeType(neType string) []model.NeConfig + // SelectNeConfigByNeTypeAndParamName 查询网元类型参数配置By参数名 + SelectNeConfigByNeTypeAndParamName(neType, paramName string) model.NeConfig + // SelectNeHostPage 分页查询列表数据 SelectPage(query map[string]any) map[string]any diff --git a/src/modules/network_element/service/ne_config.impl.go b/src/modules/network_element/service/ne_config.impl.go index 6b4a4b82..120f5bf4 100644 --- a/src/modules/network_element/service/ne_config.impl.go +++ b/src/modules/network_element/service/ne_config.impl.go @@ -37,11 +37,11 @@ func (r *NeConfigImpl) RefreshByNeTypeAndNeID(neType string) []model.NeConfig { } } for k, v := range neConfigGroup { - key := fmt.Sprintf("%sparam_config:%s", cachekey.NE_DATA_KEY, strings.ToUpper(k)) + key := fmt.Sprintf("%sNeConfig:%s", cachekey.NE_DATA_KEY, strings.ToUpper(k)) redis.Del("", key) if len(v) > 0 { for i, item := range v { - if err := json.Unmarshal([]byte(item.ParamJSONStr), &item.ParamData); err != nil { + if err := json.Unmarshal([]byte(item.ParamJson), &item.ParamData); err != nil { continue } v[i] = item @@ -54,14 +54,14 @@ func (r *NeConfigImpl) RefreshByNeTypeAndNeID(neType string) []model.NeConfig { return neConfigList } // 单个 - key := fmt.Sprintf("%sparam_config:%s", cachekey.NE_DATA_KEY, strings.ToUpper(neType)) + key := fmt.Sprintf("%sNeConfig:%s", cachekey.NE_DATA_KEY, strings.ToUpper(neType)) redis.Del("", key) neConfigList := r.neConfigRepository.SelectList(model.NeConfig{ NeType: neType, }) if len(neConfigList) > 0 { for i, v := range neConfigList { - if err := json.Unmarshal([]byte(v.ParamJSONStr), &v.ParamData); err != nil { + if err := json.Unmarshal([]byte(v.ParamJson), &v.ParamData); err != nil { continue } neConfigList[i] = v @@ -74,9 +74,9 @@ func (r *NeConfigImpl) RefreshByNeTypeAndNeID(neType string) []model.NeConfig { // ClearNeCacheByNeType 清除网元类型参数配置缓存 func (r *NeConfigImpl) ClearNeCacheByNeType(neType string) bool { - key := fmt.Sprintf("%sparam_config:%s", cachekey.NE_DATA_KEY, neType) + key := fmt.Sprintf("%sNeConfig:%s", cachekey.NE_DATA_KEY, neType) if neType == "*" { - key = fmt.Sprintf("%sparam_config:*", cachekey.NE_DATA_KEY) + key = fmt.Sprintf("%sNeConfig:*", cachekey.NE_DATA_KEY) } keys, err := redis.GetKeys("", key) if err != nil { @@ -89,7 +89,7 @@ func (r *NeConfigImpl) ClearNeCacheByNeType(neType string) bool { // SelectNeConfigByNeType 查询网元类型参数配置 func (r *NeConfigImpl) SelectNeConfigByNeType(neType string) []model.NeConfig { var neConfigList []model.NeConfig - key := fmt.Sprintf("%sparam_config:%s", cachekey.NE_DATA_KEY, strings.ToUpper(neType)) + key := fmt.Sprintf("%sNeConfig:%s", cachekey.NE_DATA_KEY, strings.ToUpper(neType)) jsonStr, _ := redis.Get("", key) if len(jsonStr) > 7 { err := json.Unmarshal([]byte(jsonStr), &neConfigList) @@ -102,6 +102,19 @@ func (r *NeConfigImpl) SelectNeConfigByNeType(neType string) []model.NeConfig { return neConfigList } +// SelectNeConfigByNeTypeAndParamName 查询网元类型参数配置By参数名 +func (r *NeConfigImpl) SelectNeConfigByNeTypeAndParamName(neType, paramName string) model.NeConfig { + neConfigList := r.SelectNeConfigByNeType(neType) + var neConfig model.NeConfig + for _, v := range neConfigList { + if v.ParamName == paramName { + neConfig = v + break + } + } + return neConfig +} + // SelectNeHostPage 分页查询列表数据 func (r *NeConfigImpl) SelectPage(query map[string]any) map[string]any { return r.neConfigRepository.SelectPage(query) From 0a3a835a85bd680c1c2df1b7aafe0574294a4b87 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 23 Jul 2024 11:57:10 +0800 Subject: [PATCH 02/34] =?UTF-8?q?feat:=20=E7=BD=91=E5=85=83=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E5=A4=87=E4=BB=BD=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ne_config_backup.go | 82 ++++++ .../network_element/model/ne_config_backup.go | 24 ++ .../repository/ne_config_backup.go | 24 ++ .../repository/ne_config_backup.impl.go | 269 ++++++++++++++++++ .../service/ne_config_backup.go | 24 ++ .../service/ne_config_backup.impl.go | 67 +++++ 6 files changed, 490 insertions(+) create mode 100644 src/modules/network_element/controller/ne_config_backup.go create mode 100644 src/modules/network_element/model/ne_config_backup.go create mode 100644 src/modules/network_element/repository/ne_config_backup.go create mode 100644 src/modules/network_element/repository/ne_config_backup.impl.go create mode 100644 src/modules/network_element/service/ne_config_backup.go create mode 100644 src/modules/network_element/service/ne_config_backup.impl.go diff --git a/src/modules/network_element/controller/ne_config_backup.go b/src/modules/network_element/controller/ne_config_backup.go new file mode 100644 index 00000000..ad12c8cb --- /dev/null +++ b/src/modules/network_element/controller/ne_config_backup.go @@ -0,0 +1,82 @@ +package controller + +import ( + "strings" + + "be.ems/src/framework/i18n" + "be.ems/src/framework/utils/ctx" + "be.ems/src/framework/utils/parse" + "be.ems/src/framework/vo/result" + neService "be.ems/src/modules/network_element/service" + "github.com/gin-gonic/gin" +) + +// NewNeConfigBackup 实例化控制层 NeConfigBackupController 结构体 +var NewNeConfigBackup = &NeConfigBackupController{ + neConfigBackupService: neService.NewNeConfigBackupImpl, +} + +// 网元配置文件备份记录 +// +// PATH /config/backup +type NeConfigBackupController struct { + // 网元配置文件备份记录服务 + neConfigBackupService neService.INeConfigBackup +} + +// 网元配置文件备份记录列表 +// +// GET /list +func (s *NeConfigBackupController) List(c *gin.Context) { + querys := ctx.QueryMap(c) + data := s.neConfigBackupService.SelectPage(querys) + + c.JSON(200, result.Ok(data)) +} + +// 网元配置文件备份记录信息 +// +// GET /?id=xx +func (s *NeConfigBackupController) Info(c *gin.Context) { + language := ctx.AcceptLanguage(c) + id, ok := c.GetQuery("id") + if !ok || id == "" { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + item := s.neConfigBackupService.SelectById(id) + if item.ID != id { + // 没有可访问主机命令数据! + c.JSON(200, result.ErrMsg(i18n.TKey(language, "neConfigBackup.noData"))) + return + } + + c.JSON(200, result.OkData(item)) +} + +// 网元配置文件备份记录删除 +// +// DELETE /?id=xx +func (s *NeConfigBackupController) Remove(c *gin.Context) { + language := ctx.AcceptLanguage(c) + id, ok := c.GetQuery("id") + if !ok || id == "" { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + // 处理字符转id数组后去重 + ids := strings.Split(id, ",") + uniqueIDs := parse.RemoveDuplicates(ids) + if len(uniqueIDs) <= 0 { + c.JSON(200, result.Err(nil)) + return + } + rows, err := s.neConfigBackupService.DeleteByIds(uniqueIDs) + if err != nil { + c.JSON(200, result.ErrMsg(i18n.TKey(language, err.Error()))) + return + } + msg := i18n.TTemplate(language, "app.common.deleteSuccess", map[string]any{"num": rows}) + c.JSON(200, result.OkMsg(msg)) +} diff --git a/src/modules/network_element/model/ne_config_backup.go b/src/modules/network_element/model/ne_config_backup.go new file mode 100644 index 00000000..e753f652 --- /dev/null +++ b/src/modules/network_element/model/ne_config_backup.go @@ -0,0 +1,24 @@ +package model + +// NeConfigBackup 网元配置文件备份记录 ne_config_backup +type NeConfigBackup struct { + ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` + NeType string `json:"neType" gorm:"ne_type"` // 网元类型 + NeId string `json:"neId" gorm:"ne_id"` // 网元ID + Name string `json:"name" gorm:"name"` // 命名 + Version string `json:"version" gorm:"version"` // 网元版本 + Path string `json:"path" gorm:"path"` // 压缩包位置 + Remark string `json:"remark" gorm:"remark"` // 备注 + CreateBy string `json:"createBy" gorm:"create_by"` // 创建者 + CreateTime int64 `json:"createTime" gorm:"create_time"` // 创建时间 + UpdateBy string `json:"updateBy" gorm:"update_by"` // 更新者 + UpdateTime int64 `json:"updateTime" gorm:"update_time"` // 更新时间 + + // ====== 非数据库字段属性 ====== + +} + +// TableName 表名称 +func (*NeConfigBackup) TableName() string { + return "ne_config_backup" +} diff --git a/src/modules/network_element/repository/ne_config_backup.go b/src/modules/network_element/repository/ne_config_backup.go new file mode 100644 index 00000000..131f363d --- /dev/null +++ b/src/modules/network_element/repository/ne_config_backup.go @@ -0,0 +1,24 @@ +package repository + +import "be.ems/src/modules/network_element/model" + +// INeConfigBackup 网元配置文件备份记录 数据层接口 +type INeConfigBackup interface { + // SelectPage 根据条件分页查询字典类型 + SelectPage(query map[string]any) map[string]any + + // SelectList 根据实体查询 + SelectList(item model.NeConfigBackup) []model.NeConfigBackup + + // SelectByIds 通过ID查询 + SelectByIds(ids []string) []model.NeConfigBackup + + // Insert 新增信息 + Insert(item model.NeConfigBackup) string + + // Update 修改信息 + Update(item model.NeConfigBackup) int64 + + // DeleteByIds 批量删除信息 + DeleteByIds(ids []string) int64 +} diff --git a/src/modules/network_element/repository/ne_config_backup.impl.go b/src/modules/network_element/repository/ne_config_backup.impl.go new file mode 100644 index 00000000..c772da54 --- /dev/null +++ b/src/modules/network_element/repository/ne_config_backup.impl.go @@ -0,0 +1,269 @@ +package repository + +import ( + "strings" + "time" + + "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_element/model" +) + +// 实例化数据层 NewNeConfigBackupImpl 结构体 +var NewNeConfigBackupImpl = &NeConfigBackupImpl{ + selectSql: `select + id, ne_type, ne_id, name, version, path, remark, create_by, create_time, update_by, update_time + from ne_config_backup`, + + resultMap: map[string]string{ + "id": "ID", + "ne_type": "NeType", + "ne_id": "NeId", + "name": "Name", + "version": "Version", + "path": "Path", + "remark": "Remark", + "create_by": "CreateBy", + "create_time": "CreateTime", + "update_by": "UpdateBy", + "update_time": "UpdateTime", + }, +} + +// NeConfigBackupImpl 网元配置文件备份记录 数据层处理 +type NeConfigBackupImpl struct { + // 查询视图对象SQL + selectSql string + // 结果字段与实体映射 + resultMap map[string]string +} + +// convertResultRows 将结果记录转实体结果组 +func (r *NeConfigBackupImpl) convertResultRows(rows []map[string]any) []model.NeConfigBackup { + arr := make([]model.NeConfigBackup, 0) + for _, row := range rows { + item := model.NeConfigBackup{} + for key, value := range row { + if keyMapper, ok := r.resultMap[key]; ok { + repo.SetFieldValue(&item, keyMapper, value) + } + } + arr = append(arr, item) + } + return arr +} + +// SelectPage 根据条件分页查询字典类型 +func (r *NeConfigBackupImpl) SelectPage(query map[string]any) map[string]any { + // 查询条件拼接 + var conditions []string + var params []any + if v, ok := query["neType"]; ok && v != "" { + conditions = append(conditions, "ne_type = ?") + params = append(params, strings.Trim(v.(string), " ")) + } + if v, ok := query["neId"]; ok && v != "" { + conditions = append(conditions, "ne_id = ?") + params = append(params, strings.Trim(v.(string), " ")) + } + if v, ok := query["name"]; ok && v != "" { + conditions = append(conditions, "name like concat(?, '%')") + params = append(params, strings.Trim(v.(string), " ")) + } + + // 构建查询条件语句 + whereSql := "" + if len(conditions) > 0 { + whereSql += " where " + strings.Join(conditions, " and ") + } + + result := map[string]any{ + "total": 0, + "rows": []model.NeHost{}, + } + + // 查询数量 长度为0直接返回 + totalSql := "select count(1) as 'total' from ne_config_backup" + totalRows, err := datasource.RawDB("", totalSql+whereSql, params) + if err != nil { + logger.Errorf("total err => %v", err) + return result + } + total := parse.Number(totalRows[0]["total"]) + if total == 0 { + return result + } else { + result["total"] = total + } + + // 分页 + pageNum, pageSize := repo.PageNumSize(query["pageNum"], query["pageSize"]) + pageSql := " limit ?,? " + params = append(params, pageNum*pageSize) + params = append(params, pageSize) + + // 查询数据 + querySql := r.selectSql + whereSql + pageSql + results, err := datasource.RawDB("", querySql, params) + if err != nil { + logger.Errorf("query err => %v", err) + return result + } + + // 转换实体 + result["rows"] = r.convertResultRows(results) + return result +} + +// SelectList 根据实体查询 +func (r *NeConfigBackupImpl) SelectList(item model.NeConfigBackup) []model.NeConfigBackup { + // 查询条件拼接 + var conditions []string + var params []any + if item.NeType != "" { + conditions = append(conditions, "ne_type = ?") + params = append(params, item.NeType) + } + if item.NeId != "" { + conditions = append(conditions, "ne_id = ?") + params = append(params, item.NeId) + } + + // 构建查询条件语句 + whereSql := "" + if len(conditions) > 0 { + whereSql += " where " + strings.Join(conditions, " and ") + } + + // 查询数据 + querySql := r.selectSql + whereSql + " order by id desc " + results, err := datasource.RawDB("", querySql, params) + if err != nil { + logger.Errorf("query err => %v", err) + } + + // 转换实体 + return r.convertResultRows(results) +} + +// SelectByIds 通过ID查询 +func (r *NeConfigBackupImpl) SelectByIds(cmdIds []string) []model.NeConfigBackup { + placeholder := repo.KeyPlaceholderByQuery(len(cmdIds)) + querySql := r.selectSql + " where id in (" + placeholder + ")" + parameters := repo.ConvertIdsSlice(cmdIds) + results, err := datasource.RawDB("", querySql, parameters) + if err != nil { + logger.Errorf("query err => %v", err) + return []model.NeConfigBackup{} + } + // 转换实体 + return r.convertResultRows(results) +} + +// Insert 新增信息 +func (r *NeConfigBackupImpl) Insert(item model.NeConfigBackup) string { + // 参数拼接 + params := make(map[string]any) + if item.NeType != "" { + params["ne_type"] = item.NeType + } + if item.NeId != "" { + params["ne_id"] = item.NeId + } + if item.Name != "" { + params["name"] = item.Name + } + if item.Version != "" { + params["version"] = item.Version + } + if item.Path != "" { + params["path"] = item.Path + } + if item.Remark != "" { + params["remark"] = item.Remark + } + if item.CreateBy != "" { + params["create_by"] = item.CreateBy + params["create_time"] = time.Now().UnixMilli() + } + + // 构建执行语句 + keys, placeholder, values := repo.KeyPlaceholderValueByInsert(params) + sql := "insert into ne_config_backup (" + strings.Join(keys, ",") + ")values(" + placeholder + ")" + + db := datasource.DefaultDB() + // 开启事务 + tx := db.Begin() + // 执行插入 + err := tx.Exec(sql, values...).Error + if err != nil { + logger.Errorf("insert row : %v", err.Error()) + tx.Rollback() + return "" + } + // 获取生成的自增 ID + var insertedID string + err = tx.Raw("select last_insert_id()").Row().Scan(&insertedID) + if err != nil { + logger.Errorf("insert last id : %v", err.Error()) + tx.Rollback() + return "" + } + // 提交事务 + tx.Commit() + return insertedID +} + +// Update 修改信息 +func (r *NeConfigBackupImpl) Update(item model.NeConfigBackup) int64 { + // 参数拼接 + params := make(map[string]any) + if item.NeType != "" { + params["ne_type"] = item.NeType + } + if item.NeId != "" { + params["ne_id"] = item.NeId + } + if item.Name != "" { + params["name"] = item.Name + } + if item.Version != "" { + params["version"] = item.Version + } + if item.Path != "" { + params["path"] = item.Path + } + params["remark"] = item.Remark + if item.UpdateBy != "" { + params["update_by"] = item.UpdateBy + params["update_time"] = time.Now().UnixMilli() + } + + // 构建执行语句 + keys, values := repo.KeyValueByUpdate(params) + sql := "update ne_config_backup set " + strings.Join(keys, ",") + " where id = ?" + + // 执行更新 + values = append(values, item.ID) + rows, err := datasource.ExecDB("", sql, values) + if err != nil { + logger.Errorf("update row : %v", err.Error()) + return 0 + } + return rows +} + +// DeleteByIds 批量删除信息 +func (r *NeConfigBackupImpl) DeleteByIds(ids []string) int64 { + placeholder := repo.KeyPlaceholderByQuery(len(ids)) + sql := "delete from ne_config_backup where id in (" + placeholder + ")" + parameters := repo.ConvertIdsSlice(ids) + results, err := datasource.ExecDB("", sql, parameters) + if err != nil { + logger.Errorf("delete err => %v", err) + return 0 + } + return results +} diff --git a/src/modules/network_element/service/ne_config_backup.go b/src/modules/network_element/service/ne_config_backup.go new file mode 100644 index 00000000..960bf569 --- /dev/null +++ b/src/modules/network_element/service/ne_config_backup.go @@ -0,0 +1,24 @@ +package service + +import "be.ems/src/modules/network_element/model" + +// INeConfigBackup 网元配置文件备份记录 服务层接口 +type INeConfigBackup interface { + // SelectNeHostPage 分页查询列表数据 + SelectPage(query map[string]any) map[string]any + + // SelectList 根据实体查询 + SelectList(item model.NeConfigBackup) []model.NeConfigBackup + + // SelectByIds 通过ID查询 + SelectById(id string) model.NeConfigBackup + + // Insert 新增信息 + Insert(item model.NeConfigBackup) string + + // Update 修改信息 + Update(item model.NeConfigBackup) int64 + + // DeleteByIds 批量删除信息 + DeleteByIds(ids []string) (int64, error) +} diff --git a/src/modules/network_element/service/ne_config_backup.impl.go b/src/modules/network_element/service/ne_config_backup.impl.go new file mode 100644 index 00000000..38f3eea2 --- /dev/null +++ b/src/modules/network_element/service/ne_config_backup.impl.go @@ -0,0 +1,67 @@ +package service + +import ( + "fmt" + + "be.ems/src/modules/network_element/model" + "be.ems/src/modules/network_element/repository" +) + +// NewNeConfigBackupImpl 网元配置文件备份记录 实例化服务层 +var NewNeConfigBackupImpl = &NeConfigBackupImpl{ + neConfigBackupRepository: repository.NewNeConfigBackupImpl, +} + +// NeConfigBackupImpl 网元配置文件备份记录 服务层处理 +type NeConfigBackupImpl struct { + // 网元配置文件备份记录 + neConfigBackupRepository repository.INeConfigBackup +} + +// SelectNeHostPage 分页查询列表数据 +func (r *NeConfigBackupImpl) SelectPage(query map[string]any) map[string]any { + return r.neConfigBackupRepository.SelectPage(query) +} + +// SelectConfigList 查询列表 +func (r *NeConfigBackupImpl) SelectList(item model.NeConfigBackup) []model.NeConfigBackup { + return r.neConfigBackupRepository.SelectList(item) +} + +// SelectByIds 通过ID查询 +func (r *NeConfigBackupImpl) SelectById(id string) model.NeConfigBackup { + if id == "" { + return model.NeConfigBackup{} + } + arr := r.neConfigBackupRepository.SelectByIds([]string{id}) + if len(arr) > 0 { + return arr[0] + } + return model.NeConfigBackup{} +} + +// Insert 新增信息 +func (r *NeConfigBackupImpl) Insert(item model.NeConfigBackup) string { + return r.neConfigBackupRepository.Insert(item) +} + +// Update 修改信息 +func (r *NeConfigBackupImpl) Update(item model.NeConfigBackup) int64 { + return r.neConfigBackupRepository.Update(item) +} + +// DeleteByIds 批量删除信息 +func (r *NeConfigBackupImpl) DeleteByIds(ids []string) (int64, error) { + // 检查是否存在 + data := r.neConfigBackupRepository.SelectByIds(ids) + if len(data) <= 0 { + return 0, fmt.Errorf("neConfigBackup.noData") + } + + if len(data) == len(ids) { + rows := r.neConfigBackupRepository.DeleteByIds(ids) + return rows, nil + } + // 删除信息失败! + return 0, fmt.Errorf("delete fail") +} From 2b2e2c3e0bac99990a6950e15a1910029096bcfd Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 23 Jul 2024 11:58:18 +0800 Subject: [PATCH 03/34] =?UTF-8?q?sql:=20=E6=96=B0=E5=A2=9E=E7=BD=91?= =?UTF-8?q?=E5=85=83=E9=85=8D=E7=BD=AE=E5=8F=AF=E9=80=89=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E8=A1=A8=E5=92=8C=E7=BD=91=E5=85=83=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=87=E4=BB=BD=E8=AE=B0=E5=BD=95=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/ne_config.sql | 106 ++++++++++++++++++++++ database/install/ne_config_backup.sql | 23 +++++ database/upgrade/upg_ne_config.sql | 103 +++++++++++++++++++++ database/upgrade/upg_ne_config_backup.sql | 19 ++++ 4 files changed, 251 insertions(+) create mode 100644 database/install/ne_config.sql create mode 100644 database/install/ne_config_backup.sql create mode 100644 database/upgrade/upg_ne_config.sql create mode 100644 database/upgrade/upg_ne_config_backup.sql diff --git a/database/install/ne_config.sql b/database/install/ne_config.sql new file mode 100644 index 00000000..33f9cbae --- /dev/null +++ b/database/install/ne_config.sql @@ -0,0 +1,106 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- +-- Table structure for table `ne_config` +-- + + +DROP TABLE IF EXISTS `ne_config`; + +CREATE TABLE `ne_config` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', + `param_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '参数名', + `param_display` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '参数显示名', + `param_type` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '参数类型 list列表单层 array数组多层', + `param_json` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'accesss属性控制:只读read-only/read/ro 读写read-write', + `param_sort` int DEFAULT '0' COMMENT '参数排序', + `param_perms` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '操作权限 get只读 put可编辑 delete可删除 post可新增', + `update_time` bigint DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_netype_paramname` (`ne_type`,`param_name`) USING BTREE COMMENT '网元_可选值' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='网元_参数配置可用属性值'; + +-- 初始数据对应网元 +INSERT INTO `ne_config` VALUES (1, 'AMF', 'system', 'System Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMF Name\",\"filter\":\"0~64\",\"name\":\"amfName\",\"type\":\"string\",\"value\":\"AMF\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Relative Capacity\",\"filter\":\"0~255\",\"name\":\"relativeCapacity\",\"type\":\"int\",\"value\":\"255\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\",\\\"1\\\":\\\"https\\\"}\",\"name\":\"sbiScheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI Server IP\",\"filter\":\"0~64\",\"name\":\"sbiServerIp\",\"type\":\"string\",\"value\":\"192.168.1.183\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"SBI Server Port\",\"filter\":\"0~65535\",\"name\":\"sbiServerPort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"nrfEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"0~64\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AUSF URI\",\"filter\":\"0~64\",\"name\":\"ausfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.130:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDM URI\",\"filter\":\"0~64\",\"name\":\"udmUri\",\"type\":\"string\",\"value\":\"http://172.16.5.140:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMF URI\",\"filter\":\"0~64\",\"name\":\"smfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.150:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PCF URI\",\"filter\":\"0~64\",\"name\":\"pcfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.160:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LMF URI\",\"filter\":\"0~64\",\"name\":\"lmfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.200:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NEF URI\",\"filter\":\"0~64\",\"name\":\"nefUri\",\"type\":\"string\",\"value\":\"http://172.16.5.210:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IMEI Restriction Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"imeiRestrictionEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Allowed IMEI Prefix\",\"filter\":\"0~128\",\"name\":\"allowedImeiPrefix\",\"type\":\"string\",\"value\":\"869583045\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN Correction Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"dnnCorrectionEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default DNN\",\"filter\":\"0~64\",\"name\":\"defaultDnn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Integrity Algorithm\",\"filter\":\"{\\\"0\\\":\\\"NIA0\\\",\\\"1\\\":\\\"NIA1\\\",\\\"2\\\":\\\"NIA2\\\",\\\"3\\\":\\\"NIA3\\\"}\",\"name\":\"integrityAlgorithm\",\"type\":\"enum\",\"value\":\"2\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Ciphering Algorithm\",\"filter\":\"{\\\"0\\\":\\\"NEA0\\\",\\\"1\\\":\\\"NEA1\\\",\\\"2\\\":\\\"NEA2\\\",\\\"3\\\":\\\"NEA3\\\"}\",\"name\":\"cipheringAlgorithm\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3502\",\"filter\":\"1~65535\",\"name\":\"t3502\",\"type\":\"int\",\"value\":\"720\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3512\",\"filter\":\"1~65535\",\"name\":\"t3512\",\"type\":\"int\",\"value\":\"3600\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3513\",\"filter\":\"1~65535\",\"name\":\"t3513\",\"type\":\"int\",\"value\":\"2\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3522\",\"filter\":\"1~65535\",\"name\":\"t3522\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3550\",\"filter\":\"1~65535\",\"name\":\"t3550\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3555\",\"filter\":\"1~65535\",\"name\":\"t3555\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3560\",\"filter\":\"1~65535\",\"name\":\"t3560\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3565\",\"filter\":\"1~65535\",\"name\":\"t3565\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3570\",\"filter\":\"1~65535\",\"name\":\"t3570\",\"type\":\"int\",\"value\":\"6\"}]', 1, '', 1721705806656); +INSERT INTO `ne_config` VALUES (2, 'AMF', 'association', 'TNL Association List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NGAP IP\",\"filter\":\"0~64\",\"name\":\"ngapIp\",\"type\":\"string\",\"value\":\"192.168.1.183\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"NGAP SCTP Port\",\"filter\":\"0~65535\",\"name\":\"ngapSctpPort\",\"type\":\"int\",\"value\":\"38412\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Weight\",\"filter\":\"0~255\",\"name\":\"weightFactor\",\"type\":\"int\",\"value\":\"255\"}]', 3, '', 1721705807645); +INSERT INTO `ne_config` VALUES (3, 'AMF', 'guami', 'GUAMI List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Region ID\",\"filter\":\"0~255\",\"name\":\"regionId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~1023\",\"display\":\"Set ID\",\"filter\":\"0~1023\",\"name\":\"setId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~63\",\"display\":\"Pointer\",\"filter\":\"0~63\",\"name\":\"pointer\",\"type\":\"int\",\"value\":\"1\"}]', 5, '', 1721705807721); +INSERT INTO `ne_config` VALUES (4, 'AMF', 'tai', 'TAI List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~16777215\",\"display\":\"TAC\",\"filter\":\"0~8\",\"name\":\"tac\",\"type\":\"string\",\"value\":\"1\"}]', 7, '', 1721705807738); +INSERT INTO `ne_config` VALUES (5, 'AMF', 'slice', 'Slice List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~127\",\"display\":\"SST\",\"filter\":\"0~127\",\"name\":\"sst\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SD\",\"filter\":\"^[A-Fa-f0-9]{6}\",\"name\":\"sd\",\"type\":\"regex\",\"value\":\"000001\"}]', 9, '', 1721705807763); +INSERT INTO `ne_config` VALUES (6, 'AUSF', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IP\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.130\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Port\",\"filter\":\"0~65535\",\"name\":\"servicePort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"HTTP\\\", \\\"1\\\":\\\"HTTPS\\\"}\",\"name\":\"scheme\",\"type\":\"enum\",\"value\":\"http\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDM URI\",\"filter\":\"\",\"name\":\"udmUri\",\"type\":\"string\",\"value\":\"http://172.16.5.140:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Group ID\",\"filter\":\"\",\"name\":\"groupId\",\"type\":\"string\",\"value\":\"0\"}]', 1, '', 1719831209173); +INSERT INTO `ne_config` VALUES (7, 'IMS', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Label\",\"filter\":\"\",\"name\":\"label\",\"type\":\"string\",\"value\":\"ims-core\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"HPLMN MCC\",\"filter\":\"\",\"name\":\"hplmnMCC\",\"type\":\"string\",\"value\":\"001\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"HPLMN MNC\",\"filter\":\"\",\"name\":\"hplmnMNC\",\"type\":\"string\",\"value\":\"01\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local Network IPv4\",\"filter\":\"\",\"name\":\"LocalNetworkIPv4\",\"type\":\"ipv4\",\"value\":\"172.16.5.110\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Public Network IPv4\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.110\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Public Network IPv6\",\"filter\":\"\",\"name\":\"serviceIPv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain Name 1\",\"filter\":\"\",\"name\":\"domainName1\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain Name 2\",\"filter\":\"\",\"name\":\"domainName2\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain Name 3\",\"filter\":\"\",\"name\":\"domainName3\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain Name 4\",\"filter\":\"\",\"name\":\"domainName4\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MultiIPStack Indicator\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"multiIPStackInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Register Timer\",\"filter\":\"120~1000000\",\"name\":\"registerTimer\",\"type\":\"int\",\"value\":\"7200\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Call Duration\",\"filter\":\"1800~1000000\",\"name\":\"maxCallDuration\",\"type\":\"int\",\"value\":\"43200\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Internal SMS Indicator\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"internalSMSInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Internal CDR Indicator\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"internalCDRInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Internal KPI Indicator\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"internalKPIInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PCF IP Address\",\"filter\":\"\",\"name\":\"pcfIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.160\"}]', 1, '', 1719831209377); +INSERT INTO `ne_config` VALUES (8, 'IMS', 'plmn', 'PLMN List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MCC\",\"filter\":\"^[0-9]{3}$\",\"name\":\"mcc\",\"type\":\"regex\",\"value\":\"001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MNC\",\"filter\":\"^[0-9]{2,3}$\",\"name\":\"mnc\",\"type\":\"regex\",\"value\":\"01\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain\",\"filter\":\"0~128\",\"name\":\"domain\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]', 3, '', 1719831209469); +INSERT INTO `ne_config` VALUES (9, 'IMS', 'mmtel_dialplan', 'MMTEL Dialplan', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"NaName\",\"filter\":\"0~128\",\"name\":\"naName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Title\",\"filter\":\"0~128\",\"name\":\"title\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Method\",\"filter\":\"0-2\",\"name\":\"method\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Prefix\",\"filter\":\"0~128\",\"name\":\"prefix\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Start\",\"filter\":\"0~128\",\"name\":\"start\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"End\",\"filter\":\"0~128\",\"name\":\"end\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Attrib\",\"filter\":\"0~128\",\"name\":\"attrib\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Number Len\",\"filter\":\"0~128\",\"name\":\"numberLen\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rsc\",\"filter\":\"0~128\",\"name\":\"rsc\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"E164 Nai\",\"filter\":\"0~128\",\"name\":\"e164Nai\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"E164 Delete\",\"filter\":\"0~128\",\"name\":\"e164Delete\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"E164 Insert\",\"filter\":\"0~128\",\"name\":\"e164Insert\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"Enable: Close/Open\",\"display\":\"Admin State\",\"filter\":\"{\\\"0\\\":\\\"Close\\\", \\\"1\\\":\\\"Open\\\"}\",\"name\":\"adminState\",\"type\":\"enum\",\"value\":\"0\"}]', 5, '', 1719831209568); +INSERT INTO `ne_config` VALUES (10, 'IMS', 'ds_system', 'DS System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dispatch System Indicator\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"dispatchSystemInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Transcode Indicator\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"transcodeInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dispatch System IPv4\",\"filter\":\"\",\"name\":\"dispatchSystemIP\",\"type\":\"ipv4\",\"value\":\"1.0.0.1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dispatch System Port\",\"filter\":\"\",\"name\":\"dispatchSystemPort\",\"type\":\"int\",\"value\":\"5060\"}]', 7, '', 1719831209655); +INSERT INTO `ne_config` VALUES (11, 'MME', 'system', 'System Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"true|false\",\"display\":\"CSFB Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"csfbEnabled\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"true|false\",\"display\":\"VoLTE Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"volteEnabled\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"S1 MME IP\",\"filter\":\"0~64\",\"name\":\"s1MmeIp\",\"type\":\"string\",\"value\":\"192.168.1.179\"},{\"access\":\"read-only\",\"comment\":\"0~65535\",\"display\":\"S1 MME Port\",\"filter\":\"0~65535\",\"name\":\"s1MmePort\",\"type\":\"int\",\"value\":\"36412\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"S11 MME IP\",\"filter\":\"0~64\",\"name\":\"s11MmeIp\",\"type\":\"string\",\"value\":\"192.168.1.179\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"S11 MME Port\",\"filter\":\"0~65535\",\"name\":\"s11MmePort\",\"type\":\"int\",\"value\":\"2123\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"S10 MME IP\",\"filter\":\"0~64\",\"name\":\"s10MmeIp\",\"type\":\"string\",\"value\":\"192.168.1.178\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"S10 MME Port\",\"filter\":\"0~65535\",\"name\":\"s10MmePort\",\"type\":\"int\",\"value\":\"2123\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"SGs MME IP\",\"filter\":\"0~64\",\"name\":\"sgsMmeIp\",\"type\":\"string\",\"value\":\"192.168.1.179\"},{\"access\":\"read-only\",\"comment\":\"0~65535\",\"display\":\"SGs MME Port\",\"filter\":\"0~65535\",\"name\":\"sgsMmePort\",\"type\":\"int\",\"value\":\"29118\"},{\"access\":\"read-write\",\"comment\":\"0~100\",\"display\":\"S6A MME Identity\",\"filter\":\"0~100\",\"name\":\"s6aIdentity\",\"type\":\"string\",\"value\":\"mme.epc.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"0~20\",\"display\":\"S6A MME IP\",\"filter\":\"0~20\",\"name\":\"localIp\",\"type\":\"string\",\"value\":\"172.16.5.220\"}]', 1, '', 1719831209702); +INSERT INTO `ne_config` VALUES (12, 'MME', 'gummei', 'Gummei List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"Group ID\",\"filter\":\"0~65535\",\"name\":\"groupId\",\"type\":\"int\",\"value\":\"4\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Code\",\"filter\":\"0~255\",\"name\":\"code\",\"type\":\"int\",\"value\":\"1\"}]', 3, '', 1719831209759); +INSERT INTO `ne_config` VALUES (13, 'MME', 'tai', 'TAI List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"TAC\",\"filter\":\"0~65535\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"}]', 5, '', 1719831209792); +INSERT INTO `ne_config` VALUES (14, 'MME', 'hss', 'HSS List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{1,15}$\",\"display\":\"IMSI Prefix\",\"filter\":\"^[0-9]{1,15}$\",\"name\":\"imsiPre\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~128\",\"display\":\"HSS Hostname\",\"filter\":\"0~128\",\"name\":\"hssHostname\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"SCTP|TCP\",\"display\":\"Protocol\",\"filter\":\"0~8\",\"name\":\"protocol\",\"type\":\"string\",\"value\":\"SCTP\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"HSS Port\",\"filter\":\"0~65535\",\"name\":\"hssPort\",\"type\":\"int\",\"value\":\"3868\"}]', 7, '', 1719831209841); +INSERT INTO `ne_config` VALUES (15, 'MME', 'sgw', 'SGW List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"TAC\",\"filter\":\"0~65535\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"SGW IP\",\"filter\":\"0~64\",\"name\":\"sgwIp\",\"type\":\"string\",\"value\":\"172.16.5.150\"}]', 9, '', 1719831209876); +INSERT INTO `ne_config` VALUES (16, 'MME', 'pgw', 'PGW List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~128\",\"display\":\"APN\",\"filter\":\"0~128\",\"name\":\"apn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"PGW IP\",\"filter\":\"0~64\",\"name\":\"pgwIp\",\"type\":\"string\",\"value\":\"192.168.1.181\"}]', 11, '', 1719831209927); +INSERT INTO `ne_config` VALUES (17, 'MME', 'amf', 'AMF List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~16777215\",\"display\":\"TAC\",\"filter\":\"0~16777215\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Region ID\",\"filter\":\"0~255\",\"name\":\"regionId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~1023\",\"display\":\"Set ID\",\"filter\":\"0~1023\",\"name\":\"setId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~63\",\"display\":\"Pointer\",\"filter\":\"0~63\",\"name\":\"pointer\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"AMF IP\",\"filter\":\"0~64\",\"name\":\"amfIp\",\"type\":\"string\",\"value\":\"172.16.5.120\"}]', 13, '', 1719831209992); +INSERT INTO `ne_config` VALUES (18, 'MOCNGW', 'system', 'System Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"S1AP South Address\",\"filter\":\"0~64\",\"name\":\"s1apSouthAddr\",\"type\":\"string\",\"value\":\"192.168.7.163\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"S1AP North Address\",\"filter\":\"0~64\",\"name\":\"s1apNorthAddr\",\"type\":\"string\",\"value\":\"192.168.8.163\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"TAC\",\"filter\":\"0~65535\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~1048575\",\"display\":\"ENB ID\",\"filter\":\"0~1048575\",\"name\":\"enbId\",\"type\":\"int\",\"value\":\"24\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Plane Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"userPlaneEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PFCP Address\",\"filter\":\"0~64\",\"name\":\"pfcpAddr\",\"type\":\"string\",\"value\":\"192.168.7.163\"}]', 1, '', 1719831210071); +INSERT INTO `ne_config` VALUES (19, 'MOCNGW', 'mme', 'MME List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"S1AP Address\",\"filter\":\"0~64\",\"name\":\"s1apAddr\",\"type\":\"string\",\"value\":\"192.168.1.161\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"S1AP Port\",\"filter\":\"0~65535\",\"name\":\"s1apPort\",\"type\":\"int\",\"value\":\"36412\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"}]', 3, '', 1719831210273); +INSERT INTO `ne_config` VALUES (20, 'MOCNGW', 'upgw', 'UPGW Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PFCP Address\",\"filter\":\"0~64\",\"name\":\"pfcpAddr\",\"type\":\"string\",\"value\":\"192.168.1.159\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"PFCP Port\",\"filter\":\"0~65535\",\"name\":\"pfcpPort\",\"type\":\"int\",\"value\":\"8805\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GTP-U South Address\",\"filter\":\"0~64\",\"name\":\"gtpuSouthAddr\",\"type\":\"string\",\"value\":\"10.10.1.2\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GTP-U North Address\",\"filter\":\"0~64\",\"name\":\"gtpuNorthAddr\",\"type\":\"string\",\"value\":\"192.168.7.123\"}]', 5, '', 1719831210320); +INSERT INTO `ne_config` VALUES (21, 'N3IWF', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IKEBindAddress\",\"filter\":\"\",\"name\":\"ikeBindAddr\",\"type\":\"string\",\"value\":\"192.168.12.160\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GTPBindAddress\",\"filter\":\"\",\"name\":\"gtpBindAddr\",\"type\":\"string\",\"value\":\"192.168.12.161\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"FQDN\",\"filter\":\"\",\"name\":\"fqdn\",\"type\":\"string\",\"value\":\"n3iwf.5gc.mnc00.mcc460.pub.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"InternalIP\",\"filter\":\"\",\"name\":\"internalIP\",\"type\":\"string\",\"value\":\"172.16.1.190\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UdmIPAddrPort\",\"filter\":\"\",\"name\":\"udmAddr\",\"type\":\"string\",\"value\":\"172.16.1.140:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SmfIPAddress\",\"filter\":\"\",\"name\":\"smfIPAddr\",\"type\":\"string\",\"value\":\"172.16.1.150\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3IPAddress\",\"filter\":\"\",\"name\":\"n3IPAddr\",\"type\":\"string\",\"value\":\"192.168.1.160\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N6IPAddress\",\"filter\":\"\",\"name\":\"n6IPAddr\",\"type\":\"string\",\"value\":\"192.168.1.161\"}]', 1, '', 1719831210358); +INSERT INTO `ne_config` VALUES (22, 'NRF', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IP\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.180\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Port\",\"filter\":\"0~65535\",\"name\":\"servicePort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"HTTP\\\", \\\"1\\\":\\\"HTTPS\\\"}\",\"name\":\"scheme\",\"type\":\"enum\",\"value\":\"0\"}]', 1, 'put', 1719831210397); +INSERT INTO `ne_config` VALUES (23, 'NRF', 'registeredNFs', 'Registered NFs', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~256\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"NF Type\",\"filter\":\"^.{1,128}$\",\"name\":\"nfType\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Status\",\"filter\":\"^.{1,128}$\",\"name\":\"status\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"NF ID\",\"filter\":\"^.{1,128}$\",\"name\":\"nfId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"^.{1,128}$\",\"name\":\"ipAddress\",\"type\":\"string\",\"value\":\"\"}]', 3, 'get', 1719831210443); +INSERT INTO `ne_config` VALUES (24, 'NSSF', 'general', 'General', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NSSF Name\",\"filter\":\"\",\"name\":\"nssfName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log Level\",\"filter\":\"\",\"name\":\"logLevel\",\"type\":\"string\",\"value\":\"error\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NF ID\",\"filter\":\"\",\"name\":\"nfId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"System ID\",\"filter\":\"\",\"name\":\"systemId\",\"type\":\"int\",\"value\":\"0\"}]', 1, '', 1719831210478); +INSERT INTO `ne_config` VALUES (25, 'NSSF', 'sbi', 'SBI', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"\",\"name\":\"scheme\",\"type\":\"string\",\"value\":\"http\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Register IPv4\",\"filter\":\"\",\"name\":\"registerIpv4\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Binding IPv4\",\"filter\":\"\",\"name\":\"bindingIpv4\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Register IPv6\",\"filter\":\"\",\"name\":\"registerIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Binding IPv6\",\"filter\":\"\",\"name\":\"bindingIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IP Type\",\"filter\":\"\",\"name\":\"ipType\",\"type\":\"string\",\"value\":\"ipv4\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Port\",\"filter\":\"\",\"name\":\"port\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Telnet IPv4\",\"filter\":\"\",\"name\":\"telnetIpv4\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Telnet IPv6\",\"filter\":\"\",\"name\":\"telnetIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Telnet Port\",\"filter\":\"\",\"name\":\"telnetPort\",\"type\":\"int\",\"value\":\"4100\"}]', 3, '', 1719831210567); +INSERT INTO `ne_config` VALUES (26, 'NSSF', 'supportedNetworkSliceList', 'Supported Network Slice List', 'array', '[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MCC\",\"filter\":\"\",\"name\":\"mcc\",\"type\":\"string\",\"value\":\"001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MNC\",\"filter\":\"\",\"name\":\"mnc\",\"type\":\"string\",\"value\":\"01\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TAC\",\"filter\":\"\",\"name\":\"tac\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported SST\",\"filter\":\"\",\"name\":\"supportedSst\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported SD\",\"filter\":\"\",\"name\":\"supportedSd\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Restricted SST\",\"filter\":\"\",\"name\":\"restrictedSst\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Restricted SD\",\"filter\":\"\",\"name\":\"restrictedSd\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF ID\",\"filter\":\"\",\"name\":\"nrfId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NSI ID\",\"filter\":\"\",\"name\":\"nsiId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Access Type\",\"filter\":\"\",\"name\":\"accessType\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMF Set ID\",\"filter\":\"\",\"name\":\"amfSetId\",\"type\":\"string\",\"value\":\"\"}]', 5, '', 1719831210617); +INSERT INTO `ne_config` VALUES (27, 'NSSF', 'plmnMappingList', 'PLMN Mapping List', 'array', '[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Operator Name\",\"filter\":\"\",\"name\":\"operatorName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MCC\",\"filter\":\"\",\"name\":\"mcc\",\"type\":\"string\",\"value\":\"001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MNC\",\"filter\":\"\",\"name\":\"mnc\",\"type\":\"string\",\"value\":\"02\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Serving SNSSAI SST\",\"filter\":\"\",\"name\":\"servingSnssaiSst\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Serving SNSSAI SD\",\"filter\":\"\",\"name\":\"servingSnssaiSd\",\"type\":\"string\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Home SNSSAI SST\",\"filter\":\"\",\"name\":\"homeSnssaiSst\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Home SNSSAI SD\",\"filter\":\"\",\"name\":\"homeSnssaiSd\",\"type\":\"string\",\"value\":\"1\"}]', 7, '', 1719831210699); +INSERT INTO `ne_config` VALUES (28, 'PCF', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IP\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.160\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Port\",\"filter\":\"0~65535\",\"name\":\"servicePort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"HTTP\\\", \\\"1\\\":\\\"HTTPS\\\"}\",\"name\":\"scheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn1\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn1\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn2\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn2\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn3\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn3\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn4\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn4\",\"type\":\"string\",\"value\":\"00101\"}]', 1, '', 1719831210756); +INSERT INTO `ne_config` VALUES (29, 'PCF', 'serviceAreaRestriction', 'Service Area Restriction', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Restriction Type\",\"filter\":\"{\\\"0\\\":\\\"Allowed Areas\\\", \\\"1\\\":\\\"Not Allowed Areas\\\"}\",\"name\":\"restrictionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TACs\",\"filter\":\"\",\"name\":\"tacs\",\"type\":\"string\",\"value\":\"123\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Area Codes\",\"filter\":\"\",\"name\":\"areaCodes\",\"type\":\"string\",\"value\":\"123456\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max TAs\",\"filter\":\"^\\\\d{1,2}$\",\"name\":\"maxTAs\",\"type\":\"int\",\"value\":\"1\"}]', 3, '', 1719831210789); +INSERT INTO `ne_config` VALUES (30, 'PCF', 'pccRules', 'PCC Rules', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~64\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rule ID\",\"filter\":\"^.{1,63}$\",\"name\":\"ruleId\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Activate\",\"filter\":\"false;true;\",\"name\":\"activate\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Precedence\",\"filter\":\"0~255\",\"name\":\"precedence\",\"type\":\"int\",\"value\":\"80\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Usage\",\"filter\":\"{\\\"0\\\":\\\"General\\\", \\\"1\\\":\\\"IMS-Signalling\\\"}\",\"name\":\"flowUsage\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"APP ID\",\"filter\":\"^.{1,63}$\",\"name\":\"appId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Template\",\"filter\":\"^.{1,255}$\",\"name\":\"flowTemplate\",\"type\":\"string\",\"value\":\"flow_any\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QoS ID\",\"filter\":\"^.{1,63}$\",\"name\":\"qosId\",\"type\":\"string\",\"value\":\"qos_internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Traffic Control ID\",\"filter\":\"^.{1,63}$\",\"name\":\"trafficControlId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Usage Monitoring ID\",\"filter\":\"^.{1,63}$\",\"name\":\"usageMonitoringId\",\"type\":\"string\",\"value\":\"\"}]', 5, '', 1719831210834); +INSERT INTO `ne_config` VALUES (31, 'PCF', 'sessionRules', 'Session Rules', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~64\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rule ID\",\"filter\":\"^.{1,63}$\",\"name\":\"ruleId\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Activate\",\"filter\":\"false;true;\",\"name\":\"activate\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI\",\"filter\":\"0~255\",\"name\":\"fiveQI\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI Priority Level\",\"filter\":\"0~127\",\"name\":\"fiveQIPriorityLevel\",\"type\":\"int\",\"value\":\"80\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Usage\",\"filter\":\"{\\\"0\\\":\\\"General\\\", \\\"1\\\":\\\"IMS-Signalling\\\"}\",\"name\":\"flowUsage\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Usage Monitoring ID\",\"filter\":\"^.{1,63}$\",\"name\":\"usageMonitoringId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"ambrDl\",\"type\":\"string\",\"value\":\"200Mbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"ambrUl\",\"type\":\"string\",\"value\":\"100Mbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Averaging Window\",\"filter\":\"0~4095\",\"name\":\"averagingWindow\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Data Burst Volume\",\"filter\":\"0~4095\",\"name\":\"maxDataBurstVolume\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority Level\",\"filter\":\"1~15\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Bitrate Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"maxbrDl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Bitrate Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"maxbrUl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GBR Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"gbrDl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GBR Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"gbrUl\",\"type\":\"string\",\"value\":\"\"}]', 7, '', 1719831210893); +INSERT INTO `ne_config` VALUES (32, 'PCF', 'gxServer', 'Gx Server', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{0,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{0,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]', 9, '', 1719831210965); +INSERT INTO `ne_config` VALUES (33, 'PCF', 'rxServer', 'Rx Server', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{0,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{0,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]', 11, '', 1719831211004); +INSERT INTO `ne_config` VALUES (34, 'PCF', 'flowTemplate', 'Flow Template', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~256\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Template Name\",\"filter\":\"^.{1,63}$\",\"name\":\"templateName\",\"type\":\"string\",\"value\":\"flow_any\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Description\",\"filter\":\"^.{1,127}$\",\"name\":\"flowDescription\",\"type\":\"string\",\"value\":\"permit out ip from any to assigned\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Direction\",\"filter\":\"{\\\"0\\\":\\\"Unspecified\\\", \\\"1\\\":\\\"Uplink\\\", \\\"2\\\":\\\"Downlink\\\", \\\"3\\\":\\\"Bidirectional\\\"}\",\"name\":\"flowDirection\",\"type\":\"enum\",\"value\":\"0\"}]', 13, '', 1719831211185); +INSERT INTO `ne_config` VALUES (35, 'PCF', 'qosTemplate', 'QoS Template', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~64\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QoS ID\",\"filter\":\"^.{1,63}$\",\"name\":\"qosId\",\"type\":\"string\",\"value\":\"qos_internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI\",\"filter\":\"0~255\",\"name\":\"fiveQI\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI Priority Level\",\"filter\":\"0~127\",\"name\":\"fiveQIPriorityLevel\",\"type\":\"int\",\"value\":\"80\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Bitrate Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"maxbrDl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Bitrate Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"maxbrUl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GBR Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"gbrDl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GBR Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"gbrUl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority Level\",\"filter\":\"1~15\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default QoS Flow Indication\",\"filter\":\"false;true;\",\"name\":\"defQosFlowIndication\",\"type\":\"bool\",\"value\":\"false\"}]', 15, '', 1719831211267); +INSERT INTO `ne_config` VALUES (36, 'PCF', 'usageMonitoringTemplate', 'Usage Monitoring Template', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~64\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Usage Monitoring ID\",\"filter\":\"^.{1,63}$\",\"name\":\"umId\",\"type\":\"string\",\"value\":\"flow_any\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Volume Threshold(KB)\",\"filter\":\"\",\"name\":\"volumeThreshold\",\"type\":\"int\",\"value\":\"5242880\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Volume Threshold Uplink(KB)\",\"filter\":\"\",\"name\":\"volumeThresholdUplink\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Volume Threshold Downlink(KB)\",\"filter\":\"\",\"name\":\"volumeThresholdDownlink\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Time Threshold\",\"filter\":\"\",\"name\":\"timeThreshold\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Inactivity Time\",\"filter\":\"\",\"name\":\"inactivityTime\",\"type\":\"int\",\"value\":\"0\"}]', 17, '', 1719831211321); +INSERT INTO `ne_config` VALUES (37, 'PCF', 'trafficControlTemplate', 'Traffic Control Template', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~64\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Traffic Control ID\",\"filter\":\"^.{1,63}$\",\"name\":\"tcId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Status\",\"filter\":\"{\\\"0\\\":\\\"Disable\\\", \\\"1\\\":\\\"Uplink\\\", \\\"2\\\":\\\"Downlink\\\", \\\"3\\\":\\\"Enable\\\", \\\"4\\\":\\\"Remove\\\"}\",\"name\":\"flowStatus\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Mute Notify\",\"filter\":\"false;true;\",\"name\":\"muteNotif\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Route to Location DNAI\",\"filter\":\"^.{1,63}$\",\"name\":\"dnai\",\"type\":\"string\",\"value\":\"\"}]', 19, '', 1719831211361); +INSERT INTO `ne_config` VALUES (38, 'PCF', 'headerEnrichTemplate', 'Header Enrich Template', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Template Name\",\"filter\":\"^.{1,63}$\",\"name\":\"templateName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Header Type\",\"filter\":\"{\\\"0\\\":\\\"GPSI\\\", \\\"1\\\":\\\"SUPI\\\", \\\"2\\\":\\\"UE IP\\\", \\\"3\\\":\\\"User Location\\\", \\\"4\\\":\\\"DNN\\\"}\",\"name\":\"headerType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Header Name\",\"filter\":\"^.{1,63}$\",\"name\":\"headerName\",\"type\":\"string\",\"value\":\"\"}]', 21, '', 1719831211407); +INSERT INTO `ne_config` VALUES (39, 'SMF', 'smfSystem', 'SMF System Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI IP\",\"filter\":\"\",\"name\":\"sbiIpAddr\",\"type\":\"string\",\"value\":\"172.16.5.150\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"SBI Port\",\"filter\":\"0~65535\",\"name\":\"sbiPort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"sbiScheme\",\"type\":\"enum\",\"value\":\"http\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N4 IPv4\",\"filter\":\"\",\"name\":\"n4Ipv4\",\"type\":\"ipv4\",\"value\":\"172.16.5.150\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N4 IPv6\",\"filter\":\"\",\"name\":\"n4Ipv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N4U IPv4\",\"filter\":\"\",\"name\":\"n4UIpv4\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N4U IPv6\",\"filter\":\"\",\"name\":\"n4UIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMF URI\",\"filter\":\"\",\"name\":\"amfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.120:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PCF Enable\",\"filter\":\"\",\"name\":\"pcfEnable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PCF URI\",\"filter\":\"\",\"name\":\"pcfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.160:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDM URI\",\"filter\":\"\",\"name\":\"udmUri\",\"type\":\"string\",\"value\":\"http://172.16.5.140:8080\"},{\"access\":\"read-write\",\"display\":\"5G Charging Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"chfEnable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CHF Primary URI\",\"filter\":\"\",\"name\":\"chfPrimaryUri\",\"type\":\"string\",\"value\":\"http://172.16.5.240:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CHF Secondary URI\",\"filter\":\"\",\"name\":\"chfSecondaryUri\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"nrfEnable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary DNS IPv4\",\"filter\":\"\",\"name\":\"primaryDnsIpv4\",\"type\":\"ipv4\",\"value\":\"114.114.114.114\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary DNS IPv4\",\"filter\":\"\",\"name\":\"secondaryDnsIpv4\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary DNS IPv6\",\"filter\":\"\",\"name\":\"primaryDnsIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary DNS IPv6\",\"filter\":\"\",\"name\":\"secondaryDnsIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary PCSCF IPv4\",\"filter\":\"\",\"name\":\"primaryPcscfIpv4\",\"type\":\"ipv4\",\"value\":\"172.16.5.110\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary PCSCF IPv4\",\"filter\":\"\",\"name\":\"secondaryPcscfIpv4\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary PCSCF IPv6\",\"filter\":\"\",\"name\":\"primaryPcscfIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary PCSCF IPv6\",\"filter\":\"\",\"name\":\"secondaryPcscfIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE MTU\",\"filter\":\"0~65535\",\"name\":\"ueMtu\",\"type\":\"int\",\"value\":\"\"}]', 1, '', 1719831211449); +INSERT INTO `ne_config` VALUES (40, 'SMF', 'spgwSystem', 'SPGW Sytem Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local S11 IP\",\"filter\":\"\",\"name\":\"s11Ip\",\"type\":\"string\",\"value\":\"172.16.5.150\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local Diameter IP\",\"filter\":\"\",\"name\":\"localDiameterIp\",\"type\":\"string\",\"value\":\"172.16.5.150\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local Diameter Host Name\",\"filter\":\"\",\"name\":\"localDiameterHostName\",\"type\":\"string\",\"value\":\"smf.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local Diameter Realm Name\",\"filter\":\"\",\"name\":\"localDiameterRealmName\",\"type\":\"string\",\"value\":\"mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gy Enable\",\"filter\":\"false;true;\",\"name\":\"peerGyEnable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary Remote Gy IP\",\"filter\":\"\",\"name\":\"primaryPeerGyIp\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"Primary Remote Gy Port\",\"filter\":\"0~65535\",\"name\":\"primaryPeerGyPort\",\"type\":\"int\",\"value\":\"3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary Remote Gy IP\",\"filter\":\"\",\"name\":\"secondaryPeerGyIp\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"Secondary Remote Gy Port\",\"filter\":\"0~65535\",\"name\":\"secondaryPeerGyPort\",\"type\":\"int\",\"value\":\"3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gx Enable\",\"filter\":\"false;true;\",\"name\":\"peerGxEnable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gx Charging Enable\",\"filter\":\"false;true;\",\"name\":\"gxChargingEnable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary Remote Gx IP\",\"filter\":\"\",\"name\":\"primaryPeerGxIp\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"Primary Remote Gx Port\",\"filter\":\"0~65535\",\"name\":\"primaryPeerGxPort\",\"type\":\"int\",\"value\":\"3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary Remote Gx IP\",\"filter\":\"\",\"name\":\"secondaryPeerGxIp\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"Secondary Remote Gx Port\",\"filter\":\"0~65535\",\"name\":\"secondaryPeerGxPort\",\"type\":\"int\",\"value\":\"3868\"}]', 3, '', 1719831211498); +INSERT INTO `ne_config` VALUES (41, 'SMF', 'upfConfig', 'UPF Config', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~2047\",\"name\":\"index\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UPF ID\",\"filter\":\"1~64\",\"name\":\"id\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"e.g. ip:port\",\"display\":\"Address\",\"filter\":\"7~45\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"IPv4,IPv6,IPv4v6\",\"display\":\"Ip Pool Type\",\"filter\":\"\",\"name\":\"ipPoolType\",\"type\":\"string\",\"value\":\"IPv4v6\"},{\"access\":\"read-write\",\"comment\":\"CIDR format, e.g. 192.168.1.0/24\",\"display\":\"IPv4 Pools\",\"filter\":\"10~256\",\"name\":\"ipv4Pools\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"CIDR format, e.g. fe80::20c:29ff:fee4:dab7/50\",\"display\":\"IPv6 Pools\",\"filter\":\"5~512\",\"name\":\"ipv6Pools\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IPv4 Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"staticIpv4Enable\",\"type\":\"bool\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv4 format\",\"display\":\"Static IPv4 Start\",\"filter\":\"\",\"name\":\"staticIpv4Start\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv4 format\",\"display\":\"Static IPv4 End\",\"filter\":\"\",\"name\":\"staticIpv4End\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IPv6 Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"staticIpv6Enable\",\"type\":\"bool\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv6 format\",\"display\":\"Static IPv6 Start\",\"filter\":\"\",\"name\":\"staticIpv6Start\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv6 format\",\"display\":\"Static IPv6 End\",\"filter\":\"\",\"name\":\"staticIpv6End\",\"type\":\"ipv6\",\"value\":\"\"},{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~2047\",\"name\":\"index\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"1~64\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"IPv4,IPv6,IPv4v6\",\"display\":\"Ip Pool Type\",\"filter\":\"\",\"name\":\"ipPoolType\",\"type\":\"string\",\"value\":\"IPv4v6\"},{\"access\":\"read-write\",\"comment\":\"CIDR format, e.g. 192.168.1.0/24\",\"display\":\"IPv4 Pools\",\"filter\":\"10~256\",\"name\":\"ipv4Pools\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"CIDR format, e.g. fe80::20c:29ff:fee4:dab7/50\",\"display\":\"IPv6 Pools\",\"filter\":\"5~512\",\"name\":\"ipv6Pools\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IPv4 Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"staticIpv4Enable\",\"type\":\"bool\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv4 format\",\"display\":\"Static IPv4 Start\",\"filter\":\"\",\"name\":\"staticIpv4Start\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv4 format\",\"display\":\"Static IPv4 End\",\"filter\":\"\",\"name\":\"staticIpv4End\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IPv6 Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"staticIpv6Enable\",\"type\":\"bool\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv6 format\",\"display\":\"Static IPv6 Start\",\"filter\":\"\",\"name\":\"staticIpv6Start\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv6 format\",\"display\":\"Static IPv6 End\",\"filter\":\"\",\"name\":\"staticIpv6End\",\"type\":\"ipv6\",\"value\":\"\"}],\"display\":\"UE DNN IP Pool\",\"name\":\"ueDnnIpPool\"}]', 5, '', 1719831211547); +INSERT INTO `ne_config` VALUES (42, 'SMF', 'dnnSelectUpf', 'DNN Select UPF', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~65535\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"1~64\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UPF ID\",\"filter\":\"1~64\",\"name\":\"upfId\",\"type\":\"string\",\"value\":\"\"}]', 7, '', 1719831211647); +INSERT INTO `ne_config` VALUES (43, 'SMF', 'dnnTaiSelectUpf', 'DNN TAI Select UPF', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~65535\",\"name\":\"index\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"1~64\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"MCC+MNC+TAC\",\"display\":\"TAI\",\"filter\":\"1~64\",\"name\":\"tai\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UPF ID\",\"filter\":\"1~64\",\"name\":\"upfId\",\"type\":\"string\",\"value\":\"upf2-Id\"}]', 9, '', 1719831211733); +INSERT INTO `ne_config` VALUES (44, 'SMF', 'snssaiSelectUpf', 'SNSSAI Select UPF', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~65535\",\"name\":\"index\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"sst1-sd1;sst2-sd2;sst3-sd3\",\"display\":\"SNSSAI\",\"filter\":\"1~64\",\"name\":\"snssai\",\"type\":\"string\",\"value\":\"1-000001\"},{\"access\":\"read-write\",\"comment\":\"upf1-id;upf2-id;upf3-id\",\"display\":\"UPF ID\",\"filter\":\"1~64\",\"name\":\"upfId\",\"type\":\"string\",\"value\":\"upf1-Id\"}]', 11, '', 1719831211854); +INSERT INTO `ne_config` VALUES (45, 'SMF', 'offlineChargingConfig', 'Offline Charging Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CDR File Name\",\"filter\":\"1~64\",\"name\":\"cdrFileName\",\"type\":\"string\",\"value\":\"smf.cdr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CDR File Path\",\"filter\":\"1~256\",\"name\":\"cdrFilePath\",\"type\":\"string\",\"value\":\"/var/log/smfCdr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CDR File Num\",\"filter\":\"1~999999999\",\"name\":\"cdrFileNum\",\"type\":\"int\",\"value\":\"50\"},{\"access\":\"read-write\",\"comment\":\"Megabytes\",\"display\":\"CDR File Size\",\"filter\":\"1~999999\",\"name\":\"cdrFileSize\",\"type\":\"int\",\"value\":\"300\"},{\"access\":\"read-write\",\"comment\":\"Days\",\"display\":\"CDR File Max Age\",\"filter\":\"0~9999\",\"name\":\"cdrFileMaxAge\",\"type\":\"int\",\"value\":\"30\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Free Subscribers CDR Enable\",\"filter\":\"\",\"name\":\"freeSubsCdrEnable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"Seconds\",\"display\":\"Time Threshold\",\"filter\":\"0~999999999\",\"name\":\"timeThreshold\",\"type\":\"int\",\"value\":\"600\"},{\"access\":\"read-write\",\"comment\":\"Bytes\",\"display\":\"Volume Threshold\",\"filter\":\"0~999999999999999\",\"name\":\"volumeThreshold\",\"type\":\"int\",\"value\":\"0\"}]', 13, '', 1719831211901); +INSERT INTO `ne_config` VALUES (46, 'SMSC', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CDR Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"cdrFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SM Validity\",\"filter\":\"0-2147483647\",\"name\":\"smValidity\",\"type\":\"int\",\"value\":\"259200\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"logFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to unattainable local users.\",\"display\":\"Local Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"localPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to unattainable outbound roaming users.\",\"display\":\"Local Roaming Out Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"localRoamingOutPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to unattainable inbound roaming users.\",\"display\":\"Visitor Roaming In Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"visitorRoamingInPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to other unattainable users.\",\"display\":\"Other Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"otherPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Define the maximum port number that the queue of pending SMS may grow to.\",\"display\":\"Polling Number\",\"filter\":\"0-64\",\"name\":\"pollingNumber\",\"type\":\"int\",\"value\":\"64\"},{\"access\":\"read-write\",\"comment\":\"Specify the priority parameter of SM_RP_PRI. true = High; false = Low.\",\"display\":\"Priority Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"priorityFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable TP-Reply-Path parameter in the SMS-DELIVER data unit.\",\"display\":\"TP Reply Path Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"tpReplyPathFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMSC Domain\",\"filter\":\"0~16\",\"name\":\"smscDomain\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CSFB VoLTE Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"csfbVolteFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Camel Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"camelFlag\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SCF Address\",\"filter\":\"0~16\",\"name\":\"scfAddress\",\"type\":\"string\",\"value\":\"0.0.0.0\"}]', 1, '', 1719831212029); +INSERT INTO `ne_config` VALUES (47, 'SMSC', 'msisdnsegment', 'MSISDN Segment List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Start MSISDN\",\"filter\":\"0~32\",\"name\":\"startMSISDN\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"End MSISDN\",\"filter\":\"0~32\",\"name\":\"endMSISDN\",\"type\":\"string\",\"value\":\"0\"}]', 3, 'put', 1719831212149); +INSERT INTO `ne_config` VALUES (48, 'SMSC', 'smpplink', 'SMPP Link List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~63\",\"display\":\"Index\",\"filter\":\"0~63\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Alias\",\"filter\":\"0~32\",\"name\":\"linkAlias\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Session Type\",\"filter\":\"{\\\"0\\\":\\\"bindTX\\\",\\\"1\\\":\\\"bindRX\\\",\\\"2\\\":\\\"bindTRX\\\"}\",\"name\":\"sessionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Number\",\"filter\":\"0~32\",\"name\":\"serviceNumber\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Data Coding Scheme\",\"filter\":\"{\\\"0\\\":\\\"smpp7def7\\\",\\\"1\\\":\\\"smpp8dcs4def7\\\",\\\"2\\\":\\\"smpp8dcs0def7\\\",\\\"16\\\":\\\"smpp7def8\\\",\\\"17\\\":\\\"smpp8dcs4def8\\\",\\\"18\\\":\\\"smpp8dcs0def8\\\"}\",\"name\":\"dataCodingScheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Platform Num\",\"filter\":\"{\\\"0\\\":\\\"plat0\\\",\\\"1\\\":\\\"plat1\\\",\\\"2\\\":\\\"ignore\\\"}\",\"name\":\"platformNum\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Time To Live\",\"filter\":\"0-2147483647\",\"name\":\"timeToLive\",\"type\":\"int\",\"value\":\"604800\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Manipulation Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"manipulationFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Type of Number\",\"filter\":\"{\\\"0\\\":\\\"unknown\\\",\\\"1\\\":\\\"international\\\",\\\"2\\\":\\\"national\\\",\\\"3\\\":\\\"networkSpecific\\\",\\\"4\\\":\\\"subscriberNumber\\\",\\\"5\\\":\\\"alphanumeric\\\",\\\"6\\\":\\\"abbreviated\\\"}\",\"name\":\"ton\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Number Plan Indicator\",\"filter\":\"{\\\"0\\\":\\\"unknown\\\",\\\"1\\\":\\\"isdn\\\",\\\"3\\\":\\\"data\\\",\\\"4\\\":\\\"telex\\\",\\\"6\\\":\\\"landMobile\\\",\\\"8\\\":\\\"national\\\",\\\"9\\\":\\\"private\\\",\\\"10\\\":\\\"ermes\\\",\\\"14\\\":\\\"internet\\\",\\\"18\\\":\\\"wapClientID\\\"}\",\"name\":\"npi\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Role Type\",\"filter\":\"{\\\"0\\\":\\\"server\\\",\\\"1\\\":\\\"client\\\"}\",\"name\":\"roleType\",\"type\":\"enum\",\"value\":\"0\"}]', 5, '', 1719831212227); +INSERT INTO `ne_config` VALUES (49, 'UDM', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IP\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.140\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Port\",\"filter\":\"0~65535\",\"name\":\"servicePort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AUSF IP\",\"filter\":\"\",\"name\":\"ausfIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.130\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"FQDN\",\"filter\":\"\",\"name\":\"fqdn\",\"type\":\"string\",\"value\":\"agt.com\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Priority\",\"filter\":\"0~4095\",\"name\":\"priority\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Capacity\",\"filter\":\"0~65535\",\"name\":\"capacity\",\"type\":\"int\",\"value\":\"4096\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Group ID\",\"filter\":\"\",\"name\":\"groupId\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn1\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn1\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn2\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn2\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn3\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn3\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn4\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn4\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SUPI Ranges\",\"filter\":\"^imsi-\\\\d{15}~imsi-\\\\d{15}$\",\"name\":\"supiRanges\",\"type\":\"regex\",\"value\":\"imsi-001010100080000~imsi-001010100080099\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GPSI Ranges\",\"filter\":\"^msisdn-\\\\d{2,15}~msisdn-\\\\d{2,15}$\",\"name\":\"gpsiRanges\",\"type\":\"regex\",\"value\":\"msisdn-69072000~msisdn-69072099\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"HTTP\\\", \\\"1\\\":\\\"HTTPS\\\"}\",\"name\":\"scheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Redis Link\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"redisLink\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Redis Address\",\"filter\":\"\",\"name\":\"redisAddr\",\"type\":\"string\",\"value\":\"172.16.5.140:6379\"}]', 1, '', 1719831212399); +INSERT INTO `ne_config` VALUES (50, 'UDM', 'subsUEAmbr', 'Subs UE AMBR', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"uplink\",\"type\":\"regex\",\"value\":\"1 Gbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"downlink\",\"type\":\"regex\",\"value\":\"2 Gbps\"}]', 3, '', 1719831212494); +INSERT INTO `ne_config` VALUES (51, 'UDM', 'subsNssais', 'Subs NSSAIs', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_nssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Features\",\"filter\":\"^[0-9a-fA-F]{8}$\",\"name\":\"supportedFeatures\",\"type\":\"regex\",\"value\":\"00000001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default Single NSSAIs\",\"filter\":\"\",\"name\":\"defaultSingleNSSAIs\",\"type\":\"string\",\"value\":\"1-000001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Single NSSAIs\",\"filter\":\"\",\"name\":\"singleNssais\",\"type\":\"string\",\"value\":\"1-000002\"}]', 5, '', 1719831212590); +INSERT INTO `ne_config` VALUES (52, 'UDM', 'forbiddenAreas', 'Forbidden Areas', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TACs\",\"filter\":\"\",\"name\":\"tacs\",\"type\":\"string\",\"value\":\"123\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Area Codes\",\"filter\":\"\",\"name\":\"areaCodes\",\"type\":\"string\",\"value\":\"123456\"}]', 7, '', 1719831212718); +INSERT INTO `ne_config` VALUES (53, 'UDM', 'serviceAreaRestriction', 'Service Area Restriction', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Restriction Type\",\"filter\":\"{\\\"0\\\":\\\"Allowed Areas\\\", \\\"1\\\":\\\"Not Allowed Areas\\\"}\",\"name\":\"restrictionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TACs\",\"filter\":\"\",\"name\":\"tacs\",\"type\":\"string\",\"value\":\"123\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Area Codes\",\"filter\":\"\",\"name\":\"areaCodes\",\"type\":\"string\",\"value\":\"123456\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max TAs\",\"filter\":\"^\\\\d{1,2}$\",\"name\":\"maxTAs\",\"type\":\"int\",\"value\":\"1\"}]', 9, '', 1719831212824); +INSERT INTO `ne_config` VALUES (54, 'UDM', 'smfSelection', 'Subs SMF Selection', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_snssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SNSSAI\",\"filter\":\"^\\\\d{1,3}[A-Fa-f0-9]{6}$\",\"name\":\"snssai\",\"type\":\"string\",\"value\":\"1-000001\"},{\"access\":\"read-only\",\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~4\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"^.{1,32}$\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default DNN Indicator\",\"filter\":\"false;true;\",\"name\":\"defaultDnnInd\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LBO Roaming Allowed\",\"filter\":\"false;true;\",\"name\":\"lboRoamingAllowed\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interworking EPS Indicator\",\"filter\":\"false;true;\",\"name\":\"iwkEpsInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LADN Indicator\",\"filter\":\"false;true;\",\"name\":\"ladnIndicator\",\"type\":\"bool\",\"value\":\"false\"}],\"comment\":\"\",\"display\":\"DNN List\",\"filter\":\"1~4\",\"name\":\"dnnList\",\"type\":\"int\",\"value\":\"1\"}]', 11, '', 1719831212979); +INSERT INTO `ne_config` VALUES (55, 'UDM', 'dnn', 'DNN Conf', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_nssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default PDU Session Type\",\"filter\":\"{\\\"0\\\":\\\"IPv4\\\",\\\"1\\\":\\\"IPv6\\\",\\\"2\\\":\\\"IPv4v6\\\",\\\"3\\\":\\\"Ethernet\\\",\\\"4\\\":\\\"Unstruction\\\"}\",\"name\":\"defaultPDUSessionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Allowed PDU Session Types\",\"filter\":\"{\\\"0\\\":\\\"IPv4\\\",\\\"1\\\":\\\"IPv6\\\",\\\"2\\\":\\\"IPv4v6\\\",\\\"3\\\":\\\"Ethernet\\\",\\\"4\\\":\\\"Unstruction\\\",\\\"5\\\":\\\"IPv4 \\u0026 IPv6\\\",\\\"6\\\":\\\"IPv4 \\u0026 IPv4v6\\\",\\\"7\\\":\\\"IPv6 \\u0026 IPv4v6\\\",\\\"8\\\":\\\"IPv4 \\u0026 IPv6 \\u0026 IPv4v6\\\"}\",\"name\":\"allowedPDUSessionTypes\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI\",\"filter\":\"0~255\",\"name\":\"5qi\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Priority Level\",\"filter\":\"1~127\",\"name\":\"priorityLevel\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default SSC Mode\",\"filter\":\"{\\\"0\\\":\\\"SSC Mode1\\\",\\\"1\\\":\\\"SSC Mode2\\\",\\\"2\\\":\\\"SSC Mode3\\\"}\",\"name\":\"defaultSSCmode\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Allowed SSC Modes\",\"filter\":\"{\\\"0\\\":\\\"SSC Mode1\\\",\\\"1\\\":\\\"SSC Mode2\\\",\\\"2\\\":\\\"SSC Mode3\\\",\\\"3\\\":\\\"SSC Mode1 \\u0026 SSC Mode2\\\",\\\"4\\\":\\\"SSC Mode1 \\u0026 SSC Mode3\\\",\\\"5\\\":\\\"SSC Mode2 \\u0026 SSC Mode3\\\",\\\"6\\\":\\\"SSC Mode1 \\u0026 SSC Mode2 \\u0026 SSC Mode3\\\"}\",\"name\":\"allowedSSCmodes\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interworking EPS Indicator\",\"filter\":\"\",\"name\":\"interworkingEPSIndicator\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LADN Indicator\",\"filter\":\"\",\"name\":\"ladnIndicator\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Charging Characteristics\",\"filter\":\"4~4\",\"name\":\"chargingCharacteristics\",\"type\":\"string\",\"value\":\"0001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Subscribed Session AMBR Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"subscribedSessionAmbrUL\",\"type\":\"regex\",\"value\":\"1 Gbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Subscribed Session AMBR Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"subscribedSessionAmbrDL\",\"type\":\"regex\",\"value\":\"2 Gbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IP Address\",\"filter\":\"\",\"name\":\"staticIPAddress\",\"type\":\"ipv4\",\"value\":\"192.168.1.100\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Plane Integrity\",\"filter\":\"{\\\"0\\\":\\\"Null\\\",\\\"1\\\":\\\"Required\\\",\\\"2\\\":\\\"Preferred\\\",\\\"3\\\":\\\"Not Needed\\\"}\",\"name\":\"userPlaneIntegrity\",\"type\":\"enum\",\"value\":\"3\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Plane Confidentiality\",\"filter\":\"{\\\"0\\\":\\\"Null\\\",\\\"1\\\":\\\"Required\\\",\\\"2\\\":\\\"Preferred\\\",\\\"3\\\":\\\"Not Needed\\\"}\",\"name\":\"userPlaneConfidentiality\",\"type\":\"enum\",\"value\":\"3\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority Level\",\"filter\":\"0~255\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"}]', 13, '', 1719831213074); +INSERT INTO `ne_config` VALUES (56, 'UDM', 'epsTemplate', 'EPS User Template', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{0,31}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_eps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Uplink\",\"filter\":\"0~4294967295\",\"name\":\"ambrUplink\",\"type\":\"int\",\"value\":\"100000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Downlink\",\"filter\":\"0~4294967295\",\"name\":\"ambrDownlink\",\"type\":\"int\",\"value\":\"200000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"APN OI Replacement\",\"filter\":\"^.{0,31}$\",\"name\":\"apnOIReplacement\",\"type\":\"string\",\"value\":\"money\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RFSP\",\"filter\":\"\",\"name\":\"rfsp\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RAU TAU Timer\",\"filter\":\"\",\"name\":\"rauTauTimer\",\"type\":\"int\",\"value\":\"120\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Charging Characteristic\",\"filter\":\"4~4\",\"name\":\"chargingCharacteristic\",\"type\":\"string\",\"value\":\"0001\"}]', 15, '', 1719831213203); +INSERT INTO `ne_config` VALUES (57, 'UDM', 'epsApn', 'EPS APN', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"^.{0,127}$\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PDN Type\",\"filter\":\"{\\\"0\\\":\\\"IPv4\\\",\\\"1\\\":\\\"IPv6\\\",\\\"2\\\":\\\"IPv4v6\\\",\\\"3\\\":\\\"IPv4 or IPv6\\\"}\",\"name\":\"pdnType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QCI\",\"filter\":\"1~255\",\"name\":\"qci\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority\",\"filter\":\"1~127\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"8\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preemption Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preemption Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Context Identifier\",\"filter\":\"\",\"name\":\"contextIdentifier\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"VPLMN Dynamic Address Allowed\",\"filter\":\"false;true;\",\"name\":\"vplmnDynamicAddressAllowed\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PDN GW Allocation Type\",\"filter\":\"{\\\"0\\\":\\\"Static\\\",\\\"1\\\":\\\"Dynamic\\\"}\",\"name\":\"pdnGWAllocationType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Uplink\",\"filter\":\"0~4294967295\",\"name\":\"ambrUplink\",\"type\":\"int\",\"value\":\"100000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Downlink\",\"filter\":\"0~4294967295\",\"name\":\"ambrDownlink\",\"type\":\"int\",\"value\":\"200000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Charging Characteristic\",\"filter\":\"4~4\",\"name\":\"chargingCharacteristic\",\"type\":\"string\",\"value\":\"0001\"}]', 17, '', 1719831213410); +INSERT INTO `ne_config` VALUES (58, 'UDM', 'applicationServer', 'Application Server', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AS Name\",\"filter\":\"^.{1,31}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"mmtel_as\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default Handling\",\"filter\":\"{\\\"0\\\":\\\"Session Continued\\\",\\\"1\\\":\\\"Session Terminated\\\"}\",\"name\":\"defaultHandling\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server Name\",\"filter\":\"^.{1,127}$\",\"name\":\"serverName\",\"type\":\"string\",\"value\":\"sip:192.168.8.26:7060\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Diameter Address\",\"filter\":\"^.{1,127}$\",\"name\":\"diameterAddress\",\"type\":\"string\",\"value\":\"mmtel.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rep Data Size Limit\",\"filter\":\"0~65535\",\"name\":\"repDataSizeLimit\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Include Register Request\",\"filter\":\"false;true;\",\"name\":\"includeRegisterRequest\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Include Register Response\",\"filter\":\"false;true;\",\"name\":\"includeRegisterResponse\",\"type\":\"bool\",\"value\":\"false\"}]', 19, '', 1719831213536); +INSERT INTO `ne_config` VALUES (59, 'UDM', 'scscfSet', 'SCSCF Set', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~8\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,31}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"mmtel_as\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Priority\",\"filter\":\"\",\"name\":\"priority\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server Name\",\"filter\":\"^.{1,127}$\",\"name\":\"serverName\",\"type\":\"string\",\"value\":\"sip:scscf.ims.mnc001.mcc001.3gppnetwork.org:6060\"}]', 21, '', 1719831213732); +INSERT INTO `ne_config` VALUES (60, 'UDM', 'triggerPoint', 'Trigger Point', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_snssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Condition Type CNF\",\"filter\":\"0~1\",\"name\":\"conditionTypeCNF\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-only\",\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~4\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Condition Negated\",\"filter\":\"0~1\",\"name\":\"conditionNegated\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Group\",\"filter\":\"0~4096\",\"name\":\"group\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Method\",\"filter\":\"^.{0,32}$\",\"name\":\"method\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SIP Header\",\"filter\":\"^.{0,64}$\",\"name\":\"sipHeader\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SIP Content\",\"filter\":\"^.{0,64}$\",\"name\":\"sipContent\",\"type\":\"string\",\"value\":\"\"}],\"comment\":\"\",\"display\":\"SPT List\",\"filter\":\"1~4\",\"name\":\"sptList\",\"type\":\"int\",\"value\":\"1\"}]', 23, '', 1719831213924); +INSERT INTO `ne_config` VALUES (61, 'UDM', 's6aServer', 'S6a Server', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{1,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{1,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]', 25, '', 1719831214313); +INSERT INTO `ne_config` VALUES (62, 'UDM', 'cxServer', 'Cx Server', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{1,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{1,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]', 27, '', 1719831214393); +INSERT INTO `ne_config` VALUES (63, 'UPF', 'general', 'General', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Config File Directory\",\"filter\":\"\",\"name\":\"configFileDirectory\",\"type\":\"string\",\"value\":\"/usr/local/etc/upf/\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"EXE File Directory\",\"filter\":\"\",\"name\":\"exeFileDirectory\",\"type\":\"string\",\"value\":\"/usr/local/bin/\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"System ID\",\"filter\":\"\",\"name\":\"systemId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"1~8\",\"display\":\"Data Forwarder Number\",\"filter\":\"1~8\",\"name\":\"dataForwarderNum\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Common Statistic Interval\",\"filter\":\"\",\"name\":\"commonStatisticInterval\",\"type\":\"int\",\"value\":\"60\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Statistic Interval\",\"filter\":\"\",\"name\":\"userStatisticInterval\",\"type\":\"int\",\"value\":\"60\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RX N3 OverLoad Threshold Mbps\",\"filter\":\"\",\"name\":\"rxN3OverLoadThresholdMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RX N6 OverLoad Threshold Mbps\",\"filter\":\"\",\"name\":\"rxN6OverLoadThresholdMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Checksum Offload\",\"filter\":\"0~255\",\"name\":\"checksumOffload\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Downlink Buffer Num\",\"filter\":\"\",\"name\":\"maxDownlinkBufferNum\",\"type\":\"int\",\"value\":\"50\"}]', 1, '', 1721705770725); +INSERT INTO `ne_config` VALUES (64, 'UPF', 'logger', 'Logger', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log File Full Path\",\"filter\":\"\",\"name\":\"logFileFullPath\",\"type\":\"string\",\"value\":\"/var/log/upf.log\"},{\"access\":\"read-write\",\"comment\":\"error|warning|info|debug\",\"display\":\"Log Level\",\"filter\":\"\",\"name\":\"logLevel\",\"type\":\"string\",\"value\":\"error\"},{\"access\":\"read-write\",\"comment\":\"error|warning|info|debug\",\"display\":\"Upfd Log Level\",\"filter\":\"\",\"name\":\"upfdLogLevel\",\"type\":\"string\",\"value\":\"error\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Upfd Log Transfer\",\"filter\":\"\",\"name\":\"upfdLogTransfer\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Report Caller\",\"filter\":\"\",\"name\":\"reportCaller\",\"type\":\"bool\",\"value\":\"false\"}]', 3, '', 1721705772689); +INSERT INTO `ne_config` VALUES (65, 'UPF', 'pfcp', 'PFCP', 'list', '[{\"access\":\"read-write\",\"comment\":\"ipv4|ipv6|ipv46\",\"display\":\"IP Type\",\"filter\":\"\",\"name\":\"ipType\",\"type\":\"string\",\"value\":\"ipv4\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local IPv4\",\"filter\":\"\",\"name\":\"localIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local IPv6\",\"filter\":\"\",\"name\":\"localIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"1~65535\",\"display\":\"Local UDP Port\",\"filter\":\"1~65535\",\"name\":\"localUdpPort\",\"type\":\"int\",\"value\":\"8805\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMF IPv4\",\"filter\":\"\",\"name\":\"smfIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMF IPv6\",\"filter\":\"\",\"name\":\"smfIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"1~65535\",\"display\":\"SMF UDP Port\",\"filter\":\"1~65535\",\"name\":\"smfUdpPort\",\"type\":\"int\",\"value\":\"8805\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"Retry Interval\",\"filter\":\"1~255\",\"name\":\"retryInterval\",\"type\":\"int\",\"value\":\"2\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Max Retry\",\"filter\":\"0~255\",\"name\":\"maxRetry\",\"type\":\"int\",\"value\":\"3\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"Heartbeat Interval\",\"filter\":\"1~255\",\"name\":\"heartbeatInterval\",\"type\":\"int\",\"value\":\"15\"}]', 5, '', 1721705772791); +INSERT INTO `ne_config` VALUES (66, 'UPF', 'telnet', 'Telnet', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enabled\",\"filter\":\"\",\"name\":\"enabled\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"ipv4|ipv6|ipv46\",\"display\":\"IP Type\",\"filter\":\"\",\"name\":\"ipType\",\"type\":\"string\",\"value\":\"ipv4\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local IPv4\",\"filter\":\"\",\"name\":\"localIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local IPv6\",\"filter\":\"\",\"name\":\"localIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"1~65535\",\"display\":\"Local Port\",\"filter\":\"1~65535\",\"name\":\"localPort\",\"type\":\"int\",\"value\":\"4100\"}]', 7, '', 1721705772939); +INSERT INTO `ne_config` VALUES (67, 'UPF', 'redisDb', 'Redis DB', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enabled\",\"filter\":\"\",\"name\":\"enabled\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"tcp|udp\",\"display\":\"Net Type\",\"filter\":\"\",\"name\":\"netType\",\"type\":\"string\",\"value\":\"tcp\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server Address\",\"filter\":\"\",\"name\":\"serverAddr\",\"type\":\"string\",\"value\":\"0.0.0.0:0\"}]', 9, '', 1721705773069); +INSERT INTO `ne_config` VALUES (68, 'UPF', 'dataForwarderCommon', 'Data Forwarder Common', 'list', '[{\"access\":\"read-write\",\"comment\":\"upfd|tun\",\"display\":\"Type\",\"filter\":\"\",\"name\":\"type\",\"type\":\"string\",\"value\":\"upfd\"},{\"access\":\"read-only\",\"comment\":\"1~8\",\"display\":\"Instance ID\",\"filter\":\"1~8\",\"name\":\"instanceId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"Main CPU\",\"filter\":\"1~255\",\"name\":\"mainCpu\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"2,3,4,5 or 2-5\",\"display\":\"CPU Workers\",\"filter\":\"\",\"name\":\"cpuWorkers\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"data forwarder already run or not\",\"display\":\"Is Run\",\"filter\":\"0~1\",\"name\":\"isRun\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"Hot Standby work or not\",\"display\":\"Is Hot Standby\",\"filter\":\"0~1\",\"name\":\"isHotStandby\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"The value from which TEID is allocated\",\"display\":\"TEID Start\",\"filter\":\"\",\"name\":\"teidStart\",\"type\":\"int\",\"value\":\"16777216\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 Heartbeat Interval\",\"filter\":\"\",\"name\":\"n3HeartbeatInterval\",\"type\":\"int\",\"value\":\"30\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RX TX Queue Num\",\"filter\":\"\",\"name\":\"rxTxQueueNum\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"data rx\\u0026tx use C socket\",\"display\":\"Use Socket\",\"filter\":\"0~1\",\"name\":\"useSocket\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"Enable 5G ethernet LAN\",\"display\":\"Enable Tap\",\"filter\":\"0~1\",\"name\":\"enableTap\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"Enable PFCP Qer Control\",\"display\":\"Enable Qer\",\"filter\":\"0~1\",\"name\":\"enableQer\",\"type\":\"int\",\"value\":\"0\"}]', 11, '', 1721705773160); +INSERT INTO `ne_config` VALUES (69, 'UPF', 'dataForwarderUpfd', 'Data Forwarder Upfd', 'list', '[{\"access\":\"read-write\",\"comment\":\"Currently only support vfio-pci\",\"display\":\"UIO Driver\",\"filter\":\"\",\"name\":\"uioDriver\",\"type\":\"string\",\"value\":\"vfio-pci\"},{\"access\":\"read-write\",\"comment\":\"The format must be IP:Port\",\"display\":\"Telnet Address IP:Port\",\"filter\":\"\",\"name\":\"commandlineListen\",\"type\":\"string\",\"value\":\"localhost:5002\"},{\"access\":\"read-write\",\"comment\":\"the unit is GB\",\"display\":\"Heap Size GB\",\"filter\":\"1~8\",\"name\":\"heapSizeGB\",\"type\":\"int\",\"value\":\"2\"},{\"access\":\"read-write\",\"comment\":\"the unit is MB\",\"display\":\"State Seg Size MB\",\"filter\":\"64~512\",\"name\":\"stateSegSizeMB\",\"type\":\"int\",\"value\":\"256\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK No PCI\",\"filter\":\"0~1\",\"name\":\"dpdkNoPci\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Mem Channel Num\",\"filter\":\"0~128\",\"name\":\"memChannelNum\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Session Base Va\",\"filter\":\"\",\"name\":\"sessionBaseVa\",\"type\":\"string\",\"value\":\"0x2000000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Buffers Per Numa\",\"filter\":\"\",\"name\":\"buffersPerNuma\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 RSS Hash\",\"filter\":\"\",\"name\":\"n3RssHash\",\"type\":\"string\",\"value\":\"\"}]', 13, '', 1721705774027); +INSERT INTO `ne_config` VALUES (70, 'UPF', 'dataInterfaceList', 'Data Interface List', 'array', '[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"N3|N6|N9|N19\",\"display\":\"Interface Type\",\"filter\":\"\",\"name\":\"interfaceType\",\"type\":\"string\",\"value\":\"N3\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interface ID\",\"filter\":\"1~32\",\"name\":\"interfaceId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"host|vmxnet3|dpdk|socket|uds\",\"display\":\"Driver Type\",\"filter\":\"\",\"name\":\"driverType\",\"type\":\"string\",\"value\":\"host\"},{\"access\":\"read-write\",\"comment\":\"ipv4|ipv6|ipv4v6\",\"display\":\"IP Type\",\"filter\":\"\",\"name\":\"ipType\",\"type\":\"string\",\"value\":\"ipv4\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~8\",\"display\":\"Index\",\"filter\":\"1~8\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"IPv4\",\"display\":\"IPv4\",\"filter\":\"\",\"name\":\"ipv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4 Mask\",\"filter\":\"\",\"name\":\"ipv4Mask\",\"type\":\"string\",\"value\":\"0.0.0.0\"}],\"comment\":\"\",\"display\":\"IPv4 Address List\",\"filter\":\"0~8\",\"name\":\"ipv4AddrList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~8\",\"display\":\"Index\",\"filter\":\"1~8\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6\",\"filter\":\"\",\"name\":\"ipv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6 Prefix\",\"filter\":\"\",\"name\":\"ipv6Prefix\",\"type\":\"int\",\"value\":\"64\"}],\"comment\":\"\",\"display\":\"IPv6 Address List\",\"filter\":\"0~8\",\"name\":\"ipv6AddrList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MAC Address\",\"filter\":\"\",\"name\":\"macAddr\",\"type\":\"string\",\"value\":\"00:00:00:00:00:00\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interface PCI\",\"filter\":\"\",\"name\":\"interfacePCI\",\"type\":\"string\",\"value\":\"0000:00:00.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"System Network Card Name\",\"filter\":\"\",\"name\":\"systemNetworkCardName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gateway IPv4\",\"filter\":\"\",\"name\":\"gatewayIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"null|bak|sub|xor|round|lacp\",\"display\":\"Bond Type\",\"filter\":\"\",\"name\":\"bondType\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Bond ID\",\"filter\":\"0~32\",\"name\":\"bondId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"BFD TX Interval Ms\",\"filter\":\"\",\"name\":\"bfdTxIntervalMs\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"BFD RX Interval Ms\",\"filter\":\"\",\"name\":\"bfdRxIntervalMs\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN Name\",\"filter\":\"\",\"name\":\"dnnName\",\"type\":\"string\",\"value\":\"default\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gateway IPv6\",\"filter\":\"\",\"name\":\"gatewayIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"BFD Gateway IPv4\",\"filter\":\"\",\"name\":\"bfdGatewayIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"BFD Gateway IPv6\",\"filter\":\"\",\"name\":\"bfdGatewayIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MTU\",\"filter\":\"0~65535\",\"name\":\"mtu\",\"type\":\"int\",\"value\":\"1500\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Vlan ID Min\",\"filter\":\"\",\"name\":\"vlanIdMin\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Vlan ID Max\",\"filter\":\"\",\"name\":\"vlanIdMax\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDP Src Port\",\"filter\":\"1~65535\",\"name\":\"udpSrcPort\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDP Listen Port\",\"filter\":\"0~65536\",\"name\":\"udpListenPort\",\"type\":\"int\",\"value\":\"2152\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDS Local File Full Path\",\"filter\":\"\",\"name\":\"udsLocalFileFullPath\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDS Remote File Full Path\",\"filter\":\"\",\"name\":\"udsRemoteFileFullPath\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Detection Type\",\"filter\":\"0~1\",\"name\":\"linkDetectionType\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NAT Interface ID\",\"filter\":\"0~1\",\"name\":\"natInterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4\",\"filter\":\"\",\"name\":\"ueIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv4 Mask\",\"filter\":\"\",\"name\":\"ueIpv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6\",\"filter\":\"\",\"name\":\"ueIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"ueIpv6Prefix\",\"type\":\"int\",\"value\":\"64\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4\",\"filter\":\"\",\"name\":\"ipv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4 Mask\",\"filter\":\"\",\"name\":\"ipv4Mask\",\"type\":\"string\",\"value\":\"0.0.0.0\"}],\"comment\":\"\",\"display\":\"GTPU Remote IPv4 Pool List\",\"filter\":\"1~32\",\"name\":\"gtpuRemoteIpv4PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6\",\"filter\":\"\",\"name\":\"ipv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6 Prefix\",\"filter\":\"\",\"name\":\"ipv6Prefix\",\"type\":\"int\",\"value\":\"64\"}],\"comment\":\"\",\"display\":\"GTPU Remote IPv6 Pool List\",\"filter\":\"0~32\",\"name\":\"gtpuRemoteIpv6PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GTPU Signaling Handle\",\"filter\":\"0~1\",\"name\":\"gtpuSignalingHandle\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IMS Default DSCP Value\",\"filter\":\"0~1\",\"name\":\"imsDefaultDSCPValue\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Data Default DSCP Value\",\"filter\":\"0~1\",\"name\":\"dataDefaultDSCPValue\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Inner DSCP Value Map\",\"filter\":\"0~1\",\"name\":\"innerDSCPValueMap\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Support Speed Mbps\",\"filter\":\"0~65536\",\"name\":\"maxSupportSpeedMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK RX Queues Number\",\"filter\":\"0~127\",\"name\":\"dpdkRxQueuesNumber\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK TX Queues Number\",\"filter\":\"0~127\",\"name\":\"dpdkTxQueuesNumber\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK RX Desc Number\",\"filter\":\"0~32768\",\"name\":\"dpdkRxDescNumber\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK TX Desc Number\",\"filter\":\"0~32768\",\"name\":\"dpdkTxDescNumber\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK Workers\",\"filter\":\"\",\"name\":\"dpdkworkers\",\"type\":\"string\",\"value\":\"\"}]', 15, '', 1721705774222); +INSERT INTO `ne_config` VALUES (71, 'UPF', 'networkControlCommon', 'Network Control Common', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local Switch Disabled\",\"filter\":\"0~1\",\"name\":\"localSwitchDisabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max TCP Sync Per Second\",\"filter\":\"\",\"name\":\"maxTCPSyncPerSecond\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UPF Max Support Mbps\",\"filter\":\"\",\"name\":\"upfMaxSupportMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"dscp Inner Mapping\",\"filter\":\"\",\"name\":\"dscpInnerMapping\",\"type\":\"int\",\"value\":\"0\"}]', 17, '', 1721705774271); +INSERT INTO `ne_config` VALUES (72, 'UPF', 'networkControlDnnList', 'Network Control DNN List', 'array', '[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN Name\",\"filter\":\"\",\"name\":\"dnnName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 Interface ID\",\"filter\":\"0~32\",\"name\":\"n3InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N6 Interface ID\",\"filter\":\"0~32\",\"name\":\"n6InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"HTTP Proto Enabled\",\"filter\":\"0~1\",\"name\":\"httpProtoEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"HTTPS Proto Enabled\",\"filter\":\"0~1\",\"name\":\"httpsProtoEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Type\",\"filter\":\"\",\"name\":\"type\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"\",\"name\":\"name\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Value\",\"filter\":\"\",\"name\":\"value\",\"type\":\"string\",\"value\":\"\"}],\"comment\":\"\",\"display\":\"Header Enrich Info List\",\"filter\":\"0~32\",\"name\":\"headerEnrichInfoList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Statistic Enabled\",\"filter\":\"0~1\",\"name\":\"statisticEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local Switch Check\",\"filter\":\"0~1\",\"name\":\"localSwitchCheck\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QER Max Support Mbps\",\"filter\":\"\",\"name\":\"qerMaxSupportMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4\",\"filter\":\"\",\"name\":\"ipv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4 Mask\",\"filter\":\"\",\"name\":\"ipv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"}],\"comment\":\"\",\"display\":\"UE IPv4 Pool List\",\"filter\":\"0~32\",\"name\":\"ueIpv4PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6\",\"filter\":\"\",\"name\":\"ipv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"ipv6Prefix\",\"type\":\"int\",\"value\":\"64\"}],\"comment\":\"\",\"display\":\"UE IPv6 Pool List\",\"filter\":\"0~32\",\"name\":\"ueIpv6PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4\",\"filter\":\"\",\"name\":\"ipv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4 Mask\",\"filter\":\"\",\"name\":\"ipv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"}],\"comment\":\"\",\"display\":\"Dst Server IPv4 Pool List\",\"filter\":\"0~32\",\"name\":\"dstServerIpv4PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6\",\"filter\":\"\",\"name\":\"ipv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"ipv6Prefix\",\"type\":\"int\",\"value\":\"64\"}],\"comment\":\"\",\"display\":\"Dst Server IPv6 Pool List\",\"filter\":\"0~32\",\"name\":\"dstServerIpv6PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"ipv4|ipv6|ipv4v6\",\"display\":\"Gateway IP Type\",\"filter\":\"\",\"name\":\"gatewayIpType\",\"type\":\"string\",\"value\":\"ipv4\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gateway IPv4\",\"filter\":\"\",\"name\":\"gatewayIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gateway IPv6\",\"filter\":\"\",\"name\":\"gatewayIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary Gateway IPv4\",\"filter\":\"\",\"name\":\"secondaryGatewayIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary Gateway IPv6\",\"filter\":\"\",\"name\":\"secondaryGatewayIpv6\",\"type\":\"string\",\"value\":\"\"}]', 19, '', 1721705774430); +INSERT INTO `ne_config` VALUES (73, 'UPF', 'networkControlSnssaiList', 'Network Control SNSSAI List', 'array', '[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SST\",\"filter\":\"\",\"name\":\"sst\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SD\",\"filter\":\"\",\"name\":\"sd\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 Interface ID\",\"filter\":\"0~32\",\"name\":\"n3InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N6 Interface ID\",\"filter\":\"0~32\",\"name\":\"n6InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QER Max Support Mbps\",\"filter\":\"\",\"name\":\"qerMaxSupportMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Statistic Enabled\",\"filter\":\"0~1\",\"name\":\"statisticEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Vlan ID Min\",\"filter\":\"\",\"name\":\"vlanIdMin\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Vlan ID Max\",\"filter\":\"\",\"name\":\"vlanIdMax\",\"type\":\"int\",\"value\":\"0\"}]', 21, '', 1721705774453); +INSERT INTO `ne_config` VALUES (74, 'UPF', 'networkControlAclWhiteList', 'Network Control ACL White List', 'array', '[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv4\",\"filter\":\"\",\"name\":\"ueIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv4 Mask\",\"filter\":\"\",\"name\":\"ueIpv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6\",\"filter\":\"\",\"name\":\"ueIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"ueIpv6Prefix\",\"type\":\"int\",\"value\":\"64\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv4\",\"filter\":\"\",\"name\":\"dstServerIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv4 Mask\",\"filter\":\"\",\"name\":\"dstServerIpv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv6\",\"filter\":\"\",\"name\":\"dstServerIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"dstServerIpv6Prefix\",\"type\":\"int\",\"value\":\"64\"}]', 23, '', 1721705774471); +INSERT INTO `ne_config` VALUES (75, 'UPF', 'networkControlAclBlackList', 'Network Control ACL Black List', 'array', '[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv4\",\"filter\":\"\",\"name\":\"ueIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv4 Mask\",\"filter\":\"\",\"name\":\"ueIpv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6\",\"filter\":\"\",\"name\":\"ueIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"ueIpv6Prefix\",\"type\":\"int\",\"value\":\"64\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv4\",\"filter\":\"\",\"name\":\"dstServerIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv4 Mask\",\"filter\":\"\",\"name\":\"dstServerIpv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv6\",\"filter\":\"\",\"name\":\"dstServerIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"dstServerIpv6Prefix\",\"type\":\"int\",\"value\":\"64\"}]', 25, '', 1721705774488); +INSERT INTO `ne_config` VALUES (76, 'UPF', 'networkControlDnsServerList', 'Network Control DNS Server List', 'array', '[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~1\",\"display\":\"Enabled\",\"filter\":\"0~1\",\"name\":\"enabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNS Name\",\"filter\":\"\",\"name\":\"dnsName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server IPv4\",\"filter\":\"\",\"name\":\"serverIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server IPv6\",\"filter\":\"\",\"name\":\"serverIpv6\",\"type\":\"string\",\"value\":\"\"}]', 27, '', 1721705774492); +INSERT INTO `ne_config` VALUES (77, 'UPF', 'dpiCommon', 'DPI Common', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Detect Packet Num\",\"filter\":\"\",\"name\":\"maxDetectPacketNum\",\"type\":\"int\",\"value\":\"20\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"HTTP Proto Enabled\",\"filter\":\"0~1\",\"name\":\"httpProtoEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"HTTPS Proto Enabled\",\"filter\":\"0~1\",\"name\":\"httpsProtoEnabled\",\"type\":\"int\",\"value\":\"0\"}]', 29, '', 1721705774496); +INSERT INTO `ne_config` VALUES (78, 'UPF', 'dpiHeaderEnrichInfoList', 'DPI Header Enrich Info List', 'array', '[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Type\",\"filter\":\"\",\"name\":\"type\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"\",\"name\":\"name\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Value\",\"filter\":\"\",\"name\":\"value\",\"type\":\"string\",\"value\":\"\"}]', 31, '', 1721705774501); +INSERT INTO `ne_config` VALUES (79, 'UPF', 'dpiAppList', 'DPI APP List', 'array', '[{\"access\":\"read-write\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"APP Name\",\"filter\":\"\",\"name\":\"appName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Proxy Enabled\",\"filter\":\"0~1\",\"name\":\"proxyEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Force Check Type\",\"filter\":\"0~1\",\"name\":\"forceCheckType\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 Interface ID\",\"filter\":\"0~32\",\"name\":\"n3InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N6 Interface ID\",\"filter\":\"0~32\",\"name\":\"n6InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rule ID\",\"filter\":\"\",\"name\":\"ruleId\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"REGEX Match\",\"filter\":\"\",\"name\":\"regexMatch\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Description\",\"filter\":\"\",\"name\":\"flowDescription\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Custom Name\",\"filter\":\"\",\"name\":\"customName\",\"type\":\"string\",\"value\":\"\"}],\"comment\":\"\",\"display\":\"Rule List\",\"filter\":\"0~32\",\"name\":\"ruleList\",\"type\":\"int\",\"value\":\"1\"}]', 33, '', 1721705774505); + +SET FOREIGN_KEY_CHECKS=1; diff --git a/database/install/ne_config_backup.sql b/database/install/ne_config_backup.sql new file mode 100644 index 00000000..3b802fb2 --- /dev/null +++ b/database/install/ne_config_backup.sql @@ -0,0 +1,23 @@ +-- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) +-- +-- Table structure for table `ne_config_backup` +-- + +DROP TABLE IF EXISTS `ne_config_backup`; +CREATE TABLE `ne_config_backup` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', + `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-' COMMENT '命名', + `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-' COMMENT '网元版本', + `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '压缩包位置', + `remark` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '备注', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', + `create_time` bigint DEFAULT '0' COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', + `update_time` bigint DEFAULT '0' COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_ne_type_id` (`ne_type`,`ne_id`) USING BTREE COMMENT '网元类型_网元ID' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='网元_配置文件备份记录'; + +-- Dump completed on 2023-03-07 15:10:29 diff --git a/database/upgrade/upg_ne_config.sql b/database/upgrade/upg_ne_config.sql new file mode 100644 index 00000000..7f21cd69 --- /dev/null +++ b/database/upgrade/upg_ne_config.sql @@ -0,0 +1,103 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- +-- Table structure for table `ne_config` +-- + +CREATE TABLE IF NOT EXISTS `ne_config` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', + `param_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '参数名', + `param_display` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '参数显示名', + `param_type` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '参数类型 list列表单层 array数组多层', + `param_json` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'accesss属性控制:只读read-only/read/ro 读写read-write', + `param_sort` int DEFAULT '0' COMMENT '参数排序', + `param_perms` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '操作权限 get只读 put可编辑 delete可删除 post可新增', + `update_time` bigint DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_netype_paramname` (`ne_type`,`param_name`) USING BTREE COMMENT '网元_可选值' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='网元_参数配置可用属性值'; + +-- 初始数据对应网元 +REPLACE INTO `ne_config` VALUES (1, 'AMF', 'system', 'System Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMF Name\",\"filter\":\"0~64\",\"name\":\"amfName\",\"type\":\"string\",\"value\":\"AMF\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Relative Capacity\",\"filter\":\"0~255\",\"name\":\"relativeCapacity\",\"type\":\"int\",\"value\":\"255\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\",\\\"1\\\":\\\"https\\\"}\",\"name\":\"sbiScheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI Server IP\",\"filter\":\"0~64\",\"name\":\"sbiServerIp\",\"type\":\"string\",\"value\":\"192.168.1.183\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"SBI Server Port\",\"filter\":\"0~65535\",\"name\":\"sbiServerPort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"nrfEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"0~64\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AUSF URI\",\"filter\":\"0~64\",\"name\":\"ausfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.130:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDM URI\",\"filter\":\"0~64\",\"name\":\"udmUri\",\"type\":\"string\",\"value\":\"http://172.16.5.140:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMF URI\",\"filter\":\"0~64\",\"name\":\"smfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.150:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PCF URI\",\"filter\":\"0~64\",\"name\":\"pcfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.160:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LMF URI\",\"filter\":\"0~64\",\"name\":\"lmfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.200:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NEF URI\",\"filter\":\"0~64\",\"name\":\"nefUri\",\"type\":\"string\",\"value\":\"http://172.16.5.210:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IMEI Restriction Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"imeiRestrictionEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Allowed IMEI Prefix\",\"filter\":\"0~128\",\"name\":\"allowedImeiPrefix\",\"type\":\"string\",\"value\":\"869583045\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN Correction Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"dnnCorrectionEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default DNN\",\"filter\":\"0~64\",\"name\":\"defaultDnn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Integrity Algorithm\",\"filter\":\"{\\\"0\\\":\\\"NIA0\\\",\\\"1\\\":\\\"NIA1\\\",\\\"2\\\":\\\"NIA2\\\",\\\"3\\\":\\\"NIA3\\\"}\",\"name\":\"integrityAlgorithm\",\"type\":\"enum\",\"value\":\"2\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Ciphering Algorithm\",\"filter\":\"{\\\"0\\\":\\\"NEA0\\\",\\\"1\\\":\\\"NEA1\\\",\\\"2\\\":\\\"NEA2\\\",\\\"3\\\":\\\"NEA3\\\"}\",\"name\":\"cipheringAlgorithm\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3502\",\"filter\":\"1~65535\",\"name\":\"t3502\",\"type\":\"int\",\"value\":\"720\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3512\",\"filter\":\"1~65535\",\"name\":\"t3512\",\"type\":\"int\",\"value\":\"3600\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3513\",\"filter\":\"1~65535\",\"name\":\"t3513\",\"type\":\"int\",\"value\":\"2\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3522\",\"filter\":\"1~65535\",\"name\":\"t3522\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3550\",\"filter\":\"1~65535\",\"name\":\"t3550\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3555\",\"filter\":\"1~65535\",\"name\":\"t3555\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3560\",\"filter\":\"1~65535\",\"name\":\"t3560\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3565\",\"filter\":\"1~65535\",\"name\":\"t3565\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3570\",\"filter\":\"1~65535\",\"name\":\"t3570\",\"type\":\"int\",\"value\":\"6\"}]', 1, '', 1721705806656); +REPLACE INTO `ne_config` VALUES (2, 'AMF', 'association', 'TNL Association List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NGAP IP\",\"filter\":\"0~64\",\"name\":\"ngapIp\",\"type\":\"string\",\"value\":\"192.168.1.183\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"NGAP SCTP Port\",\"filter\":\"0~65535\",\"name\":\"ngapSctpPort\",\"type\":\"int\",\"value\":\"38412\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Weight\",\"filter\":\"0~255\",\"name\":\"weightFactor\",\"type\":\"int\",\"value\":\"255\"}]', 3, '', 1721705807645); +REPLACE INTO `ne_config` VALUES (3, 'AMF', 'guami', 'GUAMI List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Region ID\",\"filter\":\"0~255\",\"name\":\"regionId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~1023\",\"display\":\"Set ID\",\"filter\":\"0~1023\",\"name\":\"setId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~63\",\"display\":\"Pointer\",\"filter\":\"0~63\",\"name\":\"pointer\",\"type\":\"int\",\"value\":\"1\"}]', 5, '', 1721705807721); +REPLACE INTO `ne_config` VALUES (4, 'AMF', 'tai', 'TAI List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~16777215\",\"display\":\"TAC\",\"filter\":\"0~8\",\"name\":\"tac\",\"type\":\"string\",\"value\":\"1\"}]', 7, '', 1721705807738); +REPLACE INTO `ne_config` VALUES (5, 'AMF', 'slice', 'Slice List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~127\",\"display\":\"SST\",\"filter\":\"0~127\",\"name\":\"sst\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SD\",\"filter\":\"^[A-Fa-f0-9]{6}\",\"name\":\"sd\",\"type\":\"regex\",\"value\":\"000001\"}]', 9, '', 1721705807763); +REPLACE INTO `ne_config` VALUES (6, 'AUSF', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IP\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.130\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Port\",\"filter\":\"0~65535\",\"name\":\"servicePort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"HTTP\\\", \\\"1\\\":\\\"HTTPS\\\"}\",\"name\":\"scheme\",\"type\":\"enum\",\"value\":\"http\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDM URI\",\"filter\":\"\",\"name\":\"udmUri\",\"type\":\"string\",\"value\":\"http://172.16.5.140:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Group ID\",\"filter\":\"\",\"name\":\"groupId\",\"type\":\"string\",\"value\":\"0\"}]', 1, '', 1719831209173); +REPLACE INTO `ne_config` VALUES (7, 'IMS', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Label\",\"filter\":\"\",\"name\":\"label\",\"type\":\"string\",\"value\":\"ims-core\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"HPLMN MCC\",\"filter\":\"\",\"name\":\"hplmnMCC\",\"type\":\"string\",\"value\":\"001\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"HPLMN MNC\",\"filter\":\"\",\"name\":\"hplmnMNC\",\"type\":\"string\",\"value\":\"01\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local Network IPv4\",\"filter\":\"\",\"name\":\"LocalNetworkIPv4\",\"type\":\"ipv4\",\"value\":\"172.16.5.110\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Public Network IPv4\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.110\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Public Network IPv6\",\"filter\":\"\",\"name\":\"serviceIPv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain Name 1\",\"filter\":\"\",\"name\":\"domainName1\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain Name 2\",\"filter\":\"\",\"name\":\"domainName2\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain Name 3\",\"filter\":\"\",\"name\":\"domainName3\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain Name 4\",\"filter\":\"\",\"name\":\"domainName4\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MultiIPStack Indicator\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"multiIPStackInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Register Timer\",\"filter\":\"120~1000000\",\"name\":\"registerTimer\",\"type\":\"int\",\"value\":\"7200\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Call Duration\",\"filter\":\"1800~1000000\",\"name\":\"maxCallDuration\",\"type\":\"int\",\"value\":\"43200\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Internal SMS Indicator\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"internalSMSInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Internal CDR Indicator\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"internalCDRInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Internal KPI Indicator\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"internalKPIInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PCF IP Address\",\"filter\":\"\",\"name\":\"pcfIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.160\"}]', 1, '', 1719831209377); +REPLACE INTO `ne_config` VALUES (8, 'IMS', 'plmn', 'PLMN List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MCC\",\"filter\":\"^[0-9]{3}$\",\"name\":\"mcc\",\"type\":\"regex\",\"value\":\"001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MNC\",\"filter\":\"^[0-9]{2,3}$\",\"name\":\"mnc\",\"type\":\"regex\",\"value\":\"01\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Domain\",\"filter\":\"0~128\",\"name\":\"domain\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]', 3, '', 1719831209469); +REPLACE INTO `ne_config` VALUES (9, 'IMS', 'mmtel_dialplan', 'MMTEL Dialplan', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"NaName\",\"filter\":\"0~128\",\"name\":\"naName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Title\",\"filter\":\"0~128\",\"name\":\"title\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Method\",\"filter\":\"0-2\",\"name\":\"method\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Prefix\",\"filter\":\"0~128\",\"name\":\"prefix\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Start\",\"filter\":\"0~128\",\"name\":\"start\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"End\",\"filter\":\"0~128\",\"name\":\"end\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Attrib\",\"filter\":\"0~128\",\"name\":\"attrib\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Number Len\",\"filter\":\"0~128\",\"name\":\"numberLen\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rsc\",\"filter\":\"0~128\",\"name\":\"rsc\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"E164 Nai\",\"filter\":\"0~128\",\"name\":\"e164Nai\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"E164 Delete\",\"filter\":\"0~128\",\"name\":\"e164Delete\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"E164 Insert\",\"filter\":\"0~128\",\"name\":\"e164Insert\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"Enable: Close/Open\",\"display\":\"Admin State\",\"filter\":\"{\\\"0\\\":\\\"Close\\\", \\\"1\\\":\\\"Open\\\"}\",\"name\":\"adminState\",\"type\":\"enum\",\"value\":\"0\"}]', 5, '', 1719831209568); +REPLACE INTO `ne_config` VALUES (10, 'IMS', 'ds_system', 'DS System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dispatch System Indicator\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"dispatchSystemInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Transcode Indicator\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"transcodeInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dispatch System IPv4\",\"filter\":\"\",\"name\":\"dispatchSystemIP\",\"type\":\"ipv4\",\"value\":\"1.0.0.1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dispatch System Port\",\"filter\":\"\",\"name\":\"dispatchSystemPort\",\"type\":\"int\",\"value\":\"5060\"}]', 7, '', 1719831209655); +REPLACE INTO `ne_config` VALUES (11, 'MME', 'system', 'System Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"true|false\",\"display\":\"CSFB Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"csfbEnabled\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"true|false\",\"display\":\"VoLTE Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"volteEnabled\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"S1 MME IP\",\"filter\":\"0~64\",\"name\":\"s1MmeIp\",\"type\":\"string\",\"value\":\"192.168.1.179\"},{\"access\":\"read-only\",\"comment\":\"0~65535\",\"display\":\"S1 MME Port\",\"filter\":\"0~65535\",\"name\":\"s1MmePort\",\"type\":\"int\",\"value\":\"36412\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"S11 MME IP\",\"filter\":\"0~64\",\"name\":\"s11MmeIp\",\"type\":\"string\",\"value\":\"192.168.1.179\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"S11 MME Port\",\"filter\":\"0~65535\",\"name\":\"s11MmePort\",\"type\":\"int\",\"value\":\"2123\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"S10 MME IP\",\"filter\":\"0~64\",\"name\":\"s10MmeIp\",\"type\":\"string\",\"value\":\"192.168.1.178\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"S10 MME Port\",\"filter\":\"0~65535\",\"name\":\"s10MmePort\",\"type\":\"int\",\"value\":\"2123\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"SGs MME IP\",\"filter\":\"0~64\",\"name\":\"sgsMmeIp\",\"type\":\"string\",\"value\":\"192.168.1.179\"},{\"access\":\"read-only\",\"comment\":\"0~65535\",\"display\":\"SGs MME Port\",\"filter\":\"0~65535\",\"name\":\"sgsMmePort\",\"type\":\"int\",\"value\":\"29118\"},{\"access\":\"read-write\",\"comment\":\"0~100\",\"display\":\"S6A MME Identity\",\"filter\":\"0~100\",\"name\":\"s6aIdentity\",\"type\":\"string\",\"value\":\"mme.epc.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"0~20\",\"display\":\"S6A MME IP\",\"filter\":\"0~20\",\"name\":\"localIp\",\"type\":\"string\",\"value\":\"172.16.5.220\"}]', 1, '', 1719831209702); +REPLACE INTO `ne_config` VALUES (12, 'MME', 'gummei', 'Gummei List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"Group ID\",\"filter\":\"0~65535\",\"name\":\"groupId\",\"type\":\"int\",\"value\":\"4\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Code\",\"filter\":\"0~255\",\"name\":\"code\",\"type\":\"int\",\"value\":\"1\"}]', 3, '', 1719831209759); +REPLACE INTO `ne_config` VALUES (13, 'MME', 'tai', 'TAI List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"TAC\",\"filter\":\"0~65535\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"}]', 5, '', 1719831209792); +REPLACE INTO `ne_config` VALUES (14, 'MME', 'hss', 'HSS List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{1,15}$\",\"display\":\"IMSI Prefix\",\"filter\":\"^[0-9]{1,15}$\",\"name\":\"imsiPre\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~128\",\"display\":\"HSS Hostname\",\"filter\":\"0~128\",\"name\":\"hssHostname\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"SCTP|TCP\",\"display\":\"Protocol\",\"filter\":\"0~8\",\"name\":\"protocol\",\"type\":\"string\",\"value\":\"SCTP\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"HSS Port\",\"filter\":\"0~65535\",\"name\":\"hssPort\",\"type\":\"int\",\"value\":\"3868\"}]', 7, '', 1719831209841); +REPLACE INTO `ne_config` VALUES (15, 'MME', 'sgw', 'SGW List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"TAC\",\"filter\":\"0~65535\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"SGW IP\",\"filter\":\"0~64\",\"name\":\"sgwIp\",\"type\":\"string\",\"value\":\"172.16.5.150\"}]', 9, '', 1719831209876); +REPLACE INTO `ne_config` VALUES (16, 'MME', 'pgw', 'PGW List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~128\",\"display\":\"APN\",\"filter\":\"0~128\",\"name\":\"apn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"PGW IP\",\"filter\":\"0~64\",\"name\":\"pgwIp\",\"type\":\"string\",\"value\":\"192.168.1.181\"}]', 11, '', 1719831209927); +REPLACE INTO `ne_config` VALUES (17, 'MME', 'amf', 'AMF List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~16777215\",\"display\":\"TAC\",\"filter\":\"0~16777215\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Region ID\",\"filter\":\"0~255\",\"name\":\"regionId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~1023\",\"display\":\"Set ID\",\"filter\":\"0~1023\",\"name\":\"setId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~63\",\"display\":\"Pointer\",\"filter\":\"0~63\",\"name\":\"pointer\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"AMF IP\",\"filter\":\"0~64\",\"name\":\"amfIp\",\"type\":\"string\",\"value\":\"172.16.5.120\"}]', 13, '', 1719831209992); +REPLACE INTO `ne_config` VALUES (18, 'MOCNGW', 'system', 'System Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"S1AP South Address\",\"filter\":\"0~64\",\"name\":\"s1apSouthAddr\",\"type\":\"string\",\"value\":\"192.168.7.163\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"S1AP North Address\",\"filter\":\"0~64\",\"name\":\"s1apNorthAddr\",\"type\":\"string\",\"value\":\"192.168.8.163\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"TAC\",\"filter\":\"0~65535\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~1048575\",\"display\":\"ENB ID\",\"filter\":\"0~1048575\",\"name\":\"enbId\",\"type\":\"int\",\"value\":\"24\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Plane Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"userPlaneEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PFCP Address\",\"filter\":\"0~64\",\"name\":\"pfcpAddr\",\"type\":\"string\",\"value\":\"192.168.7.163\"}]', 1, '', 1719831210071); +REPLACE INTO `ne_config` VALUES (19, 'MOCNGW', 'mme', 'MME List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"S1AP Address\",\"filter\":\"0~64\",\"name\":\"s1apAddr\",\"type\":\"string\",\"value\":\"192.168.1.161\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"S1AP Port\",\"filter\":\"0~65535\",\"name\":\"s1apPort\",\"type\":\"int\",\"value\":\"36412\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"}]', 3, '', 1719831210273); +REPLACE INTO `ne_config` VALUES (20, 'MOCNGW', 'upgw', 'UPGW Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PFCP Address\",\"filter\":\"0~64\",\"name\":\"pfcpAddr\",\"type\":\"string\",\"value\":\"192.168.1.159\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"PFCP Port\",\"filter\":\"0~65535\",\"name\":\"pfcpPort\",\"type\":\"int\",\"value\":\"8805\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GTP-U South Address\",\"filter\":\"0~64\",\"name\":\"gtpuSouthAddr\",\"type\":\"string\",\"value\":\"10.10.1.2\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GTP-U North Address\",\"filter\":\"0~64\",\"name\":\"gtpuNorthAddr\",\"type\":\"string\",\"value\":\"192.168.7.123\"}]', 5, '', 1719831210320); +REPLACE INTO `ne_config` VALUES (21, 'N3IWF', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IKEBindAddress\",\"filter\":\"\",\"name\":\"ikeBindAddr\",\"type\":\"string\",\"value\":\"192.168.12.160\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GTPBindAddress\",\"filter\":\"\",\"name\":\"gtpBindAddr\",\"type\":\"string\",\"value\":\"192.168.12.161\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"FQDN\",\"filter\":\"\",\"name\":\"fqdn\",\"type\":\"string\",\"value\":\"n3iwf.5gc.mnc00.mcc460.pub.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"InternalIP\",\"filter\":\"\",\"name\":\"internalIP\",\"type\":\"string\",\"value\":\"172.16.1.190\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UdmIPAddrPort\",\"filter\":\"\",\"name\":\"udmAddr\",\"type\":\"string\",\"value\":\"172.16.1.140:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SmfIPAddress\",\"filter\":\"\",\"name\":\"smfIPAddr\",\"type\":\"string\",\"value\":\"172.16.1.150\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3IPAddress\",\"filter\":\"\",\"name\":\"n3IPAddr\",\"type\":\"string\",\"value\":\"192.168.1.160\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N6IPAddress\",\"filter\":\"\",\"name\":\"n6IPAddr\",\"type\":\"string\",\"value\":\"192.168.1.161\"}]', 1, '', 1719831210358); +REPLACE INTO `ne_config` VALUES (22, 'NRF', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IP\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.180\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Port\",\"filter\":\"0~65535\",\"name\":\"servicePort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"HTTP\\\", \\\"1\\\":\\\"HTTPS\\\"}\",\"name\":\"scheme\",\"type\":\"enum\",\"value\":\"0\"}]', 1, 'put', 1719831210397); +REPLACE INTO `ne_config` VALUES (23, 'NRF', 'registeredNFs', 'Registered NFs', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~256\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"NF Type\",\"filter\":\"^.{1,128}$\",\"name\":\"nfType\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Status\",\"filter\":\"^.{1,128}$\",\"name\":\"status\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"NF ID\",\"filter\":\"^.{1,128}$\",\"name\":\"nfId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"IP Address\",\"filter\":\"^.{1,128}$\",\"name\":\"ipAddress\",\"type\":\"string\",\"value\":\"\"}]', 3, 'get', 1719831210443); +REPLACE INTO `ne_config` VALUES (24, 'NSSF', 'general', 'General', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NSSF Name\",\"filter\":\"\",\"name\":\"nssfName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log Level\",\"filter\":\"\",\"name\":\"logLevel\",\"type\":\"string\",\"value\":\"error\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NF ID\",\"filter\":\"\",\"name\":\"nfId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"System ID\",\"filter\":\"\",\"name\":\"systemId\",\"type\":\"int\",\"value\":\"0\"}]', 1, '', 1719831210478); +REPLACE INTO `ne_config` VALUES (25, 'NSSF', 'sbi', 'SBI', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"\",\"name\":\"scheme\",\"type\":\"string\",\"value\":\"http\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Register IPv4\",\"filter\":\"\",\"name\":\"registerIpv4\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Binding IPv4\",\"filter\":\"\",\"name\":\"bindingIpv4\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Register IPv6\",\"filter\":\"\",\"name\":\"registerIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Binding IPv6\",\"filter\":\"\",\"name\":\"bindingIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IP Type\",\"filter\":\"\",\"name\":\"ipType\",\"type\":\"string\",\"value\":\"ipv4\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Port\",\"filter\":\"\",\"name\":\"port\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Telnet IPv4\",\"filter\":\"\",\"name\":\"telnetIpv4\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Telnet IPv6\",\"filter\":\"\",\"name\":\"telnetIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Telnet Port\",\"filter\":\"\",\"name\":\"telnetPort\",\"type\":\"int\",\"value\":\"4100\"}]', 3, '', 1719831210567); +REPLACE INTO `ne_config` VALUES (26, 'NSSF', 'supportedNetworkSliceList', 'Supported Network Slice List', 'array', '[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MCC\",\"filter\":\"\",\"name\":\"mcc\",\"type\":\"string\",\"value\":\"001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MNC\",\"filter\":\"\",\"name\":\"mnc\",\"type\":\"string\",\"value\":\"01\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TAC\",\"filter\":\"\",\"name\":\"tac\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported SST\",\"filter\":\"\",\"name\":\"supportedSst\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported SD\",\"filter\":\"\",\"name\":\"supportedSd\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Restricted SST\",\"filter\":\"\",\"name\":\"restrictedSst\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Restricted SD\",\"filter\":\"\",\"name\":\"restrictedSd\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF ID\",\"filter\":\"\",\"name\":\"nrfId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NSI ID\",\"filter\":\"\",\"name\":\"nsiId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Access Type\",\"filter\":\"\",\"name\":\"accessType\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMF Set ID\",\"filter\":\"\",\"name\":\"amfSetId\",\"type\":\"string\",\"value\":\"\"}]', 5, '', 1719831210617); +REPLACE INTO `ne_config` VALUES (27, 'NSSF', 'plmnMappingList', 'PLMN Mapping List', 'array', '[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Operator Name\",\"filter\":\"\",\"name\":\"operatorName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MCC\",\"filter\":\"\",\"name\":\"mcc\",\"type\":\"string\",\"value\":\"001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MNC\",\"filter\":\"\",\"name\":\"mnc\",\"type\":\"string\",\"value\":\"02\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Serving SNSSAI SST\",\"filter\":\"\",\"name\":\"servingSnssaiSst\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Serving SNSSAI SD\",\"filter\":\"\",\"name\":\"servingSnssaiSd\",\"type\":\"string\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Home SNSSAI SST\",\"filter\":\"\",\"name\":\"homeSnssaiSst\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Home SNSSAI SD\",\"filter\":\"\",\"name\":\"homeSnssaiSd\",\"type\":\"string\",\"value\":\"1\"}]', 7, '', 1719831210699); +REPLACE INTO `ne_config` VALUES (28, 'PCF', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IP\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.160\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Port\",\"filter\":\"0~65535\",\"name\":\"servicePort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"HTTP\\\", \\\"1\\\":\\\"HTTPS\\\"}\",\"name\":\"scheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn1\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn1\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn2\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn2\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn3\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn3\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn4\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn4\",\"type\":\"string\",\"value\":\"00101\"}]', 1, '', 1719831210756); +REPLACE INTO `ne_config` VALUES (29, 'PCF', 'serviceAreaRestriction', 'Service Area Restriction', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Restriction Type\",\"filter\":\"{\\\"0\\\":\\\"Allowed Areas\\\", \\\"1\\\":\\\"Not Allowed Areas\\\"}\",\"name\":\"restrictionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TACs\",\"filter\":\"\",\"name\":\"tacs\",\"type\":\"string\",\"value\":\"123\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Area Codes\",\"filter\":\"\",\"name\":\"areaCodes\",\"type\":\"string\",\"value\":\"123456\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max TAs\",\"filter\":\"^\\\\d{1,2}$\",\"name\":\"maxTAs\",\"type\":\"int\",\"value\":\"1\"}]', 3, '', 1719831210789); +REPLACE INTO `ne_config` VALUES (30, 'PCF', 'pccRules', 'PCC Rules', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~64\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rule ID\",\"filter\":\"^.{1,63}$\",\"name\":\"ruleId\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Activate\",\"filter\":\"false;true;\",\"name\":\"activate\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Precedence\",\"filter\":\"0~255\",\"name\":\"precedence\",\"type\":\"int\",\"value\":\"80\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Usage\",\"filter\":\"{\\\"0\\\":\\\"General\\\", \\\"1\\\":\\\"IMS-Signalling\\\"}\",\"name\":\"flowUsage\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"APP ID\",\"filter\":\"^.{1,63}$\",\"name\":\"appId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Template\",\"filter\":\"^.{1,255}$\",\"name\":\"flowTemplate\",\"type\":\"string\",\"value\":\"flow_any\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QoS ID\",\"filter\":\"^.{1,63}$\",\"name\":\"qosId\",\"type\":\"string\",\"value\":\"qos_internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Traffic Control ID\",\"filter\":\"^.{1,63}$\",\"name\":\"trafficControlId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Usage Monitoring ID\",\"filter\":\"^.{1,63}$\",\"name\":\"usageMonitoringId\",\"type\":\"string\",\"value\":\"\"}]', 5, '', 1719831210834); +REPLACE INTO `ne_config` VALUES (31, 'PCF', 'sessionRules', 'Session Rules', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~64\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rule ID\",\"filter\":\"^.{1,63}$\",\"name\":\"ruleId\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Activate\",\"filter\":\"false;true;\",\"name\":\"activate\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI\",\"filter\":\"0~255\",\"name\":\"fiveQI\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI Priority Level\",\"filter\":\"0~127\",\"name\":\"fiveQIPriorityLevel\",\"type\":\"int\",\"value\":\"80\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Usage\",\"filter\":\"{\\\"0\\\":\\\"General\\\", \\\"1\\\":\\\"IMS-Signalling\\\"}\",\"name\":\"flowUsage\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Usage Monitoring ID\",\"filter\":\"^.{1,63}$\",\"name\":\"usageMonitoringId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"ambrDl\",\"type\":\"string\",\"value\":\"200Mbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"ambrUl\",\"type\":\"string\",\"value\":\"100Mbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Averaging Window\",\"filter\":\"0~4095\",\"name\":\"averagingWindow\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Data Burst Volume\",\"filter\":\"0~4095\",\"name\":\"maxDataBurstVolume\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority Level\",\"filter\":\"1~15\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Bitrate Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"maxbrDl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Bitrate Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"maxbrUl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GBR Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"gbrDl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GBR Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"gbrUl\",\"type\":\"string\",\"value\":\"\"}]', 7, '', 1719831210893); +REPLACE INTO `ne_config` VALUES (32, 'PCF', 'gxServer', 'Gx Server', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{0,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{0,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]', 9, '', 1719831210965); +REPLACE INTO `ne_config` VALUES (33, 'PCF', 'rxServer', 'Rx Server', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{0,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{0,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]', 11, '', 1719831211004); +REPLACE INTO `ne_config` VALUES (34, 'PCF', 'flowTemplate', 'Flow Template', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~256\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Template Name\",\"filter\":\"^.{1,63}$\",\"name\":\"templateName\",\"type\":\"string\",\"value\":\"flow_any\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Description\",\"filter\":\"^.{1,127}$\",\"name\":\"flowDescription\",\"type\":\"string\",\"value\":\"permit out ip from any to assigned\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Direction\",\"filter\":\"{\\\"0\\\":\\\"Unspecified\\\", \\\"1\\\":\\\"Uplink\\\", \\\"2\\\":\\\"Downlink\\\", \\\"3\\\":\\\"Bidirectional\\\"}\",\"name\":\"flowDirection\",\"type\":\"enum\",\"value\":\"0\"}]', 13, '', 1719831211185); +REPLACE INTO `ne_config` VALUES (35, 'PCF', 'qosTemplate', 'QoS Template', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~64\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QoS ID\",\"filter\":\"^.{1,63}$\",\"name\":\"qosId\",\"type\":\"string\",\"value\":\"qos_internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI\",\"filter\":\"0~255\",\"name\":\"fiveQI\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI Priority Level\",\"filter\":\"0~127\",\"name\":\"fiveQIPriorityLevel\",\"type\":\"int\",\"value\":\"80\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Bitrate Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"maxbrDl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Bitrate Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"maxbrUl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GBR Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"gbrDl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GBR Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"gbrUl\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority Level\",\"filter\":\"1~15\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default QoS Flow Indication\",\"filter\":\"false;true;\",\"name\":\"defQosFlowIndication\",\"type\":\"bool\",\"value\":\"false\"}]', 15, '', 1719831211267); +REPLACE INTO `ne_config` VALUES (36, 'PCF', 'usageMonitoringTemplate', 'Usage Monitoring Template', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~64\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Usage Monitoring ID\",\"filter\":\"^.{1,63}$\",\"name\":\"umId\",\"type\":\"string\",\"value\":\"flow_any\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Volume Threshold(KB)\",\"filter\":\"\",\"name\":\"volumeThreshold\",\"type\":\"int\",\"value\":\"5242880\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Volume Threshold Uplink(KB)\",\"filter\":\"\",\"name\":\"volumeThresholdUplink\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Volume Threshold Downlink(KB)\",\"filter\":\"\",\"name\":\"volumeThresholdDownlink\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Time Threshold\",\"filter\":\"\",\"name\":\"timeThreshold\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Inactivity Time\",\"filter\":\"\",\"name\":\"inactivityTime\",\"type\":\"int\",\"value\":\"0\"}]', 17, '', 1719831211321); +REPLACE INTO `ne_config` VALUES (37, 'PCF', 'trafficControlTemplate', 'Traffic Control Template', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~64\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Traffic Control ID\",\"filter\":\"^.{1,63}$\",\"name\":\"tcId\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Status\",\"filter\":\"{\\\"0\\\":\\\"Disable\\\", \\\"1\\\":\\\"Uplink\\\", \\\"2\\\":\\\"Downlink\\\", \\\"3\\\":\\\"Enable\\\", \\\"4\\\":\\\"Remove\\\"}\",\"name\":\"flowStatus\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Mute Notify\",\"filter\":\"false;true;\",\"name\":\"muteNotif\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Route to Location DNAI\",\"filter\":\"^.{1,63}$\",\"name\":\"dnai\",\"type\":\"string\",\"value\":\"\"}]', 19, '', 1719831211361); +REPLACE INTO `ne_config` VALUES (38, 'PCF', 'headerEnrichTemplate', 'Header Enrich Template', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Template Name\",\"filter\":\"^.{1,63}$\",\"name\":\"templateName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Header Type\",\"filter\":\"{\\\"0\\\":\\\"GPSI\\\", \\\"1\\\":\\\"SUPI\\\", \\\"2\\\":\\\"UE IP\\\", \\\"3\\\":\\\"User Location\\\", \\\"4\\\":\\\"DNN\\\"}\",\"name\":\"headerType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Header Name\",\"filter\":\"^.{1,63}$\",\"name\":\"headerName\",\"type\":\"string\",\"value\":\"\"}]', 21, '', 1719831211407); +REPLACE INTO `ne_config` VALUES (39, 'SMF', 'smfSystem', 'SMF System Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI IP\",\"filter\":\"\",\"name\":\"sbiIpAddr\",\"type\":\"string\",\"value\":\"172.16.5.150\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"SBI Port\",\"filter\":\"0~65535\",\"name\":\"sbiPort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\", \\\"1\\\":\\\"https\\\"}\",\"name\":\"sbiScheme\",\"type\":\"enum\",\"value\":\"http\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N4 IPv4\",\"filter\":\"\",\"name\":\"n4Ipv4\",\"type\":\"ipv4\",\"value\":\"172.16.5.150\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N4 IPv6\",\"filter\":\"\",\"name\":\"n4Ipv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N4U IPv4\",\"filter\":\"\",\"name\":\"n4UIpv4\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N4U IPv6\",\"filter\":\"\",\"name\":\"n4UIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMF URI\",\"filter\":\"\",\"name\":\"amfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.120:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PCF Enable\",\"filter\":\"\",\"name\":\"pcfEnable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PCF URI\",\"filter\":\"\",\"name\":\"pcfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.160:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDM URI\",\"filter\":\"\",\"name\":\"udmUri\",\"type\":\"string\",\"value\":\"http://172.16.5.140:8080\"},{\"access\":\"read-write\",\"display\":\"5G Charging Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"chfEnable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CHF Primary URI\",\"filter\":\"\",\"name\":\"chfPrimaryUri\",\"type\":\"string\",\"value\":\"http://172.16.5.240:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CHF Secondary URI\",\"filter\":\"\",\"name\":\"chfSecondaryUri\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"nrfEnable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary DNS IPv4\",\"filter\":\"\",\"name\":\"primaryDnsIpv4\",\"type\":\"ipv4\",\"value\":\"114.114.114.114\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary DNS IPv4\",\"filter\":\"\",\"name\":\"secondaryDnsIpv4\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary DNS IPv6\",\"filter\":\"\",\"name\":\"primaryDnsIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary DNS IPv6\",\"filter\":\"\",\"name\":\"secondaryDnsIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary PCSCF IPv4\",\"filter\":\"\",\"name\":\"primaryPcscfIpv4\",\"type\":\"ipv4\",\"value\":\"172.16.5.110\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary PCSCF IPv4\",\"filter\":\"\",\"name\":\"secondaryPcscfIpv4\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary PCSCF IPv6\",\"filter\":\"\",\"name\":\"primaryPcscfIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary PCSCF IPv6\",\"filter\":\"\",\"name\":\"secondaryPcscfIpv6\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE MTU\",\"filter\":\"0~65535\",\"name\":\"ueMtu\",\"type\":\"int\",\"value\":\"\"}]', 1, '', 1719831211449); +REPLACE INTO `ne_config` VALUES (40, 'SMF', 'spgwSystem', 'SPGW Sytem Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local S11 IP\",\"filter\":\"\",\"name\":\"s11Ip\",\"type\":\"string\",\"value\":\"172.16.5.150\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local Diameter IP\",\"filter\":\"\",\"name\":\"localDiameterIp\",\"type\":\"string\",\"value\":\"172.16.5.150\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local Diameter Host Name\",\"filter\":\"\",\"name\":\"localDiameterHostName\",\"type\":\"string\",\"value\":\"smf.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local Diameter Realm Name\",\"filter\":\"\",\"name\":\"localDiameterRealmName\",\"type\":\"string\",\"value\":\"mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gy Enable\",\"filter\":\"false;true;\",\"name\":\"peerGyEnable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary Remote Gy IP\",\"filter\":\"\",\"name\":\"primaryPeerGyIp\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"Primary Remote Gy Port\",\"filter\":\"0~65535\",\"name\":\"primaryPeerGyPort\",\"type\":\"int\",\"value\":\"3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary Remote Gy IP\",\"filter\":\"\",\"name\":\"secondaryPeerGyIp\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"Secondary Remote Gy Port\",\"filter\":\"0~65535\",\"name\":\"secondaryPeerGyPort\",\"type\":\"int\",\"value\":\"3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gx Enable\",\"filter\":\"false;true;\",\"name\":\"peerGxEnable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gx Charging Enable\",\"filter\":\"false;true;\",\"name\":\"gxChargingEnable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Primary Remote Gx IP\",\"filter\":\"\",\"name\":\"primaryPeerGxIp\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"Primary Remote Gx Port\",\"filter\":\"0~65535\",\"name\":\"primaryPeerGxPort\",\"type\":\"int\",\"value\":\"3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary Remote Gx IP\",\"filter\":\"\",\"name\":\"secondaryPeerGxIp\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"Secondary Remote Gx Port\",\"filter\":\"0~65535\",\"name\":\"secondaryPeerGxPort\",\"type\":\"int\",\"value\":\"3868\"}]', 3, '', 1719831211498); +REPLACE INTO `ne_config` VALUES (41, 'SMF', 'upfConfig', 'UPF Config', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~2047\",\"name\":\"index\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UPF ID\",\"filter\":\"1~64\",\"name\":\"id\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"e.g. ip:port\",\"display\":\"Address\",\"filter\":\"7~45\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"IPv4,IPv6,IPv4v6\",\"display\":\"Ip Pool Type\",\"filter\":\"\",\"name\":\"ipPoolType\",\"type\":\"string\",\"value\":\"IPv4v6\"},{\"access\":\"read-write\",\"comment\":\"CIDR format, e.g. 192.168.1.0/24\",\"display\":\"IPv4 Pools\",\"filter\":\"10~256\",\"name\":\"ipv4Pools\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"CIDR format, e.g. fe80::20c:29ff:fee4:dab7/50\",\"display\":\"IPv6 Pools\",\"filter\":\"5~512\",\"name\":\"ipv6Pools\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IPv4 Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"staticIpv4Enable\",\"type\":\"bool\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv4 format\",\"display\":\"Static IPv4 Start\",\"filter\":\"\",\"name\":\"staticIpv4Start\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv4 format\",\"display\":\"Static IPv4 End\",\"filter\":\"\",\"name\":\"staticIpv4End\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IPv6 Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"staticIpv6Enable\",\"type\":\"bool\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv6 format\",\"display\":\"Static IPv6 Start\",\"filter\":\"\",\"name\":\"staticIpv6Start\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv6 format\",\"display\":\"Static IPv6 End\",\"filter\":\"\",\"name\":\"staticIpv6End\",\"type\":\"ipv6\",\"value\":\"\"},{\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~2047\",\"name\":\"index\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"1~64\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"IPv4,IPv6,IPv4v6\",\"display\":\"Ip Pool Type\",\"filter\":\"\",\"name\":\"ipPoolType\",\"type\":\"string\",\"value\":\"IPv4v6\"},{\"access\":\"read-write\",\"comment\":\"CIDR format, e.g. 192.168.1.0/24\",\"display\":\"IPv4 Pools\",\"filter\":\"10~256\",\"name\":\"ipv4Pools\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"CIDR format, e.g. fe80::20c:29ff:fee4:dab7/50\",\"display\":\"IPv6 Pools\",\"filter\":\"5~512\",\"name\":\"ipv6Pools\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IPv4 Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"staticIpv4Enable\",\"type\":\"bool\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv4 format\",\"display\":\"Static IPv4 Start\",\"filter\":\"\",\"name\":\"staticIpv4Start\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv4 format\",\"display\":\"Static IPv4 End\",\"filter\":\"\",\"name\":\"staticIpv4End\",\"type\":\"ipv4\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IPv6 Enable\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"staticIpv6Enable\",\"type\":\"bool\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv6 format\",\"display\":\"Static IPv6 Start\",\"filter\":\"\",\"name\":\"staticIpv6Start\",\"type\":\"ipv6\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"ipv6 format\",\"display\":\"Static IPv6 End\",\"filter\":\"\",\"name\":\"staticIpv6End\",\"type\":\"ipv6\",\"value\":\"\"}],\"display\":\"UE DNN IP Pool\",\"name\":\"ueDnnIpPool\"}]', 5, '', 1719831211547); +REPLACE INTO `ne_config` VALUES (42, 'SMF', 'dnnSelectUpf', 'DNN Select UPF', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~65535\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"1~64\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UPF ID\",\"filter\":\"1~64\",\"name\":\"upfId\",\"type\":\"string\",\"value\":\"\"}]', 7, '', 1719831211647); +REPLACE INTO `ne_config` VALUES (43, 'SMF', 'dnnTaiSelectUpf', 'DNN TAI Select UPF', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~65535\",\"name\":\"index\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"1~64\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"MCC+MNC+TAC\",\"display\":\"TAI\",\"filter\":\"1~64\",\"name\":\"tai\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UPF ID\",\"filter\":\"1~64\",\"name\":\"upfId\",\"type\":\"string\",\"value\":\"upf2-Id\"}]', 9, '', 1719831211733); +REPLACE INTO `ne_config` VALUES (44, 'SMF', 'snssaiSelectUpf', 'SNSSAI Select UPF', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"0~65535\",\"name\":\"index\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"sst1-sd1;sst2-sd2;sst3-sd3\",\"display\":\"SNSSAI\",\"filter\":\"1~64\",\"name\":\"snssai\",\"type\":\"string\",\"value\":\"1-000001\"},{\"access\":\"read-write\",\"comment\":\"upf1-id;upf2-id;upf3-id\",\"display\":\"UPF ID\",\"filter\":\"1~64\",\"name\":\"upfId\",\"type\":\"string\",\"value\":\"upf1-Id\"}]', 11, '', 1719831211854); +REPLACE INTO `ne_config` VALUES (45, 'SMF', 'offlineChargingConfig', 'Offline Charging Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CDR File Name\",\"filter\":\"1~64\",\"name\":\"cdrFileName\",\"type\":\"string\",\"value\":\"smf.cdr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CDR File Path\",\"filter\":\"1~256\",\"name\":\"cdrFilePath\",\"type\":\"string\",\"value\":\"/var/log/smfCdr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CDR File Num\",\"filter\":\"1~999999999\",\"name\":\"cdrFileNum\",\"type\":\"int\",\"value\":\"50\"},{\"access\":\"read-write\",\"comment\":\"Megabytes\",\"display\":\"CDR File Size\",\"filter\":\"1~999999\",\"name\":\"cdrFileSize\",\"type\":\"int\",\"value\":\"300\"},{\"access\":\"read-write\",\"comment\":\"Days\",\"display\":\"CDR File Max Age\",\"filter\":\"0~9999\",\"name\":\"cdrFileMaxAge\",\"type\":\"int\",\"value\":\"30\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Free Subscribers CDR Enable\",\"filter\":\"\",\"name\":\"freeSubsCdrEnable\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"Seconds\",\"display\":\"Time Threshold\",\"filter\":\"0~999999999\",\"name\":\"timeThreshold\",\"type\":\"int\",\"value\":\"600\"},{\"access\":\"read-write\",\"comment\":\"Bytes\",\"display\":\"Volume Threshold\",\"filter\":\"0~999999999999999\",\"name\":\"volumeThreshold\",\"type\":\"int\",\"value\":\"0\"}]', 13, '', 1719831211901); +REPLACE INTO `ne_config` VALUES (46, 'SMSC', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CDR Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"cdrFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SM Validity\",\"filter\":\"0-2147483647\",\"name\":\"smValidity\",\"type\":\"int\",\"value\":\"259200\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"logFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to unattainable local users.\",\"display\":\"Local Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"localPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to unattainable outbound roaming users.\",\"display\":\"Local Roaming Out Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"localRoamingOutPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to unattainable inbound roaming users.\",\"display\":\"Visitor Roaming In Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"visitorRoamingInPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable resend pending SMS to other unattainable users.\",\"display\":\"Other Polling Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"otherPollingFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Define the maximum port number that the queue of pending SMS may grow to.\",\"display\":\"Polling Number\",\"filter\":\"0-64\",\"name\":\"pollingNumber\",\"type\":\"int\",\"value\":\"64\"},{\"access\":\"read-write\",\"comment\":\"Specify the priority parameter of SM_RP_PRI. true = High; false = Low.\",\"display\":\"Priority Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"priorityFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"Enable or disable TP-Reply-Path parameter in the SMS-DELIVER data unit.\",\"display\":\"TP Reply Path Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"tpReplyPathFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMSC Domain\",\"filter\":\"0~16\",\"name\":\"smscDomain\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"CSFB VoLTE Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"csfbVolteFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Camel Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"camelFlag\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SCF Address\",\"filter\":\"0~16\",\"name\":\"scfAddress\",\"type\":\"string\",\"value\":\"0.0.0.0\"}]', 1, '', 1719831212029); +REPLACE INTO `ne_config` VALUES (47, 'SMSC', 'msisdnsegment', 'MSISDN Segment List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Start MSISDN\",\"filter\":\"0~32\",\"name\":\"startMSISDN\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"End MSISDN\",\"filter\":\"0~32\",\"name\":\"endMSISDN\",\"type\":\"string\",\"value\":\"0\"}]', 3, 'put', 1719831212149); +REPLACE INTO `ne_config` VALUES (48, 'SMSC', 'smpplink', 'SMPP Link List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~63\",\"display\":\"Index\",\"filter\":\"0~63\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Alias\",\"filter\":\"0~32\",\"name\":\"linkAlias\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Session Type\",\"filter\":\"{\\\"0\\\":\\\"bindTX\\\",\\\"1\\\":\\\"bindRX\\\",\\\"2\\\":\\\"bindTRX\\\"}\",\"name\":\"sessionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Number\",\"filter\":\"0~32\",\"name\":\"serviceNumber\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Data Coding Scheme\",\"filter\":\"{\\\"0\\\":\\\"smpp7def7\\\",\\\"1\\\":\\\"smpp8dcs4def7\\\",\\\"2\\\":\\\"smpp8dcs0def7\\\",\\\"16\\\":\\\"smpp7def8\\\",\\\"17\\\":\\\"smpp8dcs4def8\\\",\\\"18\\\":\\\"smpp8dcs0def8\\\"}\",\"name\":\"dataCodingScheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Platform Num\",\"filter\":\"{\\\"0\\\":\\\"plat0\\\",\\\"1\\\":\\\"plat1\\\",\\\"2\\\":\\\"ignore\\\"}\",\"name\":\"platformNum\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Time To Live\",\"filter\":\"0-2147483647\",\"name\":\"timeToLive\",\"type\":\"int\",\"value\":\"604800\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Manipulation Flag\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"manipulationFlag\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Type of Number\",\"filter\":\"{\\\"0\\\":\\\"unknown\\\",\\\"1\\\":\\\"international\\\",\\\"2\\\":\\\"national\\\",\\\"3\\\":\\\"networkSpecific\\\",\\\"4\\\":\\\"subscriberNumber\\\",\\\"5\\\":\\\"alphanumeric\\\",\\\"6\\\":\\\"abbreviated\\\"}\",\"name\":\"ton\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Number Plan Indicator\",\"filter\":\"{\\\"0\\\":\\\"unknown\\\",\\\"1\\\":\\\"isdn\\\",\\\"3\\\":\\\"data\\\",\\\"4\\\":\\\"telex\\\",\\\"6\\\":\\\"landMobile\\\",\\\"8\\\":\\\"national\\\",\\\"9\\\":\\\"private\\\",\\\"10\\\":\\\"ermes\\\",\\\"14\\\":\\\"internet\\\",\\\"18\\\":\\\"wapClientID\\\"}\",\"name\":\"npi\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Role Type\",\"filter\":\"{\\\"0\\\":\\\"server\\\",\\\"1\\\":\\\"client\\\"}\",\"name\":\"roleType\",\"type\":\"enum\",\"value\":\"0\"}]', 5, '', 1719831212227); +REPLACE INTO `ne_config` VALUES (49, 'UDM', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IP\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.140\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Port\",\"filter\":\"0~65535\",\"name\":\"servicePort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AUSF IP\",\"filter\":\"\",\"name\":\"ausfIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.130\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"FQDN\",\"filter\":\"\",\"name\":\"fqdn\",\"type\":\"string\",\"value\":\"agt.com\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Priority\",\"filter\":\"0~4095\",\"name\":\"priority\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Capacity\",\"filter\":\"0~65535\",\"name\":\"capacity\",\"type\":\"int\",\"value\":\"4096\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Group ID\",\"filter\":\"\",\"name\":\"groupId\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn1\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn1\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn2\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn2\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn3\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn3\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Plmn4\",\"filter\":\"^\\\\d{5,6}$\",\"name\":\"supportedPlmn4\",\"type\":\"string\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SUPI Ranges\",\"filter\":\"^imsi-\\\\d{15}~imsi-\\\\d{15}$\",\"name\":\"supiRanges\",\"type\":\"regex\",\"value\":\"imsi-001010100080000~imsi-001010100080099\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GPSI Ranges\",\"filter\":\"^msisdn-\\\\d{2,15}~msisdn-\\\\d{2,15}$\",\"name\":\"gpsiRanges\",\"type\":\"regex\",\"value\":\"msisdn-69072000~msisdn-69072099\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"HTTP\\\", \\\"1\\\":\\\"HTTPS\\\"}\",\"name\":\"scheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Redis Link\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"redisLink\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Redis Address\",\"filter\":\"\",\"name\":\"redisAddr\",\"type\":\"string\",\"value\":\"172.16.5.140:6379\"}]', 1, '', 1719831212399); +REPLACE INTO `ne_config` VALUES (50, 'UDM', 'subsUEAmbr', 'Subs UE AMBR', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"uplink\",\"type\":\"regex\",\"value\":\"1 Gbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"downlink\",\"type\":\"regex\",\"value\":\"2 Gbps\"}]', 3, '', 1719831212494); +REPLACE INTO `ne_config` VALUES (51, 'UDM', 'subsNssais', 'Subs NSSAIs', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_nssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Supported Features\",\"filter\":\"^[0-9a-fA-F]{8}$\",\"name\":\"supportedFeatures\",\"type\":\"regex\",\"value\":\"00000001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default Single NSSAIs\",\"filter\":\"\",\"name\":\"defaultSingleNSSAIs\",\"type\":\"string\",\"value\":\"1-000001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Single NSSAIs\",\"filter\":\"\",\"name\":\"singleNssais\",\"type\":\"string\",\"value\":\"1-000002\"}]', 5, '', 1719831212590); +REPLACE INTO `ne_config` VALUES (52, 'UDM', 'forbiddenAreas', 'Forbidden Areas', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TACs\",\"filter\":\"\",\"name\":\"tacs\",\"type\":\"string\",\"value\":\"123\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Area Codes\",\"filter\":\"\",\"name\":\"areaCodes\",\"type\":\"string\",\"value\":\"123456\"}]', 7, '', 1719831212718); +REPLACE INTO `ne_config` VALUES (53, 'UDM', 'serviceAreaRestriction', 'Service Area Restriction', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_ambr\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Restriction Type\",\"filter\":\"{\\\"0\\\":\\\"Allowed Areas\\\", \\\"1\\\":\\\"Not Allowed Areas\\\"}\",\"name\":\"restrictionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"TACs\",\"filter\":\"\",\"name\":\"tacs\",\"type\":\"string\",\"value\":\"123\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Area Codes\",\"filter\":\"\",\"name\":\"areaCodes\",\"type\":\"string\",\"value\":\"123456\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max TAs\",\"filter\":\"^\\\\d{1,2}$\",\"name\":\"maxTAs\",\"type\":\"int\",\"value\":\"1\"}]', 9, '', 1719831212824); +REPLACE INTO `ne_config` VALUES (54, 'UDM', 'smfSelection', 'Subs SMF Selection', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_snssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SNSSAI\",\"filter\":\"^\\\\d{1,3}[A-Fa-f0-9]{6}$\",\"name\":\"snssai\",\"type\":\"string\",\"value\":\"1-000001\"},{\"access\":\"read-only\",\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~4\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"^.{1,32}$\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default DNN Indicator\",\"filter\":\"false;true;\",\"name\":\"defaultDnnInd\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LBO Roaming Allowed\",\"filter\":\"false;true;\",\"name\":\"lboRoamingAllowed\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interworking EPS Indicator\",\"filter\":\"false;true;\",\"name\":\"iwkEpsInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LADN Indicator\",\"filter\":\"false;true;\",\"name\":\"ladnIndicator\",\"type\":\"bool\",\"value\":\"false\"}],\"comment\":\"\",\"display\":\"DNN List\",\"filter\":\"1~4\",\"name\":\"dnnList\",\"type\":\"int\",\"value\":\"1\"}]', 11, '', 1719831212979); +REPLACE INTO `ne_config` VALUES (55, 'UDM', 'dnn', 'DNN Conf', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_nssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default PDU Session Type\",\"filter\":\"{\\\"0\\\":\\\"IPv4\\\",\\\"1\\\":\\\"IPv6\\\",\\\"2\\\":\\\"IPv4v6\\\",\\\"3\\\":\\\"Ethernet\\\",\\\"4\\\":\\\"Unstruction\\\"}\",\"name\":\"defaultPDUSessionType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Allowed PDU Session Types\",\"filter\":\"{\\\"0\\\":\\\"IPv4\\\",\\\"1\\\":\\\"IPv6\\\",\\\"2\\\":\\\"IPv4v6\\\",\\\"3\\\":\\\"Ethernet\\\",\\\"4\\\":\\\"Unstruction\\\",\\\"5\\\":\\\"IPv4 \\u0026 IPv6\\\",\\\"6\\\":\\\"IPv4 \\u0026 IPv4v6\\\",\\\"7\\\":\\\"IPv6 \\u0026 IPv4v6\\\",\\\"8\\\":\\\"IPv4 \\u0026 IPv6 \\u0026 IPv4v6\\\"}\",\"name\":\"allowedPDUSessionTypes\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"5QI\",\"filter\":\"0~255\",\"name\":\"5qi\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Priority Level\",\"filter\":\"1~127\",\"name\":\"priorityLevel\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default SSC Mode\",\"filter\":\"{\\\"0\\\":\\\"SSC Mode1\\\",\\\"1\\\":\\\"SSC Mode2\\\",\\\"2\\\":\\\"SSC Mode3\\\"}\",\"name\":\"defaultSSCmode\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Allowed SSC Modes\",\"filter\":\"{\\\"0\\\":\\\"SSC Mode1\\\",\\\"1\\\":\\\"SSC Mode2\\\",\\\"2\\\":\\\"SSC Mode3\\\",\\\"3\\\":\\\"SSC Mode1 \\u0026 SSC Mode2\\\",\\\"4\\\":\\\"SSC Mode1 \\u0026 SSC Mode3\\\",\\\"5\\\":\\\"SSC Mode2 \\u0026 SSC Mode3\\\",\\\"6\\\":\\\"SSC Mode1 \\u0026 SSC Mode2 \\u0026 SSC Mode3\\\"}\",\"name\":\"allowedSSCmodes\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interworking EPS Indicator\",\"filter\":\"\",\"name\":\"interworkingEPSIndicator\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LADN Indicator\",\"filter\":\"\",\"name\":\"ladnIndicator\",\"type\":\"bool\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Charging Characteristics\",\"filter\":\"4~4\",\"name\":\"chargingCharacteristics\",\"type\":\"string\",\"value\":\"0001\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Subscribed Session AMBR Uplink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"subscribedSessionAmbrUL\",\"type\":\"regex\",\"value\":\"1 Gbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Subscribed Session AMBR Downlink\",\"filter\":\"^\\\\d+(\\\\.\\\\d+)?( ?)(bps|Kbps|Mbps|Gbps|Tbps)$\",\"name\":\"subscribedSessionAmbrDL\",\"type\":\"regex\",\"value\":\"2 Gbps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Static IP Address\",\"filter\":\"\",\"name\":\"staticIPAddress\",\"type\":\"ipv4\",\"value\":\"192.168.1.100\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Plane Integrity\",\"filter\":\"{\\\"0\\\":\\\"Null\\\",\\\"1\\\":\\\"Required\\\",\\\"2\\\":\\\"Preferred\\\",\\\"3\\\":\\\"Not Needed\\\"}\",\"name\":\"userPlaneIntegrity\",\"type\":\"enum\",\"value\":\"3\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Plane Confidentiality\",\"filter\":\"{\\\"0\\\":\\\"Null\\\",\\\"1\\\":\\\"Required\\\",\\\"2\\\":\\\"Preferred\\\",\\\"3\\\":\\\"Not Needed\\\"}\",\"name\":\"userPlaneConfidentiality\",\"type\":\"enum\",\"value\":\"3\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority Level\",\"filter\":\"0~255\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preempt Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"}]', 13, '', 1719831213074); +REPLACE INTO `ne_config` VALUES (56, 'UDM', 'epsTemplate', 'EPS User Template', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{0,31}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_eps\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Uplink\",\"filter\":\"0~4294967295\",\"name\":\"ambrUplink\",\"type\":\"int\",\"value\":\"100000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Downlink\",\"filter\":\"0~4294967295\",\"name\":\"ambrDownlink\",\"type\":\"int\",\"value\":\"200000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"APN OI Replacement\",\"filter\":\"^.{0,31}$\",\"name\":\"apnOIReplacement\",\"type\":\"string\",\"value\":\"money\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RFSP\",\"filter\":\"\",\"name\":\"rfsp\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RAU TAU Timer\",\"filter\":\"\",\"name\":\"rauTauTimer\",\"type\":\"int\",\"value\":\"120\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Charging Characteristic\",\"filter\":\"4~4\",\"name\":\"chargingCharacteristic\",\"type\":\"string\",\"value\":\"0001\"}]', 15, '', 1719831213203); +REPLACE INTO `ne_config` VALUES (57, 'UDM', 'epsApn', 'EPS APN', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN\",\"filter\":\"^.{0,127}$\",\"name\":\"dnn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PDN Type\",\"filter\":\"{\\\"0\\\":\\\"IPv4\\\",\\\"1\\\":\\\"IPv6\\\",\\\"2\\\":\\\"IPv4v6\\\",\\\"3\\\":\\\"IPv4 or IPv6\\\"}\",\"name\":\"pdnType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QCI\",\"filter\":\"1~255\",\"name\":\"qci\",\"type\":\"int\",\"value\":\"9\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Priority\",\"filter\":\"1~127\",\"name\":\"arpPriorityLevel\",\"type\":\"int\",\"value\":\"8\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preemption Capability\",\"filter\":\"{\\\"0\\\":\\\"Not Preempt\\\",\\\"1\\\":\\\"May Preempt\\\"}\",\"name\":\"arpPreemptCap\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ARP Preemption Vulnerability\",\"filter\":\"{\\\"0\\\":\\\"Not Preemptable\\\",\\\"1\\\":\\\"Preemptable\\\"}\",\"name\":\"arpPreemptVuln\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Context Identifier\",\"filter\":\"\",\"name\":\"contextIdentifier\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"VPLMN Dynamic Address Allowed\",\"filter\":\"false;true;\",\"name\":\"vplmnDynamicAddressAllowed\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PDN GW Allocation Type\",\"filter\":\"{\\\"0\\\":\\\"Static\\\",\\\"1\\\":\\\"Dynamic\\\"}\",\"name\":\"pdnGWAllocationType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Uplink\",\"filter\":\"0~4294967295\",\"name\":\"ambrUplink\",\"type\":\"int\",\"value\":\"100000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMBR Downlink\",\"filter\":\"0~4294967295\",\"name\":\"ambrDownlink\",\"type\":\"int\",\"value\":\"200000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Charging Characteristic\",\"filter\":\"4~4\",\"name\":\"chargingCharacteristic\",\"type\":\"string\",\"value\":\"0001\"}]', 17, '', 1719831213410); +REPLACE INTO `ne_config` VALUES (58, 'UDM', 'applicationServer', 'Application Server', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AS Name\",\"filter\":\"^.{1,31}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"mmtel_as\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default Handling\",\"filter\":\"{\\\"0\\\":\\\"Session Continued\\\",\\\"1\\\":\\\"Session Terminated\\\"}\",\"name\":\"defaultHandling\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server Name\",\"filter\":\"^.{1,127}$\",\"name\":\"serverName\",\"type\":\"string\",\"value\":\"sip:192.168.8.26:7060\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Diameter Address\",\"filter\":\"^.{1,127}$\",\"name\":\"diameterAddress\",\"type\":\"string\",\"value\":\"mmtel.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rep Data Size Limit\",\"filter\":\"0~65535\",\"name\":\"repDataSizeLimit\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Include Register Request\",\"filter\":\"false;true;\",\"name\":\"includeRegisterRequest\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Include Register Response\",\"filter\":\"false;true;\",\"name\":\"includeRegisterResponse\",\"type\":\"bool\",\"value\":\"false\"}]', 19, '', 1719831213536); +REPLACE INTO `ne_config` VALUES (59, 'UDM', 'scscfSet', 'SCSCF Set', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~8\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,31}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"mmtel_as\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Priority\",\"filter\":\"\",\"name\":\"priority\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server Name\",\"filter\":\"^.{1,127}$\",\"name\":\"serverName\",\"type\":\"string\",\"value\":\"sip:scscf.ims.mnc001.mcc001.3gppnetwork.org:6060\"}]', 21, '', 1719831213732); +REPLACE INTO `ne_config` VALUES (60, 'UDM', 'triggerPoint', 'Trigger Point', 'array', '[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~16\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"^.{1,32}$\",\"name\":\"name\",\"type\":\"string\",\"value\":\"def_snssai\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Condition Type CNF\",\"filter\":\"0~1\",\"name\":\"conditionTypeCNF\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-only\",\"array\":[{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"Index\",\"filter\":\"1~4\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Condition Negated\",\"filter\":\"0~1\",\"name\":\"conditionNegated\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Group\",\"filter\":\"0~4096\",\"name\":\"group\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Method\",\"filter\":\"^.{0,32}$\",\"name\":\"method\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SIP Header\",\"filter\":\"^.{0,64}$\",\"name\":\"sipHeader\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SIP Content\",\"filter\":\"^.{0,64}$\",\"name\":\"sipContent\",\"type\":\"string\",\"value\":\"\"}],\"comment\":\"\",\"display\":\"SPT List\",\"filter\":\"1~4\",\"name\":\"sptList\",\"type\":\"int\",\"value\":\"1\"}]', 23, '', 1719831213924); +REPLACE INTO `ne_config` VALUES (61, 'UDM', 's6aServer', 'S6a Server', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{1,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{1,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]', 25, '', 1719831214313); +REPLACE INTO `ne_config` VALUES (62, 'UDM', 'cxServer', 'Cx Server', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enable\",\"filter\":\"false;true;\",\"name\":\"enable\",\"type\":\"bool\",\"value\":\"true\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Type\",\"filter\":\"{\\\"0\\\":\\\"TCP\\\",\\\"1\\\":\\\"SCTP\\\"}\",\"name\":\"netType\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Address\",\"filter\":\"\",\"name\":\"addr\",\"type\":\"string\",\"value\":\"172.16.5.140:3868\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Host\",\"filter\":\"^.{1,127}$\",\"name\":\"host\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Realm\",\"filter\":\"^.{1,127}$\",\"name\":\"realm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"}]', 27, '', 1719831214393); +REPLACE INTO `ne_config` VALUES (63, 'UPF', 'general', 'General', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Config File Directory\",\"filter\":\"\",\"name\":\"configFileDirectory\",\"type\":\"string\",\"value\":\"/usr/local/etc/upf/\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"EXE File Directory\",\"filter\":\"\",\"name\":\"exeFileDirectory\",\"type\":\"string\",\"value\":\"/usr/local/bin/\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"System ID\",\"filter\":\"\",\"name\":\"systemId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"1~8\",\"display\":\"Data Forwarder Number\",\"filter\":\"1~8\",\"name\":\"dataForwarderNum\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Common Statistic Interval\",\"filter\":\"\",\"name\":\"commonStatisticInterval\",\"type\":\"int\",\"value\":\"60\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Statistic Interval\",\"filter\":\"\",\"name\":\"userStatisticInterval\",\"type\":\"int\",\"value\":\"60\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RX N3 OverLoad Threshold Mbps\",\"filter\":\"\",\"name\":\"rxN3OverLoadThresholdMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RX N6 OverLoad Threshold Mbps\",\"filter\":\"\",\"name\":\"rxN6OverLoadThresholdMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Checksum Offload\",\"filter\":\"0~255\",\"name\":\"checksumOffload\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Downlink Buffer Num\",\"filter\":\"\",\"name\":\"maxDownlinkBufferNum\",\"type\":\"int\",\"value\":\"50\"}]', 1, '', 1721705770725); +REPLACE INTO `ne_config` VALUES (64, 'UPF', 'logger', 'Logger', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Log File Full Path\",\"filter\":\"\",\"name\":\"logFileFullPath\",\"type\":\"string\",\"value\":\"/var/log/upf.log\"},{\"access\":\"read-write\",\"comment\":\"error|warning|info|debug\",\"display\":\"Log Level\",\"filter\":\"\",\"name\":\"logLevel\",\"type\":\"string\",\"value\":\"error\"},{\"access\":\"read-write\",\"comment\":\"error|warning|info|debug\",\"display\":\"Upfd Log Level\",\"filter\":\"\",\"name\":\"upfdLogLevel\",\"type\":\"string\",\"value\":\"error\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Upfd Log Transfer\",\"filter\":\"\",\"name\":\"upfdLogTransfer\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Report Caller\",\"filter\":\"\",\"name\":\"reportCaller\",\"type\":\"bool\",\"value\":\"false\"}]', 3, '', 1721705772689); +REPLACE INTO `ne_config` VALUES (65, 'UPF', 'pfcp', 'PFCP', 'list', '[{\"access\":\"read-write\",\"comment\":\"ipv4|ipv6|ipv46\",\"display\":\"IP Type\",\"filter\":\"\",\"name\":\"ipType\",\"type\":\"string\",\"value\":\"ipv4\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local IPv4\",\"filter\":\"\",\"name\":\"localIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local IPv6\",\"filter\":\"\",\"name\":\"localIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"1~65535\",\"display\":\"Local UDP Port\",\"filter\":\"1~65535\",\"name\":\"localUdpPort\",\"type\":\"int\",\"value\":\"8805\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMF IPv4\",\"filter\":\"\",\"name\":\"smfIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMF IPv6\",\"filter\":\"\",\"name\":\"smfIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"1~65535\",\"display\":\"SMF UDP Port\",\"filter\":\"1~65535\",\"name\":\"smfUdpPort\",\"type\":\"int\",\"value\":\"8805\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"Retry Interval\",\"filter\":\"1~255\",\"name\":\"retryInterval\",\"type\":\"int\",\"value\":\"2\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Max Retry\",\"filter\":\"0~255\",\"name\":\"maxRetry\",\"type\":\"int\",\"value\":\"3\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"Heartbeat Interval\",\"filter\":\"1~255\",\"name\":\"heartbeatInterval\",\"type\":\"int\",\"value\":\"15\"}]', 5, '', 1721705772791); +REPLACE INTO `ne_config` VALUES (66, 'UPF', 'telnet', 'Telnet', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enabled\",\"filter\":\"\",\"name\":\"enabled\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"ipv4|ipv6|ipv46\",\"display\":\"IP Type\",\"filter\":\"\",\"name\":\"ipType\",\"type\":\"string\",\"value\":\"ipv4\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local IPv4\",\"filter\":\"\",\"name\":\"localIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local IPv6\",\"filter\":\"\",\"name\":\"localIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"1~65535\",\"display\":\"Local Port\",\"filter\":\"1~65535\",\"name\":\"localPort\",\"type\":\"int\",\"value\":\"4100\"}]', 7, '', 1721705772939); +REPLACE INTO `ne_config` VALUES (67, 'UPF', 'redisDb', 'Redis DB', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Enabled\",\"filter\":\"\",\"name\":\"enabled\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"tcp|udp\",\"display\":\"Net Type\",\"filter\":\"\",\"name\":\"netType\",\"type\":\"string\",\"value\":\"tcp\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server Address\",\"filter\":\"\",\"name\":\"serverAddr\",\"type\":\"string\",\"value\":\"0.0.0.0:0\"}]', 9, '', 1721705773069); +REPLACE INTO `ne_config` VALUES (68, 'UPF', 'dataForwarderCommon', 'Data Forwarder Common', 'list', '[{\"access\":\"read-write\",\"comment\":\"upfd|tun\",\"display\":\"Type\",\"filter\":\"\",\"name\":\"type\",\"type\":\"string\",\"value\":\"upfd\"},{\"access\":\"read-only\",\"comment\":\"1~8\",\"display\":\"Instance ID\",\"filter\":\"1~8\",\"name\":\"instanceId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"1~255\",\"display\":\"Main CPU\",\"filter\":\"1~255\",\"name\":\"mainCpu\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"2,3,4,5 or 2-5\",\"display\":\"CPU Workers\",\"filter\":\"\",\"name\":\"cpuWorkers\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"data forwarder already run or not\",\"display\":\"Is Run\",\"filter\":\"0~1\",\"name\":\"isRun\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"Hot Standby work or not\",\"display\":\"Is Hot Standby\",\"filter\":\"0~1\",\"name\":\"isHotStandby\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"The value from which TEID is allocated\",\"display\":\"TEID Start\",\"filter\":\"\",\"name\":\"teidStart\",\"type\":\"int\",\"value\":\"16777216\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 Heartbeat Interval\",\"filter\":\"\",\"name\":\"n3HeartbeatInterval\",\"type\":\"int\",\"value\":\"30\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"RX TX Queue Num\",\"filter\":\"\",\"name\":\"rxTxQueueNum\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"data rx\\u0026tx use C socket\",\"display\":\"Use Socket\",\"filter\":\"0~1\",\"name\":\"useSocket\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"Enable 5G ethernet LAN\",\"display\":\"Enable Tap\",\"filter\":\"0~1\",\"name\":\"enableTap\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"Enable PFCP Qer Control\",\"display\":\"Enable Qer\",\"filter\":\"0~1\",\"name\":\"enableQer\",\"type\":\"int\",\"value\":\"0\"}]', 11, '', 1721705773160); +REPLACE INTO `ne_config` VALUES (69, 'UPF', 'dataForwarderUpfd', 'Data Forwarder Upfd', 'list', '[{\"access\":\"read-write\",\"comment\":\"Currently only support vfio-pci\",\"display\":\"UIO Driver\",\"filter\":\"\",\"name\":\"uioDriver\",\"type\":\"string\",\"value\":\"vfio-pci\"},{\"access\":\"read-write\",\"comment\":\"The format must be IP:Port\",\"display\":\"Telnet Address IP:Port\",\"filter\":\"\",\"name\":\"commandlineListen\",\"type\":\"string\",\"value\":\"localhost:5002\"},{\"access\":\"read-write\",\"comment\":\"the unit is GB\",\"display\":\"Heap Size GB\",\"filter\":\"1~8\",\"name\":\"heapSizeGB\",\"type\":\"int\",\"value\":\"2\"},{\"access\":\"read-write\",\"comment\":\"the unit is MB\",\"display\":\"State Seg Size MB\",\"filter\":\"64~512\",\"name\":\"stateSegSizeMB\",\"type\":\"int\",\"value\":\"256\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK No PCI\",\"filter\":\"0~1\",\"name\":\"dpdkNoPci\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Mem Channel Num\",\"filter\":\"0~128\",\"name\":\"memChannelNum\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Session Base Va\",\"filter\":\"\",\"name\":\"sessionBaseVa\",\"type\":\"string\",\"value\":\"0x2000000000\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Buffers Per Numa\",\"filter\":\"\",\"name\":\"buffersPerNuma\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 RSS Hash\",\"filter\":\"\",\"name\":\"n3RssHash\",\"type\":\"string\",\"value\":\"\"}]', 13, '', 1721705774027); +REPLACE INTO `ne_config` VALUES (70, 'UPF', 'dataInterfaceList', 'Data Interface List', 'array', '[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"N3|N6|N9|N19\",\"display\":\"Interface Type\",\"filter\":\"\",\"name\":\"interfaceType\",\"type\":\"string\",\"value\":\"N3\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interface ID\",\"filter\":\"1~32\",\"name\":\"interfaceId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"host|vmxnet3|dpdk|socket|uds\",\"display\":\"Driver Type\",\"filter\":\"\",\"name\":\"driverType\",\"type\":\"string\",\"value\":\"host\"},{\"access\":\"read-write\",\"comment\":\"ipv4|ipv6|ipv4v6\",\"display\":\"IP Type\",\"filter\":\"\",\"name\":\"ipType\",\"type\":\"string\",\"value\":\"ipv4\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~8\",\"display\":\"Index\",\"filter\":\"1~8\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"IPv4\",\"display\":\"IPv4\",\"filter\":\"\",\"name\":\"ipv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4 Mask\",\"filter\":\"\",\"name\":\"ipv4Mask\",\"type\":\"string\",\"value\":\"0.0.0.0\"}],\"comment\":\"\",\"display\":\"IPv4 Address List\",\"filter\":\"0~8\",\"name\":\"ipv4AddrList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~8\",\"display\":\"Index\",\"filter\":\"1~8\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6\",\"filter\":\"\",\"name\":\"ipv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6 Prefix\",\"filter\":\"\",\"name\":\"ipv6Prefix\",\"type\":\"int\",\"value\":\"64\"}],\"comment\":\"\",\"display\":\"IPv6 Address List\",\"filter\":\"0~8\",\"name\":\"ipv6AddrList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MAC Address\",\"filter\":\"\",\"name\":\"macAddr\",\"type\":\"string\",\"value\":\"00:00:00:00:00:00\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Interface PCI\",\"filter\":\"\",\"name\":\"interfacePCI\",\"type\":\"string\",\"value\":\"0000:00:00.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"System Network Card Name\",\"filter\":\"\",\"name\":\"systemNetworkCardName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gateway IPv4\",\"filter\":\"\",\"name\":\"gatewayIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"null|bak|sub|xor|round|lacp\",\"display\":\"Bond Type\",\"filter\":\"\",\"name\":\"bondType\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Bond ID\",\"filter\":\"0~32\",\"name\":\"bondId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"BFD TX Interval Ms\",\"filter\":\"\",\"name\":\"bfdTxIntervalMs\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"BFD RX Interval Ms\",\"filter\":\"\",\"name\":\"bfdRxIntervalMs\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN Name\",\"filter\":\"\",\"name\":\"dnnName\",\"type\":\"string\",\"value\":\"default\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gateway IPv6\",\"filter\":\"\",\"name\":\"gatewayIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"BFD Gateway IPv4\",\"filter\":\"\",\"name\":\"bfdGatewayIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"BFD Gateway IPv6\",\"filter\":\"\",\"name\":\"bfdGatewayIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"MTU\",\"filter\":\"0~65535\",\"name\":\"mtu\",\"type\":\"int\",\"value\":\"1500\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Vlan ID Min\",\"filter\":\"\",\"name\":\"vlanIdMin\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Vlan ID Max\",\"filter\":\"\",\"name\":\"vlanIdMax\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDP Src Port\",\"filter\":\"1~65535\",\"name\":\"udpSrcPort\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDP Listen Port\",\"filter\":\"0~65536\",\"name\":\"udpListenPort\",\"type\":\"int\",\"value\":\"2152\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDS Local File Full Path\",\"filter\":\"\",\"name\":\"udsLocalFileFullPath\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDS Remote File Full Path\",\"filter\":\"\",\"name\":\"udsRemoteFileFullPath\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Link Detection Type\",\"filter\":\"0~1\",\"name\":\"linkDetectionType\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NAT Interface ID\",\"filter\":\"0~1\",\"name\":\"natInterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4\",\"filter\":\"\",\"name\":\"ueIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv4 Mask\",\"filter\":\"\",\"name\":\"ueIpv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6\",\"filter\":\"\",\"name\":\"ueIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"ueIpv6Prefix\",\"type\":\"int\",\"value\":\"64\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4\",\"filter\":\"\",\"name\":\"ipv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4 Mask\",\"filter\":\"\",\"name\":\"ipv4Mask\",\"type\":\"string\",\"value\":\"0.0.0.0\"}],\"comment\":\"\",\"display\":\"GTPU Remote IPv4 Pool List\",\"filter\":\"1~32\",\"name\":\"gtpuRemoteIpv4PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6\",\"filter\":\"\",\"name\":\"ipv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6 Prefix\",\"filter\":\"\",\"name\":\"ipv6Prefix\",\"type\":\"int\",\"value\":\"64\"}],\"comment\":\"\",\"display\":\"GTPU Remote IPv6 Pool List\",\"filter\":\"0~32\",\"name\":\"gtpuRemoteIpv6PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"GTPU Signaling Handle\",\"filter\":\"0~1\",\"name\":\"gtpuSignalingHandle\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IMS Default DSCP Value\",\"filter\":\"0~1\",\"name\":\"imsDefaultDSCPValue\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Data Default DSCP Value\",\"filter\":\"0~1\",\"name\":\"dataDefaultDSCPValue\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Inner DSCP Value Map\",\"filter\":\"0~1\",\"name\":\"innerDSCPValueMap\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Support Speed Mbps\",\"filter\":\"0~65536\",\"name\":\"maxSupportSpeedMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK RX Queues Number\",\"filter\":\"0~127\",\"name\":\"dpdkRxQueuesNumber\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK TX Queues Number\",\"filter\":\"0~127\",\"name\":\"dpdkTxQueuesNumber\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK RX Desc Number\",\"filter\":\"0~32768\",\"name\":\"dpdkRxDescNumber\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK TX Desc Number\",\"filter\":\"0~32768\",\"name\":\"dpdkTxDescNumber\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DPDK Workers\",\"filter\":\"\",\"name\":\"dpdkworkers\",\"type\":\"string\",\"value\":\"\"}]', 15, '', 1721705774222); +REPLACE INTO `ne_config` VALUES (71, 'UPF', 'networkControlCommon', 'Network Control Common', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local Switch Disabled\",\"filter\":\"0~1\",\"name\":\"localSwitchDisabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max TCP Sync Per Second\",\"filter\":\"\",\"name\":\"maxTCPSyncPerSecond\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UPF Max Support Mbps\",\"filter\":\"\",\"name\":\"upfMaxSupportMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"dscp Inner Mapping\",\"filter\":\"\",\"name\":\"dscpInnerMapping\",\"type\":\"int\",\"value\":\"0\"}]', 17, '', 1721705774271); +REPLACE INTO `ne_config` VALUES (72, 'UPF', 'networkControlDnnList', 'Network Control DNN List', 'array', '[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN Name\",\"filter\":\"\",\"name\":\"dnnName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 Interface ID\",\"filter\":\"0~32\",\"name\":\"n3InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N6 Interface ID\",\"filter\":\"0~32\",\"name\":\"n6InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"HTTP Proto Enabled\",\"filter\":\"0~1\",\"name\":\"httpProtoEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"HTTPS Proto Enabled\",\"filter\":\"0~1\",\"name\":\"httpsProtoEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Type\",\"filter\":\"\",\"name\":\"type\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"\",\"name\":\"name\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Value\",\"filter\":\"\",\"name\":\"value\",\"type\":\"string\",\"value\":\"\"}],\"comment\":\"\",\"display\":\"Header Enrich Info List\",\"filter\":\"0~32\",\"name\":\"headerEnrichInfoList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Statistic Enabled\",\"filter\":\"0~1\",\"name\":\"statisticEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Local Switch Check\",\"filter\":\"0~1\",\"name\":\"localSwitchCheck\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QER Max Support Mbps\",\"filter\":\"\",\"name\":\"qerMaxSupportMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4\",\"filter\":\"\",\"name\":\"ipv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4 Mask\",\"filter\":\"\",\"name\":\"ipv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"}],\"comment\":\"\",\"display\":\"UE IPv4 Pool List\",\"filter\":\"0~32\",\"name\":\"ueIpv4PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6\",\"filter\":\"\",\"name\":\"ipv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"ipv6Prefix\",\"type\":\"int\",\"value\":\"64\"}],\"comment\":\"\",\"display\":\"UE IPv6 Pool List\",\"filter\":\"0~32\",\"name\":\"ueIpv6PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4\",\"filter\":\"\",\"name\":\"ipv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv4 Mask\",\"filter\":\"\",\"name\":\"ipv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"}],\"comment\":\"\",\"display\":\"Dst Server IPv4 Pool List\",\"filter\":\"0~32\",\"name\":\"dstServerIpv4PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6\",\"filter\":\"\",\"name\":\"ipv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"ipv6Prefix\",\"type\":\"int\",\"value\":\"64\"}],\"comment\":\"\",\"display\":\"Dst Server IPv6 Pool List\",\"filter\":\"0~32\",\"name\":\"dstServerIpv6PoolList\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"ipv4|ipv6|ipv4v6\",\"display\":\"Gateway IP Type\",\"filter\":\"\",\"name\":\"gatewayIpType\",\"type\":\"string\",\"value\":\"ipv4\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gateway IPv4\",\"filter\":\"\",\"name\":\"gatewayIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Gateway IPv6\",\"filter\":\"\",\"name\":\"gatewayIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary Gateway IPv4\",\"filter\":\"\",\"name\":\"secondaryGatewayIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Secondary Gateway IPv6\",\"filter\":\"\",\"name\":\"secondaryGatewayIpv6\",\"type\":\"string\",\"value\":\"\"}]', 19, '', 1721705774430); +REPLACE INTO `ne_config` VALUES (73, 'UPF', 'networkControlSnssaiList', 'Network Control SNSSAI List', 'array', '[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SST\",\"filter\":\"\",\"name\":\"sst\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SD\",\"filter\":\"\",\"name\":\"sd\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 Interface ID\",\"filter\":\"0~32\",\"name\":\"n3InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N6 Interface ID\",\"filter\":\"0~32\",\"name\":\"n6InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"QER Max Support Mbps\",\"filter\":\"\",\"name\":\"qerMaxSupportMbps\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Statistic Enabled\",\"filter\":\"0~1\",\"name\":\"statisticEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Vlan ID Min\",\"filter\":\"\",\"name\":\"vlanIdMin\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Vlan ID Max\",\"filter\":\"\",\"name\":\"vlanIdMax\",\"type\":\"int\",\"value\":\"0\"}]', 21, '', 1721705774453); +REPLACE INTO `ne_config` VALUES (74, 'UPF', 'networkControlAclWhiteList', 'Network Control ACL White List', 'array', '[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv4\",\"filter\":\"\",\"name\":\"ueIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv4 Mask\",\"filter\":\"\",\"name\":\"ueIpv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6\",\"filter\":\"\",\"name\":\"ueIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"ueIpv6Prefix\",\"type\":\"int\",\"value\":\"64\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv4\",\"filter\":\"\",\"name\":\"dstServerIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv4 Mask\",\"filter\":\"\",\"name\":\"dstServerIpv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv6\",\"filter\":\"\",\"name\":\"dstServerIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"dstServerIpv6Prefix\",\"type\":\"int\",\"value\":\"64\"}]', 23, '', 1721705774471); +REPLACE INTO `ne_config` VALUES (75, 'UPF', 'networkControlAclBlackList', 'Network Control ACL Black List', 'array', '[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv4\",\"filter\":\"\",\"name\":\"ueIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv4 Mask\",\"filter\":\"\",\"name\":\"ueIpv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6\",\"filter\":\"\",\"name\":\"ueIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UE IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"ueIpv6Prefix\",\"type\":\"int\",\"value\":\"64\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv4\",\"filter\":\"\",\"name\":\"dstServerIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv4 Mask\",\"filter\":\"\",\"name\":\"dstServerIpv4Mask\",\"type\":\"string\",\"value\":\"255.255.255.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv6\",\"filter\":\"\",\"name\":\"dstServerIpv6\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dst Server IPv6 Prefix\",\"filter\":\"1~128\",\"name\":\"dstServerIpv6Prefix\",\"type\":\"int\",\"value\":\"64\"}]', 25, '', 1721705774488); +REPLACE INTO `ne_config` VALUES (76, 'UPF', 'networkControlDnsServerList', 'Network Control DNS Server List', 'array', '[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~1\",\"display\":\"Enabled\",\"filter\":\"0~1\",\"name\":\"enabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNS Name\",\"filter\":\"\",\"name\":\"dnsName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server IPv4\",\"filter\":\"\",\"name\":\"serverIpv4\",\"type\":\"string\",\"value\":\"0.0.0.0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Server IPv6\",\"filter\":\"\",\"name\":\"serverIpv6\",\"type\":\"string\",\"value\":\"\"}]', 27, '', 1721705774492); +REPLACE INTO `ne_config` VALUES (77, 'UPF', 'dpiCommon', 'DPI Common', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Max Detect Packet Num\",\"filter\":\"\",\"name\":\"maxDetectPacketNum\",\"type\":\"int\",\"value\":\"20\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"HTTP Proto Enabled\",\"filter\":\"0~1\",\"name\":\"httpProtoEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"HTTPS Proto Enabled\",\"filter\":\"0~1\",\"name\":\"httpsProtoEnabled\",\"type\":\"int\",\"value\":\"0\"}]', 29, '', 1721705774496); +REPLACE INTO `ne_config` VALUES (78, 'UPF', 'dpiHeaderEnrichInfoList', 'DPI Header Enrich Info List', 'array', '[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Type\",\"filter\":\"\",\"name\":\"type\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Name\",\"filter\":\"\",\"name\":\"name\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Value\",\"filter\":\"\",\"name\":\"value\",\"type\":\"string\",\"value\":\"\"}]', 31, '', 1721705774501); +REPLACE INTO `ne_config` VALUES (79, 'UPF', 'dpiAppList', 'DPI APP List', 'array', '[{\"access\":\"read-write\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"APP Name\",\"filter\":\"\",\"name\":\"appName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Proxy Enabled\",\"filter\":\"0~1\",\"name\":\"proxyEnabled\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Force Check Type\",\"filter\":\"0~1\",\"name\":\"forceCheckType\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N3 Interface ID\",\"filter\":\"0~32\",\"name\":\"n3InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"N6 Interface ID\",\"filter\":\"0~32\",\"name\":\"n6InterfaceId\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"array\":[{\"access\":\"read-only\",\"comment\":\"1~32\",\"display\":\"Index\",\"filter\":\"1~32\",\"name\":\"index\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rule ID\",\"filter\":\"\",\"name\":\"ruleId\",\"type\":\"int\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"REGEX Match\",\"filter\":\"\",\"name\":\"regexMatch\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Flow Description\",\"filter\":\"\",\"name\":\"flowDescription\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Custom Name\",\"filter\":\"\",\"name\":\"customName\",\"type\":\"string\",\"value\":\"\"}],\"comment\":\"\",\"display\":\"Rule List\",\"filter\":\"0~32\",\"name\":\"ruleList\",\"type\":\"int\",\"value\":\"1\"}]', 33, '', 1721705774505); + +SET FOREIGN_KEY_CHECKS=1; diff --git a/database/upgrade/upg_ne_config_backup.sql b/database/upgrade/upg_ne_config_backup.sql new file mode 100644 index 00000000..504c3c08 --- /dev/null +++ b/database/upgrade/upg_ne_config_backup.sql @@ -0,0 +1,19 @@ +SET FOREIGN_KEY_CHECKS=0; + +CREATE TABLE IF NOT EXISTS `ne_config_backup` ( + `id` int NOT NULL AUTO_INCREMENT, + `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', + `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-' COMMENT '命名', + `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-' COMMENT '网元版本', + `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '压缩包位置', + `remark` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '备注', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', + `create_time` bigint DEFAULT '0' COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者', + `update_time` bigint DEFAULT '0' COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_ne_type_id` (`ne_type`,`ne_id`) USING BTREE COMMENT '网元类型_网元ID' +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='网元_配置文件备份记录'; + +SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file From 77c382eb3cce094c1175679b46701ac76884d310 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 23 Jul 2024 11:59:03 +0800 Subject: [PATCH 04/34] =?UTF-8?q?feat:=20=E7=BD=91=E5=85=83=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E5=A4=87=E4=BB=BD=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=E5=A3=B0=E6=98=8E=EF=BC=8C=E7=BD=91=E5=85=83?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=95=B0=E6=8D=AE=E6=93=8D=E4=BD=9C=E8=B7=AF?= =?UTF-8?q?=E7=94=B1=E5=A3=B0=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/network_element.go | 38 ++++++++++++++++++- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/src/modules/network_element/network_element.go b/src/modules/network_element/network_element.go index e6a6c61d..91b527c3 100644 --- a/src/modules/network_element/network_element.go +++ b/src/modules/network_element/network_element.go @@ -260,6 +260,7 @@ func Setup(router *gin.Engine) { // 网元参数配置 neConfigGroup := neGroup.Group("/config") { + // 网元参数配置可用属性值 neConfigGroup.GET("/list", middleware.PreAuthorize(nil), controller.NewNeConfig.List, @@ -278,7 +279,7 @@ func Setup(router *gin.Engine) { collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfig", collectlogs.BUSINESS_TYPE_UPDATE)), controller.NewNeConfig.Edit, ) - neConfigGroup.DELETE("/:ids", + neConfigGroup.DELETE("", middleware.PreAuthorize(nil), collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfig", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewNeConfig.Remove, @@ -287,9 +288,42 @@ func Setup(router *gin.Engine) { middleware.PreAuthorize(nil), controller.NewNeConfig.ListByNeType, ) + // 网元参数配置数据 neConfigGroup.GET("/data", middleware.PreAuthorize(nil), - controller.NewNeConfig.Data, + controller.NewNeConfig.DataInfo, + ) + neConfigGroup.PUT("/data", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfig", collectlogs.BUSINESS_TYPE_UPDATE)), + controller.NewNeConfig.DataEdit, + ) + neConfigGroup.POST("/data", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfig", collectlogs.BUSINESS_TYPE_INSERT)), + controller.NewNeConfig.DataAdd, + ) + neConfigGroup.DELETE("/data", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfig", collectlogs.BUSINESS_TYPE_DELETE)), + controller.NewNeConfig.DataRemove, + ) + } + + // 网元配置文件备份记录 + neConfigBackupGroup := neGroup.Group("/config/backup") + { + neConfigBackupGroup.GET("/list", + middleware.PreAuthorize(nil), + controller.NewNeConfigBackup.List, + ) + neConfigBackupGroup.GET("", + middleware.PreAuthorize(nil), + controller.NewNeConfigBackup.Info, + ) + neConfigBackupGroup.DELETE("", + middleware.PreAuthorize(nil), + controller.NewNeConfigBackup.Remove, ) } } From b70408bed396e37fef5f7be6f456d4517224e3d1 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 23 Jul 2024 14:31:08 +0800 Subject: [PATCH 05/34] =?UTF-8?q?fix:=20=E6=B3=A8=E9=87=8Acrontask?= =?UTF-8?q?=E6=97=A0=E7=94=A8=E4=BB=BB=E5=8A=A1=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crontask/tasks.go | 296 +++++++++++++++++++++++----------------------- 1 file changed, 148 insertions(+), 148 deletions(-) diff --git a/crontask/tasks.go b/crontask/tasks.go index e64e8446..ab94d3fc 100644 --- a/crontask/tasks.go +++ b/crontask/tasks.go @@ -250,139 +250,139 @@ func (t *TaskFunc) TaskCronUserLoginOMC(uri, params, body string) { func (t *TaskFunc) TaskDeleteExpiredRecord(uri, params, body string) { log.Debug("TaskDeleteExpiredRecord processing... ") - var response *resty.Response - requestURI := fmt.Sprintf("%s?%s", uri, params) - requestURL := fmt.Sprintf("%s%s", yamlConfig.OMC.HostUri, requestURI) - log.Debug("requestURL: DELETE ", requestURL) - client := resty.New() - response, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{"User-Agent": GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Delete(requestURL) - if err != nil { - log.Error("Failed to delete:", err) - } + // var response *resty.Response + // requestURI := fmt.Sprintf("%s?%s", uri, params) + // requestURL := fmt.Sprintf("%s%s", yamlConfig.OMC.HostUri, requestURI) + // log.Debug("requestURL: DELETE ", requestURL) + // client := resty.New() + // response, err := client.R(). + // EnableTrace(). + // SetHeaders(map[string]string{"User-Agent": GetDefaultUserAgent()}). + // SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). + // Delete(requestURL) + // if err != nil { + // log.Error("Failed to delete:", err) + // } - log.Debug("StatusCode: ", response.StatusCode()) - switch response.StatusCode() { - case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: - log.Debug("response body:", string(response.Body())) - body := new(map[string]interface{}) - _ = json.Unmarshal(response.Body(), &body) - default: - log.Debug("response body:", string(response.Body())) - body := new(map[string]interface{}) - _ = json.Unmarshal(response.Body(), &body) - } + // log.Debug("StatusCode: ", response.StatusCode()) + // switch response.StatusCode() { + // case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: + // log.Debug("response body:", string(response.Body())) + // body := new(map[string]interface{}) + // _ = json.Unmarshal(response.Body(), &body) + // default: + // log.Debug("response body:", string(response.Body())) + // body := new(map[string]interface{}) + // _ = json.Unmarshal(response.Body(), &body) + // } } func (t *TaskFunc) TaskUpdateTable(uri, params, body string) { log.Debug("TaskUpdateTable processing... ") - var response *resty.Response - requestURI := fmt.Sprintf("%s?%s", uri, params) - requestURL := fmt.Sprintf("%s%s", yamlConfig.OMC.HostUri, requestURI) - // reqBody, err := json.Marshal(body) + // var response *resty.Response + // requestURI := fmt.Sprintf("%s?%s", uri, params) + // requestURL := fmt.Sprintf("%s%s", yamlConfig.OMC.HostUri, requestURI) + // // reqBody, err := json.Marshal(body) + // // if err != nil { + // // log.Error("Failed to Marshal:", err) + // // } + // log.Debug("requestURL: Put ", requestURL) + // log.Trace("body:", body) + // client := resty.New() + // response, err := client.R(). + // EnableTrace(). + // SetHeaders(map[string]string{"accessToken": t.Token}). + // SetHeaders(map[string]string{"User-Agent": GetDefaultUserAgent()}). + // SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). + // SetBody(body). + // Put(requestURL) // if err != nil { - // log.Error("Failed to Marshal:", err) + // log.Error("Failed to put:", err) // } - log.Debug("requestURL: Put ", requestURL) - log.Trace("body:", body) - client := resty.New() - response, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{"accessToken": t.Token}). - SetHeaders(map[string]string{"User-Agent": GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - SetBody(body). - Put(requestURL) - if err != nil { - log.Error("Failed to put:", err) - } - log.Debug("StatusCode: ", response.StatusCode()) - switch response.StatusCode() { - case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: - log.Debug("response body:", string(response.Body())) - body := new(map[string]interface{}) - _ = json.Unmarshal(response.Body(), &body) - default: - log.Debug("response body:", string(response.Body())) - body := new(map[string]interface{}) - _ = json.Unmarshal(response.Body(), &body) - } + // log.Debug("StatusCode: ", response.StatusCode()) + // switch response.StatusCode() { + // case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: + // log.Debug("response body:", string(response.Body())) + // body := new(map[string]interface{}) + // _ = json.Unmarshal(response.Body(), &body) + // default: + // log.Debug("response body:", string(response.Body())) + // body := new(map[string]interface{}) + // _ = json.Unmarshal(response.Body(), &body) + // } } func (t *TaskFunc) TaskRemoveExpiredFile(uri, params, body string) { log.Debug("TaskRemoveExpiredFile processing... ") - var response *resty.Response - loginUri := "/login" - loginBody := "{\"username\": \"cronuser\",\"password\": \"tcu@1000OMC!\",\"code\": \"\", \"uuid\": \"\"}" - t.TaskCronUserLoginOMC(loginUri, "", loginBody) - loginURI := fmt.Sprintf("%s?%s", loginUri, "") - loginURL := fmt.Sprintf("%s%s", yamlConfig.OMC.HostUri, loginURI) - log.Debug("requestURL: Post ", loginURL) - client := resty.New() - loginResponse, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{"User-Agent": GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - SetBody(loginBody). - Post(loginURL) - if err != nil { - log.Error("Failed to post:", err) - return - } + // var response *resty.Response + // loginUri := "/login" + // loginBody := "{\"username\": \"cronuser\",\"password\": \"tcu@1000OMC!\",\"code\": \"\", \"uuid\": \"\"}" + // t.TaskCronUserLoginOMC(loginUri, "", loginBody) + // loginURI := fmt.Sprintf("%s?%s", loginUri, "") + // loginURL := fmt.Sprintf("%s%s", yamlConfig.OMC.HostUri, loginURI) + // log.Debug("requestURL: Post ", loginURL) + // client := resty.New() + // loginResponse, err := client.R(). + // EnableTrace(). + // SetHeaders(map[string]string{"User-Agent": GetDefaultUserAgent()}). + // SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). + // SetBody(loginBody). + // Post(loginURL) + // if err != nil { + // log.Error("Failed to post:", err) + // return + // } - var accessToken string - log.Debug("StatusCode: ", loginResponse.StatusCode()) - switch loginResponse.StatusCode() { - case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: - log.Debug("response body:", string(loginResponse.Body())) - var loginResp LoginRespone - err = json.Unmarshal(loginResponse.Body(), &loginResp) - if err != nil { - log.Error("Failed to unmarshal:", err) - return - } - if loginResp.Code == 1 { - accessToken = loginResp.Data.AccessToken - } else { - log.Error("Failed to login: %s", loginResp.Msg) - return - } - default: - log.Debug("response body:", string(response.Body())) - return - } + // var accessToken string + // log.Debug("StatusCode: ", loginResponse.StatusCode()) + // switch loginResponse.StatusCode() { + // case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: + // log.Debug("response body:", string(loginResponse.Body())) + // var loginResp LoginRespone + // err = json.Unmarshal(loginResponse.Body(), &loginResp) + // if err != nil { + // log.Error("Failed to unmarshal:", err) + // return + // } + // if loginResp.Code == 1 { + // accessToken = loginResp.Data.AccessToken + // } else { + // log.Error("Failed to login: %s", loginResp.Msg) + // return + // } + // default: + // log.Debug("response body:", string(response.Body())) + // return + // } - requestURI := fmt.Sprintf("%s?%s", uri, params) - requestURL := fmt.Sprintf("%s%s", yamlConfig.OMC.HostUri, requestURI) - log.Debug("requestURL: DELETE ", requestURL) - response, err = client.R(). - EnableTrace(). - SetHeaders(map[string]string{"Authorization": "Bearer " + accessToken}). - SetHeaders(map[string]string{"User-Agent": GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Delete(requestURL) - if err != nil { - log.Error("Failed to delete:", err) - return - } + // requestURI := fmt.Sprintf("%s?%s", uri, params) + // requestURL := fmt.Sprintf("%s%s", yamlConfig.OMC.HostUri, requestURI) + // log.Debug("requestURL: DELETE ", requestURL) + // response, err = client.R(). + // EnableTrace(). + // SetHeaders(map[string]string{"Authorization": "Bearer " + accessToken}). + // SetHeaders(map[string]string{"User-Agent": GetDefaultUserAgent()}). + // SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). + // Delete(requestURL) + // if err != nil { + // log.Error("Failed to delete:", err) + // return + // } - log.Debug("StatusCode: ", response.StatusCode()) - switch response.StatusCode() { - case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: - log.Debug("response body:", string(response.Body())) - body := new(map[string]interface{}) - _ = json.Unmarshal(response.Body(), &body) - default: - log.Debug("response body:", string(response.Body())) - body := new(map[string]interface{}) - _ = json.Unmarshal(response.Body(), &body) - } + // log.Debug("StatusCode: ", response.StatusCode()) + // switch response.StatusCode() { + // case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: + // log.Debug("response body:", string(response.Body())) + // body := new(map[string]interface{}) + // _ = json.Unmarshal(response.Body(), &body) + // default: + // log.Debug("response body:", string(response.Body())) + // body := new(map[string]interface{}) + // _ = json.Unmarshal(response.Body(), &body) + // } } func (t *TaskFunc) GetTableNameFromUri(uri string) string { @@ -397,39 +397,39 @@ func (t *TaskFunc) GetTableNameFromUri(uri string) string { func (t *TaskFunc) TaskDBBackupCSVGetBySQL(uri, params, body string) { log.Debug("TaskDBBackupCSVGetBySQL processing... ") - var response *resty.Response - tableName := t.GetTableNameFromUri(uri) - filePath := fmt.Sprintf("/tmp/%s-%s.csv", tableName, time.Now().Local().Format(global.DateData)) - pa := fmt.Sprintf(params, filePath) - requestURI := fmt.Sprintf("%s?%s", uri, pa) - requestURL := fmt.Sprintf("%s%s", yamlConfig.OMC.HostUri, requestURI) - log.Debug("requestURL: Get ", requestURL) - client := resty.New() - response, err := client.R(). - EnableTrace(). - SetHeaders(map[string]string{"User-Agent": GetDefaultUserAgent()}). - SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). - Get(requestURL) - if err != nil { - log.Error("Failed to Get:", err) - } + // var response *resty.Response + // tableName := t.GetTableNameFromUri(uri) + // filePath := fmt.Sprintf("/tmp/%s-%s.csv", tableName, time.Now().Local().Format(global.DateData)) + // pa := fmt.Sprintf(params, filePath) + // requestURI := fmt.Sprintf("%s?%s", uri, pa) + // requestURL := fmt.Sprintf("%s%s", yamlConfig.OMC.HostUri, requestURI) + // log.Debug("requestURL: Get ", requestURL) + // client := resty.New() + // response, err := client.R(). + // EnableTrace(). + // SetHeaders(map[string]string{"User-Agent": GetDefaultUserAgent()}). + // SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}). + // Get(requestURL) + // if err != nil { + // log.Error("Failed to Get:", err) + // } - log.Debug("StatusCode: ", response.StatusCode()) - switch response.StatusCode() { - case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: - cmd := exec.Command("cp", "-rf", filePath, GetYamlConfig().Database.Backup) - out, err := cmd.CombinedOutput() - log.Tracef("Exec output: %v", string(out)) - if err != nil { - log.Errorf("Faile to exec:", err) - return - } - log.Debug("response body:", string(response.Body())) - body := new(map[string]interface{}) - _ = json.Unmarshal(response.Body(), &body) - default: - log.Error("response body:", string(response.Body())) - } + // log.Debug("StatusCode: ", response.StatusCode()) + // switch response.StatusCode() { + // case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted: + // cmd := exec.Command("cp", "-rf", filePath, GetYamlConfig().Database.Backup) + // out, err := cmd.CombinedOutput() + // log.Tracef("Exec output: %v", string(out)) + // if err != nil { + // log.Errorf("Faile to exec:", err) + // return + // } + // log.Debug("response body:", string(response.Body())) + // body := new(map[string]interface{}) + // _ = json.Unmarshal(response.Body(), &body) + // default: + // log.Error("response body:", string(response.Body())) + // } } func (t *TaskFunc) TaskRunShellCommand(uri, params, body string) { From d09edf9960f08a2834bb5635d9aac9ccb6d6e306 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 23 Jul 2024 16:56:22 +0800 Subject: [PATCH 06/34] =?UTF-8?q?sql:=20=E7=BD=91=E5=85=83=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E5=A4=87=E4=BB=BD=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E5=8E=BB=E9=99=A4=E7=BD=91=E5=85=83=E7=89=88=E6=9C=AC=E6=A0=87?= =?UTF-8?q?=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/ne_config_backup.sql | 5 ++--- database/upgrade/upg_ne_config_backup.sql | 7 +++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/database/install/ne_config_backup.sql b/database/install/ne_config_backup.sql index 3b802fb2..7c8a96ec 100644 --- a/database/install/ne_config_backup.sql +++ b/database/install/ne_config_backup.sql @@ -8,8 +8,7 @@ CREATE TABLE `ne_config_backup` ( `id` int NOT NULL AUTO_INCREMENT, `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID', - `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-' COMMENT '命名', - `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-' COMMENT '网元版本', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-' COMMENT '压缩包名称', `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '压缩包位置', `remark` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '备注', `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', @@ -20,4 +19,4 @@ CREATE TABLE `ne_config_backup` ( KEY `idx_ne_type_id` (`ne_type`,`ne_id`) USING BTREE COMMENT '网元类型_网元ID' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='网元_配置文件备份记录'; --- Dump completed on 2023-03-07 15:10:29 +-- Dump completed on 2023-07-05 15:25:39 diff --git a/database/upgrade/upg_ne_config_backup.sql b/database/upgrade/upg_ne_config_backup.sql index 504c3c08..8aa34d03 100644 --- a/database/upgrade/upg_ne_config_backup.sql +++ b/database/upgrade/upg_ne_config_backup.sql @@ -4,8 +4,7 @@ CREATE TABLE IF NOT EXISTS `ne_config_backup` ( `id` int NOT NULL AUTO_INCREMENT, `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元类型', `ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '网元ID', - `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-' COMMENT '命名', - `version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-' COMMENT '网元版本', + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-' COMMENT '压缩包名称', `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '压缩包位置', `remark` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '备注', `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者', @@ -14,6 +13,6 @@ CREATE TABLE IF NOT EXISTS `ne_config_backup` ( `update_time` bigint DEFAULT '0' COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE, KEY `idx_ne_type_id` (`ne_type`,`ne_id`) USING BTREE COMMENT '网元类型_网元ID' -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='网元_配置文件备份记录'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='网元_配置文件备份记录'; -SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file +SET FOREIGN_KEY_CHECKS=1; From 831b2e2eacc561b786843c2d1237dc9e2c5b0333 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 23 Jul 2024 16:57:31 +0800 Subject: [PATCH 07/34] =?UTF-8?q?feat:=20=E7=BD=91=E5=85=83=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E5=A4=87=E4=BB=BD=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=88=B0=E6=9C=AC=E5=9C=B0=E6=89=93zip=E5=8E=8B=E7=BC=A9?= =?UTF-8?q?=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ne_config_backup.go | 3 ++ .../service/ne_config_backup.impl.go | 48 +++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/src/modules/network_element/service/ne_config_backup.go b/src/modules/network_element/service/ne_config_backup.go index 960bf569..000f9ea3 100644 --- a/src/modules/network_element/service/ne_config_backup.go +++ b/src/modules/network_element/service/ne_config_backup.go @@ -21,4 +21,7 @@ type INeConfigBackup interface { // DeleteByIds 批量删除信息 DeleteByIds(ids []string) (int64, error) + + // NeConfigFileToLocal 网元备份文件到本地 + NeConfigFileToLocal(neInfo model.NeInfo) (string, error) } diff --git a/src/modules/network_element/service/ne_config_backup.impl.go b/src/modules/network_element/service/ne_config_backup.impl.go index 38f3eea2..8426b9ea 100644 --- a/src/modules/network_element/service/ne_config_backup.impl.go +++ b/src/modules/network_element/service/ne_config_backup.impl.go @@ -2,7 +2,13 @@ package service import ( "fmt" + "os" + "runtime" + "strings" + "time" + "be.ems/src/framework/utils/date" + "be.ems/src/framework/utils/file" "be.ems/src/modules/network_element/model" "be.ems/src/modules/network_element/repository" ) @@ -65,3 +71,45 @@ func (r *NeConfigBackupImpl) DeleteByIds(ids []string) (int64, error) { // 删除信息失败! return 0, fmt.Errorf("delete fail") } + +// NeConfigFileToLocal 网元备份文件到本地 +func (r *NeConfigBackupImpl) NeConfigFileToLocal(neInfo model.NeInfo) (string, error) { + // 网元主机的SSH客户端 + sshClient, err := NewNeInfoImpl.NeRunSSHClient(neInfo.NeType, neInfo.NeId) + if err != nil { + return "", fmt.Errorf("ne info ssh client err") + } + defer sshClient.Close() + // 网元主机的SSH客户端进行文件传输 + sftpClient, err := sshClient.NewClientSFTP() + if err != nil { + return "", fmt.Errorf("ne info sftp client err") + } + defer sftpClient.Close() + + neTypeLower := strings.ToLower(neInfo.NeType) + // 网管本地路径 + omcPath := "/usr/local/etc/omc/ne_config" + if runtime.GOOS == "windows" { + omcPath = fmt.Sprintf("C:%s", omcPath) + } + localDirPath := fmt.Sprintf("%s/%s/%s/backup/tmp", omcPath, neTypeLower, neInfo.NeId) + // 网元配置文件先复制到临时目录目录 + nePath := fmt.Sprintf("/usr/local/etc/%s/*.yaml", neTypeLower) + neDirTemp := fmt.Sprintf("/tmp/omc/ne_config/%s/%s", neTypeLower, neInfo.NeId) + sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo cp -rf %s %s", neDirTemp, nePath, neDirTemp)) + // 复制到本地 + if err = sftpClient.CopyDirRemoteToLocal(neDirTemp, localDirPath); err != nil { + return "", fmt.Errorf("copy config err") + } + + // 压缩zip文件名 + zipFileName := fmt.Sprintf("%s-%s-etc-%s.zip", neTypeLower, neInfo.NeId, date.ParseDateToStr(time.Now(), date.YYYYMMDDHHMMSS)) + zipFilePath := fmt.Sprintf("%s/%s/%s/backup/%s", omcPath, neTypeLower, neInfo.NeId, zipFileName) + if err := file.CompressZipByDir(zipFilePath, localDirPath); err != nil { + return "", fmt.Errorf("compress zip err") + } + _ = os.RemoveAll(localDirPath) // 删除本地临时目录 + sshClient.RunCMD(fmt.Sprintf("sudo rm -rf %s", neDirTemp)) // 删除临时目录 + return zipFilePath, nil +} From 33a0dc2a00fe36853833f9eb8712a9b323ddf05b Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 24 Jul 2024 09:54:44 +0800 Subject: [PATCH 08/34] =?UTF-8?q?feat:=20=E5=87=BD=E6=95=B0=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E8=A7=A3=20ZIP=20=E5=8E=8B=E7=BC=A9=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/file/zip.go | 46 +++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/src/framework/utils/file/zip.go b/src/framework/utils/file/zip.go index eac438f5..f5a3ec00 100644 --- a/src/framework/utils/file/zip.go +++ b/src/framework/utils/file/zip.go @@ -8,6 +8,52 @@ import ( "path/filepath" ) +// UnZip 解 ZIP 压缩文件输出到目录下 +func UnZip(zipFilePath, dirPath string) error { + // 打开ZIP文件进行读取 + r, err := zip.OpenReader(zipFilePath) + if err != nil { + return err + } + defer r.Close() + + // 创建本地输出目录 + if err := os.MkdirAll(dirPath, 0775); err != nil { + return err + } + + // 遍历ZIP文件中的每个文件并解压缩到输出目录 + for _, f := range r.File { + // 打开ZIP文件中的文件 + rc, err := f.Open() + if err != nil { + return err + } + defer rc.Close() + + // 创建解压后的文件 + path := filepath.Join(dirPath, f.Name) + if f.FileInfo().IsDir() { + // 如果是目录,创建目录 + os.MkdirAll(path, f.Mode()) + } else { + // 如果是文件,创建文件并写入内容 + file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode()) + if err != nil { + return err + } + defer file.Close() + + _, err = io.Copy(file, rc) + if err != nil { + return err + } + } + } + + return nil +} + // CompressZipByFile 将单文件添加到 ZIP 压缩文件 func CompressZipByFile(zipFilePath, filePath string) error { // 创建一个新的 ZIP 文件 From 1b6b65c693601c7e94fde0462b637b8a2596f1a8 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 24 Jul 2024 10:23:43 +0800 Subject: [PATCH 09/34] =?UTF-8?q?fix:=20sftp=E7=9B=AE=E5=BD=95=E5=A4=8D?= =?UTF-8?q?=E5=88=B6=E6=96=9C=E6=9D=A0=E8=BD=AC=E4=B9=89=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E8=AF=86=E5=88=AB=E4=B8=8D=E6=AD=A3=E7=A1=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/ssh/sftp.go | 57 +++++++++------------------------ 1 file changed, 16 insertions(+), 41 deletions(-) diff --git a/src/framework/utils/ssh/sftp.go b/src/framework/utils/ssh/sftp.go index b08fdb22..2fd826fc 100644 --- a/src/framework/utils/ssh/sftp.go +++ b/src/framework/utils/ssh/sftp.go @@ -23,6 +23,13 @@ func (s *SSHClientSFTP) Close() { // CopyDirRemoteToLocal 复制目录-远程到本地 func (s *SSHClientSFTP) CopyDirRemoteToLocal(remoteDir, localDir string) error { + // 创建本地目录 + err := os.MkdirAll(localDir, 0775) + if err != nil { + logger.Errorf("CopyDirRemoteToLocal failed to creating local directory %s: => %s", localDir, err.Error()) + return err + } + // 列出远程目录中的文件和子目录 remoteFiles, err := s.Client.ReadDir(remoteDir) if err != nil { @@ -30,13 +37,6 @@ func (s *SSHClientSFTP) CopyDirRemoteToLocal(remoteDir, localDir string) error { return err } - // 创建本地目录 - err = os.MkdirAll(localDir, 0775) - if err != nil { - logger.Errorf("CopyDirRemoteToLocal failed to creating local directory %s: => %s", localDir, err.Error()) - return err - } - // 遍历远程文件和子目录并复制到本地 for _, remoteFile := range remoteFiles { remotePath := filepath.ToSlash(filepath.Join(remoteDir, remoteFile.Name())) @@ -62,49 +62,26 @@ func (s *SSHClientSFTP) CopyDirRemoteToLocal(remoteDir, localDir string) error { // CopyDirRemoteToLocal 复制目录-本地到远程 func (s *SSHClientSFTP) CopyDirLocalToRemote(localDir, remoteDir string) error { - // 创建远程目录 - err := s.Client.MkdirAll(remoteDir) - if err != nil { - logger.Errorf("CopyDirLocalToRemote failed to creating remote directory %s: => %s", remoteDir, err.Error()) - return err - } - // 遍历本地目录中的文件和子目录并复制到远程 - err = filepath.Walk(localDir, func(localPath string, info os.FileInfo, err error) error { + err := filepath.Walk(localDir, func(localPath string, info os.FileInfo, err error) error { if err != nil { return err } // 生成远程路径 - remotePath := filepath.Join(remoteDir, localPath[len(localDir):]) + remotePath := filepath.ToSlash(filepath.Join(remoteDir, localPath[len(localDir):])) if info.IsDir() { // 如果是子目录,则创建远程目录 - err := s.Client.MkdirAll(remotePath) - if err != nil { + if err := s.Client.MkdirAll(remotePath); err != nil { logger.Errorf("CopyDirLocalToRemote failed to creating remote directory %s: => %s", remotePath, err.Error()) - return nil + return err } } else { // 如果是文件,则复制文件内容 - localFile, err := os.Open(localPath) - if err != nil { - logger.Errorf("CopyDirLocalToRemote failed to opening local file %s: => %s", localPath, err.Error()) - return nil - } - defer localFile.Close() - - remoteFile, err := s.Client.Create(remotePath) - if err != nil { - logger.Errorf("CopyDirLocalToRemote failed to creating remote file %s: => %s", remotePath, err.Error()) - return nil - } - defer remoteFile.Close() - - _, err = io.Copy(remoteFile, localFile) - if err != nil { - logger.Errorf("CopyDirLocalToRemote failed to copying file contents from %s to %s: => %s", localPath, remotePath, err.Error()) - return nil + if err := s.CopyFileLocalToRemote(localPath, remotePath); err != nil { + logger.Errorf("CopyFileLocalToRemote failed to opening local file %s: => %s", localPath, err.Error()) + return err } } @@ -140,8 +117,7 @@ func (s *SSHClientSFTP) CopyFileRemoteToLocal(remotePath, localPath string) erro defer localFile.Close() // 复制文件内容 - _, err = io.Copy(localFile, remoteFile) - if err != nil { + if _, err = io.Copy(localFile, remoteFile); err != nil { logger.Errorf("CopyFileRemoteToLocal failed to copying contents: => %s", err.Error()) return err } @@ -167,8 +143,7 @@ func (s *SSHClientSFTP) CopyFileLocalToRemote(localPath, remotePath string) erro defer remoteFile.Close() // 复制文件内容 - _, err = io.Copy(remoteFile, localFile) - if err != nil { + if _, err = io.Copy(remoteFile, localFile); err != nil { logger.Errorf("CopyFileLocalToRemote failed to copying contents: => %s", err.Error()) return err } From 68bbe3c750cfada1281e30dc81c0b717b829f6fb Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 24 Jul 2024 10:26:15 +0800 Subject: [PATCH 10/34] =?UTF-8?q?feat:=20=E7=BD=91=E5=85=83=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E8=AE=B0=E5=BD=95=E7=BB=93=E6=9E=84?= =?UTF-8?q?=E4=BD=93=E5=8F=98=E6=9B=B4/=E5=AF=BC=E5=85=A5=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E6=8E=A5=E5=8F=A3=E5=A3=B0=E6=98=8E=E5=88=B0=E8=B7=AF?= =?UTF-8?q?=E7=94=B1=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ne_config_backup.go | 81 +++++++++++++++++++ .../network_element/model/ne_config_backup.go | 3 +- .../network_element/network_element.go | 10 +++ .../repository/ne_config_backup.impl.go | 9 +-- 4 files changed, 93 insertions(+), 10 deletions(-) diff --git a/src/modules/network_element/controller/ne_config_backup.go b/src/modules/network_element/controller/ne_config_backup.go index ad12c8cb..f1acd7b1 100644 --- a/src/modules/network_element/controller/ne_config_backup.go +++ b/src/modules/network_element/controller/ne_config_backup.go @@ -1,19 +1,24 @@ package controller import ( + "path/filepath" "strings" "be.ems/src/framework/i18n" "be.ems/src/framework/utils/ctx" + "be.ems/src/framework/utils/file" "be.ems/src/framework/utils/parse" "be.ems/src/framework/vo/result" + "be.ems/src/modules/network_element/model" neService "be.ems/src/modules/network_element/service" "github.com/gin-gonic/gin" + "github.com/gin-gonic/gin/binding" ) // NewNeConfigBackup 实例化控制层 NeConfigBackupController 结构体 var NewNeConfigBackup = &NeConfigBackupController{ neConfigBackupService: neService.NewNeConfigBackupImpl, + neInfoService: neService.NewNeInfoImpl, } // 网元配置文件备份记录 @@ -22,6 +27,8 @@ var NewNeConfigBackup = &NeConfigBackupController{ type NeConfigBackupController struct { // 网元配置文件备份记录服务 neConfigBackupService neService.INeConfigBackup + // 网元信息服务 + neInfoService neService.INeInfo } // 网元配置文件备份记录列表 @@ -80,3 +87,77 @@ func (s *NeConfigBackupController) Remove(c *gin.Context) { msg := i18n.TTemplate(language, "app.common.deleteSuccess", map[string]any{"num": rows}) c.JSON(200, result.OkMsg(msg)) } + +// 网元配置文件备份导入 +// +// POST /import +func (s *NeConfigBackupController) Import(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var body struct { + NeType string `json:"neType" binding:"required"` + NeId string `json:"neId" binding:"required"` + Type string `json:"type" binding:"required,oneof=backup upload"` // 导入类型 + Path string `json:"path" binding:"required"` // 文件路径 + } + if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { + c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + if !strings.HasSuffix(body.Path, ".zip") { + c.JSON(200, result.ErrMsg("Only supports decompression of zip files")) + return + } + + // 查网元 + neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(body.NeType, body.NeId) + if neInfo.NeId != body.NeId || neInfo.IP == "" { + c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + // 将zip文件解压到本地后复制到网元端 + localFilePath := body.Path + if body.Type == "upload" { + localFilePath = file.ParseUploadFilePath(body.Path) + } + if err := s.neConfigBackupService.NeConfigLocalToNe(neInfo, localFilePath); err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + c.JSON(200, result.Ok(nil)) +} + +// 网元配置文件备份导出 +// +// POST /export +func (s *NeConfigBackupController) Export(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var body struct { + NeType string `json:"neType" binding:"required"` + NeId string `json:"neId" binding:"required"` + } + if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + // 查网元 + neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(body.NeType, body.NeId) + if neInfo.NeId != body.NeId || neInfo.IP == "" { + c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) + return + } + // 将网元文件备份到本地 + zipFilePath, err := s.neConfigBackupService.NeConfigNeToLocal(neInfo) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + // 新增备份记录 + item := model.NeConfigBackup{ + NeType: neInfo.NeType, + NeId: neInfo.NeId, + Name: filepath.Base(zipFilePath), + Path: zipFilePath, + } + s.neConfigBackupService.Insert(item) + c.FileAttachment(item.Path, item.Name) +} diff --git a/src/modules/network_element/model/ne_config_backup.go b/src/modules/network_element/model/ne_config_backup.go index e753f652..d8d57872 100644 --- a/src/modules/network_element/model/ne_config_backup.go +++ b/src/modules/network_element/model/ne_config_backup.go @@ -5,8 +5,7 @@ type NeConfigBackup struct { ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` NeType string `json:"neType" gorm:"ne_type"` // 网元类型 NeId string `json:"neId" gorm:"ne_id"` // 网元ID - Name string `json:"name" gorm:"name"` // 命名 - Version string `json:"version" gorm:"version"` // 网元版本 + Name string `json:"name" gorm:"name"` // 压缩包名称 Path string `json:"path" gorm:"path"` // 压缩包位置 Remark string `json:"remark" gorm:"remark"` // 备注 CreateBy string `json:"createBy" gorm:"create_by"` // 创建者 diff --git a/src/modules/network_element/network_element.go b/src/modules/network_element/network_element.go index 91b527c3..5a33ea0a 100644 --- a/src/modules/network_element/network_element.go +++ b/src/modules/network_element/network_element.go @@ -325,6 +325,16 @@ func Setup(router *gin.Engine) { middleware.PreAuthorize(nil), controller.NewNeConfigBackup.Remove, ) + neConfigBackupGroup.POST("/import", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfigBackup", collectlogs.BUSINESS_TYPE_IMPORT)), + controller.NewNeConfigBackup.Import, + ) + neConfigBackupGroup.POST("/export", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfigBackup", collectlogs.BUSINESS_TYPE_EXPORT)), + controller.NewNeConfigBackup.Export, + ) } } diff --git a/src/modules/network_element/repository/ne_config_backup.impl.go b/src/modules/network_element/repository/ne_config_backup.impl.go index c772da54..6a82d748 100644 --- a/src/modules/network_element/repository/ne_config_backup.impl.go +++ b/src/modules/network_element/repository/ne_config_backup.impl.go @@ -14,7 +14,7 @@ import ( // 实例化数据层 NewNeConfigBackupImpl 结构体 var NewNeConfigBackupImpl = &NeConfigBackupImpl{ selectSql: `select - id, ne_type, ne_id, name, version, path, remark, create_by, create_time, update_by, update_time + id, ne_type, ne_id, name, path, remark, create_by, create_time, update_by, update_time from ne_config_backup`, resultMap: map[string]string{ @@ -22,7 +22,6 @@ var NewNeConfigBackupImpl = &NeConfigBackupImpl{ "ne_type": "NeType", "ne_id": "NeId", "name": "Name", - "version": "Version", "path": "Path", "remark": "Remark", "create_by": "CreateBy", @@ -175,9 +174,6 @@ func (r *NeConfigBackupImpl) Insert(item model.NeConfigBackup) string { if item.Name != "" { params["name"] = item.Name } - if item.Version != "" { - params["version"] = item.Version - } if item.Path != "" { params["path"] = item.Path } @@ -229,9 +225,6 @@ func (r *NeConfigBackupImpl) Update(item model.NeConfigBackup) int64 { if item.Name != "" { params["name"] = item.Name } - if item.Version != "" { - params["version"] = item.Version - } if item.Path != "" { params["path"] = item.Path } From 7b39972f2c090cad204788772c4a1f50649db68e Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 24 Jul 2024 10:26:45 +0800 Subject: [PATCH 11/34] =?UTF-8?q?feat:=20=E7=BD=91=E5=85=83=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E5=A4=8D=E5=88=B6=E5=88=B0=E7=BD=91?= =?UTF-8?q?=E5=85=83=E7=AB=AF=E8=A6=86=E7=9B=96=E5=87=BD=E6=95=B0=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ne_config_backup.go | 7 ++- .../service/ne_config_backup.impl.go | 48 +++++++++++++++++-- 2 files changed, 49 insertions(+), 6 deletions(-) diff --git a/src/modules/network_element/service/ne_config_backup.go b/src/modules/network_element/service/ne_config_backup.go index 000f9ea3..3f8239f6 100644 --- a/src/modules/network_element/service/ne_config_backup.go +++ b/src/modules/network_element/service/ne_config_backup.go @@ -22,6 +22,9 @@ type INeConfigBackup interface { // DeleteByIds 批量删除信息 DeleteByIds(ids []string) (int64, error) - // NeConfigFileToLocal 网元备份文件到本地 - NeConfigFileToLocal(neInfo model.NeInfo) (string, error) + // NeConfigLocalToNe 网元配置文件复制到网元端覆盖 + NeConfigLocalToNe(neInfo model.NeInfo, localFile string) error + + // NeConfigNeToLocal 网元备份文件网元端复制到本地 + NeConfigNeToLocal(neInfo model.NeInfo) (string, error) } diff --git a/src/modules/network_element/service/ne_config_backup.impl.go b/src/modules/network_element/service/ne_config_backup.impl.go index 8426b9ea..e23d5142 100644 --- a/src/modules/network_element/service/ne_config_backup.impl.go +++ b/src/modules/network_element/service/ne_config_backup.impl.go @@ -72,8 +72,48 @@ func (r *NeConfigBackupImpl) DeleteByIds(ids []string) (int64, error) { return 0, fmt.Errorf("delete fail") } -// NeConfigFileToLocal 网元备份文件到本地 -func (r *NeConfigBackupImpl) NeConfigFileToLocal(neInfo model.NeInfo) (string, error) { +// NeConfigLocalToNe 网元配置文件复制到网元端覆盖 +func (r *NeConfigBackupImpl) NeConfigLocalToNe(neInfo model.NeInfo, localFile string) error { + neTypeLower := strings.ToLower(neInfo.NeType) + // 网管本地路径 + omcPath := "/usr/local/etc/omc/ne_config" + if runtime.GOOS == "windows" { + omcPath = fmt.Sprintf("C:%s", omcPath) + } + localDirPath := fmt.Sprintf("%s/%s/%s/backup/tmp_import", omcPath, neTypeLower, neInfo.NeId) + if err := file.UnZip(localFile, localDirPath); err != nil { + return fmt.Errorf("unzip err") + } + + // 网元主机的SSH客户端 + sshClient, err := NewNeInfoImpl.NeRunSSHClient(neInfo.NeType, neInfo.NeId) + if err != nil { + return fmt.Errorf("ne info ssh client err") + } + defer sshClient.Close() + // 网元主机的SSH客户端进行文件传输 + sftpClient, err := sshClient.NewClientSFTP() + if err != nil { + return fmt.Errorf("ne info sftp client err") + } + defer sftpClient.Close() + + // 网元配置端上的临时目录 + neDirTemp := fmt.Sprintf("/tmp/omc/ne_config/%s/%s", neTypeLower, neInfo.NeId) + sshClient.RunCMD(fmt.Sprintf("sudo rm -rf %s", neDirTemp)) + // 复制到网元端 + if err = sftpClient.CopyDirLocalToRemote(localDirPath, neDirTemp); err != nil { + return fmt.Errorf("copy config to ne err") + } + neEtcPath := fmt.Sprintf("/usr/local/etc/%s", neTypeLower) + sshClient.RunCMD(fmt.Sprintf("sudo cp -rf %s/* %s && sudo chmod 775 %s/*.yaml", neDirTemp, neEtcPath, neEtcPath)) + _ = os.RemoveAll(localDirPath) // 删除本地临时目录 + sshClient.RunCMD(fmt.Sprintf("sudo rm -rf %s", neDirTemp)) // 删除临时目录 + return nil +} + +// NeConfigNeToLocal 网元备份文件网元端复制到本地 +func (r *NeConfigBackupImpl) NeConfigNeToLocal(neInfo model.NeInfo) (string, error) { // 网元主机的SSH客户端 sshClient, err := NewNeInfoImpl.NeRunSSHClient(neInfo.NeType, neInfo.NeId) if err != nil { @@ -93,8 +133,8 @@ func (r *NeConfigBackupImpl) NeConfigFileToLocal(neInfo model.NeInfo) (string, e if runtime.GOOS == "windows" { omcPath = fmt.Sprintf("C:%s", omcPath) } - localDirPath := fmt.Sprintf("%s/%s/%s/backup/tmp", omcPath, neTypeLower, neInfo.NeId) - // 网元配置文件先复制到临时目录目录 + localDirPath := fmt.Sprintf("%s/%s/%s/backup/tmp_export", omcPath, neTypeLower, neInfo.NeId) + // 网元配置文件先复制到临时目录 nePath := fmt.Sprintf("/usr/local/etc/%s/*.yaml", neTypeLower) neDirTemp := fmt.Sprintf("/tmp/omc/ne_config/%s/%s", neTypeLower, neInfo.NeId) sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo cp -rf %s %s", neDirTemp, nePath, neDirTemp)) From e79ea30e52e20f8132cc163ac77b2c4737149bc1 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 24 Jul 2024 17:20:27 +0800 Subject: [PATCH 12/34] =?UTF-8?q?style:=20ssh=E6=96=87=E4=BB=B6=E6=93=8D?= =?UTF-8?q?=E4=BD=9Clog=E6=97=A5=E5=BF=97s=E8=BE=93=E5=87=BA=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/ssh/sftp.go | 10 ++++++++-- src/framework/utils/ssh/ssh.go | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/framework/utils/ssh/sftp.go b/src/framework/utils/ssh/sftp.go index 2fd826fc..f5c103f7 100644 --- a/src/framework/utils/ssh/sftp.go +++ b/src/framework/utils/ssh/sftp.go @@ -80,7 +80,7 @@ func (s *SSHClientSFTP) CopyDirLocalToRemote(localDir, remoteDir string) error { } else { // 如果是文件,则复制文件内容 if err := s.CopyFileLocalToRemote(localPath, remotePath); err != nil { - logger.Errorf("CopyFileLocalToRemote failed to opening local file %s: => %s", localPath, err.Error()) + logger.Errorf("CopyDirLocalToRemote failed to copying remote file %s: => %s", localPath, err.Error()) return err } } @@ -88,7 +88,7 @@ func (s *SSHClientSFTP) CopyDirLocalToRemote(localDir, remoteDir string) error { return nil }) if err != nil { - logger.Errorf("CopyDirLocalToRemote failed to walking local directory: => %s", err.Error()) + logger.Errorf("CopyDirLocalToRemote failed to walking remote directory: => %s", err.Error()) return err } return nil @@ -134,6 +134,12 @@ func (s *SSHClientSFTP) CopyFileLocalToRemote(localPath, remotePath string) erro } defer localFile.Close() + // 创建远程目录 + // if err := s.Client.MkdirAll(filepath.Dir(remotePath)); err != nil { + // logger.Errorf("CopyFileLocalToRemote failed to creating remote directory %s: => %s", remotePath, err.Error()) + // return err + // } + // 创建远程文件 remoteFile, err := s.Client.Create(remotePath) if err != nil { diff --git a/src/framework/utils/ssh/ssh.go b/src/framework/utils/ssh/ssh.go index 29a5fb70..d70991e7 100644 --- a/src/framework/utils/ssh/ssh.go +++ b/src/framework/utils/ssh/ssh.go @@ -100,6 +100,7 @@ func (c *ConnSSH) RunCMD(cmd string) (string, error) { defer session.Close() buf, err := session.CombinedOutput(cmd) if err != nil { + logger.Infof("RunCMD failed run command: => %s", cmd) logger.Errorf("RunCMD failed run command: => %s", err.Error()) } c.LastResult = string(buf) From e43ac65f8c204717ee547fc2113bea448202a9ee Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 24 Jul 2024 17:24:55 +0800 Subject: [PATCH 13/34] =?UTF-8?q?fix:=20zip=E8=A7=A3=E5=8E=8B=E5=86=85?= =?UTF-8?q?=E5=90=AB=E7=9B=AE=E5=BD=95=E6=96=87=E4=BB=B6=E8=BE=93=E5=87=BA?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E6=89=BE=E4=B8=8D=E5=88=B0=E7=9A=84=E5=BC=82?= =?UTF-8?q?=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/file/zip.go | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/framework/utils/file/zip.go b/src/framework/utils/file/zip.go index f5a3ec00..6ff7e955 100644 --- a/src/framework/utils/file/zip.go +++ b/src/framework/utils/file/zip.go @@ -32,20 +32,23 @@ func UnZip(zipFilePath, dirPath string) error { defer rc.Close() // 创建解压后的文件 - path := filepath.Join(dirPath, f.Name) + path := filepath.ToSlash(filepath.Join(dirPath, f.Name)) if f.FileInfo().IsDir() { // 如果是目录,创建目录 - os.MkdirAll(path, f.Mode()) + if err := os.MkdirAll(path, 0775); err != nil { + return err + } } else { - // 如果是文件,创建文件并写入内容 - file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode()) + if err = os.MkdirAll(filepath.Dir(path), 0775); err != nil { + return err + } + out, err := os.Create(path) if err != nil { return err } - defer file.Close() + defer out.Close() - _, err = io.Copy(file, rc) - if err != nil { + if _, err = io.Copy(out, rc); err != nil { return err } } From bb387708ccde443eb128471d2499003039511a29 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 24 Jul 2024 17:25:53 +0800 Subject: [PATCH 14/34] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E5=A4=87?= =?UTF-8?q?=E4=BB=BD=E6=96=87=E4=BB=B6=E6=94=AF=E6=8C=81=E5=A4=84=E7=90=86?= =?UTF-8?q?IMS=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ne_config_backup.go | 9 ++-- .../service/ne_config_backup.impl.go | 48 ++++++++++++++++--- 2 files changed, 47 insertions(+), 10 deletions(-) diff --git a/src/modules/network_element/controller/ne_config_backup.go b/src/modules/network_element/controller/ne_config_backup.go index f1acd7b1..772c8ac4 100644 --- a/src/modules/network_element/controller/ne_config_backup.go +++ b/src/modules/network_element/controller/ne_config_backup.go @@ -153,10 +153,11 @@ func (s *NeConfigBackupController) Export(c *gin.Context) { } // 新增备份记录 item := model.NeConfigBackup{ - NeType: neInfo.NeType, - NeId: neInfo.NeId, - Name: filepath.Base(zipFilePath), - Path: zipFilePath, + NeType: neInfo.NeType, + NeId: neInfo.NeId, + Name: filepath.Base(zipFilePath), + Path: zipFilePath, + CreateBy: ctx.LoginUserToUserName(c), } s.neConfigBackupService.Insert(item) c.FileAttachment(item.Path, item.Name) diff --git a/src/modules/network_element/service/ne_config_backup.impl.go b/src/modules/network_element/service/ne_config_backup.impl.go index e23d5142..bfb5f639 100644 --- a/src/modules/network_element/service/ne_config_backup.impl.go +++ b/src/modules/network_element/service/ne_config_backup.impl.go @@ -100,13 +100,30 @@ func (r *NeConfigBackupImpl) NeConfigLocalToNe(neInfo model.NeInfo, localFile st // 网元配置端上的临时目录 neDirTemp := fmt.Sprintf("/tmp/omc/ne_config/%s/%s", neTypeLower, neInfo.NeId) - sshClient.RunCMD(fmt.Sprintf("sudo rm -rf %s", neDirTemp)) + sshClient.RunCMD(fmt.Sprintf("mkdir -p /tmp/omc && sudo chmod 777 -R /tmp/omc && sudo rm -rf %s", neDirTemp)) // 复制到网元端 if err = sftpClient.CopyDirLocalToRemote(localDirPath, neDirTemp); err != nil { return fmt.Errorf("copy config to ne err") } - neEtcPath := fmt.Sprintf("/usr/local/etc/%s", neTypeLower) - sshClient.RunCMD(fmt.Sprintf("sudo cp -rf %s/* %s && sudo chmod 775 %s/*.yaml", neDirTemp, neEtcPath, neEtcPath)) + + // 配置复制到网元内 + if neTypeLower == "ims" { + // ims目录 + imsDirArr := [...]string{"bgcf", "icscf", "ismc", "mmtel", "mrf", "oam_manager.yaml", "pcscf", "scscf", "vars.cfg", "zlog"} + for _, v := range imsDirArr { + sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p /usr/local/etc/ims && sudo cp -rf %s/ims/%s /usr/local/etc/ims/%v && sudo chmod 755 -R /usr/local/etc/ims/%s", neDirTemp, v, v, v)) + } + // mf目录 + sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p /usr/local/etc/mf && sudo cp -rf %s/mf/* /usr/local/etc/mf && sudo chmod 755 -R /usr/local/etc/mf", neDirTemp)) + // rtproxy目录 + sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p /usr/local/etc/rtproxy && sudo cp -rf %s/rtproxy/* /usr/local/etc/rtproxy && sudo chmod 755 /usr/local/etc/rtproxy/rtproxy.conf", neDirTemp)) + // iwf目录 + 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 { + neEtcPath := fmt.Sprintf("/usr/local/etc/%s", neTypeLower) + sshClient.RunCMD(fmt.Sprintf("sudo cp -rf %s/* %s && sudo chmod 755 %s/*.yaml", neDirTemp, neEtcPath, neEtcPath)) + } + _ = os.RemoveAll(localDirPath) // 删除本地临时目录 sshClient.RunCMD(fmt.Sprintf("sudo rm -rf %s", neDirTemp)) // 删除临时目录 return nil @@ -134,11 +151,29 @@ func (r *NeConfigBackupImpl) NeConfigNeToLocal(neInfo model.NeInfo) (string, err omcPath = fmt.Sprintf("C:%s", omcPath) } localDirPath := fmt.Sprintf("%s/%s/%s/backup/tmp_export", omcPath, neTypeLower, neInfo.NeId) + // 网元配置文件先复制到临时目录 - nePath := fmt.Sprintf("/usr/local/etc/%s/*.yaml", neTypeLower) + sshClient.RunCMD("mkdir -p /tmp/omc && sudo chmod 777 -R /tmp/omc") neDirTemp := fmt.Sprintf("/tmp/omc/ne_config/%s/%s", neTypeLower, neInfo.NeId) - sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo cp -rf %s %s", neDirTemp, nePath, neDirTemp)) - // 复制到本地 + if neTypeLower == "ims" { + // ims目录 + sshClient.RunCMD(fmt.Sprintf("mkdir -p %s/ims", neDirTemp)) + imsDirArr := [...]string{"bgcf", "icscf", "ismc", "mmtel", "mrf", "oam_manager.yaml", "pcscf", "scscf", "vars.cfg", "zlog"} + for _, v := range imsDirArr { + sshClient.RunCMD(fmt.Sprintf("sudo cp -rf /usr/local/etc/ims/%s %s/ims", v, neDirTemp)) + } + // mf目录 + sshClient.RunCMD(fmt.Sprintf("mkdir -p %s/mf && sudo cp -rf /usr/local/etc/mf %s", neDirTemp, neDirTemp)) + // rtproxy目录 + sshClient.RunCMD(fmt.Sprintf("mkdir -p %s/rtproxy && sudo cp -rf /usr/local/etc/rtproxy/rtproxy.conf %s/rtproxy", neDirTemp, neDirTemp)) + // iwf目录 + sshClient.RunCMD(fmt.Sprintf("mkdir -p %s/iwf && sudo cp -rf /usr/local/etc/iwf/*.yaml %s/iwf", neDirTemp, neDirTemp)) + } else { + nePath := fmt.Sprintf("/usr/local/etc/%s/*.yaml", neTypeLower) + sshClient.RunCMD(fmt.Sprintf("mkdir -p %s && sudo cp -rf %s %s", neDirTemp, nePath, neDirTemp)) + } + + // 网元端复制到本地 if err = sftpClient.CopyDirRemoteToLocal(neDirTemp, localDirPath); err != nil { return "", fmt.Errorf("copy config err") } @@ -149,6 +184,7 @@ func (r *NeConfigBackupImpl) NeConfigNeToLocal(neInfo model.NeInfo) (string, err if err := file.CompressZipByDir(zipFilePath, localDirPath); err != nil { return "", fmt.Errorf("compress zip err") } + _ = os.RemoveAll(localDirPath) // 删除本地临时目录 sshClient.RunCMD(fmt.Sprintf("sudo rm -rf %s", neDirTemp)) // 删除临时目录 return zipFilePath, nil From 1dc1e833a3c126de496e79ac169241a6a07bd8fb Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 24 Jul 2024 18:11:47 +0800 Subject: [PATCH 15/34] =?UTF-8?q?sql:=20=E5=AF=B9=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E6=89=8B=E5=86=8C/=E5=AE=98=E7=BD=91=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E7=BA=A7=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/sys_dict_data1_i18n_zh.sql | 3 +++ database/install/sys_dict_data2_i18n_en.sql | 3 +++ database/install/sys_menu.sql | 3 +++ database/install/sys_role_menu.sql | 9 +++++++++ database/upgrade/upg_sys_dict_data1_i18n_zh.sql | 3 +++ database/upgrade/upg_sys_dict_data2_i18n_en.sql | 3 +++ database/upgrade/upg_sys_menu.sql | 3 +++ database/upgrade/upg_sys_role_menu.sql | 9 +++++++++ 8 files changed, 36 insertions(+) diff --git a/database/install/sys_dict_data1_i18n_zh.sql b/database/install/sys_dict_data1_i18n_zh.sql index b39a72c7..e1cb8506 100644 --- a/database/install/sys_dict_data1_i18n_zh.sql +++ b/database/install/sys_dict_data1_i18n_zh.sql @@ -658,5 +658,8 @@ INSERT INTO `sys_dict_data` VALUES (2147, 2147, 'dictData.udm_sub_cn_type.0', 'N INSERT INTO `sys_dict_data` VALUES (2148, 2148, 'dictData.udm_sub_cn_type.1', '5G', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2149, 2149, 'dictData.udm_sub_cn_type.2', '4G', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2150, 2150, 'dictData.udm_sub_cn_type.3', '5G&4G', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2151, 2151, 'menu.system.setting.doc', '系统使用文档', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2152, 2152, 'menu.system.setting.official', '官网链接', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2153, 2153, 'menu.system.setting.lock', '锁屏操作', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/sys_dict_data2_i18n_en.sql b/database/install/sys_dict_data2_i18n_en.sql index 5ae58a64..14f34af0 100644 --- a/database/install/sys_dict_data2_i18n_en.sql +++ b/database/install/sys_dict_data2_i18n_en.sql @@ -658,5 +658,8 @@ INSERT INTO `sys_dict_data` VALUES (4147, 4147, 'dictData.udm_sub_cn_type.0', 'N INSERT INTO `sys_dict_data` VALUES (4148, 4148, 'dictData.udm_sub_cn_type.1', '5G', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4149, 4149, 'dictData.udm_sub_cn_type.2', '4G', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4150, 4150, 'dictData.udm_sub_cn_type.3', '5G&4G', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4151, 4151, 'menu.system.setting.doc', 'System User Documentation', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4152, 4152, 'menu.system.setting.official', 'Official Website', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4153, 4153, 'menu.system.setting.lock', 'Lockscreen Operation', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/sys_menu.sql b/database/install/sys_menu.sql index 8811dc0a..0ffdb538 100644 --- a/database/install/sys_menu.sql +++ b/database/install/sys_menu.sql @@ -189,5 +189,8 @@ INSERT INTO `sys_menu` VALUES (2147, 'menu.fault.event', 2129, 3, 'event', 'faul INSERT INTO `sys_menu` VALUES (2148, 'menu.dashboard.smfCDR', 2140, 40, 'smfCDR', 'dashboard/smfCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1712751038982, ''); INSERT INTO `sys_menu` VALUES (2149, 'menu.dashboard.mmeUE', 2141, 5, 'mmeUE', 'dashboard/mmeUE/index', '1', '0', 'M', '1', '1', 'dashboard:mmeUE:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1711354049893, ''); INSERT INTO `sys_menu` VALUES (2150, 'menu.system.user.editPost', 100, 9, '', '', '1', '1', 'B', '1', '1', 'system:user:editPost', '#', 'supervisor', 1700000000000, '', 0, ''); +INSERT INTO `sys_menu` VALUES (2151, 'menu.system.setting.doc', 2114, 2, NULL, NULL, '1', '1', 'B', '1', '1', 'system:setting:doc', '#', 'supervisor', 1700000000000, 'supervisor', 1700000000000, ''); +INSERT INTO `sys_menu` VALUES (2152, 'menu.system.setting.official', 2114, 3, NULL, NULL, '1', '1', 'B', '1', '1', 'system:setting:official', '#', 'supervisor', 1700000000000, 'supervisor', 1700000000000, ''); +INSERT INTO `sys_menu` VALUES (2153, 'menu.system.setting.lock', 2114, 4, NULL, NULL, '1', '1', 'B', '1', '1', 'system:setting:lock', '#', 'supervisor', 1700000000000, 'supervisor', 1700000000000, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/sys_role_menu.sql b/database/install/sys_role_menu.sql index 287fe94d..3caf0d38 100644 --- a/database/install/sys_role_menu.sql +++ b/database/install/sys_role_menu.sql @@ -139,6 +139,9 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2147); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2148); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2149); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2150); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2151); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2152); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2153); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 4); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 5); @@ -207,6 +210,9 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2143); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2147); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2148); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2149); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2151); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2152); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2153); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 5); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 112); @@ -255,6 +261,9 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2141); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2147); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2148); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2149); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2151); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2152); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2153); INSERT IGNORE INTO `sys_role_menu` VALUES (5, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (5, 5); INSERT IGNORE INTO `sys_role_menu` VALUES (5, 112); diff --git a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql index fe07d580..a9060bd8 100644 --- a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql +++ b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql @@ -665,5 +665,8 @@ REPLACE INTO `sys_dict_data` VALUES (2147, 2147, 'dictData.udm_sub_cn_type.0', ' REPLACE INTO `sys_dict_data` VALUES (2148, 2148, 'dictData.udm_sub_cn_type.1', '5G', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2149, 2149, 'dictData.udm_sub_cn_type.2', '4G', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2150, 2150, 'dictData.udm_sub_cn_type.3', '5G&4G', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2151, 2151, 'menu.system.setting.doc', '系统使用文档', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2152, 2152, 'menu.system.setting.official', '官网链接', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2153, 2153, 'menu.system.setting.lock', '锁屏操作', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_dict_data2_i18n_en.sql b/database/upgrade/upg_sys_dict_data2_i18n_en.sql index 8d19216b..d4824a5b 100644 --- a/database/upgrade/upg_sys_dict_data2_i18n_en.sql +++ b/database/upgrade/upg_sys_dict_data2_i18n_en.sql @@ -660,5 +660,8 @@ REPLACE INTO `sys_dict_data` VALUES (4147, 4147, 'dictData.udm_sub_cn_type.0', ' REPLACE INTO `sys_dict_data` VALUES (4148, 4148, 'dictData.udm_sub_cn_type.1', '5G', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4149, 4149, 'dictData.udm_sub_cn_type.2', '4G', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4150, 4150, 'dictData.udm_sub_cn_type.3', '5G&4G', 'i18n_en', '', '', '1', 'supervisor', 1718441035866, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4151, 4151, 'menu.system.setting.doc', 'System User Documentation', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4152, 4152, 'menu.system.setting.official', 'Official Website', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4153, 4153, 'menu.system.setting.lock', 'Lockscreen Operation', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_menu.sql b/database/upgrade/upg_sys_menu.sql index 30ca9351..3ec6e85d 100644 --- a/database/upgrade/upg_sys_menu.sql +++ b/database/upgrade/upg_sys_menu.sql @@ -172,6 +172,9 @@ INSERT IGNORE INTO `sys_menu` VALUES (2147, 'menu.fault.event', 2129, 3, 'event' INSERT IGNORE INTO `sys_menu` VALUES (2148, 'menu.dashboard.smfCDR', 2140, 40, 'smfCDR', 'dashboard/smfCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1712751038982, ''); INSERT IGNORE INTO `sys_menu` VALUES (2149, 'menu.dashboard.mmeUE', 2141, 5, 'mmeUE', 'dashboard/mmeUE/index', '1', '0', 'M', '1', '1', 'dashboard:mmeUE:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1711354049893, ''); INSERT IGNORE INTO `sys_menu` VALUES (2150, 'menu.system.user.editPost', 100, 9, '', '', '1', '1', 'B', '1', '1', 'system:user:editPost', '#', 'supervisor', 1700000000000, '', 0, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2151, 'menu.system.setting.doc', 2114, 2, NULL, NULL, '1', '1', 'B', '1', '1', 'system:setting:doc', '#', 'supervisor', 1700000000000, 'supervisor', 1700000000000, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2152, 'menu.system.setting.official', 2114, 3, NULL, NULL, '1', '1', 'B', '1', '1', 'system:setting:official', '#', 'supervisor', 1700000000000, 'supervisor', 1700000000000, ''); +INSERT IGNORE INTO `sys_menu` VALUES (2153, 'menu.system.setting.lock', 2114, 4, NULL, NULL, '1', '1', 'B', '1', '1', 'system:setting:lock', '#', 'supervisor', 1700000000000, 'supervisor', 1700000000000, ''); -- 指定记录条件更新 diff --git a/database/upgrade/upg_sys_role_menu.sql b/database/upgrade/upg_sys_role_menu.sql index b60e53a8..3683123b 100644 --- a/database/upgrade/upg_sys_role_menu.sql +++ b/database/upgrade/upg_sys_role_menu.sql @@ -151,6 +151,9 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2147); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2148); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2149); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2150); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2151); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2152); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2153); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 4); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 5); @@ -219,6 +222,9 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2143); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2147); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2148); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2149); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2151); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2152); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2153); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 5); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 112); @@ -267,6 +273,9 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2141); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2147); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2148); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2149); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2151); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2152); +INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2153); INSERT IGNORE INTO `sys_role_menu` VALUES (5, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (5, 5); INSERT IGNORE INTO `sys_role_menu` VALUES (5, 112); From 4ceb871c232b42610daa988ad94e6346e5d2fde8 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 25 Jul 2024 11:14:10 +0800 Subject: [PATCH 16/34] =?UTF-8?q?fix:=20IMS=20CDR=20RecordType=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E8=AF=AD=E6=B3=95=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/network_data/model/cdr_event_smf.go | 9 --------- .../network_data/repository/cdr_event_ims.impl.go | 15 +++++++++++++-- .../network_data/repository/cdr_event_smf.impl.go | 15 --------------- 3 files changed, 13 insertions(+), 26 deletions(-) diff --git a/src/modules/network_data/model/cdr_event_smf.go b/src/modules/network_data/model/cdr_event_smf.go index 259c1025..c076da16 100644 --- a/src/modules/network_data/model/cdr_event_smf.go +++ b/src/modules/network_data/model/cdr_event_smf.go @@ -13,15 +13,6 @@ type CDREventSMF struct { CreatedAt time.Time `json:"createdAt" gorm:"column:created_at;default:CURRENT_TIMESTAMP"` // ====== 非数据库字段属性 ====== - - // RecordType string `json:"recordType" gorm:"column:record_type"` - // ChargingID string `json:"chargingID" gorm:"column:charging_id"` - // SubscriberID string `json:"subscriberID" gorm:"column:subscriber_id"` - // Duration string `json:"duration" gorm:"column:duration"` - // DataVolumeUplink string `json:"dataVolumeUplink" gorm:"column:data_volume_uplink"` - // DataVolumeDownlink string `json:"dataVolumeDownlink" gorm:"column:data_volume_downlink"` - // DataTotalVolume string `json:"dataTotalVolume" gorm:"column:data_total_volume"` - // PDUAddress string `json:"pduAddress" gorm:"column:pdu_address"` } // CDREventSMFQuery CDR会话对象SMF查询参数结构体 diff --git a/src/modules/network_data/repository/cdr_event_ims.impl.go b/src/modules/network_data/repository/cdr_event_ims.impl.go index 8ab83dda..6d67b6ca 100644 --- a/src/modules/network_data/repository/cdr_event_ims.impl.go +++ b/src/modules/network_data/repository/cdr_event_ims.impl.go @@ -84,13 +84,24 @@ func (r *CDREventIMSImpl) SelectPage(querys model.CDREventIMSQuery) map[string]a conditions = append(conditions, "JSON_EXTRACT(cdr_json, '$.calledParty') = ?") params = append(params, querys.CalledParty) } + // MySQL8支持的 + // if querys.RecordType != "" { + // recordTypes := strings.Split(querys.RecordType, ",") + // placeholder := repo.KeyPlaceholderByQuery(len(recordTypes)) + // conditions = append(conditions, fmt.Sprintf("JSON_EXTRACT(cdr_json, '$.recordType') in (%s)", placeholder)) + // for _, recordType := range recordTypes { + // params = append(params, recordType) + // } + // } + // Mariadb不支持json in查询改or if querys.RecordType != "" { recordTypes := strings.Split(querys.RecordType, ",") - placeholder := repo.KeyPlaceholderByQuery(len(recordTypes)) - conditions = append(conditions, fmt.Sprintf("JSON_EXTRACT(cdr_json, '$.recordType') in (%s)", placeholder)) + var queryStrArr []string for _, recordType := range recordTypes { + queryStrArr = append(queryStrArr, "JSON_EXTRACT(cdr_json, '$.recordType') = ?") params = append(params, recordType) } + conditions = append(conditions, fmt.Sprintf("( %s )", strings.Join(queryStrArr, " OR "))) } // 构建查询条件语句 diff --git a/src/modules/network_data/repository/cdr_event_smf.impl.go b/src/modules/network_data/repository/cdr_event_smf.impl.go index 818f1f25..97c98aa7 100644 --- a/src/modules/network_data/repository/cdr_event_smf.impl.go +++ b/src/modules/network_data/repository/cdr_event_smf.impl.go @@ -14,7 +14,6 @@ import ( // 实例化数据层 CDREventSMFImpl 结构体 var NewCDREventSMFImpl = &CDREventSMFImpl{ selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, cdr_json, created_at from cdr_event_smf`, - // selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, JSON_EXTRACT(cdr_json, '$.recordType') AS record_type, JSON_EXTRACT(cdr_json, '$.chargingID') AS charging_id, JSON_EXTRACT(cdr_json, '$.subscriberIdentifier.subscriptionIDData') AS subscriber_id, JSON_EXTRACT(cdr_json, '$.duration') AS duration, JSON_EXTRACT(cdr_json, '$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataVolumeUplink') AS data_volume_uplink, JSON_EXTRACT(cdr_json, '$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataVolumeDownlink') AS data_volume_downlink, JSON_EXTRACT(cdr_json, '$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataTotalVolume') AS data_total_volume, JSON_EXTRACT(cdr_json, '$.pDUSessionChargingInformation.pDUAddress') AS pdu_address, created_at from cdr_event_smf`, resultMap: map[string]string{ "id": "ID", @@ -24,20 +23,6 @@ var NewCDREventSMFImpl = &CDREventSMFImpl{ "timestamp": "Timestamp", "cdr_json": "CDRJSONStr", "created_at": "CreatedAt", - // "id": "ID", - // "ne_type": "NeType", - // "ne_name": "NeName", - // "rm_uid": "RmUID", - // "timestamp": "Timestamp", - // "record_type": "RecordType", - // "charging_id": "ChargingID", - // "subscriber_id": "SubscriberID", - // "duration": "Duration", - // "data_volume_uplink": "DataVolumeUplink", - // "data_volume_downlink": "DataVolumeDownlink", - // "data_total_volume": "DataTotalVolume", - // "pdu_address": "PDUAddress", - // "created_at": "CreatedAt", }, } From 7c982cf9e2792f4b46bec8e1b15c67e4ca473caf Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 25 Jul 2024 12:04:04 +0800 Subject: [PATCH 17/34] =?UTF-8?q?fix:=20=E6=9F=A5=E8=AF=A2UPF=E6=80=BB?= =?UTF-8?q?=E6=B5=81=E9=87=8F=E6=97=B6=E9=97=B4=E6=94=B9=E4=B8=BA=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E6=88=B3=E9=81=BF=E5=85=8D=E6=97=B6=E9=97=B4=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E6=97=B6=E5=8C=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_data/repository/perf_kpi.go | 3 -- .../network_data/repository/perf_kpi.impl.go | 51 ++++--------------- .../network_data/service/perf_kpi.impl.go | 19 ++++--- 3 files changed, 20 insertions(+), 53 deletions(-) diff --git a/src/modules/network_data/repository/perf_kpi.go b/src/modules/network_data/repository/perf_kpi.go index 065d7842..d2674155 100644 --- a/src/modules/network_data/repository/perf_kpi.go +++ b/src/modules/network_data/repository/perf_kpi.go @@ -15,7 +15,4 @@ type IPerfKPI interface { // SelectUPFTotalFlow 查询UPF总流量 N3上行 N6下行 SelectUPFTotalFlow(neType, rmUID, startDate, endDate string) map[string]any - - // select upf throughput from new kpi_report - SelectUPFThroughput(neType, rmUID, startDate, endDate string) map[string]any } diff --git a/src/modules/network_data/repository/perf_kpi.impl.go b/src/modules/network_data/repository/perf_kpi.impl.go index 94e2aa20..80908098 100644 --- a/src/modules/network_data/repository/perf_kpi.impl.go +++ b/src/modules/network_data/repository/perf_kpi.impl.go @@ -204,19 +204,19 @@ func (r *PerfKPIImpl) SelectUPFTotalFlow(neType, rmUID, startDate, endDate strin var conditions []string var params []any if neType != "" { - conditions = append(conditions, "gk.ne_type = ?") + conditions = append(conditions, "kupf.ne_type = ?") params = append(params, neType) } if rmUID != "" { - conditions = append(conditions, "gk.rm_uid = ?") + conditions = append(conditions, "kupf.rm_uid = ?") params = append(params, rmUID) } if startDate != "" { - conditions = append(conditions, "gk.date >= ?") + conditions = append(conditions, "kupf.created_at >= ?") params = append(params, startDate) } if endDate != "" { - conditions = append(conditions, "gk.date <= ?") + conditions = append(conditions, "kupf.created_at <= ?") params = append(params, endDate) } // 构建查询条件语句 @@ -226,44 +226,11 @@ func (r *PerfKPIImpl) SelectUPFTotalFlow(neType, rmUID, startDate, endDate strin } // 查询数据 - querySql := fmt.Sprintf("SELECT sum( CASE WHEN gk.kpi_id = 'UPF.03' THEN gk.VALUE ELSE 0 END ) AS 'up', sum( CASE WHEN gk.kpi_id = 'UPF.06' THEN gk.VALUE ELSE 0 END ) AS 'down' FROM gold_kpi gk %s", whereSql) - results, err := datasource.RawDB("", querySql, params) - if err != nil { - logger.Errorf("query err => %v", err) - } - return results[0] -} - -// SelectUPFTotalFlow 查询UPF总流量 N3上行 N6下行 -func (r *PerfKPIImpl) SelectUPFThroughput(neType, rmUID, startDate, endDate string) map[string]any { - // 查询条件拼接 - var conditions []string - var params []any - if neType != "" { - conditions = append(conditions, "gk.ne_type = ?") - params = append(params, neType) - } - if rmUID != "" { - conditions = append(conditions, "gk.rm_uid = ?") - params = append(params, rmUID) - } - if startDate != "" { - conditions = append(conditions, "gk.date >= ?") - params = append(params, startDate) - } - if endDate != "" { - conditions = append(conditions, "gk.date <= ?") - params = append(params, endDate) - } - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - // 查询数据 - querySql := fmt.Sprintf("SELECT sum( CASE WHEN JSON_EXTRACT(gk.kpi_values, '$[2].kpi_id') = 'UPF.03' THEN JSON_EXTRACT(gk.kpi_values, '$[2].value') ELSE 0 END ) AS 'up', sum( CASE WHEN JSON_EXTRACT(gk.kpi_values, '$[5].kpi_id') = 'UPF.06' THEN JSON_EXTRACT(gk.kpi_values, '$[5].value') ELSE 0 END ) AS 'down' FROM kpi_report_upf gk %s", whereSql) - results, err := datasource.RawDB("", querySql, params) + querySql := `SELECT + sum( CASE WHEN JSON_EXTRACT(kupf.kpi_values, '$[2].kpi_id') = 'UPF.03' THEN JSON_EXTRACT(kupf.kpi_values, '$[2].value') ELSE 0 END ) AS 'up', + sum( CASE WHEN JSON_EXTRACT(kupf.kpi_values, '$[5].kpi_id') = 'UPF.06' THEN JSON_EXTRACT(kupf.kpi_values, '$[5].value') ELSE 0 END ) AS 'down' + FROM kpi_report_upf kupf` + results, err := datasource.RawDB("", querySql+whereSql, params) if err != nil { logger.Errorf("query err => %v", err) } diff --git a/src/modules/network_data/service/perf_kpi.impl.go b/src/modules/network_data/service/perf_kpi.impl.go index 1376c17b..da234fab 100644 --- a/src/modules/network_data/service/perf_kpi.impl.go +++ b/src/modules/network_data/service/perf_kpi.impl.go @@ -46,12 +46,11 @@ func (r *PerfKPIImpl) SelectGoldKPITitle(neType string) []model.GoldKPITitle { // SelectUPFTotalFlow 查询UPF总流量 N3上行 N6下行 func (r *PerfKPIImpl) SelectUPFTotalFlow(neType, rmUID string, day int) map[string]any { - // 获取当前日期 now := time.Now() - endDate := now.Format("2006-01-02") + // 获取当前日期 + endDate := fmt.Sprint(now.UnixMilli()) // 将当前日期前几天数 - afterDays := now.AddDate(0, 0, -day) - startDate := afterDays.Format("2006-01-02") + startDate := fmt.Sprint(now.AddDate(0, 0, -day).Truncate(24 * time.Hour).UnixMilli()) var info map[string]any @@ -61,14 +60,18 @@ func (r *PerfKPIImpl) SelectUPFTotalFlow(neType, rmUID string, day int) map[stri if infoStr != "" { json.Unmarshal([]byte(infoStr), &info) expireSecond, _ := redis.GetExpire("", key) - expireMinute := (time.Duration(int64(expireSecond)) * time.Second) - if expireMinute > 2*time.Minute { + if expireSecond > 120 { return info } } - //info = r.perfKPIRepository.SelectUPFTotalFlow(neType, rmUID, startDate, endDate) - info = r.perfKPIRepository.SelectUPFThroughput(neType, rmUID, startDate, endDate) + info = r.perfKPIRepository.SelectUPFTotalFlow(neType, rmUID, startDate, endDate) + if v, ok := info["up"]; ok && v == nil { + info["up"] = 0 + } + if v, ok := info["down"]; ok && v == nil { + info["down"] = 0 + } // 保存到缓存 infoJSON, _ := json.Marshal(info) From 286e40a4e958a36bd49f8f9fb454584b055a1ec6 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 25 Jul 2024 18:22:13 +0800 Subject: [PATCH 18/34] =?UTF-8?q?fix:=20KPI=E4=B8=8A=E6=8A=A5=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E5=88=B0=E5=AF=B9=E5=BA=94=E7=BD=91=E5=85=83=EF=BC=8C?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=94=B9=E7=94=A8=E6=97=B6=E9=97=B4=E6=88=B3?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E6=97=B6=E5=8C=BA=E8=BD=AC=E6=8D=A2=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/pm/performance.go | 43 ++++--- .../network_data/controller/all_kpi.go | 13 -- src/modules/network_data/model/perf_kpi.go | 2 +- .../network_data/repository/perf_kpi.go | 3 - .../network_data/repository/perf_kpi.impl.go | 119 +----------------- .../network_data/service/perf_kpi.impl.go | 3 +- src/modules/ws/service/ws_send.impl.go | 8 +- 7 files changed, 35 insertions(+), 156 deletions(-) diff --git a/features/pm/performance.go b/features/pm/performance.go index d717e791..1613e3f6 100644 --- a/features/pm/performance.go +++ b/features/pm/performance.go @@ -2,7 +2,6 @@ package pm import ( "encoding/json" - "errors" "fmt" "io" "math" @@ -16,12 +15,13 @@ import ( "be.ems/lib/log" "be.ems/lib/services" "be.ems/restagent/config" - "xorm.io/xorm" + neService "be.ems/src/modules/network_element/service" wsService "be.ems/src/modules/ws/service" "github.com/go-resty/resty/v2" _ "github.com/go-sql-driver/mysql" "github.com/gorilla/mux" + "xorm.io/xorm" ) type Response struct { @@ -226,14 +226,6 @@ func PostKPIReportFromNF(w http.ResponseWriter, r *http.Request) { granularity = int8(seconds) } - // 黄金指标事件对象 - kpiEvent := map[string]any{ - // kip_id ... - "neType": kpiReport.Task.NE.NeType, - "neName": kpiReport.Task.NE.NEName, - "startIndex": kpiIndex, - "timeGroup": startTime, - } // insert into new kpi_report_xxx table kpiData := new(KpiData) kpiData.Date = startTime @@ -248,6 +240,15 @@ func PostKPIReportFromNF(w http.ResponseWriter, r *http.Request) { kpiData.RmUid = kpiReport.Task.NE.RmUID kpiVal := new(KPIVal) kpiData.CreatedAt = time.Now().UnixMilli() + + // 黄金指标事件对象 + kpiEvent := map[string]any{ + // kip_id ... + "neType": kpiReport.Task.NE.NeType, + "neName": kpiReport.Task.NE.NEName, + "startIndex": kpiIndex, + "timeGroup": kpiData.CreatedAt, + } for _, k := range kpiReport.Task.NE.KPIs { kpiEvent[k.KPIID] = k.Value // kip_id @@ -266,15 +267,20 @@ func PostKPIReportFromNF(w http.ResponseWriter, r *http.Request) { return } - // 推送到ws订阅组 - wsService.NewWSSendImpl.ByGroupID(wsService.GROUP_KPI, kpiEvent) - if kpiReport.Task.NE.NeType == "UPF" { - wsService.NewWSSendImpl.ByGroupID(wsService.GROUP_KPI_UPF, kpiEvent) + // 发送到匹配的网元 + neInfo := neService.NewNeInfoImpl.SelectNeInfoByRmuid(kpiData.RmUid) + if neInfo.RmUID == kpiData.RmUid { + // 推送到ws订阅组 + wsService.NewWSSendImpl.ByGroupID(fmt.Sprintf("%s%s_%s", wsService.GROUP_KPI, neInfo.NeType, neInfo.NeId), kpiEvent) + if neInfo.NeType == "UPF" { + wsService.NewWSSendImpl.ByGroupID(wsService.GROUP_KPI_UPF+neInfo.NeId, kpiEvent) + } } services.ResponseStatusOK204NoContent(w) } +// PostGoldKPIFromNF 已废弃 // post kpi report from NEs, insert insto gold_kpi table, discard... func PostGoldKPIFromNF(w http.ResponseWriter, r *http.Request) { log.Debug("PostKPIReportFromNF processing... ") @@ -639,7 +645,7 @@ func PostMeasureTaskToNF(w http.ResponseWriter, r *http.Request) { return } if neInfo == nil { - err := errors.New(fmt.Sprintf("not found target NE neType=%s, neId=%s", neType, neId)) + err := fmt.Errorf("not found target NE neType=%s, neId=%s", neType, neId) log.Error(err) services.ResponseInternalServerError500ProcessError(w, err) return @@ -692,7 +698,7 @@ func PostMeasureTaskToNF(w http.ResponseWriter, r *http.Request) { return } default: - err = errors.New(fmt.Sprintf("measure task status must be inactive id=%d", id)) + err = fmt.Errorf("measure task status must be inactive id=%d", id) log.Error("Unable to active measure task:", err) services.ResponseInternalServerError500ProcessError(w, err) return @@ -719,7 +725,7 @@ func PostMeasureTaskToNF(w http.ResponseWriter, r *http.Request) { services.TransportResponse(w, response.StatusCode(), response.Body()) return } else { - err = errors.New(fmt.Sprintf("failed to active measure task, NF return error status=%v", response.Status())) + err = fmt.Errorf("failed to active measure task, NF return error status=%v", response.Status()) log.Error("Unable to active measure task:", err) services.ResponseInternalServerError500ProcessError(w, err) return @@ -932,8 +938,6 @@ func PatchMeasureTaskToNF(w http.ResponseWriter, r *http.Request) { return } if neInfo == nil { - em := errors.New("Not found NE info in database") - log.Error(em) taskInfo := new(dborm.MeasureTask) taskInfo.Status = dborm.MeasureTaskStatusInactive affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo) @@ -986,7 +990,6 @@ func PatchMeasureTaskToNF(w http.ResponseWriter, r *http.Request) { } services.ResponseWithJson(w, response.StatusCode(), respMsg) - return } type Measurement struct { diff --git a/src/modules/network_data/controller/all_kpi.go b/src/modules/network_data/controller/all_kpi.go index 6131c122..221eb655 100644 --- a/src/modules/network_data/controller/all_kpi.go +++ b/src/modules/network_data/controller/all_kpi.go @@ -3,7 +3,6 @@ package controller import ( "be.ems/src/framework/i18n" "be.ems/src/framework/utils/ctx" - "be.ems/src/framework/utils/date" "be.ems/src/framework/vo/result" "be.ems/src/modules/network_data/model" neDataService "be.ems/src/modules/network_data/service" @@ -37,18 +36,6 @@ func (s *PerfKPIController) GoldKPI(c *gin.Context) { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return } - - // 时间格式校验 - startTime := date.ParseStrToDate(querys.StartTime, date.YYYY_MM_DD_HH_MM_SS) - if startTime.IsZero() { - c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) - return - } - endTime := date.ParseStrToDate(querys.EndTime, date.YYYY_MM_DD_HH_MM_SS) - if endTime.IsZero() { - c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) - return - } if querys.Interval < 5 || querys.Interval > 3600 { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return diff --git a/src/modules/network_data/model/perf_kpi.go b/src/modules/network_data/model/perf_kpi.go index 108d81f2..be88a063 100644 --- a/src/modules/network_data/model/perf_kpi.go +++ b/src/modules/network_data/model/perf_kpi.go @@ -16,7 +16,7 @@ type GoldKPIQuery struct { NeID string `form:"neId" binding:"required"` StartTime string `form:"startTime" binding:"required"` EndTime string `form:"endTime" binding:"required"` - Interval int64 `form:"interval" binding:"required"` + Interval int64 `form:"interval" binding:"required,oneof=5 60 300 900 1800 3600"` RmUID string `form:"rmUID"` SortField string `form:"sortField" binding:"omitempty,oneof=timeGroup"` SortOrder string `form:"sortOrder" binding:"omitempty,oneof=asc desc"` diff --git a/src/modules/network_data/repository/perf_kpi.go b/src/modules/network_data/repository/perf_kpi.go index d2674155..1a00957f 100644 --- a/src/modules/network_data/repository/perf_kpi.go +++ b/src/modules/network_data/repository/perf_kpi.go @@ -7,9 +7,6 @@ type IPerfKPI interface { // SelectGoldKPI 通过网元指标数据信息 SelectGoldKPI(query model.GoldKPIQuery, kpiIds []string) []map[string]any - // select from new kpi report table, exp. kpi_report_upf - SelectKpiReport(query model.GoldKPIQuery, kpiIds []string) []map[string]any - // SelectGoldKPITitle 网元对应的指标名称 SelectGoldKPITitle(neType string) []model.GoldKPITitle diff --git a/src/modules/network_data/repository/perf_kpi.impl.go b/src/modules/network_data/repository/perf_kpi.impl.go index 80908098..b7ac5bb8 100644 --- a/src/modules/network_data/repository/perf_kpi.impl.go +++ b/src/modules/network_data/repository/perf_kpi.impl.go @@ -17,76 +17,6 @@ type PerfKPIImpl struct{} // SelectGoldKPI 通过网元指标数据信息 func (r *PerfKPIImpl) SelectGoldKPI(query model.GoldKPIQuery, kpiIds []string) []map[string]any { - // 查询条件拼接 - var conditions []string - var params []any - if query.RmUID != "" { - conditions = append(conditions, "gk.rm_uid = ?") - params = append(params, query.RmUID) - } - if query.NeType != "" { - conditions = append(conditions, "gk.ne_type = ?") - params = append(params, query.NeType) - } - if query.StartTime != "" { - conditions = append(conditions, "gk.start_time >= ?") - params = append(params, query.StartTime) - } - if query.EndTime != "" { - conditions = append(conditions, "gk.start_time <= ?") - params = append(params, query.EndTime) - } - // 构建查询条件语句 - whereSql := "" - if len(conditions) > 0 { - whereSql += " where " + strings.Join(conditions, " and ") - } - - // 查询字段列 - timeFormat := "DATE_FORMAT(gk.start_time, '%Y-%m-%d %H:%i:')" - secondGroup := fmt.Sprintf("LPAD(FLOOR(SECOND(gk.start_time) / %d) * %d, 2, '0')", query.Interval, query.Interval) - groupByField := fmt.Sprintf("CONCAT( %s, %s ) AS timeGroup", timeFormat, secondGroup) - if query.Interval > 60 { - minute := query.Interval / 60 - timeFormat = "DATE_FORMAT(gk.start_time, '%Y-%m-%d %H:')" - minuteGroup := fmt.Sprintf("LPAD(FLOOR(MINUTE(gk.start_time) / %d) * %d, 2, '0')", minute, minute) - groupByField = fmt.Sprintf("CONCAT( %s, %s ) AS timeGroup", timeFormat, minuteGroup) - } - var fields = []string{ - groupByField, - "min(CASE WHEN gk.index != '' THEN gk.index ELSE 0 END) AS startIndex", - "min(CASE WHEN gk.ne_type != '' THEN gk.ne_type ELSE 0 END) AS neType", - "min(CASE WHEN gk.ne_name != '' THEN gk.ne_name ELSE 0 END) AS neName", - } - for _, kid := range kpiIds { - // 特殊字段,只取最后一次收到的非0值 - if kid == "AMF.01" || kid == "UDM.01" || kid == "UDM.02" || kid == "UDM.03" || kid == "SMF.01" { - str := fmt.Sprintf("IFNULL(SUBSTRING_INDEX(GROUP_CONCAT( CASE WHEN gk.kpi_id = '%s' and gk.VALUE != 0 THEN gk.VALUE END ), ',', 1), 0) AS '%s'", kid, kid) - fields = append(fields, str) - } else { - str := fmt.Sprintf("sum(CASE WHEN gk.kpi_id = '%s' THEN gk.value ELSE 0 END) AS '%s'", kid, kid) - fields = append(fields, str) - } - } - fieldsSql := strings.Join(fields, ",") - - // 查询数据 - if query.SortField == "" { - query.SortField = "timeGroup" - } - if query.SortOrder == "" { - query.SortOrder = "desc" - } - orderSql := fmt.Sprintf(" order by %s %s", query.SortField, query.SortOrder) - querySql := fmt.Sprintf("SELECT %s FROM gold_kpi gk %s GROUP BY timeGroup %s", fieldsSql, whereSql, orderSql) - results, err := datasource.RawDB("", querySql, params) - if err != nil { - logger.Errorf("query err => %v", err) - } - return results -} - -func (r *PerfKPIImpl) SelectKpiReport(query model.GoldKPIQuery, kpiIds []string) []map[string]any { // 查询条件拼接 var conditions []string var params []any @@ -100,43 +30,15 @@ func (r *PerfKPIImpl) SelectKpiReport(query model.GoldKPIQuery, kpiIds []string) // params = append(params, query.NeType) tableName += strings.ToLower(query.NeType) } - - var dateStr1, dateStr2, timeStr1, timeStr2 string if query.StartTime != "" { - dateStr1 = query.StartTime[:10] - timeStr1 = query.StartTime[11:] + conditions = append(conditions, "gk.created_at >= ?") + params = append(params, query.StartTime) } if query.EndTime != "" { - dateStr2 = query.EndTime[:10] - timeStr2 = query.EndTime[11:] - } - if dateStr1 == dateStr2 && dateStr1 != "" { - conditions = append(conditions, "gk.`date` = ?") - params = append(params, dateStr1) - conditions = append(conditions, "gk.`start_time` >= ?") - params = append(params, timeStr1) - conditions = append(conditions, "gk.`start_time` <= ?") - params = append(params, timeStr2) - } else { - if dateStr1 != "" { - conditions = append(conditions, "(gk.`date` > ? OR (gk.`date` = ? AND gk.`start_time` >= ?))") - params = append(params, dateStr1, dateStr1, timeStr1) - } - if dateStr2 != "" { - conditions = append(conditions, "(gk.`date` < ? OR (gk.`date` = ? AND gk.`start_time` <= ?))") - params = append(params, dateStr2, dateStr2, timeStr2) - } + conditions = append(conditions, "gk.created_at <= ?") + params = append(params, query.EndTime) } - // var dateTimeStr string = "CONCAT(gk.`date`, \" \", gk.start_time)" - // if query.StartTime != "" { - // conditions = append(conditions, dateTimeStr+" >= ?") - // params = append(params, query.StartTime) - // } - // if query.EndTime != "" { - // conditions = append(conditions, dateTimeStr+" <= ?") - // params = append(params, query.EndTime) - // } // 构建查询条件语句 whereSql := "" if len(conditions) > 0 { @@ -144,18 +46,9 @@ func (r *PerfKPIImpl) SelectKpiReport(query model.GoldKPIQuery, kpiIds []string) } // 查询字段列 - var dateTimeStr string = "CONCAT(gk.`date`, \" \", gk.start_time)" - timeFormat := "DATE_FORMAT(" + dateTimeStr + ", '%Y-%m-%d %H:%i:')" - secondGroup := fmt.Sprintf("LPAD(FLOOR(SECOND(gk.start_time) / %d) * %d, 2, '0')", query.Interval, query.Interval) - groupByField := fmt.Sprintf("CONCAT( %s, %s ) AS timeGroup", timeFormat, secondGroup) - if query.Interval > 60 { - minute := query.Interval / 60 - timeFormat = "DATE_FORMAT(" + dateTimeStr + ", '%Y-%m-%d %H:')" - minuteGroup := fmt.Sprintf("LPAD(FLOOR(MINUTE(gk.start_time) / %d) * %d, 2, '0')", minute, minute) - groupByField = fmt.Sprintf("CONCAT( %s, %s ) AS timeGroup", timeFormat, minuteGroup) - } var fields = []string{ - groupByField, + // fmt.Sprintf("FROM_UNIXTIME(FLOOR(gk.created_at / (%d * 1000)) * %d) AS timeGroup", query.Interval, query.Interval), + fmt.Sprintf("CONCAT(FLOOR(gk.created_at / (%d * 1000)) * (%d * 1000)) AS timeGroup", query.Interval, query.Interval), // 时间戳毫秒 "min(CASE WHEN gk.index != '' THEN gk.index ELSE 0 END) AS startIndex", "min(CASE WHEN gk.ne_type != '' THEN gk.ne_type ELSE 0 END) AS neType", "min(CASE WHEN gk.ne_name != '' THEN gk.ne_name ELSE 0 END) AS neName", diff --git a/src/modules/network_data/service/perf_kpi.impl.go b/src/modules/network_data/service/perf_kpi.impl.go index da234fab..a7174faf 100644 --- a/src/modules/network_data/service/perf_kpi.impl.go +++ b/src/modules/network_data/service/perf_kpi.impl.go @@ -31,8 +31,7 @@ func (r *PerfKPIImpl) SelectGoldKPI(query model.GoldKPIQuery) []map[string]any { kpiIds = append(kpiIds, kpiId.KPIID) } - //data := r.perfKPIRepository.SelectGoldKPI(query, kpiIds) - data := r.perfKPIRepository.SelectKpiReport(query, kpiIds) + data := r.perfKPIRepository.SelectGoldKPI(query, kpiIds) if data == nil { return []map[string]any{} } diff --git a/src/modules/ws/service/ws_send.impl.go b/src/modules/ws/service/ws_send.impl.go index 94c23b71..2eea685b 100644 --- a/src/modules/ws/service/ws_send.impl.go +++ b/src/modules/ws/service/ws_send.impl.go @@ -12,10 +12,10 @@ import ( const ( // 组号-其他 GROUP_OTHER = "0" - // 组号-指标 - GROUP_KPI = "10" - // 组号-指标UPF - GROUP_KPI_UPF = "12" + // 组号-指标通用 10_neType_neId + GROUP_KPI = "10_" + // 组号-指标UPF 12_neId + GROUP_KPI_UPF = "12_" // 组号-IMS_CDR会话事件 GROUP_IMS_CDR = "1005" // 组号-SMF_CDR会话事件 From df06ead3610f1bf0a22cceb2b029e4a024e19c97 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 26 Jul 2024 15:28:03 +0800 Subject: [PATCH 19/34] =?UTF-8?q?feat:=20UDM=E9=89=B4=E6=9D=83=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=AF=BC=E5=85=A5K4=E6=96=87=E4=BB=B6=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_data/controller/udm_auth.go | 43 +++++++++++---- src/modules/network_data/udm_k4_test.go | 54 +++++++++++++++++++ src/modules/network_element/fetch_link/udm.go | 3 +- 3 files changed, 90 insertions(+), 10 deletions(-) create mode 100644 src/modules/network_data/udm_k4_test.go diff --git a/src/modules/network_data/controller/udm_auth.go b/src/modules/network_data/controller/udm_auth.go index e19888a9..d916957c 100644 --- a/src/modules/network_data/controller/udm_auth.go +++ b/src/modules/network_data/controller/udm_auth.go @@ -15,6 +15,7 @@ import ( "be.ems/src/framework/vo/result" "be.ems/src/modules/network_data/model" neDataService "be.ems/src/modules/network_data/service" + neFetchlink "be.ems/src/modules/network_element/fetch_link" neService "be.ems/src/modules/network_element/service" "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" @@ -411,7 +412,11 @@ func (s *UDMAuthController) Export(c *gin.Context) { data := [][]string{} data = append(data, []string{"imsi", "ki", "algo", "amf", "opc"}) for _, v := range list { - data = append(data, []string{v.IMSI, v.Ki, v.AlgoIndex, v.Amf, v.Opc}) + opc := v.Opc + if opc == "-" { + opc = "" + } + data = append(data, []string{v.IMSI, v.Ki, v.AlgoIndex, v.Amf, opc}) } // 输出到文件 err := file.WriterFileCSV(data, filePath) @@ -425,7 +430,11 @@ func (s *UDMAuthController) Export(c *gin.Context) { // 转换数据 data := [][]string{} for _, v := range list { - data = append(data, []string{v.IMSI, v.Ki, v.AlgoIndex, v.Amf, v.Opc}) + opc := v.Opc + if opc == "-" { + opc = "" + } + data = append(data, []string{v.IMSI, v.Ki, v.AlgoIndex, v.Amf, opc}) } // 输出到文件 err = file.WriterFileTXT(data, ",", filePath) @@ -446,6 +455,8 @@ func (s *UDMAuthController) Import(c *gin.Context) { var body struct { NeId string `json:"neId" binding:"required"` UploadPath string `json:"uploadPath" binding:"required"` + TypeVal string `json:"typeVal" binding:"required,oneof=default k4"` + TypeData any `json:"typeData"` } if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) @@ -497,16 +508,30 @@ func (s *UDMAuthController) Import(c *gin.Context) { } defer telnetClient.Close() - // 发送MML - cmd := fmt.Sprintf("import authdat:path=%s", neFilePath) - data, err := telnet.ConvertToStr(telnetClient, cmd) - if err != nil { - c.JSON(200, result.ErrMsg(err.Error())) + // 结果信息 + var resultMsg string + var resultErr error + + // 默认的情况 发送MML + if body.TypeVal == "default" { + cmd := fmt.Sprintf("import authdat:path=%s", neFilePath) + resultMsg, resultErr = telnet.ConvertToStr(telnetClient, cmd) + } + + // K4类型发特定请求 + if body.TypeVal == "k4" { + resultMsg, resultErr = neFetchlink.UDMImportAuth(neInfo.IP, map[string]any{ + "path": neFilePath, "k4": body.TypeData, + }) + } + + if resultErr != nil { + c.JSON(200, result.ErrMsg(resultErr.Error())) return } // 命令ok时 - if strings.Contains(data, "ok") { + if strings.Contains(resultMsg, "ok") { if strings.HasSuffix(body.UploadPath, ".csv") { data := file.ReadFileCSV(localFilePath) neId := "" @@ -518,5 +543,5 @@ func (s *UDMAuthController) Import(c *gin.Context) { go s.udmAuthService.InsertData(neId, "txt", data) } } - c.JSON(200, result.OkMsg(data)) + c.JSON(200, result.OkMsg(resultMsg)) } diff --git a/src/modules/network_data/udm_k4_test.go b/src/modules/network_data/udm_k4_test.go new file mode 100644 index 00000000..99580c4f --- /dev/null +++ b/src/modules/network_data/udm_k4_test.go @@ -0,0 +1,54 @@ +package networkdata + +import ( + "crypto/des" + "errors" + "testing" +) + +// 加密 +func encrypt(origData, key []byte) ([]byte, error) { + if len(origData) < 1 || len(key) < 1 { + return nil, errors.New("wrong data or key") + } + block, err := des.NewCipher(key) + if err != nil { + return nil, err + } + bs := block.BlockSize() + if len(origData)%bs != 0 { + return nil, errors.New("wrong padding") + } + out := make([]byte, len(origData)) + dst := out + for len(origData) > 0 { + block.Encrypt(dst, origData[:bs]) + origData = origData[bs:] + dst = dst[bs:] + } + return out, nil +} + +func TestEncrypt(t *testing.T) { + // key := []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef} + // 0123456789abcdef + + // ki := []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef} + // 0123456789abcdef0123456789abcdef + + // 密码 + key := []byte{0x12, 0x34, 0x12, 0x34, 0x12, 0x34, 0x12, 0x34} + // 1234123412341234 + + // 要加密的ki + ki := []byte{0x80, 0x5D, 0xAD, 0xC6, 0xE8, 0xA5, 0x4A, 0x0D, 0x59, 0xD6, 0x22, 0xC7, 0xA0, 0x4D, 0x08, 0xE0} + // 805DADC6E8A54A0D59D622C7A04D08E0 + + kis, err := encrypt(ki, key) + + // 加密后的,放导入导入文件里ki + t.Errorf("kis: %x\n", kis) + // 3e479135bb16f45dc874a18831b54d71 + + t.Errorf("err: %v\n", err) +} diff --git a/src/modules/network_element/fetch_link/udm.go b/src/modules/network_element/fetch_link/udm.go index 0a82641b..2f1119c3 100644 --- a/src/modules/network_element/fetch_link/udm.go +++ b/src/modules/network_element/fetch_link/udm.go @@ -3,6 +3,7 @@ package fetchlink import ( "encoding/json" "fmt" + "strings" "be.ems/src/framework/logger" "be.ems/src/framework/utils/fetch" @@ -30,7 +31,7 @@ func UDMImportAuth(udmIP string, data map[string]any) (string, error) { return "", err } if v, ok := resData["code"]; ok && v == "00000" { - return "ok", nil + return strings.TrimSpace(strings.ToLower(resData["message"])), nil } return "", fmt.Errorf(resData["message"]) } From b1c3c1343695ce9aa73f3dd69021ffcc2dab1508 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 26 Jul 2024 18:28:23 +0800 Subject: [PATCH 20/34] =?UTF-8?q?feat:=20=E7=BD=91=E5=85=83=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E5=A4=87=E4=BB=BD=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8B=E8=BD=BD/=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=8A=9F=E8=83=BD=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ne_config_backup.go | 46 +++++++++++++++++-- .../network_element/network_element.go | 10 +++- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/src/modules/network_element/controller/ne_config_backup.go b/src/modules/network_element/controller/ne_config_backup.go index 772c8ac4..1ba1870c 100644 --- a/src/modules/network_element/controller/ne_config_backup.go +++ b/src/modules/network_element/controller/ne_config_backup.go @@ -1,6 +1,7 @@ package controller import ( + "os" "path/filepath" "strings" @@ -43,8 +44,8 @@ func (s *NeConfigBackupController) List(c *gin.Context) { // 网元配置文件备份记录信息 // -// GET /?id=xx -func (s *NeConfigBackupController) Info(c *gin.Context) { +// GET /download?id=xx +func (s *NeConfigBackupController) Download(c *gin.Context) { language := ctx.AcceptLanguage(c) id, ok := c.GetQuery("id") if !ok || id == "" { @@ -59,7 +60,46 @@ func (s *NeConfigBackupController) Info(c *gin.Context) { return } - c.JSON(200, result.OkData(item)) + if _, err := os.Stat(item.Path); err != nil { + c.JSON(200, result.ErrMsg(i18n.TKey(language, "neConfigBackup.notFoundFile"))) + return + } + c.FileAttachment(item.Path, item.Name) +} + +// 网元配置文件备份记录修改 +// +// PUT / +func (s *NeConfigBackupController) Edit(c *gin.Context) { + language := ctx.AcceptLanguage(c) + var body struct { + ID string `json:"id" binding:"required"` // 记录ID + Name string `json:"name" binding:"required"` // 名称 + Remark string `json:"remark" binding:"required"` // 备注 + } + err := c.ShouldBindBodyWith(&body, binding.JSON) + if err != nil || body.ID == "" { + c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) + return + } + + // 检查是否存在 + data := s.neConfigBackupService.SelectById(body.ID) + if data.ID != body.ID { + // 没有可访问主机命令数据! + c.JSON(200, result.ErrMsg(i18n.TKey(language, "neConfig.noData"))) + return + } + + data.Name = body.Name + data.Remark = body.Remark + data.UpdateBy = ctx.LoginUserToUserName(c) + rows := s.neConfigBackupService.Update(data) + if rows > 0 { + c.JSON(200, result.Ok(nil)) + return + } + c.JSON(200, result.Err(nil)) } // 网元配置文件备份记录删除 diff --git a/src/modules/network_element/network_element.go b/src/modules/network_element/network_element.go index 5a33ea0a..a2341ea3 100644 --- a/src/modules/network_element/network_element.go +++ b/src/modules/network_element/network_element.go @@ -317,12 +317,18 @@ func Setup(router *gin.Engine) { middleware.PreAuthorize(nil), controller.NewNeConfigBackup.List, ) - neConfigBackupGroup.GET("", + neConfigBackupGroup.GET("/download", middleware.PreAuthorize(nil), - controller.NewNeConfigBackup.Info, + controller.NewNeConfigBackup.Download, + ) + neConfigBackupGroup.PUT("", + middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfigBackup", collectlogs.BUSINESS_TYPE_UPDATE)), + controller.NewNeConfigBackup.Edit, ) neConfigBackupGroup.DELETE("", middleware.PreAuthorize(nil), + collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neConfigBackup", collectlogs.BUSINESS_TYPE_DELETE)), controller.NewNeConfigBackup.Remove, ) neConfigBackupGroup.POST("/import", From 9def036fefbbd4312fb572d90af07c8ca468780a Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 26 Jul 2024 18:29:16 +0800 Subject: [PATCH 21/34] =?UTF-8?q?sql:=20=E6=B7=BB=E5=8A=A0=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E8=8F=9C=E5=8D=95>=E7=BD=91=E5=85=83=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/sys_dict_data1_i18n_zh.sql | 1 + database/install/sys_dict_data2_i18n_en.sql | 1 + database/install/sys_menu.sql | 9 +- database/install/sys_role_menu.sql | 5 +- .../upgrade/upg_sys_dict_data1_i18n_zh.sql | 1 + .../upgrade/upg_sys_dict_data2_i18n_en.sql | 1 + database/upgrade/upg_sys_menu.sql | 293 +++++++++--------- database/upgrade/upg_sys_role_menu.sql | 4 +- 8 files changed, 161 insertions(+), 154 deletions(-) diff --git a/database/install/sys_dict_data1_i18n_zh.sql b/database/install/sys_dict_data1_i18n_zh.sql index e1cb8506..44be754a 100644 --- a/database/install/sys_dict_data1_i18n_zh.sql +++ b/database/install/sys_dict_data1_i18n_zh.sql @@ -661,5 +661,6 @@ INSERT INTO `sys_dict_data` VALUES (2150, 2150, 'dictData.udm_sub_cn_type.3', '5 INSERT INTO `sys_dict_data` VALUES (2151, 2151, 'menu.system.setting.doc', '系统使用文档', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2152, 2152, 'menu.system.setting.official', '官网链接', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2153, 2153, 'menu.system.setting.lock', '锁屏操作', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2154, 2154, 'menu.config.neConfigBackup', '网元配置备份', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/sys_dict_data2_i18n_en.sql b/database/install/sys_dict_data2_i18n_en.sql index 14f34af0..70f5edb2 100644 --- a/database/install/sys_dict_data2_i18n_en.sql +++ b/database/install/sys_dict_data2_i18n_en.sql @@ -661,5 +661,6 @@ INSERT INTO `sys_dict_data` VALUES (4150, 4150, 'dictData.udm_sub_cn_type.3', '5 INSERT INTO `sys_dict_data` VALUES (4151, 4151, 'menu.system.setting.doc', 'System User Documentation', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4152, 4152, 'menu.system.setting.official', 'Official Website', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4153, 4153, 'menu.system.setting.lock', 'Lockscreen Operation', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4154, 4154, 'menu.config.neConfigBackup', 'NE Config Backups', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/sys_menu.sql b/database/install/sys_menu.sql index 0ffdb538..19730c5b 100644 --- a/database/install/sys_menu.sql +++ b/database/install/sys_menu.sql @@ -123,7 +123,7 @@ INSERT INTO `sys_menu` VALUES (1056, 'menu.common.export', 116, 6, '#', NULL, '1 INSERT INTO `sys_menu` VALUES (2009, 'menu.ueUser.authUDM', 5, 1, 'auth', 'neUser/auth/index', '1', '1', 'M', '1', '1', 'neUser:auth:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.authUDMRemark'); INSERT INTO `sys_menu` VALUES (2010, 'menu.ueUser.subUDM', 5, 2, 'sub', 'neUser/sub/index', '1', '1', 'M', '1', '1', 'neUser:sub:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.subUDMRemark'); INSERT INTO `sys_menu` VALUES (2075, 'menu.config.neManage', 4, 1, 'neManage', 'configManage/neManage/index', '1', '0', 'M', '1', '0', 'configManage:neManage:index', 'icon-biaoqing', 'supervisor', 1700000000000, NULL, 0, 'menu.config.neManageRemark'); -INSERT INTO `sys_menu` VALUES (2078, 'menu.config.backupManage', 4, 3, 'backupManage', 'configManage/backupManage/index', '1', '0', 'M', '1', '1', 'configManage:backupManage:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.config.backupManageRemark'); +INSERT INTO `sys_menu` VALUES (2078, 'menu.config.backupManage', 4, 3, 'backupManage', 'configManage/backupManage/index', '1', '0', 'M', '1', '0', 'configManage:backupManage:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.config.backupManageRemark'); INSERT INTO `sys_menu` VALUES (2079, 'menu.config.softwareManage', 4, 4, 'softwareManage', 'configManage/softwareManage/index', '1', '0', 'M', '1', '0', 'configManage:softwareManage:index', 'icon-huidingbu', 'supervisor', 1700000000000, NULL, 0, 'menu.config.softwareManageRemark'); INSERT INTO `sys_menu` VALUES (2080, 'menu.ueUser.onlineIMS', 5, 4, 'ims', 'neUser/ims/index', '1', '0', 'M', '1', '1', 'neUser:ims:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.onlineIMSRemark'); INSERT INTO `sys_menu` VALUES (2081, 'menu.ueUser.onlineUE', 5, 6, 'ue', 'neUser/ue/index', '1', '0', 'M', '1', '1', 'neUser:ue:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.onlineUERemark'); @@ -189,8 +189,9 @@ INSERT INTO `sys_menu` VALUES (2147, 'menu.fault.event', 2129, 3, 'event', 'faul INSERT INTO `sys_menu` VALUES (2148, 'menu.dashboard.smfCDR', 2140, 40, 'smfCDR', 'dashboard/smfCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1712751038982, ''); INSERT INTO `sys_menu` VALUES (2149, 'menu.dashboard.mmeUE', 2141, 5, 'mmeUE', 'dashboard/mmeUE/index', '1', '0', 'M', '1', '1', 'dashboard:mmeUE:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1711354049893, ''); INSERT INTO `sys_menu` VALUES (2150, 'menu.system.user.editPost', 100, 9, '', '', '1', '1', 'B', '1', '1', 'system:user:editPost', '#', 'supervisor', 1700000000000, '', 0, ''); -INSERT INTO `sys_menu` VALUES (2151, 'menu.system.setting.doc', 2114, 2, NULL, NULL, '1', '1', 'B', '1', '1', 'system:setting:doc', '#', 'supervisor', 1700000000000, 'supervisor', 1700000000000, ''); -INSERT INTO `sys_menu` VALUES (2152, 'menu.system.setting.official', 2114, 3, NULL, NULL, '1', '1', 'B', '1', '1', 'system:setting:official', '#', 'supervisor', 1700000000000, 'supervisor', 1700000000000, ''); -INSERT INTO `sys_menu` VALUES (2153, 'menu.system.setting.lock', 2114, 4, NULL, NULL, '1', '1', 'B', '1', '1', 'system:setting:lock', '#', 'supervisor', 1700000000000, 'supervisor', 1700000000000, ''); +INSERT INTO `sys_menu` VALUES (2151, 'menu.system.setting.doc', 2114, 2, '', '', '1', '1', 'B', '1', '1', 'system:setting:doc', '#', 'supervisor', 1700000000000, 'supervisor', 1700000000000, ''); +INSERT INTO `sys_menu` VALUES (2152, 'menu.system.setting.official', 2114, 3,'', '', '1', '1', 'B', '1', '1', 'system:setting:official', '#', 'supervisor', 1700000000000, 'supervisor', 1700000000000, ''); +INSERT INTO `sys_menu` VALUES (2153, 'menu.system.setting.lock', 2114, 4, '', '', '1', '1', 'B', '1', '1', 'system:setting:lock', '#', 'supervisor', 1700000000000, 'supervisor', 1700000000000, ''); +INSERT INTO `sys_menu` VALUES (2154, 'menu.config.neConfigBackup', 4, 10, 'neConfigBackup', 'ne/neConfigBackup/index', '1', '0', 'M', '1', '1', 'ne:neConfigBackup:list', 'icon-fuzhidaima', 'supervisor', 1721902269805, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/sys_role_menu.sql b/database/install/sys_role_menu.sql index 3caf0d38..213935b7 100644 --- a/database/install/sys_role_menu.sql +++ b/database/install/sys_role_menu.sql @@ -82,7 +82,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1055); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1056); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2009); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2010); -INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2078); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2080); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2081); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2082); @@ -110,6 +109,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2107); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2108); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2109); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2111); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2112); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2113); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2114); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2118); @@ -142,6 +142,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2150); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2151); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2152); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2153); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2154); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 4); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 5); @@ -159,7 +160,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1042); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1048); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2009); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2010); -INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2078); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2080); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2081); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2082); @@ -213,6 +213,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2149); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2151); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2152); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2153); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2154); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 5); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 112); diff --git a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql index a9060bd8..48abe2f1 100644 --- a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql +++ b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql @@ -668,5 +668,6 @@ REPLACE INTO `sys_dict_data` VALUES (2150, 2150, 'dictData.udm_sub_cn_type.3', ' REPLACE INTO `sys_dict_data` VALUES (2151, 2151, 'menu.system.setting.doc', '系统使用文档', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2152, 2152, 'menu.system.setting.official', '官网链接', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2153, 2153, 'menu.system.setting.lock', '锁屏操作', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2154, 2154, 'menu.config.neConfigBackup', '网元配置备份', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_dict_data2_i18n_en.sql b/database/upgrade/upg_sys_dict_data2_i18n_en.sql index d4824a5b..9edf1b09 100644 --- a/database/upgrade/upg_sys_dict_data2_i18n_en.sql +++ b/database/upgrade/upg_sys_dict_data2_i18n_en.sql @@ -663,5 +663,6 @@ REPLACE INTO `sys_dict_data` VALUES (4150, 4150, 'dictData.udm_sub_cn_type.3', ' REPLACE INTO `sys_dict_data` VALUES (4151, 4151, 'menu.system.setting.doc', 'System User Documentation', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4152, 4152, 'menu.system.setting.official', 'Official Website', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4153, 4153, 'menu.system.setting.lock', 'Lockscreen Operation', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4154, 4154, 'menu.config.neConfigBackup', 'NE Config Backups', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_menu.sql b/database/upgrade/upg_sys_menu.sql index 3ec6e85d..c6d9ee56 100644 --- a/database/upgrade/upg_sys_menu.sql +++ b/database/upgrade/upg_sys_menu.sql @@ -29,152 +29,153 @@ CREATE TABLE IF NOT EXISTS `sys_menu` ( -- ---------------------------- -- Records of sys_menu -- ---------------------------- -INSERT IGNORE INTO `sys_menu` VALUES (1, 'menu.system', 0, 16, 'system', NULL, '1', '1', 'D', '1', '1', NULL, 'icon-xiangmu', 'supervisor', 1700000000000, NULL, 0, 'menu.systemRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (4, 'menu.config', 0, 3, 'configManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.configRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (5, 'menu.ueUser', 0, 7, 'neUser', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-wocanyu', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUserRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (100, 'menu.security.user', 2113, 1, 'user', 'system/user/index', '1', '1', 'M', '1', '1', 'system:user:list', 'icon-wocanyu', 'supervisor', 1700000000000, NULL, 0, 'menu.security.userRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (101, 'menu.security.role', 2113, 3, 'role', 'system/role/index', '1', '1', 'M', '1', '1', 'system:role:list', 'icon-anzhuo', 'supervisor', 1700000000000, NULL, 0, 'menu.security.roleRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (102, 'menu.security.roleUser', 2113, 3, 'role/inline/auth-user/:roleId', 'system/role/auth-user', '1', '1', 'M', '0', '1', 'system:role:auth', '#', 'supervisor', 1700000000000, NULL, 0, 'menu.security.roleUserRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (103, 'menu.system.menu', 1, 10, 'menu', 'system/menu/index', '1', '1', 'M', '1', '1', 'system:menu:list', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.system.menuRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (104, 'menu.security.dept', 2113, 5, 'dept', 'system/dept/index', '1', '1', 'M', '1', '1', 'system:dept:list', 'icon-yuzhanghao1', 'supervisor', 1700000000000, NULL, 0, 'menu.security.deptRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (105, 'menu.security.post', 2113, 6, 'post', 'system/post/index', '1', '1', 'M', '1', '1', 'system:post:list', 'icon-gonggaodayi', 'supervisor', 1700000000000, NULL, 0, 'menu.security.postRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (106, 'menu.system.dictType', 1, 30, 'dict', 'system/dict/index', '1', '1', 'M', '1', '1', 'system:dict:list', 'icon-tubiaoku', 'supervisor', 1700000000000, NULL, 0, 'menu.system.dictTypeRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (107, 'menu.system.dictData', 1, 31, 'dict/inline/data/:dictId', 'system/dict/data', '1', '1', 'M', '0', '1', 'system:dict:data', '#', 'supervisor', 1700000000000, NULL, 0, 'menu.system.dictDataRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (108, 'menu.system.paramSet', 1, 59, 'config', 'system/config/index', '1', '1', 'M', '1', '1', 'system:config:list', 'icon-gongnengjieshao', 'supervisor', 1700000000000, NULL, 0, 'menu.system.paramSetRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (111, 'menu.system.systemLog', 1, 11, 'log', NULL, '1', '1', 'D', '0', '0', NULL, '#', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemLogRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (112, 'menu.system.systemInfo', 1, 5, 'system-info', 'monitor/system/info', '1', '1', 'M', '1', '1', 'monitor:system:info', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemInfoRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (113, 'menu.system.cacheInfo', 1, 8, 'cache-info', 'monitor/cache/info', '1', '1', 'M', '1', '1', 'monitor:cache:info', 'icon-gongnengjieshao', 'supervisor', 1700000000000, NULL, 0, 'menu.system.cacheInfoRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (114, 'menu.system.cache', 1, 9, 'cache', 'monitor/cache/index', '1', '1', 'M', '1', '1', 'monitor:cache:list', 'icon-tubiaoku', 'supervisor', 1700000000000, NULL, 0, 'menu.system.cacheRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (115, 'menu.security.onlineUser', 2113, 2, 'online', 'monitor/online/index', '1', '1', 'M', '1', '1', 'monitor:online:list', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.security.onlineUserRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (116, 'menu.system.job', 1, 20, 'job', 'monitor/job/index', '1', '1', 'M', '1', '1', 'monitor:job:list', 'icon-lishi', 'supervisor', 1700000000000, NULL, 0, 'menu.system.jobRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (117, 'menu.system.jobLog', 1, 21, '/system/job/inline/log/:jobId', 'monitor/job/log', '1', '1', 'M', '0', '1', 'monitor:job:log', '#', 'supervisor', 1700000000000, NULL, 0, 'menu.system.jobLogRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (500, 'menu.log.operat', 2089, 25, 'operate', 'system/log/operate/index', '1', '1', 'M', '1', '1', 'system:log:operate:list', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.operatRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (501, 'menu.log.login', 2089, 26, 'login', 'system/log/login/index', '1', '1', 'M', '1', '1', 'system:log:login:list', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.loginRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (1000, 'menu.common.query', 100, 1, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1001, 'menu.common.add', 100, 2, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:add', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1002, 'menu.common.edit', 100, 3, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:edit', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1003, 'menu.common.delete', 100, 4, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1004, 'menu.common.export', 100, 5, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:export', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1005, 'menu.common.import', 100, 6, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:import', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1006, 'menu.common.resetPwd', 100, 7, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:resetPwd', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1007, 'menu.common.query', 101, 1, NULL, NULL, '1', '1', 'B', '1', '1', 'system:role:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1008, 'menu.common.add', 101, 2, NULL, NULL, '1', '1', 'B', '1', '1', 'system:role:add', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1009, 'menu.common.edit', 101, 3, NULL, NULL, '1', '1', 'B', '1', '1', 'system:role:edit', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1010, 'menu.common.delete', 101, 4, NULL, NULL, '1', '1', 'B', '1', '1', 'system:role:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1011, 'menu.common.export', 101, 5, NULL, NULL, '1', '1', 'B', '1', '1', 'system:role:export', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1012, 'menu.common.query', 103, 1, NULL, NULL, '1', '1', 'B', '1', '1', 'system:menu:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1013, 'menu.common.add', 103, 2, NULL, NULL, '1', '1', 'B', '1', '1', 'system:menu:add', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1014, 'menu.common.edit', 103, 3, NULL, NULL, '1', '1', 'B', '1', '1', 'system:menu:edit', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1015, 'menu.common.delete', 103, 4, NULL, NULL, '1', '1', 'B', '1', '1', 'system:menu:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1016, 'menu.common.query', 104, 1, NULL, NULL, '1', '1', 'B', '1', '1', 'system:dept:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1017, 'menu.common.add', 104, 2, NULL, NULL, '1', '1', 'B', '1', '1', 'system:dept:add', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1018, 'menu.common.edit', 104, 3, NULL, NULL, '1', '1', 'B', '1', '1', 'system:dept:edit', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1019, 'menu.common.delete', 104, 4, NULL, NULL, '1', '1', 'B', '1', '1', 'system:dept:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1020, 'menu.common.query', 105, 1, NULL, NULL, '1', '1', 'B', '1', '1', 'system:post:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1021, 'menu.common.add', 105, 2, NULL, NULL, '1', '1', 'B', '1', '1', 'system:post:add', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1022, 'menu.common.edit', 105, 3, NULL, NULL, '1', '1', 'B', '1', '1', 'system:post:edit', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1023, 'menu.common.delete', 105, 4, NULL, NULL, '1', '1', 'B', '1', '1', 'system:post:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1024, 'menu.common.export', 105, 5, NULL, NULL, '1', '1', 'B', '1', '1', 'system:post:export', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1025, 'menu.common.query', 106, 1, '#', NULL, '1', '1', 'B', '1', '1', 'system:dict:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1026, 'menu.common.add', 106, 2, '#', NULL, '1', '1', 'B', '1', '1', 'system:dict:add', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1027, 'menu.common.edit', 106, 3, '#', NULL, '1', '1', 'B', '1', '1', 'system:dict:edit', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1028, 'menu.common.delete', 106, 4, '#', NULL, '1', '1', 'B', '1', '1', 'system:dict:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1029, 'menu.common.export', 106, 5, '#', NULL, '1', '1', 'B', '1', '1', 'system:dict:export', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1030, 'menu.common.query', 108, 1, '#', NULL, '1', '1', 'B', '1', '1', 'system:config:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1031, 'menu.common.add', 108, 2, '#', NULL, '1', '1', 'B', '1', '1', 'system:config:add', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1032, 'menu.common.edit', 108, 3, '#', NULL, '1', '1', 'B', '1', '1', 'system:config:edit', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1033, 'menu.common.delete', 108, 4, '#', NULL, '1', '1', 'B', '1', '1', 'system:config:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1034, 'menu.common.export', 108, 5, '#', NULL, '1', '1', 'B', '1', '1', 'system:config:export', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1039, 'menu.common.query', 500, 1, '#', NULL, '1', '1', 'B', '1', '1', 'system:log:operate:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1040, 'menu.common.delete', 500, 2, '#', NULL, '1', '1', 'B', '1', '1', 'system:log:operate:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1041, 'menu.common.export', 500, 3, '#', NULL, '1', '1', 'B', '1', '1', 'system:log:operate:export', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1042, 'menu.common.query', 501, 1, '#', NULL, '1', '1', 'B', '1', '1', 'system:log:login:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1043, 'menu.common.delete', 501, 2, '#', NULL, '1', '1', 'B', '1', '1', 'system:log:login:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1044, 'menu.common.export', 501, 3, '#', NULL, '1', '1', 'B', '1', '1', 'system:log:login:export', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1045, 'menu.common.unlock', 501, 4, '#', NULL, '1', '1', 'B', '1', '1', 'system:log:login:unlock', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1046, 'menu.common.query', 114, 1, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:cache:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1047, 'menu.common.delete', 114, 2, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:cache:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1048, 'menu.common.query', 115, 1, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:online:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1049, 'menu.forcedQuit.batch ', 115, 2, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:online:batchLogout', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1050, 'menu.forcedQuit.single', 115, 3, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:online:forceLogout', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1051, 'menu.common.query', 116, 1, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:job:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1052, 'menu.common.add', 116, 2, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:job:add', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1053, 'menu.common.edit', 116, 3, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:job:edit', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1054, 'menu.common.delete', 116, 4, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:job:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1055, 'menu.common.edit', 116, 5, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:job:changeStatus', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (1056, 'menu.common.export', 116, 6, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:job:export', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2009, 'menu.ueUser.authUDM', 5, 1, 'auth', 'neUser/auth/index', '1', '1', 'M', '1', '1', 'neUser:auth:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.authUDMRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2010, 'menu.ueUser.subUDM', 5, 2, 'sub', 'neUser/sub/index', '1', '1', 'M', '1', '1', 'neUser:sub:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.subUDMRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2075, 'menu.config.neManage', 4, 1, 'neManage', 'configManage/neManage/index', '1', '0', 'M', '1', '0', 'configManage:neManage:index', 'icon-biaoqing', 'supervisor', 1700000000000, NULL, 0, 'menu.config.neManageRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2078, 'menu.config.backupManage', 4, 3, 'backupManage', 'configManage/backupManage/index', '1', '0', 'M', '1', '1', 'configManage:backupManage:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.config.backupManageRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2079, 'menu.config.softwareManage', 4, 4, 'softwareManage', 'configManage/softwareManage/index', '1', '0', 'M', '1', '0', 'configManage:softwareManage:index', 'icon-huidingbu', 'supervisor', 1700000000000, NULL, 0, 'menu.config.softwareManageRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2080, 'menu.ueUser.onlineIMS', 5, 4, 'ims', 'neUser/ims/index', '1', '0', 'M', '1', '1', 'neUser:ims:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.onlineIMSRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2081, 'menu.ueUser.onlineUE', 5, 6, 'ue', 'neUser/ue/index', '1', '0', 'M', '1', '1', 'neUser:ue:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.onlineUERemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2082, 'menu.ueUser.base5G', 5, 7, 'base5G', 'neUser/base5G/index', '1', '0', 'M', '1', '1', 'neUser:base5G:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.base5GRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2083, 'menu.trace', 2087, 30, 'traceManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, 'menu.traceRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2084, 'menu.trace.task', 2083, 1, 'task', 'traceManage/task/index', '1', '0', 'M', '0', '1', 'traceManage:task:index', 'icon-chexiao', 'supervisor', 1700000000000, 'admin', 1713176976458, 'menu.trace.taskRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2085, 'menu.trace.analysis', 2083, 2, 'analysis', 'traceManage/analysis/index', '1', '0', 'M', '0', '1', 'traceManage:analysis:index', 'icon-gongnengjieshao', 'supervisor', 1700000000000, 'admin', 1713176987835, 'menu.trace.analysisRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2086, 'menu.trace.pcap', 2083, 3, 'pcap', 'traceManage/pcap/index', '1', '1', 'M', '1', '1', 'traceManage:pcap:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.trace.pcapRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2087, 'menu.fault', 0, 2, 'faultManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-jinggao', 'supervisor', 1700000000000, NULL, 0, 'menu.faultRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2088, 'menu.fault.active', 2129, 1, 'active-alarm', 'faultManage/active-alarm/index', '1', '1', 'M', '1', '1', 'faultManage:active-alarm:index', 'icon-wenjian', 'supervisor', 1700000000000, NULL, 0, 'menu.fault.activemRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2089, 'menu.log', 0, 9, 'logManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.logRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2091, 'menu.log.mml', 2089, 30, 'mml', 'logManage/mml/index', '1', '1', 'M', '1', '1', 'logManage:mml:index', 'icon-wocanyu', 'supervisor', 1700000000000, NULL, 0, 'menu.log.mmlRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2092, 'menu.log.alarm', 2089, 40, 'alarm-log', 'logManage/alarm/index', '1', '0', 'M', '1', '1', 'logManage:alarm:index', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.alarmRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2094, 'menu.log.forwarding', 2089, 41, 'forwarding', 'logManage/forwarding/index', '1', '0', 'M', '1', '1', 'logManage:forwarding:index', 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.log.forwardingRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2095, 'menu.log.set', 2089, 45, 'logSet', 'logManage/logSet/index', '1', '0', 'M', '0', '0', 'logManage:logSet:index', 'icon-you', 'supervisor', 1700000000000, 'supervisor', 1715332370830, 'menu.log.setRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2097, 'menu.fault.history', 2129, 2, 'history-alarm', 'faultManage/history-alarm/index', '1', '1', 'M', '1', '1', 'faultManage/history-alarm/index', 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.fault.historyRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2098, 'menu.fault.set', 2129, 100, 'fault-setting', 'faultManage/fault-setting/index', '1', '0', 'M', '1', '1', 'faultManage/fault-setting/index', 'icon-gonggaodayi', 'supervisor', 1700000000000, NULL, 0, 'menu.fault.setRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2099, 'menu.perf', 0, 5, 'perfManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.perfRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2100, 'menu.perf.task', 2099, 1, 'taskManage', 'perfManage/taskManage/index', '1', '1', 'M', '0', '1', 'perfManage:taskManage:index', 'icon-wofaqi', 'supervisor', 1700000000000, 'admin', 1713177036412, 'menu.perf.taskRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2101, 'menu.perf.data', 2099, 2, 'perfData', 'perfManage/perfData/index', '1', '1', 'M', '0', '1', 'perfManage:perfData:index', 'icon-soutubiao', 'supervisor', 1700000000000, 'admin', 1713177042915, 'menu.perf.dataRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2102, 'menu.perf.report', 2099, 3, 'perfReport', 'perfManage/perfReport/index', '1', '0', 'M', '0', '0', 'perfManage:perfReport:index', 'icon-gonggaodayi', 'supervisor', 1700000000000, NULL, 0, 'menu.perf.reportRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2103, 'menu.perf.threshold', 2099, 4, 'perfThreshold', 'perfManage/perfThreshold/index', '1', '0', 'M', '0', '0', 'perfManage:perfThreshold:index', 'icon-zhuanrang', 'supervisor', 1700000000000, 'supervisor', 1715417264697, 'menu.perf.thresholdRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2104, 'menu.perf.kpi', 2099, 5, 'goldTarget', 'perfManage/goldTarget/index', '1', '1', 'M', '1', '1', 'perfManage:goldTarget:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.perf.kpiRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2105, 'menu.perf.customTarget', 2099, 6, 'customTarget', 'perfManage/customTarget/index', '1', '1', 'M', '0', '0', 'perfManage:customTarget:index', 'icon-fanhui1', 'supervisor', 1700000000000, 'admin', 1712807948673, 'menu.perf.customTargetRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2106, 'menu.perf.set', 2099, 7, 'perfSet', 'perfManage/perfSet/index', '1', '0', 'M', '0', '0', 'perfManage:perfSet:index', 'icon-gonggao', 'supervisor', 1700000000000, NULL, 0, 'menu.perf.setRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2107, 'menu.mml', 0, 8, 'mmlManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-zhizuoliucheng', 'supervisor', 1700000000000, NULL, 0, 'menu.mmlRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2108, 'menu.mml.ne', 2107, 1, 'neOperate', 'mmlManage/neOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:neOperate:index', 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.mml.neRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2109, 'menu.mml.udm', 2107, 2, 'udmOperate', 'mmlManage/udmOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:udmOperate:index', 'icon-gonggaodayi', 'supervisor', 1700000000000, NULL, 0, 'menu.mml.udmRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2110, 'menu.mml.set', 2107, 4, 'mmlSet', 'mmlManage/mmlSet/index', '1', '0', 'M', '1', '1', 'mmlManage:mmlSet:index', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.mml.setRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2111, 'menu.mml.omc', 2107, 3, 'omcOperate', 'mmlManage/omcOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:omcOperate:index', 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.mml.omcRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2112, 'menu.config.licenseManage', 4, 5, 'license', 'configManage/license/index', '1', '1', 'M', '1', '0', 'configManage/license/index', 'icon-shang', 'supervisor', 1700000000000, NULL, 0, 'menu.config.licenseManageRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2113, 'menu.security', 0, 14, 'security', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-suofang', 'supervisor', 1700000000000, NULL, 0, 'menu.securityRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2114, 'menu.system.systemSet', 1, 60, 'setting', 'system/setting/index', '1', '1', 'M', '1', '1', 'system:setting:index', 'icon-piliang', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemSetRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2115, 'menu.system.systemResource', 1, 6, 'monitor', 'monitor/monitor/index', '1', '1', 'M', '1', '1', 'monitor:monitor:info', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemResourceRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2118, 'menu.config.configNETreeTable', 4, 2, 'configNETreeTable', 'configManage/configParamTreeTable/index', '1', '1', 'M', '1', '1', 'configManage:configParam:index', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.config.configNETreeTableRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2119, 'menu.ueUser.n3iwf', 5, 8, 'n3iwf', 'neUser/n3iwf/index', '1', '0', 'M', '0', '1', 'neUser:n3iwf:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2120, 'menu.ueUser.pcf', 5, 9, 'pcf', 'neUser/pcf/index', '1', '0', 'M', '1', '1', 'neUser:pcf:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2121, 'menu.system.user.editRole', 100, 8, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:editRole', '#', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2122, 'menu.system.setting.i18n', 2114, 1, NULL, NULL, '1', '1', 'B', '1', '1', 'system:setting:i18n', '#', 'supervisor', 1700000000000, 'supervisor', 1700000000000, 'menu.system.setting.i18nRemark'); -INSERT IGNORE INTO `sys_menu` VALUES (2123, 'menu.log.neFile', 2089, 9, 'neFile', 'logManage/neFile/index', '1', '0', 'M', '1', '1', 'logManage:neFile:index', 'icon-tubiaohuizhi', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2124, 'menu.neUser.nssf', 5, 10, 'nssf', 'neUser/nssf/index', '1', '0', 'M', '0', '1', 'neUser:nssf:index', 'icon-daimayingyong', 'supervisor', 1700000000000, 'supervisor', 1700000000000, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2125, 'menu.neUser.nssfAmf', 5, 11, 'nssfAmf', 'neUser/nssfAmf/index', '1', '0', 'M', '0', '1', 'neUser:nssfAmf:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2126, 'menu.monitor.topology', 2130, 10, 'topology', 'monitor/topology/index', '1', '0', 'M', '1', '1', 'monitor:topology:index', 'icon-fangda', 'supervisor', 1700000000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2127, 'menu.monitor.topologyBuild', 2130, 30, 'topologyBuild', 'monitor/topologyBuild/index', '1', '0', 'M', '1', '1', 'monitor:topologyBuild:index', 'icon-fangda', 'supervisor', 1700000000000, 'supervisor', 1700000000000, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2128, 'menu.monitor.topologyArchitecture', 2130, 20, 'topologyArchitecture', 'monitor/topologyArchitecture/index', '1', '0', 'M', '1', '1', 'monitor:topologyArchitecture:index', 'icon-soutubiao', 'supervisor', 1700000000000, 'supervisor', 1700000000000, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2129, 'menu.alarm', 2087, 20, 'alarm', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-jinggao', 'supervisor', 1704800000000, 'supervisor', 1704847028995, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2130, 'menu.topology', 2087, 10, 'topology', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-anzhuo', 'supervisor', 1704800000000, 'supervisor', 1704847055540, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2131, 'menu.dashboard', 2087, 15, 'dashboard', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-soutubiao', 'supervisor', 1705550000000, 'supervisor', 1705550000000, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2132, 'menu.dashboard.overview', 2131, 1, 'overview', 'dashboard/overview/index', '1', '0', 'M', '1', '1', 'dashboard:overview:index', 'icon-paixu', 'supervisor', 1705550000000, NULL, 0, NULL); -INSERT IGNORE INTO `sys_menu` VALUES (2133, 'menu.dashboard.imsCDR', 2140, 40, 'imsCDR', 'dashboard/imsCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1712751038982, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2135, 'menu.config.neHost', 4, 15, 'neHost', 'ne/neHost/index', '1', '1', 'M', '1', '1', 'ne:neHost:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2136, 'menu.config.neHostCommand', 4, 18, 'neHostCommand', 'ne/neHostCommand/index', '1', '0', 'M', '1', '1', 'ne:neHostCommand:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2137, 'menu.config.neInfo', 4, 14, 'neInfo', 'ne/neInfo/index', '1', '0', 'M', '1', '1', 'ne:neInfo:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2138, 'menu.dashboard.amfUE', 2141, 1, 'amfUE', 'dashboard/amfUE/index', '1', '0', 'M', '1', '1', 'dashboard:amfUE:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1711354049893, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2140, 'menu.monitor.cdr', 2089, 10, 'cdr', '', '1', '0', 'D', '1', '1', '', 'icon-tubiaoku', 'supervisor', 1711352709786, 'supervisor', 1712751135878, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2141, 'menu.monitor.event', 2089, 20, 'event', '', '1', '0', 'D', '1', '1', '', 'icon-gengduo', 'supervisor', 1711352768797, 'supervisor', 1712751125648, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2142, 'menu.ne.neQuickSetup', 4, 10, 'neQuickSetup', 'ne/neQuickSetup/index', '1', '1', 'M', '1', '1', 'ne:neQuickSetup:list', 'icon-wofaqi', 'supervisor', 1708580000000, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2143, 'menu.config.neLicense', 4, 20, 'neLicense', 'ne/neLicense/index', '1', '0', 'M', '1', '1', 'ne:neLicense:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2144, 'menu.config.neSoftware', 4, 23, 'neSoftware', 'ne/neSoftware/index', '1', '0', 'M', '1', '1', 'ne:neSoftware:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2145, 'menu.config.neVersion', 4, 26, 'neVersion', 'ne/neVersion/index', '1', '0', 'M', '1', '1', 'ne:neVersion:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2146, 'menu.ne.neConfPara5G', 4, 8, 'neConfPara5G', 'ne/neConfPara5G/index', '1', '0', 'M', '1', '1', 'ne:neConfPara5G:list', 'icon-wofaqi', 'supervisor', 1708580000000, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2147, 'menu.fault.event', 2129, 3, 'event', 'faultManage/event/index', '1', '0', 'M', '1', '1', 'faultManage:event:index', 'icon-tubiaoku', 'supervisor', 1717051993146, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2148, 'menu.dashboard.smfCDR', 2140, 40, 'smfCDR', 'dashboard/smfCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1712751038982, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2149, 'menu.dashboard.mmeUE', 2141, 5, 'mmeUE', 'dashboard/mmeUE/index', '1', '0', 'M', '1', '1', 'dashboard:mmeUE:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1711354049893, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2150, 'menu.system.user.editPost', 100, 9, '', '', '1', '1', 'B', '1', '1', 'system:user:editPost', '#', 'supervisor', 1700000000000, '', 0, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2151, 'menu.system.setting.doc', 2114, 2, NULL, NULL, '1', '1', 'B', '1', '1', 'system:setting:doc', '#', 'supervisor', 1700000000000, 'supervisor', 1700000000000, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2152, 'menu.system.setting.official', 2114, 3, NULL, NULL, '1', '1', 'B', '1', '1', 'system:setting:official', '#', 'supervisor', 1700000000000, 'supervisor', 1700000000000, ''); -INSERT IGNORE INTO `sys_menu` VALUES (2153, 'menu.system.setting.lock', 2114, 4, NULL, NULL, '1', '1', 'B', '1', '1', 'system:setting:lock', '#', 'supervisor', 1700000000000, 'supervisor', 1700000000000, ''); +REPLACE INTO `sys_menu` VALUES (1, 'menu.system', 0, 16, 'system', NULL, '1', '1', 'D', '1', '1', NULL, 'icon-xiangmu', 'supervisor', 1700000000000, NULL, 0, 'menu.systemRemark'); +REPLACE INTO `sys_menu` VALUES (4, 'menu.config', 0, 3, 'configManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.configRemark'); +REPLACE INTO `sys_menu` VALUES (5, 'menu.ueUser', 0, 7, 'neUser', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-wocanyu', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUserRemark'); +REPLACE INTO `sys_menu` VALUES (100, 'menu.security.user', 2113, 1, 'user', 'system/user/index', '1', '1', 'M', '1', '1', 'system:user:list', 'icon-wocanyu', 'supervisor', 1700000000000, NULL, 0, 'menu.security.userRemark'); +REPLACE INTO `sys_menu` VALUES (101, 'menu.security.role', 2113, 3, 'role', 'system/role/index', '1', '1', 'M', '1', '1', 'system:role:list', 'icon-anzhuo', 'supervisor', 1700000000000, NULL, 0, 'menu.security.roleRemark'); +REPLACE INTO `sys_menu` VALUES (102, 'menu.security.roleUser', 2113, 3, 'role/inline/auth-user/:roleId', 'system/role/auth-user', '1', '1', 'M', '0', '1', 'system:role:auth', '#', 'supervisor', 1700000000000, NULL, 0, 'menu.security.roleUserRemark'); +REPLACE INTO `sys_menu` VALUES (103, 'menu.system.menu', 1, 10, 'menu', 'system/menu/index', '1', '1', 'M', '1', '1', 'system:menu:list', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.system.menuRemark'); +REPLACE INTO `sys_menu` VALUES (104, 'menu.security.dept', 2113, 5, 'dept', 'system/dept/index', '1', '1', 'M', '1', '1', 'system:dept:list', 'icon-yuzhanghao1', 'supervisor', 1700000000000, NULL, 0, 'menu.security.deptRemark'); +REPLACE INTO `sys_menu` VALUES (105, 'menu.security.post', 2113, 6, 'post', 'system/post/index', '1', '1', 'M', '1', '1', 'system:post:list', 'icon-gonggaodayi', 'supervisor', 1700000000000, NULL, 0, 'menu.security.postRemark'); +REPLACE INTO `sys_menu` VALUES (106, 'menu.system.dictType', 1, 30, 'dict', 'system/dict/index', '1', '1', 'M', '1', '1', 'system:dict:list', 'icon-tubiaoku', 'supervisor', 1700000000000, NULL, 0, 'menu.system.dictTypeRemark'); +REPLACE INTO `sys_menu` VALUES (107, 'menu.system.dictData', 1, 31, 'dict/inline/data/:dictId', 'system/dict/data', '1', '1', 'M', '0', '1', 'system:dict:data', '#', 'supervisor', 1700000000000, NULL, 0, 'menu.system.dictDataRemark'); +REPLACE INTO `sys_menu` VALUES (108, 'menu.system.paramSet', 1, 59, 'config', 'system/config/index', '1', '1', 'M', '1', '1', 'system:config:list', 'icon-gongnengjieshao', 'supervisor', 1700000000000, NULL, 0, 'menu.system.paramSetRemark'); +REPLACE INTO `sys_menu` VALUES (111, 'menu.system.systemLog', 1, 11, 'log', NULL, '1', '1', 'D', '0', '0', NULL, '#', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemLogRemark'); +REPLACE INTO `sys_menu` VALUES (112, 'menu.system.systemInfo', 1, 5, 'system-info', 'monitor/system/info', '1', '1', 'M', '1', '1', 'monitor:system:info', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemInfoRemark'); +REPLACE INTO `sys_menu` VALUES (113, 'menu.system.cacheInfo', 1, 8, 'cache-info', 'monitor/cache/info', '1', '1', 'M', '1', '1', 'monitor:cache:info', 'icon-gongnengjieshao', 'supervisor', 1700000000000, NULL, 0, 'menu.system.cacheInfoRemark'); +REPLACE INTO `sys_menu` VALUES (114, 'menu.system.cache', 1, 9, 'cache', 'monitor/cache/index', '1', '1', 'M', '1', '1', 'monitor:cache:list', 'icon-tubiaoku', 'supervisor', 1700000000000, NULL, 0, 'menu.system.cacheRemark'); +REPLACE INTO `sys_menu` VALUES (115, 'menu.security.onlineUser', 2113, 2, 'online', 'monitor/online/index', '1', '1', 'M', '1', '1', 'monitor:online:list', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.security.onlineUserRemark'); +REPLACE INTO `sys_menu` VALUES (116, 'menu.system.job', 1, 20, 'job', 'monitor/job/index', '1', '1', 'M', '1', '1', 'monitor:job:list', 'icon-lishi', 'supervisor', 1700000000000, NULL, 0, 'menu.system.jobRemark'); +REPLACE INTO `sys_menu` VALUES (117, 'menu.system.jobLog', 1, 21, '/system/job/inline/log/:jobId', 'monitor/job/log', '1', '1', 'M', '0', '1', 'monitor:job:log', '#', 'supervisor', 1700000000000, NULL, 0, 'menu.system.jobLogRemark'); +REPLACE INTO `sys_menu` VALUES (500, 'menu.log.operat', 2089, 25, 'operate', 'system/log/operate/index', '1', '1', 'M', '1', '1', 'system:log:operate:list', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.operatRemark'); +REPLACE INTO `sys_menu` VALUES (501, 'menu.log.login', 2089, 26, 'login', 'system/log/login/index', '1', '1', 'M', '1', '1', 'system:log:login:list', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.loginRemark'); +REPLACE INTO `sys_menu` VALUES (1000, 'menu.common.query', 100, 1, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1001, 'menu.common.add', 100, 2, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:add', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1002, 'menu.common.edit', 100, 3, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:edit', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1003, 'menu.common.delete', 100, 4, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1004, 'menu.common.export', 100, 5, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:export', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1005, 'menu.common.import', 100, 6, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:import', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1006, 'menu.common.resetPwd', 100, 7, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:resetPwd', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1007, 'menu.common.query', 101, 1, NULL, NULL, '1', '1', 'B', '1', '1', 'system:role:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1008, 'menu.common.add', 101, 2, NULL, NULL, '1', '1', 'B', '1', '1', 'system:role:add', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1009, 'menu.common.edit', 101, 3, NULL, NULL, '1', '1', 'B', '1', '1', 'system:role:edit', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1010, 'menu.common.delete', 101, 4, NULL, NULL, '1', '1', 'B', '1', '1', 'system:role:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1011, 'menu.common.export', 101, 5, NULL, NULL, '1', '1', 'B', '1', '1', 'system:role:export', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1012, 'menu.common.query', 103, 1, NULL, NULL, '1', '1', 'B', '1', '1', 'system:menu:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1013, 'menu.common.add', 103, 2, NULL, NULL, '1', '1', 'B', '1', '1', 'system:menu:add', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1014, 'menu.common.edit', 103, 3, NULL, NULL, '1', '1', 'B', '1', '1', 'system:menu:edit', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1015, 'menu.common.delete', 103, 4, NULL, NULL, '1', '1', 'B', '1', '1', 'system:menu:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1016, 'menu.common.query', 104, 1, NULL, NULL, '1', '1', 'B', '1', '1', 'system:dept:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1017, 'menu.common.add', 104, 2, NULL, NULL, '1', '1', 'B', '1', '1', 'system:dept:add', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1018, 'menu.common.edit', 104, 3, NULL, NULL, '1', '1', 'B', '1', '1', 'system:dept:edit', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1019, 'menu.common.delete', 104, 4, NULL, NULL, '1', '1', 'B', '1', '1', 'system:dept:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1020, 'menu.common.query', 105, 1, NULL, NULL, '1', '1', 'B', '1', '1', 'system:post:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1021, 'menu.common.add', 105, 2, NULL, NULL, '1', '1', 'B', '1', '1', 'system:post:add', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1022, 'menu.common.edit', 105, 3, NULL, NULL, '1', '1', 'B', '1', '1', 'system:post:edit', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1023, 'menu.common.delete', 105, 4, NULL, NULL, '1', '1', 'B', '1', '1', 'system:post:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1024, 'menu.common.export', 105, 5, NULL, NULL, '1', '1', 'B', '1', '1', 'system:post:export', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1025, 'menu.common.query', 106, 1, '#', NULL, '1', '1', 'B', '1', '1', 'system:dict:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1026, 'menu.common.add', 106, 2, '#', NULL, '1', '1', 'B', '1', '1', 'system:dict:add', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1027, 'menu.common.edit', 106, 3, '#', NULL, '1', '1', 'B', '1', '1', 'system:dict:edit', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1028, 'menu.common.delete', 106, 4, '#', NULL, '1', '1', 'B', '1', '1', 'system:dict:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1029, 'menu.common.export', 106, 5, '#', NULL, '1', '1', 'B', '1', '1', 'system:dict:export', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1030, 'menu.common.query', 108, 1, '#', NULL, '1', '1', 'B', '1', '1', 'system:config:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1031, 'menu.common.add', 108, 2, '#', NULL, '1', '1', 'B', '1', '1', 'system:config:add', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1032, 'menu.common.edit', 108, 3, '#', NULL, '1', '1', 'B', '1', '1', 'system:config:edit', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1033, 'menu.common.delete', 108, 4, '#', NULL, '1', '1', 'B', '1', '1', 'system:config:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1034, 'menu.common.export', 108, 5, '#', NULL, '1', '1', 'B', '1', '1', 'system:config:export', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1039, 'menu.common.query', 500, 1, '#', NULL, '1', '1', 'B', '1', '1', 'system:log:operate:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1040, 'menu.common.delete', 500, 2, '#', NULL, '1', '1', 'B', '1', '1', 'system:log:operate:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1041, 'menu.common.export', 500, 3, '#', NULL, '1', '1', 'B', '1', '1', 'system:log:operate:export', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1042, 'menu.common.query', 501, 1, '#', NULL, '1', '1', 'B', '1', '1', 'system:log:login:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1043, 'menu.common.delete', 501, 2, '#', NULL, '1', '1', 'B', '1', '1', 'system:log:login:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1044, 'menu.common.export', 501, 3, '#', NULL, '1', '1', 'B', '1', '1', 'system:log:login:export', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1045, 'menu.common.unlock', 501, 4, '#', NULL, '1', '1', 'B', '1', '1', 'system:log:login:unlock', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1046, 'menu.common.query', 114, 1, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:cache:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1047, 'menu.common.delete', 114, 2, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:cache:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1048, 'menu.common.query', 115, 1, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:online:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1049, 'menu.forcedQuit.batch ', 115, 2, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:online:batchLogout', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1050, 'menu.forcedQuit.single', 115, 3, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:online:forceLogout', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1051, 'menu.common.query', 116, 1, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:job:query', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1052, 'menu.common.add', 116, 2, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:job:add', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1053, 'menu.common.edit', 116, 3, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:job:edit', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1054, 'menu.common.delete', 116, 4, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:job:remove', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1055, 'menu.common.edit', 116, 5, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:job:changeStatus', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (1056, 'menu.common.export', 116, 6, '#', NULL, '1', '1', 'B', '1', '1', 'monitor:job:export', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (2009, 'menu.ueUser.authUDM', 5, 1, 'auth', 'neUser/auth/index', '1', '1', 'M', '1', '1', 'neUser:auth:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.authUDMRemark'); +REPLACE INTO `sys_menu` VALUES (2010, 'menu.ueUser.subUDM', 5, 2, 'sub', 'neUser/sub/index', '1', '1', 'M', '1', '1', 'neUser:sub:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.subUDMRemark'); +REPLACE INTO `sys_menu` VALUES (2075, 'menu.config.neManage', 4, 1, 'neManage', 'configManage/neManage/index', '1', '0', 'M', '1', '0', 'configManage:neManage:index', 'icon-biaoqing', 'supervisor', 1700000000000, NULL, 0, 'menu.config.neManageRemark'); +REPLACE INTO `sys_menu` VALUES (2078, 'menu.config.backupManage', 4, 3, 'backupManage', 'configManage/backupManage/index', '1', '0', 'M', '1', '0', 'configManage:backupManage:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.config.backupManageRemark'); +REPLACE INTO `sys_menu` VALUES (2079, 'menu.config.softwareManage', 4, 4, 'softwareManage', 'configManage/softwareManage/index', '1', '0', 'M', '1', '0', 'configManage:softwareManage:index', 'icon-huidingbu', 'supervisor', 1700000000000, NULL, 0, 'menu.config.softwareManageRemark'); +REPLACE INTO `sys_menu` VALUES (2080, 'menu.ueUser.onlineIMS', 5, 4, 'ims', 'neUser/ims/index', '1', '0', 'M', '1', '1', 'neUser:ims:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.onlineIMSRemark'); +REPLACE INTO `sys_menu` VALUES (2081, 'menu.ueUser.onlineUE', 5, 6, 'ue', 'neUser/ue/index', '1', '0', 'M', '1', '1', 'neUser:ue:index', 'icon-xiangmuchengyuan', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.onlineUERemark'); +REPLACE INTO `sys_menu` VALUES (2082, 'menu.ueUser.base5G', 5, 7, 'base5G', 'neUser/base5G/index', '1', '0', 'M', '1', '1', 'neUser:base5G:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, 'menu.ueUser.base5GRemark'); +REPLACE INTO `sys_menu` VALUES (2083, 'menu.trace', 2087, 30, 'traceManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, 'menu.traceRemark'); +REPLACE INTO `sys_menu` VALUES (2084, 'menu.trace.task', 2083, 1, 'task', 'traceManage/task/index', '1', '0', 'M', '0', '1', 'traceManage:task:index', 'icon-chexiao', 'supervisor', 1700000000000, 'admin', 1713176976458, 'menu.trace.taskRemark'); +REPLACE INTO `sys_menu` VALUES (2085, 'menu.trace.analysis', 2083, 2, 'analysis', 'traceManage/analysis/index', '1', '0', 'M', '0', '1', 'traceManage:analysis:index', 'icon-gongnengjieshao', 'supervisor', 1700000000000, 'admin', 1713176987835, 'menu.trace.analysisRemark'); +REPLACE INTO `sys_menu` VALUES (2086, 'menu.trace.pcap', 2083, 3, 'pcap', 'traceManage/pcap/index', '1', '1', 'M', '1', '1', 'traceManage:pcap:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.trace.pcapRemark'); +REPLACE INTO `sys_menu` VALUES (2087, 'menu.fault', 0, 2, 'faultManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-jinggao', 'supervisor', 1700000000000, NULL, 0, 'menu.faultRemark'); +REPLACE INTO `sys_menu` VALUES (2088, 'menu.fault.active', 2129, 1, 'active-alarm', 'faultManage/active-alarm/index', '1', '1', 'M', '1', '1', 'faultManage:active-alarm:index', 'icon-wenjian', 'supervisor', 1700000000000, NULL, 0, 'menu.fault.activemRemark'); +REPLACE INTO `sys_menu` VALUES (2089, 'menu.log', 0, 9, 'logManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.logRemark'); +REPLACE INTO `sys_menu` VALUES (2091, 'menu.log.mml', 2089, 30, 'mml', 'logManage/mml/index', '1', '1', 'M', '1', '1', 'logManage:mml:index', 'icon-wocanyu', 'supervisor', 1700000000000, NULL, 0, 'menu.log.mmlRemark'); +REPLACE INTO `sys_menu` VALUES (2092, 'menu.log.alarm', 2089, 40, 'alarm-log', 'logManage/alarm/index', '1', '0', 'M', '1', '1', 'logManage:alarm:index', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.alarmRemark'); +REPLACE INTO `sys_menu` VALUES (2094, 'menu.log.forwarding', 2089, 41, 'forwarding', 'logManage/forwarding/index', '1', '0', 'M', '1', '1', 'logManage:forwarding:index', 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.log.forwardingRemark'); +REPLACE INTO `sys_menu` VALUES (2095, 'menu.log.set', 2089, 45, 'logSet', 'logManage/logSet/index', '1', '0', 'M', '0', '0', 'logManage:logSet:index', 'icon-you', 'supervisor', 1700000000000, 'supervisor', 1715332370830, 'menu.log.setRemark'); +REPLACE INTO `sys_menu` VALUES (2097, 'menu.fault.history', 2129, 2, 'history-alarm', 'faultManage/history-alarm/index', '1', '1', 'M', '1', '1', 'faultManage/history-alarm/index', 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.fault.historyRemark'); +REPLACE INTO `sys_menu` VALUES (2098, 'menu.fault.set', 2129, 100, 'fault-setting', 'faultManage/fault-setting/index', '1', '0', 'M', '1', '1', 'faultManage/fault-setting/index', 'icon-gonggaodayi', 'supervisor', 1700000000000, NULL, 0, 'menu.fault.setRemark'); +REPLACE INTO `sys_menu` VALUES (2099, 'menu.perf', 0, 5, 'perfManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.perfRemark'); +REPLACE INTO `sys_menu` VALUES (2100, 'menu.perf.task', 2099, 1, 'taskManage', 'perfManage/taskManage/index', '1', '1', 'M', '0', '1', 'perfManage:taskManage:index', 'icon-wofaqi', 'supervisor', 1700000000000, 'admin', 1713177036412, 'menu.perf.taskRemark'); +REPLACE INTO `sys_menu` VALUES (2101, 'menu.perf.data', 2099, 2, 'perfData', 'perfManage/perfData/index', '1', '1', 'M', '0', '1', 'perfManage:perfData:index', 'icon-soutubiao', 'supervisor', 1700000000000, 'admin', 1713177042915, 'menu.perf.dataRemark'); +REPLACE INTO `sys_menu` VALUES (2102, 'menu.perf.report', 2099, 3, 'perfReport', 'perfManage/perfReport/index', '1', '0', 'M', '0', '0', 'perfManage:perfReport:index', 'icon-gonggaodayi', 'supervisor', 1700000000000, NULL, 0, 'menu.perf.reportRemark'); +REPLACE INTO `sys_menu` VALUES (2103, 'menu.perf.threshold', 2099, 4, 'perfThreshold', 'perfManage/perfThreshold/index', '1', '0', 'M', '0', '0', 'perfManage:perfThreshold:index', 'icon-zhuanrang', 'supervisor', 1700000000000, 'supervisor', 1715417264697, 'menu.perf.thresholdRemark'); +REPLACE INTO `sys_menu` VALUES (2104, 'menu.perf.kpi', 2099, 5, 'goldTarget', 'perfManage/goldTarget/index', '1', '1', 'M', '1', '1', 'perfManage:goldTarget:index', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.perf.kpiRemark'); +REPLACE INTO `sys_menu` VALUES (2105, 'menu.perf.customTarget', 2099, 6, 'customTarget', 'perfManage/customTarget/index', '1', '1', 'M', '0', '0', 'perfManage:customTarget:index', 'icon-fanhui1', 'supervisor', 1700000000000, 'admin', 1712807948673, 'menu.perf.customTargetRemark'); +REPLACE INTO `sys_menu` VALUES (2106, 'menu.perf.set', 2099, 7, 'perfSet', 'perfManage/perfSet/index', '1', '0', 'M', '0', '0', 'perfManage:perfSet:index', 'icon-gonggao', 'supervisor', 1700000000000, NULL, 0, 'menu.perf.setRemark'); +REPLACE INTO `sys_menu` VALUES (2107, 'menu.mml', 0, 8, 'mmlManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-zhizuoliucheng', 'supervisor', 1700000000000, NULL, 0, 'menu.mmlRemark'); +REPLACE INTO `sys_menu` VALUES (2108, 'menu.mml.ne', 2107, 1, 'neOperate', 'mmlManage/neOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:neOperate:index', 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.mml.neRemark'); +REPLACE INTO `sys_menu` VALUES (2109, 'menu.mml.udm', 2107, 2, 'udmOperate', 'mmlManage/udmOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:udmOperate:index', 'icon-gonggaodayi', 'supervisor', 1700000000000, NULL, 0, 'menu.mml.udmRemark'); +REPLACE INTO `sys_menu` VALUES (2110, 'menu.mml.set', 2107, 4, 'mmlSet', 'mmlManage/mmlSet/index', '1', '0', 'M', '1', '1', 'mmlManage:mmlSet:index', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.mml.setRemark'); +REPLACE INTO `sys_menu` VALUES (2111, 'menu.mml.omc', 2107, 3, 'omcOperate', 'mmlManage/omcOperate/index', '1', '1', 'M', '1', '1', 'mmlManage:omcOperate:index', 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.mml.omcRemark'); +REPLACE INTO `sys_menu` VALUES (2112, 'menu.config.licenseManage', 4, 5, 'license', 'configManage/license/index', '1', '1', 'M', '1', '0', 'configManage/license/index', 'icon-shang', 'supervisor', 1700000000000, NULL, 0, 'menu.config.licenseManageRemark'); +REPLACE INTO `sys_menu` VALUES (2113, 'menu.security', 0, 14, 'security', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-suofang', 'supervisor', 1700000000000, NULL, 0, 'menu.securityRemark'); +REPLACE INTO `sys_menu` VALUES (2114, 'menu.system.systemSet', 1, 60, 'setting', 'system/setting/index', '1', '1', 'M', '1', '1', 'system:setting:index', 'icon-piliang', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemSetRemark'); +REPLACE INTO `sys_menu` VALUES (2115, 'menu.system.systemResource', 1, 6, 'monitor', 'monitor/monitor/index', '1', '1', 'M', '1', '1', 'monitor:monitor:info', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemResourceRemark'); +REPLACE INTO `sys_menu` VALUES (2118, 'menu.config.configNETreeTable', 4, 2, 'configNETreeTable', 'configManage/configParamTreeTable/index', '1', '1', 'M', '1', '1', 'configManage:configParam:index', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.config.configNETreeTableRemark'); +REPLACE INTO `sys_menu` VALUES (2119, 'menu.ueUser.n3iwf', 5, 8, 'n3iwf', 'neUser/n3iwf/index', '1', '0', 'M', '0', '1', 'neUser:n3iwf:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (2120, 'menu.ueUser.pcf', 5, 9, 'pcf', 'neUser/pcf/index', '1', '0', 'M', '1', '1', 'neUser:pcf:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (2121, 'menu.system.user.editRole', 100, 8, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:editRole', '#', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (2122, 'menu.system.setting.i18n', 2114, 1, NULL, NULL, '1', '1', 'B', '1', '1', 'system:setting:i18n', '#', 'supervisor', 1700000000000, 'supervisor', 1700000000000, 'menu.system.setting.i18nRemark'); +REPLACE INTO `sys_menu` VALUES (2123, 'menu.log.neFile', 2089, 9, 'neFile', 'logManage/neFile/index', '1', '0', 'M', '1', '1', 'logManage:neFile:index', 'icon-tubiaohuizhi', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (2124, 'menu.neUser.nssf', 5, 10, 'nssf', 'neUser/nssf/index', '1', '0', 'M', '0', '1', 'neUser:nssf:index', 'icon-daimayingyong', 'supervisor', 1700000000000, 'supervisor', 1700000000000, NULL); +REPLACE INTO `sys_menu` VALUES (2125, 'menu.neUser.nssfAmf', 5, 11, 'nssfAmf', 'neUser/nssfAmf/index', '1', '0', 'M', '0', '1', 'neUser:nssfAmf:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (2126, 'menu.monitor.topology', 2130, 10, 'topology', 'monitor/topology/index', '1', '0', 'M', '1', '1', 'monitor:topology:index', 'icon-fangda', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (2127, 'menu.monitor.topologyBuild', 2130, 30, 'topologyBuild', 'monitor/topologyBuild/index', '1', '0', 'M', '1', '1', 'monitor:topologyBuild:index', 'icon-fangda', 'supervisor', 1700000000000, 'supervisor', 1700000000000, NULL); +REPLACE INTO `sys_menu` VALUES (2128, 'menu.monitor.topologyArchitecture', 2130, 20, 'topologyArchitecture', 'monitor/topologyArchitecture/index', '1', '0', 'M', '1', '1', 'monitor:topologyArchitecture:index', 'icon-soutubiao', 'supervisor', 1700000000000, 'supervisor', 1700000000000, NULL); +REPLACE INTO `sys_menu` VALUES (2129, 'menu.alarm', 2087, 20, 'alarm', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-jinggao', 'supervisor', 1704800000000, 'supervisor', 1704847028995, NULL); +REPLACE INTO `sys_menu` VALUES (2130, 'menu.topology', 2087, 10, 'topology', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-anzhuo', 'supervisor', 1704800000000, 'supervisor', 1704847055540, NULL); +REPLACE INTO `sys_menu` VALUES (2131, 'menu.dashboard', 2087, 15, 'dashboard', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-soutubiao', 'supervisor', 1705550000000, 'supervisor', 1705550000000, NULL); +REPLACE INTO `sys_menu` VALUES (2132, 'menu.dashboard.overview', 2131, 1, 'overview', 'dashboard/overview/index', '1', '0', 'M', '1', '1', 'dashboard:overview:index', 'icon-paixu', 'supervisor', 1705550000000, NULL, 0, NULL); +REPLACE INTO `sys_menu` VALUES (2133, 'menu.dashboard.imsCDR', 2140, 40, 'imsCDR', 'dashboard/imsCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1712751038982, ''); +REPLACE INTO `sys_menu` VALUES (2135, 'menu.config.neHost', 4, 15, 'neHost', 'ne/neHost/index', '1', '1', 'M', '1', '1', 'ne:neHost:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); +REPLACE INTO `sys_menu` VALUES (2136, 'menu.config.neHostCommand', 4, 18, 'neHostCommand', 'ne/neHostCommand/index', '1', '0', 'M', '1', '1', 'ne:neHostCommand:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); +REPLACE INTO `sys_menu` VALUES (2137, 'menu.config.neInfo', 4, 14, 'neInfo', 'ne/neInfo/index', '1', '0', 'M', '1', '1', 'ne:neInfo:list', 'icon-fuzhidaima', 'supervisor', 1708583596871, '', 0, ''); +REPLACE INTO `sys_menu` VALUES (2138, 'menu.dashboard.amfUE', 2141, 1, 'amfUE', 'dashboard/amfUE/index', '1', '0', 'M', '1', '1', 'dashboard:amfUE:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1711354049893, ''); +REPLACE INTO `sys_menu` VALUES (2140, 'menu.monitor.cdr', 2089, 10, 'cdr', '', '1', '0', 'D', '1', '1', '', 'icon-tubiaoku', 'supervisor', 1711352709786, 'supervisor', 1712751135878, ''); +REPLACE INTO `sys_menu` VALUES (2141, 'menu.monitor.event', 2089, 20, 'event', '', '1', '0', 'D', '1', '1', '', 'icon-gengduo', 'supervisor', 1711352768797, 'supervisor', 1712751125648, ''); +REPLACE INTO `sys_menu` VALUES (2142, 'menu.ne.neQuickSetup', 4, 10, 'neQuickSetup', 'ne/neQuickSetup/index', '1', '1', 'M', '1', '1', 'ne:neQuickSetup:list', 'icon-wofaqi', 'supervisor', 1708580000000, '', 0, ''); +REPLACE INTO `sys_menu` VALUES (2143, 'menu.config.neLicense', 4, 20, 'neLicense', 'ne/neLicense/index', '1', '0', 'M', '1', '1', 'ne:neLicense:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); +REPLACE INTO `sys_menu` VALUES (2144, 'menu.config.neSoftware', 4, 23, 'neSoftware', 'ne/neSoftware/index', '1', '0', 'M', '1', '1', 'ne:neSoftware:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); +REPLACE INTO `sys_menu` VALUES (2145, 'menu.config.neVersion', 4, 26, 'neVersion', 'ne/neVersion/index', '1', '0', 'M', '1', '1', 'ne:neVersion:list', 'icon-fuzhidaima', 'supervisor', 1708580000000, '', 0, ''); +REPLACE INTO `sys_menu` VALUES (2146, 'menu.ne.neConfPara5G', 4, 8, 'neConfPara5G', 'ne/neConfPara5G/index', '1', '0', 'M', '1', '1', 'ne:neConfPara5G:list', 'icon-wofaqi', 'supervisor', 1708580000000, '', 0, ''); +REPLACE INTO `sys_menu` VALUES (2147, 'menu.fault.event', 2129, 3, 'event', 'faultManage/event/index', '1', '0', 'M', '1', '1', 'faultManage:event:index', 'icon-tubiaoku', 'supervisor', 1717051993146, '', 0, ''); +REPLACE INTO `sys_menu` VALUES (2148, 'menu.dashboard.smfCDR', 2140, 40, 'smfCDR', 'dashboard/smfCDR/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1712751038982, ''); +REPLACE INTO `sys_menu` VALUES (2149, 'menu.dashboard.mmeUE', 2141, 5, 'mmeUE', 'dashboard/mmeUE/index', '1', '0', 'M', '1', '1', 'dashboard:mmeUE:index', 'icon-paixu', 'supervisor', 1705550000000, 'supervisor', 1711354049893, ''); +REPLACE INTO `sys_menu` VALUES (2150, 'menu.system.user.editPost', 100, 9, '', '', '1', '1', 'B', '1', '1', 'system:user:editPost', '#', 'supervisor', 1700000000000, '', 0, ''); +REPLACE INTO `sys_menu` VALUES (2151, 'menu.system.setting.doc', 2114, 2, NULL, NULL, '1', '1', 'B', '1', '1', 'system:setting:doc', '#', 'supervisor', 1700000000000, 'supervisor', 1700000000000, ''); +REPLACE INTO `sys_menu` VALUES (2152, 'menu.system.setting.official', 2114, 3, NULL, NULL, '1', '1', 'B', '1', '1', 'system:setting:official', '#', 'supervisor', 1700000000000, 'supervisor', 1700000000000, ''); +REPLACE INTO `sys_menu` VALUES (2153, 'menu.system.setting.lock', 2114, 4, NULL, NULL, '1', '1', 'B', '1', '1', 'system:setting:lock', '#', 'supervisor', 1700000000000, 'supervisor', 1700000000000, ''); +REPLACE INTO `sys_menu` VALUES (2154, 'menu.config.neConfigBackup', 4, 10, 'neConfigBackup', 'ne/neConfigBackup/index', '1', '0', 'M', '1', '1', 'ne:neConfigBackup:list', 'icon-fuzhidaima', 'supervisor', 1721902269805, '', 0, ''); -- 指定记录条件更新 diff --git a/database/upgrade/upg_sys_role_menu.sql b/database/upgrade/upg_sys_role_menu.sql index 3683123b..e04f9f1c 100644 --- a/database/upgrade/upg_sys_role_menu.sql +++ b/database/upgrade/upg_sys_role_menu.sql @@ -94,7 +94,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1055); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1056); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2009); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2010); -INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2078); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2080); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2081); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2082); @@ -154,6 +153,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2150); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2151); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2152); INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2153); +INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2154); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 4); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 5); @@ -171,7 +171,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1042); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1048); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2009); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2010); -INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2078); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2080); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2081); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2082); @@ -225,6 +224,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2149); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2151); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2152); INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2153); +INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2154); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 5); INSERT IGNORE INTO `sys_role_menu` VALUES (4, 112); From 3b01d48a993cb6309decb06fa36e49cd60f58670 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 26 Jul 2024 18:30:40 +0800 Subject: [PATCH 22/34] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=A4=87=E4=BB=BD=E5=88=97=E8=A1=A8=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E6=A8=A1=E7=B3=8A=E6=9F=A5=E8=AF=A2=EF=BC=8C?= =?UTF-8?q?=E6=8C=89=E6=9C=80=E6=96=B0=E9=99=8D=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/repository/ne_config_backup.impl.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/network_element/repository/ne_config_backup.impl.go b/src/modules/network_element/repository/ne_config_backup.impl.go index 6a82d748..17331822 100644 --- a/src/modules/network_element/repository/ne_config_backup.impl.go +++ b/src/modules/network_element/repository/ne_config_backup.impl.go @@ -68,7 +68,7 @@ func (r *NeConfigBackupImpl) SelectPage(query map[string]any) map[string]any { params = append(params, strings.Trim(v.(string), " ")) } if v, ok := query["name"]; ok && v != "" { - conditions = append(conditions, "name like concat(?, '%')") + conditions = append(conditions, "name like concat(concat('%', ?), '%')") params = append(params, strings.Trim(v.(string), " ")) } @@ -99,7 +99,7 @@ func (r *NeConfigBackupImpl) SelectPage(query map[string]any) map[string]any { // 分页 pageNum, pageSize := repo.PageNumSize(query["pageNum"], query["pageSize"]) - pageSql := " limit ?,? " + pageSql := " order by id desc limit ?,? " params = append(params, pageNum*pageSize) params = append(params, pageSize) From d8f97af7c03d7ad31f424c01864b44b838a47b07 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 26 Jul 2024 18:31:36 +0800 Subject: [PATCH 23/34] =?UTF-8?q?fix:=20=E7=BD=91=E5=85=83=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=A4=87=E4=BB=BD=E6=94=AF=E6=8C=81MME=E9=85=8D?= =?UTF-8?q?=E7=BD=AEconf=E6=96=87=E4=BB=B6cp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/service/ne_config_backup.impl.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/modules/network_element/service/ne_config_backup.impl.go b/src/modules/network_element/service/ne_config_backup.impl.go index bfb5f639..3968c2c4 100644 --- a/src/modules/network_element/service/ne_config_backup.impl.go +++ b/src/modules/network_element/service/ne_config_backup.impl.go @@ -121,7 +121,11 @@ func (r *NeConfigBackupImpl) NeConfigLocalToNe(neInfo model.NeInfo, localFile st 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 { neEtcPath := fmt.Sprintf("/usr/local/etc/%s", neTypeLower) - sshClient.RunCMD(fmt.Sprintf("sudo cp -rf %s/* %s && sudo chmod 755 %s/*.yaml", neDirTemp, neEtcPath, neEtcPath)) + chmodFile := fmt.Sprintf("sudo chmod 755 %s/*.yaml", neEtcPath) + if neTypeLower == "mme" { + chmodFile = fmt.Sprintf("sudo chmod 755 %s/*.{yaml,conf}", neEtcPath) + } + sshClient.RunCMD(fmt.Sprintf("sudo cp -rf %s/* %s && %s", neDirTemp, neEtcPath, chmodFile)) } _ = os.RemoveAll(localDirPath) // 删除本地临时目录 @@ -170,6 +174,9 @@ func (r *NeConfigBackupImpl) NeConfigNeToLocal(neInfo model.NeInfo) (string, err sshClient.RunCMD(fmt.Sprintf("mkdir -p %s/iwf && sudo cp -rf /usr/local/etc/iwf/*.yaml %s/iwf", neDirTemp, neDirTemp)) } else { nePath := fmt.Sprintf("/usr/local/etc/%s/*.yaml", neTypeLower) + if neTypeLower == "mme" { + nePath = fmt.Sprintf("/usr/local/etc/%s/*.{yaml,conf}", neTypeLower) + } sshClient.RunCMD(fmt.Sprintf("mkdir -p %s && sudo cp -rf %s %s", neDirTemp, nePath, neDirTemp)) } From c55a0ad014306d0b8732dd6b1a55bf9a5ea9eb23 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 26 Jul 2024 19:18:58 +0800 Subject: [PATCH 24/34] =?UTF-8?q?sql:=20=E6=B7=BB=E5=8A=A0=E8=B0=83?= =?UTF-8?q?=E5=BA=A6=E4=BB=BB=E5=8A=A1>=E7=BD=91=E5=85=83-=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E5=AE=9A=E6=9C=9F=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/sys_dict_data1_i18n_zh.sql | 2 ++ database/install/sys_dict_data2_i18n_en.sql | 2 ++ database/install/sys_job.sql | 1 + database/upgrade/upg_sys_dict_data1_i18n_zh.sql | 2 ++ database/upgrade/upg_sys_dict_data2_i18n_en.sql | 2 ++ database/upgrade/upg_sys_job.sql | 4 +++- 6 files changed, 12 insertions(+), 1 deletion(-) diff --git a/database/install/sys_dict_data1_i18n_zh.sql b/database/install/sys_dict_data1_i18n_zh.sql index 44be754a..aed3df1f 100644 --- a/database/install/sys_dict_data1_i18n_zh.sql +++ b/database/install/sys_dict_data1_i18n_zh.sql @@ -662,5 +662,7 @@ INSERT INTO `sys_dict_data` VALUES (2151, 2151, 'menu.system.setting.doc', '系 INSERT INTO `sys_dict_data` VALUES (2152, 2152, 'menu.system.setting.official', '官网链接', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2153, 2153, 'menu.system.setting.lock', '锁屏操作', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (2154, 2154, 'menu.config.neConfigBackup', '网元配置备份', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2155, 2155, 'job.ne_config_backup', '网元-配置文件定期备份', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (2156, 2156, 'job.ne_config_backup_remark', '网元配置文件定期备份到网管服务器\r\n可查看网元配置备份记录进行下载或通过网元信息操作导入配置', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/sys_dict_data2_i18n_en.sql b/database/install/sys_dict_data2_i18n_en.sql index 70f5edb2..eebcb755 100644 --- a/database/install/sys_dict_data2_i18n_en.sql +++ b/database/install/sys_dict_data2_i18n_en.sql @@ -662,5 +662,7 @@ INSERT INTO `sys_dict_data` VALUES (4151, 4151, 'menu.system.setting.doc', 'Syst INSERT INTO `sys_dict_data` VALUES (4152, 4152, 'menu.system.setting.official', 'Official Website', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4153, 4153, 'menu.system.setting.lock', 'Lockscreen Operation', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); INSERT INTO `sys_dict_data` VALUES (4154, 4154, 'menu.config.neConfigBackup', 'NE Config Backups', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4155, 4155, 'job.ne_config_backup', 'NE-Config Backup Regularly', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); +INSERT INTO `sys_dict_data` VALUES (4156, 4156, 'job.ne_config_backup_remark', 'Network Element Configuration files are regularly backed up to the OMC\r\nView network element configuration backup records for downloading or importing configurations through network element information operations.', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/install/sys_job.sql b/database/install/sys_job.sql index 45fe3456..6786cbab 100644 --- a/database/install/sys_job.sql +++ b/database/install/sys_job.sql @@ -29,6 +29,7 @@ CREATE TABLE `sys_job` ( -- Records of sys_job -- ---------------------------- INSERT INTO `sys_job` VALUES (1, 'job.monitor_sys_resource', 'SYSTEM', 'monitor_sys_resource', '{\"interval\":5}', '0 0/5 * * * ?', '3', '0', '1', '0', 'supervisor', 1698478134839, 'supervisor', 1700571615807, 'job.monitor_sys_resource_remark'); +INSERT INTO `sys_job` VALUES (2, 'job.ne_config_backup', 'SYSTEM', 'ne_config_backup', '', '0 30 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134839, 'supervisor', 1700571615807, 'job.ne_config_backup_remark'); INSERT INTO `sys_job` VALUES (4, 'job.delExpiredNeBackup', 'SYSTEM', 'delExpiredNeBackup', '{\"duration\":60}', '0 20 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134840, NULL, 0, 'job.delExpiredNeBackupRemark'); INSERT INTO `sys_job` VALUES (5, 'job.deleteExpiredAlarmRecord', 'SYSTEM', 'deleteExpiredRecord', '{\"duration\":90,\"tableName\":\"alarm\",\"colName\":\"event_time\",\"extras\":\"alarm_status=\'0\'\"}', '0 10 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134841, NULL, 0, 'job.deleteExpiredAlarmRecordRemark'); INSERT INTO `sys_job` VALUES (6, 'job.deleteExpiredKpiRecord', 'SYSTEM', 'deleteExpiredRecord', '{\"duration\":30,\"tableName\":\"gold_kpi\",\"colName\":\"date\"}', '0 15 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'supervisor', 1700570673113, 'job.deleteExpiredKpiRecordRemark'); diff --git a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql index 48abe2f1..1804f135 100644 --- a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql +++ b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql @@ -669,5 +669,7 @@ REPLACE INTO `sys_dict_data` VALUES (2151, 2151, 'menu.system.setting.doc', '系 REPLACE INTO `sys_dict_data` VALUES (2152, 2152, 'menu.system.setting.official', '官网链接', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2153, 2153, 'menu.system.setting.lock', '锁屏操作', 'i18n_zh', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (2154, 2154, 'menu.config.neConfigBackup', '网元配置备份', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2155, 2155, 'job.ne_config_backup', '网元-配置文件定期备份', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (2156, 2156, 'job.ne_config_backup_remark', '网元配置文件定期备份到网管服务器\r\n可查看网元配置备份记录进行下载或通过网元信息操作导入配置', 'i18n_zh', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_dict_data2_i18n_en.sql b/database/upgrade/upg_sys_dict_data2_i18n_en.sql index 9edf1b09..c7bbd988 100644 --- a/database/upgrade/upg_sys_dict_data2_i18n_en.sql +++ b/database/upgrade/upg_sys_dict_data2_i18n_en.sql @@ -664,5 +664,7 @@ REPLACE INTO `sys_dict_data` VALUES (4151, 4151, 'menu.system.setting.doc', 'Sys REPLACE INTO `sys_dict_data` VALUES (4152, 4152, 'menu.system.setting.official', 'Official Website', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4153, 4153, 'menu.system.setting.lock', 'Lockscreen Operation', 'i18n_en', '', '', '1', 'supervisor', 1705550000000, '', 0, ''); REPLACE INTO `sys_dict_data` VALUES (4154, 4154, 'menu.config.neConfigBackup', 'NE Config Backups', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4155, 4155, 'job.ne_config_backup', 'NE-Config Backup Regularly', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); +REPLACE INTO `sys_dict_data` VALUES (4156, 4156, 'job.ne_config_backup_remark', 'Network Element Configuration files are regularly backed up to the OMC\r\nView network element configuration backup records for downloading or importing configurations through network element information operations.', 'i18n_en', '', '', '1', 'supervisor', 1721902269805, '', 0, ''); SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/upgrade/upg_sys_job.sql b/database/upgrade/upg_sys_job.sql index b8a408d6..cb495c72 100644 --- a/database/upgrade/upg_sys_job.sql +++ b/database/upgrade/upg_sys_job.sql @@ -22,10 +22,12 @@ CREATE TABLE IF NOT EXISTS `sys_job` ( `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '备注', PRIMARY KEY (`job_id`) USING BTREE, UNIQUE KEY `idx_uni_name_group` (`job_name`,`job_group`) USING BTREE COMMENT 'unique index for job_name and job_group' -) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='调度任务调度表'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='调度任务调度表'; -- ---------------------------- -- Records of sys_job -- ---------------------------- +REPLACE INTO `sys_job` VALUES (2, 'job.ne_config_backup', 'SYSTEM', 'ne_config_backup', '', '0 30 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134839, 'supervisor', 1700571615807, 'job.ne_config_backup_remark'); + SET FOREIGN_KEY_CHECKS = 1; \ No newline at end of file From 50c272152e31daaead69118113572f1b9e0b246b Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 26 Jul 2024 19:19:34 +0800 Subject: [PATCH 25/34] =?UTF-8?q?feat:=20=E8=B0=83=E5=BA=A6=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=B7=BB=E5=8A=A0>=E7=BD=91=E5=85=83=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E5=AE=9A=E6=9C=9F=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../monitor_sys_resource.go | 2 +- .../ne_config_backup/ne_config_backup.go | 61 +++++++++++++++++++ src/modules/crontask/processor/processor.go | 7 ++- 3 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 src/modules/crontask/processor/ne_config_backup/ne_config_backup.go diff --git a/src/modules/crontask/processor/monitor_sys_resource/monitor_sys_resource.go b/src/modules/crontask/processor/monitor_sys_resource/monitor_sys_resource.go index 6395d3b9..9b1187bf 100644 --- a/src/modules/crontask/processor/monitor_sys_resource/monitor_sys_resource.go +++ b/src/modules/crontask/processor/monitor_sys_resource/monitor_sys_resource.go @@ -1,4 +1,4 @@ -package monitorsysresource +package monitor_sys_resource import ( "encoding/json" diff --git a/src/modules/crontask/processor/ne_config_backup/ne_config_backup.go b/src/modules/crontask/processor/ne_config_backup/ne_config_backup.go new file mode 100644 index 00000000..8263e19d --- /dev/null +++ b/src/modules/crontask/processor/ne_config_backup/ne_config_backup.go @@ -0,0 +1,61 @@ +package ne_config_backup + +import ( + "fmt" + "path/filepath" + + "be.ems/src/framework/cron" + "be.ems/src/framework/logger" + neModel "be.ems/src/modules/network_element/model" + neService "be.ems/src/modules/network_element/service" +) + +var NewProcessor = &NeConfigBackupProcessor{ + neConfigBackupService: neService.NewNeConfigBackupImpl, + neInfoService: neService.NewNeInfoImpl, + count: 0, +} + +// NeConfigBackupProcessor 网元配置文件定期备份 +type NeConfigBackupProcessor struct { + // 网元配置文件备份记录服务 + neConfigBackupService neService.INeConfigBackup + // 网元信息服务 + neInfoService neService.INeInfo + // 执行次数 + count int +} + +func (s *NeConfigBackupProcessor) Execute(data any) (any, error) { + s.count++ // 执行次数加一 + options := data.(cron.JobData) + sysJob := options.SysJob + logger.Infof("重复 %v 任务ID %s", options.Repeat, sysJob.JobID) + // 返回结果,用于记录执行结果 + result := map[string]any{ + "count": s.count, + } + + neList := s.neInfoService.SelectList(neModel.NeInfo{}, false, false) + for _, neInfo := range neList { + neTypeAndId := fmt.Sprintf("%s_%s", neInfo.NeType, neInfo.NeId) + // 将网元文件备份到本地 + zipFilePath, err := s.neConfigBackupService.NeConfigNeToLocal(neInfo) + if err != nil { + result[neTypeAndId] = err.Error() + continue + } + // 新增备份记录 + item := neModel.NeConfigBackup{ + NeType: neInfo.NeType, + NeId: neInfo.NeId, + Name: filepath.Base(zipFilePath), + Path: zipFilePath, + CreateBy: "system", + } + s.neConfigBackupService.Insert(item) + result[neTypeAndId] = "ok" + } + + return result, nil +} diff --git a/src/modules/crontask/processor/processor.go b/src/modules/crontask/processor/processor.go index f190b896..81ce9de1 100644 --- a/src/modules/crontask/processor/processor.go +++ b/src/modules/crontask/processor/processor.go @@ -7,13 +7,16 @@ import ( "be.ems/src/modules/crontask/processor/deleteExpiredRecord" "be.ems/src/modules/crontask/processor/genNeStateAlarm" "be.ems/src/modules/crontask/processor/getStateFromNE" - monitorsysresource "be.ems/src/modules/crontask/processor/monitor_sys_resource" + processorMonitorSysResource "be.ems/src/modules/crontask/processor/monitor_sys_resource" + processorNeConfigBackup "be.ems/src/modules/crontask/processor/ne_config_backup" ) // InitCronQueue 初始定时任务队列 func InitCronQueue() { // 监控-系统资源 - cron.CreateQueue("monitor_sys_resource", monitorsysresource.NewProcessor) + cron.CreateQueue("monitor_sys_resource", processorMonitorSysResource.NewProcessor) + // 网元-网元配置文件定期备份 + cron.CreateQueue("ne_config_backup", processorNeConfigBackup.NewProcessor) // delete expired NE backup file cron.CreateQueue("delExpiredNeBackup", delExpiredNeBackup.NewProcessor) cron.CreateQueue("deleteExpiredRecord", deleteExpiredRecord.NewProcessor) From dc67f08a9c6eb56439f7852f2781092b53a3c4c5 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 27 Jul 2024 10:35:54 +0800 Subject: [PATCH 26/34] =?UTF-8?q?sql:=20=E8=B0=83=E5=BA=A6=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E5=85=B3=E9=97=AD=E6=97=A7=E7=BD=91=E5=85=83=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E5=A4=87=E4=BB=BD=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/install/sys_job.sql | 4 ++-- database/upgrade/upg_sys_job.sql | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/database/install/sys_job.sql b/database/install/sys_job.sql index 6786cbab..7e2243ac 100644 --- a/database/install/sys_job.sql +++ b/database/install/sys_job.sql @@ -30,10 +30,10 @@ CREATE TABLE `sys_job` ( -- ---------------------------- INSERT INTO `sys_job` VALUES (1, 'job.monitor_sys_resource', 'SYSTEM', 'monitor_sys_resource', '{\"interval\":5}', '0 0/5 * * * ?', '3', '0', '1', '0', 'supervisor', 1698478134839, 'supervisor', 1700571615807, 'job.monitor_sys_resource_remark'); INSERT INTO `sys_job` VALUES (2, 'job.ne_config_backup', 'SYSTEM', 'ne_config_backup', '', '0 30 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134839, 'supervisor', 1700571615807, 'job.ne_config_backup_remark'); -INSERT INTO `sys_job` VALUES (4, 'job.delExpiredNeBackup', 'SYSTEM', 'delExpiredNeBackup', '{\"duration\":60}', '0 20 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134840, NULL, 0, 'job.delExpiredNeBackupRemark'); +INSERT INTO `sys_job` VALUES (4, 'job.delExpiredNeBackup', 'SYSTEM', 'delExpiredNeBackup', '{\"duration\":60}', '0 20 0 * * ?', '3', '0', '0', '1', 'supervisor', 1698478134840, NULL, 0, 'job.delExpiredNeBackupRemark'); INSERT INTO `sys_job` VALUES (5, 'job.deleteExpiredAlarmRecord', 'SYSTEM', 'deleteExpiredRecord', '{\"duration\":90,\"tableName\":\"alarm\",\"colName\":\"event_time\",\"extras\":\"alarm_status=\'0\'\"}', '0 10 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134841, NULL, 0, 'job.deleteExpiredAlarmRecordRemark'); INSERT INTO `sys_job` VALUES (6, 'job.deleteExpiredKpiRecord', 'SYSTEM', 'deleteExpiredRecord', '{\"duration\":30,\"tableName\":\"gold_kpi\",\"colName\":\"date\"}', '0 15 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'supervisor', 1700570673113, 'job.deleteExpiredKpiRecordRemark'); -INSERT INTO `sys_job` VALUES (7, 'job.backupEtcFromNE', 'SYSTEM', 'backupEtcFromNE', NULL, '0 30 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134843, NULL, 0, 'job.backupEtcFromNERemark'); +INSERT INTO `sys_job` VALUES (7, 'job.backupEtcFromNE', 'SYSTEM', 'backupEtcFromNE', NULL, '0 30 0 * * ?', '3', '0', '0', '1', 'supervisor', 1698478134843, NULL, 0, 'job.backupEtcFromNERemark'); INSERT INTO `sys_job` VALUES (8, 'job.deleteExpiredNeStateRecord', 'SYSTEM', 'deleteExpiredRecord', '{\"duration\":1,\"tableName\":\"ne_state\",\"colName\":\"timestamp\"}', '0 25 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1703668901929, 'job.deleteExpiredNeStateRecordRemark'); INSERT INTO `sys_job` VALUES (9, 'job.getStateFromNE', 'SYSTEM', 'getStateFromNE', '', '0/10 * * * * ?', '3', '0', '0', '0', 'supervisor', 1698478134842, 'admin', 1713231120503, 'job.getStateFromNERemark'); INSERT INTO `sys_job` VALUES (10, 'job.genNeStateAlarm', 'SYSTEM', 'genNeStateAlarm', '{\"alarmID\":\"HXEMSSM10000\",\"alarmCode\":10000,\"alarmTitle\":\"The system state is abnormal\",\"neType\":\"OMC\",\"alarmType\":\"EquipmentAlarm\",\"origSeverity\": \"Major\",\"objectName\":\"EMS;SystemManagement;Heartbeat\",\"objectType\":\"SystemState\",\"specificProblem\":\"Alarm cause: the system state of target NE has not been received for {threshold} seconds\", \"specificProblemID\":\"AC10000\",\"threshold\":30}', '0/5 * * * * ?', '3', '0', '0', '0', 'supervisor', 1698478134842, 'admin', 1713781643031, 'job.genNeStateAlarmRemark'); diff --git a/database/upgrade/upg_sys_job.sql b/database/upgrade/upg_sys_job.sql index cb495c72..023d7f86 100644 --- a/database/upgrade/upg_sys_job.sql +++ b/database/upgrade/upg_sys_job.sql @@ -28,6 +28,14 @@ CREATE TABLE IF NOT EXISTS `sys_job` ( -- Records of sys_job -- ---------------------------- +REPLACE INTO `sys_job` VALUES (1, 'job.monitor_sys_resource', 'SYSTEM', 'monitor_sys_resource', '{\"interval\":5}', '0 0/5 * * * ?', '3', '0', '1', '0', 'supervisor', 1698478134839, 'supervisor', 1700571615807, 'job.monitor_sys_resource_remark'); REPLACE INTO `sys_job` VALUES (2, 'job.ne_config_backup', 'SYSTEM', 'ne_config_backup', '', '0 30 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134839, 'supervisor', 1700571615807, 'job.ne_config_backup_remark'); +REPLACE INTO `sys_job` VALUES (4, 'job.delExpiredNeBackup', 'SYSTEM', 'delExpiredNeBackup', '{\"duration\":60}', '0 20 0 * * ?', '3', '0', '0', '1', 'supervisor', 1698478134840, NULL, 0, 'job.delExpiredNeBackupRemark'); +REPLACE INTO `sys_job` VALUES (5, 'job.deleteExpiredAlarmRecord', 'SYSTEM', 'deleteExpiredRecord', '{\"duration\":90,\"tableName\":\"alarm\",\"colName\":\"event_time\",\"extras\":\"alarm_status=\'0\'\"}', '0 10 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134841, NULL, 0, 'job.deleteExpiredAlarmRecordRemark'); +REPLACE INTO `sys_job` VALUES (6, 'job.deleteExpiredKpiRecord', 'SYSTEM', 'deleteExpiredRecord', '{\"duration\":30,\"tableName\":\"gold_kpi\",\"colName\":\"date\"}', '0 15 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'supervisor', 1700570673113, 'job.deleteExpiredKpiRecordRemark'); +REPLACE INTO `sys_job` VALUES (7, 'job.backupEtcFromNE', 'SYSTEM', 'backupEtcFromNE', NULL, '0 30 0 * * ?', '3', '0', '0', '1', 'supervisor', 1698478134843, NULL, 0, 'job.backupEtcFromNERemark'); +REPLACE INTO `sys_job` VALUES (8, 'job.deleteExpiredNeStateRecord', 'SYSTEM', 'deleteExpiredRecord', '{\"duration\":1,\"tableName\":\"ne_state\",\"colName\":\"timestamp\"}', '0 25 0 * * ?', '3', '0', '1', '1', 'supervisor', 1698478134842, 'admin', 1703668901929, 'job.deleteExpiredNeStateRecordRemark'); +REPLACE INTO `sys_job` VALUES (9, 'job.getStateFromNE', 'SYSTEM', 'getStateFromNE', '', '0/10 * * * * ?', '3', '0', '0', '0', 'supervisor', 1698478134842, 'admin', 1713231120503, 'job.getStateFromNERemark'); +REPLACE INTO `sys_job` VALUES (10, 'job.genNeStateAlarm', 'SYSTEM', 'genNeStateAlarm', '{\"alarmID\":\"HXEMSSM10000\",\"alarmCode\":10000,\"alarmTitle\":\"The system state is abnormal\",\"neType\":\"OMC\",\"alarmType\":\"EquipmentAlarm\",\"origSeverity\": \"Major\",\"objectName\":\"EMS;SystemManagement;Heartbeat\",\"objectType\":\"SystemState\",\"specificProblem\":\"Alarm cause: the system state of target NE has not been received for {threshold} seconds\", \"specificProblemID\":\"AC10000\",\"threshold\":30}', '0/5 * * * * ?', '3', '0', '0', '0', 'supervisor', 1698478134842, 'admin', 1713781643031, 'job.genNeStateAlarmRemark'); SET FOREIGN_KEY_CHECKS = 1; \ No newline at end of file From f8677c639e3c3bfba4a3ceefab57acd67f0206f6 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 27 Jul 2024 10:46:28 +0800 Subject: [PATCH 27/34] =?UTF-8?q?fix:=20Nginx=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/etc/nginx/omc.conf | 127 ++++++++++++++++++++++++++++---------- 1 file changed, 95 insertions(+), 32 deletions(-) diff --git a/config/etc/nginx/omc.conf b/config/etc/nginx/omc.conf index 3fda7006..f55258a6 100644 --- a/config/etc/nginx/omc.conf +++ b/config/etc/nginx/omc.conf @@ -17,41 +17,22 @@ server { ssl_protocols TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; -# location /api/rest/securityManagement { -# proxy_pass http://127.0.0.1:55050; -# } -# location /api/rest/resourceManagement { -# proxy_pass http://127.0.0.1:55050; -# } -# location /api/rest/performanceManagement { -# proxy_pass http://127.0.0.1:55050; -# } -# location /api/rest/faultManagement { -# proxy_pass http://127.0.0.1:55050; -# } -# location /api/rest/aaaa/ { -# proxy_pass http://127.0.0.1:44040; -# } - location /api/rest/ { - proxy_pass http://127.0.0.1:33030; - } + # OMC location / { - try_files $uri $uri/ =404; - } -} + root /usr/local/omc/htdocs/front; + + try_files $uri $uri/ /index.html; + index index.html index.htm; + } -server { - listen 38888 default_server; - listen [::]:38888 default_server; - root /usr/local/omc/htdocs/front/; - index index.html index.htm; - server_name localhost; - location /omc-api/ { proxy_pass http://127.0.0.1:33030/; - - proxy_http_version 1.1; - proxy_cache_bypass $http_upgrade; + + proxy_connect_timeout 180s; # 默认60s + proxy_send_timeout 180s; # 默认60s + proxy_read_timeout 180s; # 默认60s + + proxy_cache_bypass $http_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; @@ -62,11 +43,93 @@ server { proxy_set_header X-Forwarded-Port $server_port; } + location /api/rest/ { + # 添加斜杠并重定向 + #rewrite ^([^.]*[^/])$ $1/ permanent; + proxy_pass http://127.0.0.1:33030/api/rest/; + + proxy_cache_bypass $http_upgrade; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Port $server_port; + } +} + +server { + listen 44080; + listen [::]:44080; + server_name localhost; + + # 修改允许最大请求体大小为100MB + client_max_body_size 100M; + # 持久连接的超时时间默认60s + keepalive_timeout 180s; + + #access_log /var/log/nginx/host.access.log main; + + # ssl_certificate /usr/share/nginx/cert/www.x.cn_chain.crt; + # ssl_certificate_key /usr/share/nginx/cert/www.x.cn.key; + + # ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; + # ssl_session_timeout 5m; + # ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; + # ssl_prefer_server_ciphers on; + # ssl_dhparam /usr/share/nginx/cert/dhparams.pem; + + # OMC location / { root /usr/local/omc/htdocs/front; try_files $uri $uri/ /index.html; - index index.html index.htm; + index index.html index.htm; + } + + location /omc-api/ { + proxy_pass http://127.0.0.1:33030/; + + proxy_connect_timeout 180s; # 默认60s + proxy_send_timeout 180s; # 默认60s + proxy_read_timeout 180s; # 默认60s + + proxy_cache_bypass $http_upgrade; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Port $server_port; + } + + location /api/rest/ { + # 添加斜杠并重定向 + #rewrite ^([^.]*[^/])$ $1/ permanent; + proxy_pass http://127.0.0.1:33030/api/rest/; + + proxy_cache_bypass $http_upgrade; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Port $server_port; + } + + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; } } From 51a6d6cdeaceab602ca65cec84d65b487ea323d9 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 27 Jul 2024 10:47:25 +0800 Subject: [PATCH 28/34] =?UTF-8?q?del:=20=E7=A7=BB=E9=99=A4=E4=B8=8D?= =?UTF-8?q?=E7=BB=B4=E6=8A=A4=E4=B8=8D=E4=BD=BF=E7=94=A8=E7=9A=84=E5=A4=9A?= =?UTF-8?q?=E8=AF=AD=E8=A8=80csv=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/locales/i18n_data.xlsx | Bin 106259 -> 0 bytes config/locales/i18n_table.xlsx | Bin 55984 -> 0 bytes config/locales/sys_config.csv | 18 - config/locales/sys_dept.csv | 3 - config/locales/sys_dict_data.csv | 79 ---- config/locales/sys_dict_data_en.csv | 543 ---------------------------- config/locales/sys_dict_data_zh.csv | 543 ---------------------------- config/locales/sys_dict_type.csv | 22 -- config/locales/sys_job.csv | 6 - config/locales/sys_menu.csv | 209 ----------- config/locales/sys_post.csv | 5 - config/locales/sys_role.csv | 6 - 12 files changed, 1434 deletions(-) delete mode 100644 config/locales/i18n_data.xlsx delete mode 100644 config/locales/i18n_table.xlsx delete mode 100644 config/locales/sys_config.csv delete mode 100644 config/locales/sys_dept.csv delete mode 100644 config/locales/sys_dict_data.csv delete mode 100644 config/locales/sys_dict_data_en.csv delete mode 100644 config/locales/sys_dict_data_zh.csv delete mode 100644 config/locales/sys_dict_type.csv delete mode 100644 config/locales/sys_job.csv delete mode 100644 config/locales/sys_menu.csv delete mode 100644 config/locales/sys_post.csv delete mode 100644 config/locales/sys_role.csv diff --git a/config/locales/i18n_data.xlsx b/config/locales/i18n_data.xlsx deleted file mode 100644 index 954448aeee3eb9448e0b967b68566718c6fdb41a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106259 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 diff --git a/config/locales/i18n_table.xlsx b/config/locales/i18n_table.xlsx deleted file mode 100644 index b3d2955662a096f0cd873214a0ce54e671d35319..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55984 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%0DKzR7RA}rj&_<#jPVBa;SHtnzSiaX9!m|?JHkT#( zVGhdRv%xvAkf8;3dRY8yz>%cOvc|xemd#en$cgB4Q!q6AG)0T?7YphA{J|!{YvlhC z_SRulZq56+0n#ZYozfk`rlh31JEXf&8l+RYySuwY8l<}<=_guff zyztsHvu4&kGxx0L*=v)pLKw6^$_NxBic_=zh@~ig`dj)|q;X5$*b)OJ(A}|x^+r$3 zYyu|ScF`YrUg8$l2|POQ1(3}O9G3vLd@TRlmbBBD(*Log=zF(Dw1%#mLZ{`+M}E*F zv-^p498#Rvhju=hW22fM2B~KU)NEtfHm&A77eWeHB3c-*%mCcVx?~21Y$iN&px}n+ z7gA#%HU!{mwKYN4L0(N_FDyc)>5_xIH8usjHTHs?LX0STw?f0sOI{nkZV$b%b1F0~ z`-O=h60m9J@mVkGvS(ysD9kyHt)C*XFGwS@f0Gdoz@)pjU3=v@P)mBzl)g=I zu9IxQ3bi?qJ$K#)au#hWF<>2*A*z!z8S+QJttLOwYc1a#+z{+7kInr$87^1e)F^1+ zMAov#msOUnk>q3{s~Ue}0U!>LtMwM36gLzc1&_z-!J!b63oSG6tbJDAH zTeuI1qootHvnPH)NrI{$f*?H&K)PQt`jl*>IQC(^GnUqSI39gh|AJ#Oe4U3E@7oiT zjh+bBA-q_KSJl03>Jkac;674$r-^5W)co=co20D69%50h3JzT$9cK*i20=|o|G48$C~4nf2V7vjx?u` zpAvuz69(!l8E`NcEO#!vYc(R?wC4r|HgNnNScJ{pL>)Nk(gvJ0D%OOtf6J?$K@Os@ z;N-G?8qS{FRP{pW2<7m)7gvi{>bB;2fF_65`J{F~7s6p#{V9o<^Z1o%W9KxUmhBLY z(-;R|A+=Bsq{P|+lLy{ZtT#WLNh38j`!GlQ9(p4LZ|g5iz8ZR8ewlhh99UQ7$eMZ_{0@ngVJLeFE^b+B%^dN)=#` z-V_!^gg_1t);Q#WKd7I2b!M*RYhgD0$53qV+5w*%vj@^!zruTMZY+QzwKm2mKDOrq zoF&$2NH^$jisYsE?TKG%%~)tBz{M6Yksw3q74RGlo_I=06dLk+((jX>SnrPS{ZC5E z@5nsC1_lRLA#!bV_a)%N($rGKgfKBp}C-pJYa;^e-Wu zl5wXH3<8X-Cxc4=m;MKaEmts{!Q`jLDAmhcA9xa1$I@ zJG!~%MT#sfdGkXZ`$J;t=?4qlAj6duH!s=6f-*1X-cqyS#m;=Ka~CxSjVGE8Ew9VC z+Ikw;uO-c_tcDrU{cG8YgeI(dX56RD%Imih8e>Oi9#{x#jzi5Y(l>(H6V@z;!Hs1f zkzM*aj`S_ko$9vKu`M2>uO9a-Qhdtl{cRZx+BeJ@1G@I=z1l2SU$gJaROJ;8yiTVG@s3)4b)i&YZi9rKCqw?3SUV$E)qOkr`J+ zF>e2|%fiW_?=yE4O#J=3cAES6vZZy1CKmL4R%H&2EoW!nJP@r#m5|nq(re=**oE zUE&_DoSzU;R;~TA@OKAzt|bDm{*f83 z{dIZEu^v!IZW?b$TPzl9o|82tn|&Iis6qfK`}E9wd9YJ^*46?@mmv>3kN#|kT6JpT zT22$pOl;*^KbRvU>ry{>cJoa|Jz_D9tM6qA9b=6$pns5SN&5~@+ynSb{vw&e_oSiY z(Y^^x@sv`vY7Q*HT~q?oI~0u9R3+Z+do3()g4y3ZyX z+cN*(&|91FS7STQOw*WXm!3&3?9!Y|nZ+&Ig=m3?1U{FsC|d!V?T@U@#x3I*6J`Kh zh*u~>Vxw&eAf@)>9Lk30yG}OscoZAC-BPn9P^DYZ=UzvL|(J>DlLs^0Of$wu&y*3H&CWCI#R<{S& z({5qL(1*iqFZYKV@M%{9ir4LApqJ-u?d@p+BazqrRs(P&?svi}!3m7_?jqG4=NcwrT8$;3h5J=Hzn!-1C_TzE4;pYy;BlsuGf8THpt}$Q= zCVTQ^VeHAjUFysNxzsr>O*3*y%-(+m>4qN`sY7G0*)fV8C%mc^qojcP3zNIsVVnl* zR|)f`7L&TiYvk$=q-3&w(fd!GO=9g>a6a;}3>2n#J|=W{+&=78pvaD95O%b;Ewr|` zyI!7L{@4hV)%9|7yCnMQdAEJHH+??zV;1E)gQ$bAwe4;taJ$6o7EJVWZTmP<*6ZWr zkF_;$oZ-#g!`0q(LV^u{+sE^V$Lm1G>(L6L4qo@T{=U8f#%sp2zJitSJYH_DjX#-W z@6K+AukP+nwuXKbRH!B(^7H=S$l^G^l~5#IdnBlL0il(v%Np@M7KNZ^)bT^->1WL@y-Ftg@%!Zm}u z-b})MLC3@CVFtzN8}+3OevikCvyO9n`LQm^!Sf&Y*Rv}fyd9oDor=EV)E0f`X|46* z>EQ9)J<>g@@Vx!_`lLeE#`E^Ji_*?c@aNv{+QwoDzm=zJ!~AzGal@I1?SjDL(X9^M zHXctrBEI%olnnmRJ2maLWSLL={Ctl_(ce8kxH<8Hy>1>(JfEHI={#P}28!?*d0sy7 zpGQ6J%AOTuJnnYLF59=has8s}Df2V@Q^r=!j&6pI$A_B_Kl`>5u1?RrJnl};?iWio zFnb>lPw#KnCT%)8`psIsJk)#c`$nS$AAe3K$lALem+N>m{ak!FK2F$eNtumPy7a6! z5pPPGsc^U&!oR&{F`=Cm)A!9yK_UIwE5K1P)Q3v6O&yaVsXe_vU;fpOL!p<);x5u? z!TA2pR{b_*Xu?F5@}T44;o{~;oECaYiE53A!uWZ^{qEQ0huV3#x@*M?S@d`k_0qW; zx*V?`VB5yq+hJY*!F!QO;bft5;0ud!7R_Rc+sS+r_zuI=V@k74#zAZ;S`JsqNO?_2 zVz-W4YJup0JM6RF8{pIwvYMpew16}fNYXzT7ww!M;jM{X?0$BZ(lDgdDHU3!^5D9=$+ne|HanRGV3ysdum z0))Y4K>X|z&ZnqF6}WGXswvjGiV`fjRm=-p8r`Lsjw!pONb}P$$;lj_Ub3C&fAQw} zAPt@VTv`OC;}W+IKAK%+EUOpoIT~$u;&j$GiLZkp@e^}6hwk(SGYk`sKKa=Qbtr5R zn7>4MIVt#HaQg-=@M*ZEj-YcsDBrgep|c#iv(W)u*@0_XQs! zP9@CtKFt`Xiq3|bKy@!XXo}N-*uWpBCi=0q8?s{Sv+(e7vqe(lL(&=T+^qK(Q2|G8 zl%}g)-cQ|ZX-@D>@o6jUN{Q9qLlcb#P zQ<3W4izzA6Q(|^T2#88OW!Ke>>K8x|jz~72sVqYEj{u?jOlFc%w%JDEyMmjDS=#3f z$6H4&*iBQp(N`GIs~kMYLFk`iLRR}T$?~6Ef4~WD^j>_sIc}tbai=RCASg-zH%?L^ zMA>GCM&P>ria;BAxc6PKM2W!0Qd9;XX;e#|2x%m8-IpkmgJJwr`LO>+sBSY-2qxTR#4-PerKkffiA4#D$uJ0vi6S zrG9l$DRK8&UEgvYfX#Ff0gxqp?KsSbuBDaNe}_#6|p zothiWU@sWMi!I!uQd1@G!b_4URa9=~aKQEnQ$C*$gG+`JAODpj?z<6CbcFLs>Sroo zDW)o10ztU%%1C~Dkr|pgrl$)($e3gtBXX`+(pmd`FWGs70hQpPJ+Ny|%F!x=?Iob3 zTP8>G5I^XdWBZdx)a)^N3)t~jA0uS$c1b}Oiw**gU1l5{64>ub1orWlO`G3t zrtUwNcRC!)!s2A{o5Tl6Nh&u#v;HJSNPu3J{RzNAGM})?CKt%8B6MfWa};`Ytff}p*s4@;aO!UgHGS7kS{bL^i39uhveP<{Hw~Qeh zd2nGkW+>l`sDboavDhMe!k-i*MHI4Q3t%xyKvdx=%xtI#sY?ZdFmjst%-C-*W=&@H zJ2+10VvlG2Os}@y<;t92ph_DBmf(Qt#gvU8aluF9#jJ?qPKSx(rdds$d~XA2r@<(Lhr=U_+qqCh%b&+2cB>+-UcARM$L!|6H z76?Rb z@8p6Rw4JzXHx*U*CR2C@cbKL@qHhXiSk=(1vOK8lcWgN!No2as3zPkXz`lTn7i6mP z3qEBezmup5NTTS`9n%IgXAX&N2S_5D_u&~+Wrwz)h#(V~`;ZB-S;5T3kp^i6v%?~U9vslf9uF7!_to8&lRo3SU(XdVXJ zV24mC5(V>srk;rgm@cF{A2<-hkCC`&gowfn(|};*cYu1j6UHM-sr>g5oOLh%9}P%{a}W=Nj%qRf>A_!#&}^KX7LFeGO9Rq!Z?l|mi}~LQ zlD(ulYn6<=M?(L0fS&Ew9_&s7doTp-0i}gA$KY{5J+5@Q(wo|CX8;68Ko&Vuy@*Ey zA^iqoCZrlunW_lyt;AA_Nkidwon^W#`^hVq^(&A&BJH;Xy0 zx@nTzA1Fadz93+RZtRPGyEzX{+9$(qai9dq69mth$!&6R?+#1OE)%xh$Hv(pN@FdL z(HBh@Rvo>?HUXA^JSR#zik$Z~nk3mdlV;S1N)Ljhbf6F({4RvmtY@idY}+Evrr%AR zfkM_G?>XA>YXz$*n#5-r9!SENKNr4d?@?x*BS1)OKbrCZn%l z3E!ven2!0yoq%)#jqrSERhafBXi^hxqM&DTkT8zd5-f89r4-W^FNlX5-z$#5kIHfC zf`prFbY7fM$1qUG!&o#$5?Dg>GfgB7$4xElpa)8A2=soFgS+~F0fFl&(9ZUNYPgi# z7Cyl~Z_ZTK02+I#jU8ORJD(RR?CB;0p6;o)Snf!sl|7^;wKsihV%3=M~0Z{;{nK%e>IfktqcO@|Jjj` zjKTg<)a8s}C$v}6Sb37w(|Rm<#XD&Ep~6S3rBVG^iU758?8aFAPL3o@s7-9Yqf`?h z;}7g#6l~fHk@TFH{1(UQa%+)K!Zizbf#TINB0CY>52wSc5!y-LoO*NOJh_` zL~ism88v(Kk1}JW_7HZaA=E$6?;tbbfX$UfnZY%_A>{Br=i*`s5`y9#(804PhjJ9* zr<6c7d65?IOTp5(_4BB0zfWa=0`{;!^lrBT*aNT8)WT(RYs*;TUmfj1dyD}C?UWC_ zNf$xsw+pt?k>dYW5AXH?Ag!>1%o~#N@F>d5UQD{uJ_1w&QqMwm=>ICIPp%Je0A8hL zG6?Y0KW!c9cU$+;77l!LdnX!+G8`U`J`1Twm|oNMKwnA(*qvh`fTK>fpZ?=w-Pa2c zlDu~Fo08D}`tAP1NRIZ}kc1;*%x5@@0Q`W^ z?Ir+9C^Ny8P+ssHv`{U%-MaN(o0STSI^3Y;uEY+mVh-Dc9tP0d@M}Q=tcO@lpk934|0I zz}p_@LII>?CW+;v<5=l0X0IU>Gy>t(TmY}GNgp4VnZdV&%vb;?UPdVjAZ_-%hg9ER zWvB@S<~OIw`|wY3DL{N45Pv=WA90(K08$X#-G9VKU;LZ+Z&p8kIz#}2mzQ9m32?HR z2WNnNJq!i<6t?G2?m()@ju=hm`mOhl5$^a-Hi&FCT>YzYx0+1aAJZ@rlqygrN2;m(zDqyf++sZ2`7u?`80*{7r zsK>sMLVCSz?paifAne(ND9rA~c>2eSFOac9`>Fw$Eox+};JxyEUkd?h{B}OiX2s~V z1tGURghgC+=U2pIGO9&_i=d%dh!+Ii9Bv)BMghIbY)rj1sM;&YcQl9@0 z!@Sr71|%?KKvJBiva@1OOf9($l?4c9VBg=xtah+1`QHHf*NoxJ9`~mf*4?Ww$qA!W zdr)O-$Up|=h}>s1*X9y{L;7jdG5_R;ZLUCDzI{dDv@C6uvuOlLsD&SN*5vj?)DglD zNRz)QZjtw&HT7jDylyRf@j!#<)i7?f1?(cKu0)Z1$naP zRm)!|`T{xCmZx1eiKrqxYXkHIDK21Uoqd7XSr0U}XMcjo+PvrL*2Z;&a&Pgtv#MD9+!TmoVZ%Ihq?YUyy6Q5Lf!Oo=qpPn&WZ-I-FwWL=rgy7a(1xBho@_O%iKz+z6rp9iePJByn&2mVcXb2b7#8BHEN!m zmK=SD`iher4h3HwA&c#Oy*L0TU~Viz!snk#ygBXX62my@s#Rjvd@Ok_5pPow8TY{WQ|B-ZUVgfeY*NYfbT91% z0m<&Jq^3!Dy4P#r?`$907^@&vs*Nmcne-XSceXBkr5JuR@guDko6BdgVCPZVy8h_jhNbo8U6-EN`Ea>wrNi0YPJhW3F!|`}(8bT- z45(BFRHlBOwL=dKNgb;I*kJtp6o9z<LV^hl3r- z7&XVz)&Nzwzf>_gfXZ9xn0uT|He_essK+{&KsXos&wR0lAQqX2eN2G%{LOlb$VaJB zxnzo~Qj3R=`csu4%L(Q*8?%d!XmR8v7>|-wzvVUr=qtJ=a3W>?INkr5YV3zQJpUF< zNS>S%K9M&ESz0?uqBhlfL71Fy+1dYl<|3X-vs;#nGNOCk`hR>JNYdIQxAPcWwMk?b z#e>8O(xuDBe>3gVYrnsaK>sfSln#*}CeHt4u)Uy8pZLNCDP`@bqKfB?Sp;whsR=>A z-CL#>IpL%`2wMXh++U9UVQb8(^=HPI9p;c+gQPDc*Z%g(d1cEq#}N}KPXJ>%E@dSB z2s@!lo9gg`e8P6v<;=mBIAMbW_2YF7SZVg`UDgBUx2Sv6*VoMG&5@Z7y2;BL%eD^TT@3EFR5=va^6WihQ9q}+T z3O&l1PFtqbgama2*zY6-q9EOdpwfHH4!U{S?CASK(%@&;ZT&4M!^MADByQrIveu0#`0r5HGf zLSC>QX~jueB90o*{X-4mLKKe2@qVIwgEEfP4;B`fBPSE*7~M5$~sW zy&i%+^jxOz8{muAPzf^%wZUuX2xfxH)lTvUU5CA&)~1WPa~s;%O^&Q;5QNLnOj zXggY9R#emZs1B{AsXFVdPP3HlOpBZgRpiH0U+kUfqf_%TO0;T_dNzD>dFv{SR+0Z+ zdV9K76CZf2ysp5(Z)?V7tMfTk9uS=XL?-~zg!}*s$KA?QdB^o2NlCvEXs#Ucgr>Wl zD+UJb)d_pO?dUY@MnBgAz70{gDTr)t71c^uNe?~9shj?Se6mPD zwLmSPkU4@sgsN9t>B_M1_KkHn5dv)bi7KO4F z#5}uKLX(@DXiap|0`p*SXGX^W1H<{oV>MiVBX5G47iNMLQS@H2NodQwrDu!Q$l8$Q zzUF4RD)f|UG-OL2{SSqca=M_V-m z9(LC(Zo}FY@Js%t%i2`oEjTpIv_|pE+Q|ryRuXpC=vi(pjTWjpEksml8+#1HST5)D z-?f7$M{v_xbTAtc#+zH@a9x;{997c=hmIJe;k>|#OJEf!ZlNo^eNPp~w#v^%Oo|;Uib&RR-bxBSEvJ9=UOCGo!&HhG9f6{C7)8Eo59SRxV2Cn%>o{ zVp^lx9ju!*Z7m7&7XOgheGSN1;s0#2Uq1q{kkLp>ec5VHl!EHQh!nQupbYkk39ONm zCEaFPAWrd5Kes0PKXDaF$P=M%X=S5+$U$B|L${MPt=}(-1b%XfLD#il$>>bfIfN(F z4+mJdsxPR}78C(XtjtI8QfA0Hn?6yY5 zug5wqHp-kH9-=Z|$U+}H8Lkx7TE<<)bpS?q*dwlrlFt6HY?;6il(<`w5m zPmug2e{aCUEOPLO(SzdWMNp$x@R%pbk)%Xh1L3X3%=%*<+0fF4s$TaG9?4>&Bc1Ap zer;hz3ZE9#vW#1~N6xg=TU7d829w7sj^okj>j|E=pBuN})1lqd-J!M*uhV1o>4sld z054wOD-F>L_bLvHdIpN<`JHz^x)Uxp8@;bS-PugIX}$bryqVB@$m8bmeoz5J){|;d zVV-vt8m+J>F()$ z?>ELhgw~;Xf*$8&=TnF^I$Sd!>_DB*qdLjFowxQG{6rTT&U&gZ+B6rE{Cg?ZkMW`> z4zwpQH!ev@58+95{_z0Ick5jcx4Cp#s13a;cG_ij7tdM9--^6f~OUSD%O zdhD6C)6e^1I(TJc6`y7ldLb3Qv$kT1bX4HyyZH%?SBmqOXA1&9Ho|Vz?A4aJ+)plc zJ&f|Fdkt^Z)GwwwrwDlz6K?SrJ3lUNto(HLDoUw1bW?U>eal&ga(-RTy+WUGc-027 zUJ&spmqGnlma>umscXw>K0U>}W>UPbiv`}-@Z-{f>^b3D`R%K)yGy5zvO(8-yHXi# zlnJFkX_(7~<9i40Oplcx7~jk1wY>M`P^ha8$W&Wx!BZ|vHYv?zx-C8Rd<^#!TJh#Z zIHMagPtSs!me_RpM>?LJyz2LuC%Rfjk#?af+@l)-+pBAh92&T>D5Ls(byRoi5nY__ zv!AruioAAx;b{{edELTW7^KK=Q9K)XTX1sZfImu-8Te3F!9aiO7U1xhSKeW;dVZu& zNUY{mSYP;P`J8B_I2(lj1WwQR@F&|Iqpj`rkXObKq3g#U&(;Pnl-Z9n``~Ni`VyTt zM1kdnC_m?qo38_#l2NuFm34KBe=NGeAUM|r&8VH!^F4uj;O9QlClNiLw>#JN(z&}J z*XZ7Lw$C0y)8S6mQ9UEzS3KZhb)37Hi6E?Pf6tzWN^g2Gz|Xn=6ur zklvI{T(~xOoN2X4mJa89l@+1R{c7C3sF{<&Hd$ZCQ{*=m6HZ5Yh zY9v|qN4Iz@FN6FZ&J7JPIv~t!6loed=E^sYAJ`_Iq!-x}SyeDbQ(F>IrTcNdg3T>u zVw5+G;-KdMi!IsEpeUX<+fdd4|LV1oFE18V1$RNXLNVQBc1-SeGR%d)xAs_|bl#aCj7*JO^feWvXYjXf}n z==z>3RoS=RH>YTdxgayV#dldP%kIYP#T8a}K-O82IZj@aFgY0a|Jd)>Nv!H~t6IEd z8P;Ly*Qe8GY#|KK_nBjdIJVP5IBYkU5({^w_JHFCUq-t4701mMi}1?yWjpU+iU#s0 zI1ho!%yHrQ{mU2|;#=PR;4RJz=|L!uQqM3xf0d}^o-j|?6=R-M2tM&cWPYdSK6=T4 z-vWB-&rS28Q7Tf6cU{8ihA`LbZG^q;NYn;OstA3KfDcw#`6N#A7)DrvFJN(H2!6uO ze=ifL(ITeS{@c>|ZnH;b! zFg`tK?cB~j7X8r=2R~2k{$s!8g2X|puRm*3l?1GtDipMnf8!zTY4wJnoMTG(dfdhN*HV*5w%kFA?l7L(|A^#^if=qyb;*kFd_fUT$ z*BO(^p@!Io0q9a{*`9N zB1|duSc*EtOUeadbLwP%E9%vBs<1J!FT~LU#4}^jxz9vuY&$GY>LT+k679cE&9OJR zo(J7l)*V(QOLTr!x8#o0-)o4V8!|GFW}Bo^kk9Nk(nbBk3QncI4Dc&DeZN_ilcZ=| zJ5znUA&c)UlP6C_a!qi@ z6|Fo}(Ipg#Pe@G?Bh8$7p7}m`ljM83>xH=Q<p>MlcQjIc<4D2O0S>*MPwpZbd6f2?G_KTcVz-Kv{O=YZjnwn zopl{mEr>9`mpsa(*H|X$UOaV?70E=xZ>Zm9Znbv#h(R%itp`JWNe@?1)c6fU>dg93 z;5=7E#}#qhTuU=nw%(dlaEk)hmymnLA^SvR@t0C)tFIM*@`Z;FlgNI(=kkAIM3eRc z!9>Eb(%w5xin?%UYKjG-Fj>)&>}W4MJTfX_nB;8|e1ZH)<@x#W6WSyNxsLyG$pB0rVTE}iua1lQoZvv$p9tHn$H*vo!*2*6a~Sod*9*O=4h zd$E^wa>I|JG=gH)xx~(AD>J5dvpjd7%K37_Y8ahh7;AR;SJwQq;dMU1Vlmy+mA9-t z(Sh52KYB-wf3zawqhi|xzo|*+1;w+@XHT9m1M~#v$&)7^EE!#F>@6Hjjf@-}7=Qi4_KTXt>Dr_) zVf3s}9&!_RU<)P(p!+LXJ(ikH7B4g(&ihCjU^3ODjd|YdWQtoVN_)Uxp%A6Hl{dZ8 zZQDw!fgyRtNV?v_yZ#pK+z&G)=)qGbRU2KDMuVJf16p_!iM%P<{U=9x&I3EtugKr+8XTJ1W=My*@+tey@!BS`T(gyr7t-fhG?Rn~0&-`{B!T_GR&&^H<8T zQoYhJ>3(lsQ6egqY97Oik=Y+c5{|+hy|H=FmlHpnFVbw^ddPb*L{8eKfxr^9e?kz# z@0KVSKP~vd;?cu&#`n9tycb^~W3uEKc`B4b^UzeRiI;kIJsRAA{xM~RwU1Rjyv^>H zLtWIsW2IhrwN65oT(n)HvRQwbUSCyY9p42>@qOC8$cLw{5&O#vq~_vU$CPU)1_y`Z z8V>?Cjtg(*l}y%bO(&AXpT~?yyP8e-iwng(GMSFC?v{yr#4tGRX^I{@;=E94x&~d2 zN-xJfg?a7Hlo@xD^Hi3^b*}FH{#`}`a)WFc0-fX=5W#}uoi1q73`gzqo6~~4&Q7h3 zf8*2|Q)P7{YmxF;n~c?39I}w+jeJ4#dou9(sA8`bJyp{?A{?bUhGkKija}*^@HIg($g>MbpFF1#U zx#t)B*Ns@~X0+DEtO*-#`rtV0Tp8L^?aPr7Qp@Ny*-{z}Q+yG`wghc`o~!7l8{6}4 zrx_$v2s|iU?$4gR(ix9fk+S%KYW|^*|9*h`zhO_m^E|-n#giwYc>fA}_Fu41TC`r| zL=8B`o^wI<`#yti)fex}DdH%W@&o~+Wx1=&V6sYX;7mdywfzUO_y9igD=Rno`G>%+ zwZ2!$Xf}Lp({a~>i{+LPcp1ZjD;s@QHMEhVct1yNu8GK2_V3mkX^Xe|-#nsxzs;}) zUX|Wjs$FS$zTE~x7_r>TfAM1%1lxS*Gb{4OLgoQ>u-$AwJFw!=VJuBU=fJR_8GcK@ z5q>Y5=Weje>7JD@`A7TGS?PTH)WaMtC4EH*;rcN$xCpPU?a*^@rJR0*X_lD~!yrF4 zl)t`qy=2I0(Q&vv!zu+Nmo;A#_GvEBq^%C0OK)1_{s;I14L?KAUe-wYiht9w&-+8g zkJQoa`P-@C`aTkPsGzdv-wPPESEkg*u^$h^wR|e9Y~5;TeX`YDE5P^RUVY_6>YJa4 zr5|Z-n}jlWtF~mN&$VGuTEdCoO7PoLj6}( z*KxcEVVV*K&gw3m-E~`)JQkF^5?UTBPdk^#uG}0RzYc8+q0Bd@4p;ciS}FP<+^m#H z_OCY`Pxqv_rz>CIy4F8aw4r52)g@4IL8XN00U6D&J~^5CcjohZ{3nYo7h)scH5l zawjnRyd*+CX3!_<>(()NY0m3TW9DO9mw_p5a*dlktq=F};9LZ%B z1Er;^+41_uY}XU%6eC2d#`UKK14Zx%RID7;!rvo(c?+``gOFxQI37hI9&7AM$x$>E zU}(${!R(K0`MMgp1PesBuv2NC(`AmoZ_hjyJiJtO9lV7`kYu0D_L6|QcFIV|{B_s+ zogG77aHceISFt~0CL#L4Fn)=fA{h48Yt_+#Nz&t1X)_dzm zu0*LXUB%ESp&UG=3n!KEHIsG5UtW6Ia26}EMV^Q`QAm)Ti0S0ZkX0kjbB1g^_laJ! zXG;DOsEj~_W#z6`cdCz>?OI^a)3oR#%ZA_%I=f7rQp&c3eW%gP{~k)z1B8oEhW;W4 zE=;YCsdvw@4!I(JZI8wPp%z>s6jDvh>fS9wlI=36np&ZaXmp?W$q_V=nS6souit=K zrvE+{I!T0K3eG;jGK*D-8yabTL_p|;@9`AVr}LVaOw(B?xKv^1#TzIRdPCszo1O3` zJlbJeb5cIt)kx?i$e-1my}Mbwr`*D-Ua9lrmqZ@x)c@Ns}QrgD+^qCOoCd z!t%uo=3h6dnDi^-GjmE0d2MBgqpa$-c9Zp0h`v|LEZiT-h23_d6d5n4-uwPsgdzna zfjj_1XJV22OSF;|u-p(jt-WWs=6LSX`hacbJFl=oKPiDF)*XEkI&BB|oMvh{#tPXU z)}Ljj8AI>4mEBRs18Ue05Xzci1zhSN6sN0;#NA=b+t@bVrgM%h+4t;D zmlkpZ1VRGV_>yex4je1od&B9;`|RpZY41a-=-fk zvGYsx)QA)cx`E0GZeFMEa>`_e#9hYgwFLi|Z<&v-8_2Z}HFfr4B>nyrG&sK*6VT-tXsG#f#ok^=PFZ%Z>4S&4j4xZLG&|TcF zJ8o??8hFfHjYW3-k!5w7BN3CjT=P=WN9JIS;(}&;SM6lNS4gf$!EYMv(z=zT8(+CZ zIVh82?UC(rsZ;MDmAHNfdK8v$?}N;VSRaC~2LU5o`-I)wle!315MeW@onmhCRHF~n zI=NO^u@N4?zjvbZDK}M@O)TVA`BQGJCQ`k>oo*&ks`nLwB{ggIo`g=`6(Ifcp zS197t^x#v(nXsFm#V3F&YR$ZhqvRF_>POPL;bzZHXfeFiN0)RgIEW$@yWE6+wx(uP!l}AaDJ2Nim)46(%wdf&~k_V4;C^8_67Sl_=L6S&x_NJp^8Y z@#2nFoADj?kMW!2Zpw6$@18ZeG^!Fy_eZNt za|xRY6ZPtPOVGPD#?$9{W;y)zhd?LIp;Pm0erF^N{L8B^GIY;C92Ja3+b`3?phgkZ zpguAbB{0fw_wEXecoGgPLeax*OmdRfC-a#0-+Ee1nXnl1B6RGO{x@Y2w|>Jum6mfyqn5ZAeOHy)#dDW%rd z1_g$5iH2Vb;3NrOjbkW&E`MO;*bUP=yTIRQm)sF7FdQ6GX*SQ>S7{!nrryGuOqRwG zzDa*Lwg8v3rh8AMsE^b-L7_mJrc#p47i#4 zj~exAs8R;)Ge2msg;i(?bZBW2uJR*%3K&27GR!?P{qc#F)j+%mYQP%bnlCg0Nu&37 zER+&wPMfOmO`HyvQ%P{c$^iBi@-C-HP8iWMr2R8~i?e^^FwM@h%M0K%g%0jtbC~m2 z4##UlPE!JoDG&LHR}v!Gkfbpb*gszgr6^e~J0E(B%ROaXggfk5d5UXqIZ>qA>A4E# zt&p|cdQ%}{O_2Ec731^ud4?*rSLfuk4Nq?`TiY97$1BxJnT|+eeSY(LV0e8$;p1>m z=n`{2og9_XTW1Mn*1o9I2u!7gRs)L9v7x>+I3Zq z3Tik??f0bqzs9~gE{@YBZCz zv(yiPS4khaiGgjgXcDU%AlGxw?Y|HVUx`9A?VU9n6CGTK-ameCvr5~MP=k~_Y!^#*dEQ>_XL(S!<1E(|G28~z0B&>T`$@WCYw@4z8D2JA*3WCY>GCT>0gZ-;m@miF4Zvce^c*lOKL)bZ5!pty}ypqek(M~H;df4dL7{ah$2VIc)> z`^AM6E}Spiz~eph>Grwy6<^@tfDN`jM1hR-qUa|*ZaE!2&VzK80suWdH}c0myg=Y) z#rECwS4w(!sBWgZaFT*^9RpV(5G;97jHiNIsA)ayWVo%4b17^L`0azb7b~{1gGA3l z{j`LsA$2H;hC2ADFe}BgkD;okfvuZRV_G-3zWB@~qU`Dm1rhPZ&QzJ#je|2zZZ_!nZN?XOLfaw@~jhj6gs^ zGF$w=j{i>Y!SZX~(ZST{s}bFQ-voC>1Bbl6&(jRx00ANYXSUy&8Ggmmsk*E+mIz8a z(FKmEyR`wC6Q-DB@j|7h>9lC2=FGMW&#eqob9L$`vJ2Q+F=Aq20j=l;TYmn0l`REc z=`4uQnevXbl+_yt1b9=1 zD=&* zG&Upv2Um$jP{t??(ji!#$;UPD`MYeSvJXZglnyf>^Z{C>uB>chR4TX#tcs+u>|uC^ z(RZ`6I7KlWyf<&ws?^q~aKai$YIK`3L#A1g=K2#5oY48qlER$&v6Yf$;~3JwYx?|Z z*$fp6y6#jvtBHN?tobZf3XMt;@M2~y$FrzWYhCNn2JFDrvHiV6$oB)UwZsGc3W`6qWa@tpPH9seZ}+@;rf|D? z9vtj8A%pj3cfCH?*}PLpB60yC+pgLeF6VoA8HS&Z(c9ndb+rJpj^-j4cxNU>+$0@2!5h`dCKPVL@hSL9;+jYb2NK)Y zD(WaQ6no>8!kAYptYK#rd4k)c<2VjHvb0rP3gu?RgDDhegLeN%Z$Oeynp+uC_lpGM ztt>66(F$*0P+Q|NyRG1IO5Oy^Rh~nGwO9{>eblD#CWAz<;3Ezne$V!*=Vu%pXEXAK z9io7riZfj^k`kG4>B6ayt62;^Mn_kl1W#?M-QjE5uUuP&;IxTRK#g&?pZqzPb^4J5 z3^Ip!Bh^#RHPu9TiQE+t6K!#d@TUyA*pFaB;(1fJK0MQay^sca?ZQ6MruES(kh^V6 zyF%ORi2ghWIQehS1f5P2QyQ$tfk)?HoZ9XJ&g|+1ubFy)$)LMEqmal}OxXOI9Zr&& zB@teX3Arme9E_+m{Gednx65j=f&B>0s%HZD!UsxS-d(9H3%idqG9Y(lWe^|KE4*0_ zDZf|iNZci)FSG-bwD2Q!VV8n=KhtS^Z{T5pS`B1sjI}GTck5X_c1No-+z^3VTbi0; z9!+vWp2>7Z^%xk+b_qt*W-1`l7D^z_jV^c*qby92#B%PNdRT$D2`<~Sx^lp97#P@g zye(zkQYT{-19N$mT&3{1;i+!vyhD|CILJ5Ss&rHftZ2fwWK;xmwi-ib!fZL_)x9b^$*m`!k*T0SAl&8{w#8ZVz^meD%b-P^ez)A46DFk_JhiK6Vs ziH}aCn(Ly`(tOJW%prr`RRRcOsdy*Kx_~eLO8w%w9a6nO$w>N z=#*O%0aL+&+Q7$chd9wRHbT(lz8($wtZ&eE-{0z4OdOM|0s&b|g$Bgr)MS)M{wD&O zjEl~JRpxcqY6;YehK$9AWm2V!Aa>$vx_2Fps{jxbf#Ni)*jiu!SBCdbdldmdPnoJP>3FUT#V~XU zr@o5rS{zMr7U5fmkgf@GzM$leWO(geYx(z`l|QtC)W0Gdx62Hoe3Qb-bMG>o_kk~5 zlqEg&v#6HI)MJh%c{21rIA`bcMv+=Ts?rs|q^T0HV8}2H*hoE_*nl#2p)pq-7Ie9> z+!X8@fuU(eU`03Q1v~eowpe*I1$S9CES+y^uq#lzG$GgQa^W*tiyNt0``9mkD(7Ibq`F)U;l>-8L{~P&hRJC_-wKTH-HBioKeT`aH zLw$|x@vhM71n-gBN@{7~N|_oAC&>dVogpLuE@lj2G8n83S|~E+7Z0%dq^3kX6VPQ& zlBk_<=?hnZ|2^^R-8i$^9E zbB5l*M=!})){^3_`_-)dM{t@OuKLr6f?|L9{xipx4rh&{5aeREy7uS%QhLsdbj_eh zWQqxYyt)VZ-0?NEvrwI_npX9oVWu7lfwMRI+G!D-%u&*a2 zeAr-Tg$W4r%2gvo)`Yu=jO(3TeV{z60|#vUE){*wN@&Mua(e( z$81(3&QntLdhlCc2Sc|i_e8r^{UEQ0WPr@W2Oj7L9Eh8Bozlw2 zWx7oKbou!@F>1GIURtVyov_*IC0Y9wgg1iIJg_ku(SMk#dP!LvN`xwRq-#$nL6NAZ zEx8xFo;-9zWwx$-suBz;Evv#cANQw;i})n79Y>*dL8b!rSFG$5No^TXs4^D$VL|-{ z{rMFb{33T)EKex=a+MnQ56Ku!gqIf8>B^?-mM3W9G9iLkFWMy9dwG?+ zu6Lrj-eXq0{R|k6H6^gi*hVVNI?a?u4O$S{k#;t!Re$}Y3h#eNh;KcTI7(x0T8a*p9VfOd7*yAOl{SanBdl}YU619Vp{)e>iCjz*2A z8DU|Qte>up=g&C$;o_eiJsP_>V&*q$UJXx7>uI1Lw6kc3w8!Q#@6A6+my`j9m0=8g zA5+RBZr7$fSvqD#OXq%=C0dz_7-Za=FQ4Apd6Y81(aoz4Q6&%ddYY0vVwFtc^=s5` zD%$)gDobOzrcgtVDCxD)wzA5540DPTTq-+T3@FS`ro3H?tj((df*;zlYK%Qc1bJzXE`JZc}=(Key+&vP>6TJq-84`7$qK| zqDToX^P?Ei0;@zy=6Ff+|0K((r_qcD<6gm@KjBCKZ5+Qdb(^?qcb-?%V=EW~}{Fasw( z*cvf}qbtQ2Vk7e$&|?|b>djqqc5;`ySK=|IR+*%^3Jpl?KogKfGx?|Yq&+S`i#~me z>j`xdEfbJ1(IRI$-WNm+DTFqr75A z*D5Q}2uQgU=em?Quz=0c%o>bj@{)!{lTZ6B{kxGCO}Ab+kJ0SZVuLr|Pdf)EkqUY$ zBWzgSueYjc&Jo8gJqyo|_{l-#Aa&SS?3TV5;jr{xV-gBm(YhTQJ?aBD6h2An5cMOK zHYP;@;Dl5-Gs7!|>`E*SEykqwTH5IG@}F9b$?ZjId>FMdr`Ij@JjhvzI*dPZ6z?*` zNNPl5%~6>FH<3Ux2N4db?)uAbo14Napj0EZC4(4tdiwXvR6xn7n4qe9bm=(2QPDda zsn~v!1sI_5Z>(VFIwfl8pI=a)Iw%ZN`VjoIkJdWch*2)_JtSd}2Vd(|1{tE=CC(d5 zFu<&+PFK0~)J)!pueDBcitHv*UrG&RLb}PBvPW{vxx}IfpCLJAf8-2baWfOMYTJ%? z8rY1WJ`L_hHGlsA8+ULjlASv?AIFxRD8doLHvIP~6`n2S^A@MN`M$~`7P^L^YUGo{ zp*G`W#}j-Hiwm=&dV`&Jh-l*n-qDqZ#MlrdbxjUf!3@ z(-+nK`*_~$FS~_M;n~DH zFCs~fEgl$;78fNm&iC5-pKcTM}Wi8t=s9?t=J9Q<1mbbK#nqbu-uceDu#R_`f* zEc!a!)uuZXR;iDJSA50FkpN7NWCFcc#syeT0TQVKi^td17?j*$MucBlrFKqa%g1ra z2niiG3eAWK<79tIzup@@pVx1L-;v>Yej5lq0S1s%rKn^2n$}}r1P!XH0T0h?5&wza)*_mP{{^I#@%R z9Y$~&@k}q-q-dhiohnf&BLm==g@l>oZupYegCpS(3j<6$I zSIW=#GStoG35+=eu@F_&1_DO*rsS5ya9kjP&opGs-8WRn51mDI9Jn5;@~gJ3HHJfARVyP+aL3v{8)xJ_1Hi_xA8zg zDF3?uG}W^+GE{W1GqW=JeH)sf{WT7|H|Es~@eYqwxQAnF>}WB;DS#RLvb2UuQ?FIM zq;@=$)Xm+^8FSPDetMOP22QL)PltHJXPaIR3u^}?_X_8WCEPMOy|*Y+^CNmvit_5T zVv6$Yf-ir9tPxMj%{OK3s~%^os6ff53u4)->p=sm&dbVt_J}I4*q=PEmQQ^F+l5gy zyCTWA-Fk_AvbbEqR|e}GPj}vT!r#y(quE9?xmn3WZR@88a|O7euJEz?Da4(s2g#{7 z%HvvPc)#`N@!|E@GGIE%P}5}|g?AD2)S(y|X>hxq^lTT(;Am1#?;JAnmdC27s3b;Z zcoNEv@ye&;^qMV7KFT_TR?9lj7saFp<}RRwcT1$B)nU7`Qn*Cwe<=`IG=&i@gh}6N zT@8_=&J!bW=~NQF4g)YCpOCp$F&PeSoac;4(`>si>W4_g=abTZFhRGq-tQnJNBUW5 zw~};a>KkwJVV0-S49&0arQI58sA&)tPo-1^(j->*rvR~bkGu0Y_aN&Q(^L+$ zk!9EO^I-)FUa9=FZf?sDFk+3{~L2L})3)K&F5?)S6JLGZkpt1lgSj@SEl zk*}BTl5Nhs>0U39)M;LJCXZd7VJEZB1=cMT!*Flc8|R(wRhG9yn$=v19>stjc@BwC zKo-i8;%7zAIzWz0?Cth)!9&t0XhLonM^iVkNiNww0b78`3i0-KUVOnrj`&{5Apw7$ z*eIJ+=BM}+vri^7i4S!fU!`r6^K8ke!#Zs*ZPDZCZbx&{jAy@m62@$TVBC#Lfn32S zK4J{*y8*hAXc}Q2#oQbl;`eD~v@&YmoDM0{w9UM-tt`WQXJS{JOk=tF0`efV* zJd6O5RthAS4(z1WEKT5!X_`aF0cjBu#@MXY%o_>fXu)o-Gw8rnc~3O)|e z0&fN1@UTAEi5P8A>+azN!BRV$63v~iQOoQ4w#hsjZuWXhXTodFVhEM+-h z;41{si3-0m40YUR=>k*(J?ign+4|z$j4<#Sw9gsvL(=wn0>WRR8LU;2#_OAa`F+9x z%wJFa1h}!&tP-aXRt0>Qhl3GTrB)=#}vfb=ihU=Q(8H6Ksi-4RJd%v3!9O zm!_hFgtp;0O#S^LV7LOz%^eLh+sXjMrf*-h;?vkovZb@CX%Qjbh>NNP_sOk`KBs7r zI(6{N!Wwao5TXUn*Rs*c1}Y!R)JCK8)Ir3UsbaKxBwTNp$-k3g5Yq`eZ4pM?o-Pk;f4(K!%xC7|J*Xx_!_dx~+;GHQz}NY{Pz68Qz$f5OWD@>w}W3I zmx|m{ke-D$^?lPzuqeotoftkuk@5D#Gyhf|xE&vt@^>k#+Xukm>eDpa8LsCuR~!hg zv_qF3`==s4Iuh5)nAOh!U~HGvjl=eKcF&h69g*YjaHyW}uY;uEIkb*Cmj{cwxUc&! zxw5YxgRqRvNLgUO(%&b!DM#R^Oz8)wevB9yjeD}cT#g4h zw%f%V@pJ2CU-41@&$`<40Nz4GmmPbCu(G-n7H9C_$rF4VK#Y6)xlycbBiF zx1G0m_zS*%cAhoU00(@`2|YZ1d+#>kkGLfabB#+ZFubcRI3ACtgW%h25C*GPKTwCT zWc0QV_3*kJZh{Ompe@#Y&#gulWgD)XqN7w|rF6%k$uYCuZYQ`UH}|{;a+~G}dLQ4` zYq(@^<^*6zbmBChiE)DldrCHb28rGM47(BA?QV0qa|=&{n}q1yn&i5}d)b0*j@1X6 zUd6|{6~T$ZeLk6#v>wy(G`oG3%!%X~IIQmG0>YSEFyB4MU+)GwKQDL2_V^Mkn}Z;l zw=!n_c&Ho2+sxMNZGC%OE|UAsq0ncC4;I@dSmCOmN=1HbSH*3;Zp!V#su8tK?xrwl z3SzLEJUmLjKFCEcY=2A}C?Dwi^dkd~bJlxa4@1wH4e<2tDX#oCvO zt*YA9U^w|)wDkA>A-Z#*w2r*)WY*60jB1a{hP;boK5 zFUE`e3Rp+QGI{UL%iHb4rJ&0~wj^Rs^n)f0YD`Ds$F58q!oG+)e-L)h>UEsT08Im@ z7AuvOF;j$wXlJdB^dZk|KqJs!+Y~~shQ+G5Pi}oS2^yv!Fgn|rc0R-NdZ^VP4fe`D zF}Ehr$R74SX95psl~9Sq!JhdV9_8(IU)Lf|0Hs1WEV&=f`TVsyVzcnsnw@-ebCN_6 zLE%T&tb|8!(HhgiG!4leef5Cqidt2^=f|~fa6BnpFWXzJVST~F4!-)2i!_TwXKzN2 zH&+#H8J@Ro;-DH*CNM$JDwxHqMI|yxbh=fPgQ79YK^nSL(zG~2$9bPYLQ_w*p@w)* zqYYJ=e_C?Pl^!76_s_9M@;*l8a(O#2)56>>1tsLpuV=K~))8@iq&`_p058yOtMz+ywfh8$+p<#wg80H*FT z>Zb?q)6Er>VdzbP1y%v%N~S_Z=Tg&L8<*$VaQE9ofL3gg`PVb8XG)ys(Bh7^?x;7X``xpp_bnX)SIpOM3-os@%8iwgI7%pS$a*Am1&Yzh z3sUMFYD1>OhM|aq)KVv`z!Gw49EO3w0pvYG5~l?YARbfdcgQ_fNsEuD!5SHN;7o%hfq>w zz!$T|RI2pJH zkmrCc4`Bl{pomnhK^9A+t9W3?P$!15z@4Vg6f^)L;JaRB!Izi9(SU6$HMm7c9Fif} z$fXBG`mN4dgK5f3xZN9641f8U^Ja3&8}?HN>0MZv3{n{hS(w!$A=f`auHXN$H*R{ib?w#5DTd~O8fnb zTx8HBceFv%0Bs7Fbz}_W?7&a#L)&fa1HEroCHivMJy23Y=180qJGsR*1I%U^+ygs< zxQu@L+UuGJVL(1Z7bQ9?ifNX$15$GwTpHBNa;r=e_(72F3?2a`yuLAC5tBKOgd(y* zAU<{KHArZaJq6u?W%UZSlvT*3CM8VBh`*1uC|#mS{%$xmK-Y|R^E@zz%>@?pqYQwo z1wFjb(qS(3(-wXx7jvfGgf;BX&^%xXX($m~ELeC3htQZK;beYJ;Et5RTClKns1yCD zuJ;XH^0hW4sFHI1Uvb-@WV(fk9d~FT9Rd6x7Ftw~EE;t_ebV<< zOj2ZZ6VQpDW=1?o*RZRjP|oRJMcEg(nShGt5=RAes`um;3tUUU8F|~}Aq}?03-)7K zzO(7+TuN6+WfmKazwkno0BUVgv>F>^BEe=&yzY&HBtUOUD#Z^NC{JOCxL80K`ynkbTA(OoSU$@id}pp*wM-e= z(IsCmjtpln#TmUr!r6bHJQjmn40LUSno5w2U(>ZD`xrggFK>2ne#Ke^B(pE2D;PVU zWFH>2kA1ia#UDhcOw8glea${f1CF9$x>SweKZ}vVazlI%Gm8_YyRng_b?Pp~Tj!wc z28maxIaJQrG?cf@_?T;yoge^+PE0wPz?{1xPRPim*N(7ND)=zQQIqe^6L`R*bZ9g z%D24;iIL|8@+I0mX2j)hq&e-MMzONbt75j?jF4wJfEYE0&PT}=(ZH>7IAvu?>lfN2 zWb(+YIf>(n4w%3N+1=u3U9l_e0*F1sfsjm6@SWqoyF;uQK%Fc4AKTb=T3))*^GnSK zW~*p9vawWw4i1^2iOw_~`HJ`~C~=s>Y~z`E5NxjO&bWRN9W(-;BUc;EvRaH_jxDhl zzsZR`2n&9G=@&KsD4s`3GQQ|LBZ)xI zD0Uf++XFa~DV3N`)EPxc&?=CZMnwHgD(D!jXq(v!EF8H%lf3aYv=kl8f0uY#keZUM5(Y-+P*+n^(@1b?7XGSJ=Hq%s^3V^zUQ1vP zLD;C}-ujW}x@!&VLcxJrmF*@}nKCMX%#2Bl0s9eOyY1?Z>hT$QV-y&<6N2108p`>K z-iQ7wWA!-)4~A@{Ay7HndcOfsQx^;|&*f=Mx0}Sib>ubus{Ae;%uU83=0Fbc-rGWO zG$pojjJ4!h@^us(^&_QVOI&=-TDtzqI%V7e2 z{ft5({l%Y{GbGU~^xrM=7=G|=%rmJ(i|qgI?@AcP-+Cty!A>?yaU6dnbEvPPOcjzz&L6qz$oEzZzTQ~w(&TYr30D@-5k+v=p z%a{=}jQW6xLUEx+gkn9%CNE_9@nSAQ`ZkY0gA0HR?g7L&5bA3~0*rw#cv7=15eTc! zF227MAcny%?iT8syJHe1lj?L8KE(u8@@jcm4QojUf+vz+sztyT=rAM;`m?_SfGsK8 z9fnPsd^*-}Gf5A(*tc0z^nFas85uwv5b!{|0>@&D{`JEU87sPwBi~w(a%_>akQ7VR z)_}F~j^sEevVY9?fV<7ZAU(7yk;lGSJncpYN6&7h5ZKJJts8!T=@h%fBABKMwYDfq z`E}`bg17`>`%o2#;(4q@EPDSsvF7@hIuY>a1i^yO*hq8r)>QX4JVWn{2FfU)L6xnPm0(5R*?sC8`uJ?dM=icJOiG9=ON94;l3Cwd*vyy#z`) z!snb?=65rPjxSsKp6;gzCZhYbcyQI!9*%$a(&->>@%(C#;qCz%^&{{35spYPGQX|f zQ~Jo2x*EmnAsZp~Q&Jp*ZVQ9sMCOBgz^rd(ZM~$qe}AO8TK;(~uD6zbR!D-y7xHIO z|62COWwp&Idu5f1XUhcCNO(z9WBaO{r%GJL#S=M`&H&X0Jb;NFunA>ZqBIA71*3Fh zo`~A!T!ouraZ-3`JfGRhvMQF|y7?3}_?G2X#zR=51C^dS>?p4jx+1fxre))r z1VW~=G!J7;Dx1#mFj2A-z-D0Xr&`IqvURzr`f;r&=n^r9RMI1#aQ5vt5oJ{zJm_0i+%B4lrRu44~7=@T^q6 zYI#Drp7u7SYphy6G^sYCTN9XtPmnE^0a6cv&easp1s<8SLLT|Mlq>4*D^+xpUpu1f zr(`XxG&s8GmDBrC+41llT1P9}+|r0HI@wvDQ+`@>Y*t0IuBx1pHA!f52C_@})5S`Q zs*F|SD5~M@VnRf$7!s1lBJqS$r;Xsb-hRtr`e0K!v6(MyD56Q;1e+)3A$cGS_nnz3wf1}=C4t<{ zV^k^;8rFH|gXLjV?*+wuW?uS-NSlM%;W!2`NsxP3X5@wVw5q16)T}R#i@0I*KDVcL zA8aC~HOMiWdgUS*^%i9peDF#2fgO1Z^;jquf=o%LX-Vgz-ea{6b*)6^;idaWNJ=y~EUH5m`nLBP($jSK#7}b$RiuU(9 zSebz`p_zA>(FS1Qd+hxPE6EC{B~l>(K8Mw9``P(kK{9Q{LK7&AtbUr;Wxu)<2iteuYm=V^~&LIy+56 zhQ!)D`}ie^bKp|YahBU8LtNb4xRSM!l$?A^Z)h9Hj?zFh2p|0kxH_9s5Tr$kQp9qs z0&UP3BCyBzgb}-bX;B%1t`!R7{y`+SjT6hRF(3FcakZlOQ}Fp*J-jY(?-oq*J{tXo&sF(Gs&0I#R_b~esS5FM-rq2Dz46i5s7hIDIr z4O;CurZ(I>SAk|u8+@XcBW!|o=)w}E@Levm1=@eVqVBUsT8WxPgx_^yHRUU&yFRVDwMSwKw&K{cCSfX{Ui=6UG$}(r(1|vnklLX%n(gW- zsi>rP(8DUBLmz4F>dM8?lSV19S%g@xH%UdLqe-liz_X&wC*h*-W#<-`;@KAH;~NYV ziL;5I#=Uh4BH&WfLfmrTr%g6g*GsHJO6RoS+gaMgTMb`Sq}3o?1DRzk%BMo~0{`6p6^WGOZby#(K!(Tb13` zjyXc|!(@J;stR#Zlj%TaEsLGMe0+i#Vn?<4Ig|LNai}we$n9x#^Jerq>UH9L>K^eL zz=Hb1P_uy~fVND$$>u{E>B=xzJ*ka{-IJS^6x>+u-N;Ze)pCgW`3B{3WrsT~o4-3U z3oup(b#s?%*r?NH5_qgl1CL&zvf6i{74j9)M&ODhlduy)UP#= z4{2J&p}Zh`l&PRF!D60+rcAI&2Zn*m4zQ(STYcHTYX(HhGN+ruktJ*BDE#Kf*KPx&ZXbw5fZm4IfSOe%iCi z=??0mmpWkyYg;z25|P<&n2o1l2g=0hJ~Z2Gn0#=vO?(BQYvzZi&yfGcOi5n8^qywcg@($9XUFDlHw2pFe0`h+f{f3ZfH} zOA7Nz3L;933_@)hvKw99Vc?E+Lu|P>lN?_lzN)k+j73&K10wxnOd?izDFQuliDfJ}5?p>n4p@ZrzdYfq=$6}1<{S;Wc{(-p- zR=z*|c-q&WtiAS`h6F{cVaq=IATcrWnYWFEtZ{NHmq`Y1GvgVTTekj7^G*S8y6Q5l z&Q(oHV<(GebK^ZEKgSw%4s@Jlk2hu)k&X`Mp+kF&c7cE|A8(*S6?1Sb{{p;X(>(!+ zmj3A^jf(wwM^u9QxjwdbYFdZHSTt-5%9D*y#RmRKcLJj#ADm1SU1rS3LRZpe)%Yn# zjD@>ob4qx=$PQhM_#vLwBMQ|+$M~|GTdiiA45?y&xK_7UdI?1*8vC6!@LUcujszvj zm>-DV=~~I{6zY#^NuUb3#J)54#cr|1kW3tyk=X3nQVB`Yc(D^(y5}G=%lc@f$2+dJ zw{O7zy)K<{H*RbO7zk+oov;P}*MrVqvKji;))v3{9g5P{%k(g<@C)7({#xjZk#WWX zC;CFFKa%to9&KSz!Xj&jVhJcDFVDmlrHfH{Ply%WJa*jk=I8rWV)(vfFgIl#GG~K2 z82QgM`|+-(a-WgGJOJm9xttPi(@KhF)k-OWJ z2!#tS;_tlbyr#b{CK9qW=8ZZ9AU}W+viF$};~;Tb_gs_=D9<#O5LI_YeCS5H2K`w4 zB-&Jnegll6n?6A=X^YE%^Z~jNJ_oUBVag zv)P%fUZB%GU8Ld+PE)FKJ)sBQoouS(0*%gam(9-|m&8b3fzF0`Fq1PlcA{7^f6$b&bqJiKg|b_ilEvv#DP(JSpMsIKsNFUATcDs)5WxvIhaSc4i+*>iq|QAhO} zX?lo{hB<;B{A+~HUJVE3stjAbf@=la!Am07iEv72iSGX3CML521jHK_&3Nt${R6jz zYFuUMDjHIh7viPIx0|xcD?asCu>U)M;hmoVq-$qnY5xa#!JXZy z;=P^#A0c{gtyccKmY>Jwo4^-xb0E5LYFeF3{$q zOZ_K*z#ez}5-o9zwuiz5V-OcboY~}|k{o{~7mG+C2cH2EfVI_1&T8mVv@a7^PMW)S zjWXE1`J*j+K+A)*b@B1o22V<^&^Qy-j#5m9qh&N|IKU%!p&j8yN}T`ib@?wY$Ujx5A-xX>$$QKtz1KJ9UorPrw*QR0-?iI1J8T7@M*y4f z%zp*!dNM@&=P66ED(71+UxQF%;6g17Z1dhfMVf*}pfqCjOc~hj4}=ZBp0Bc=AXCqY zO5%bMm}D`<%{RqAzg%BdY{O(sHJXQi9CYXR5veSFP??l#FLv4BbzrgR%=GGQv4H#t=9~2G zq@NR;3WOMK7Qd0CO)Px>x*iHbeAx0wH^2joZr``c4>oZI*x49XPP`*ddLwf|5@>zI zyd%bXBYi>Ybm8hx^d$idRCuI17|2ib^2~)Fsf-A`?GulXDekA3R1L}lkDS{I1m@Y4 z=8+B9-S5U5y)0`b=p$)G*y_p}9y9Xz{<}l7h@IOFdavBxcO9T#L>o;ZYbysMD+gUA zR~sXH?O&bRXyUL{7d?W=UBV-LOg$>Y1bQ(9^`lyycs}075;9WELSnz%{gccGr4RD> zunAQm@eB6jDYk_9d|Er|^x#27lZeOuU(tLLMf2T|Dx)qWOZq=t3sS{=f<@H)P_?;n znZu`}(cx3fB1(O+#%mMF=&SX`l-g7yBw{$AP?K#_WuPb-=&WwpSqt-2;3<)gaUtss zv@+R<*F|SyJ0S!Bqki77q*g&l`eRgqf;;81QH3jhE)_w+s1ZDFW((DfzAZ`a$1|MT zeCwpCRxv&X1HoO6N`v6Nb zY^5M;VCYEiF#w@LAy;AD$Vl9?eE-SS_8Gm~ZIOi+Fu?aS^8u6{TOw>P13d zhc-fSSDD~<%5mpmFB;5(`@aft|HRy~T}Oyo^L9VKBr`mRm6HVifbx5F4a9FI)t@c* z-grR3K=|*k7gPV(j(-9CGZpJsSN2yzcs~%lZ#VnzNc?Z7e|BxZZ2od8@;^4eL-GIR z>{qP+m3}$!_&40zluk@F5r1#?dZSH9A zVEy%PfPb#xcZ+|eU%%rk=)M(e-$+TKh6GEfB9#9{ke?m zZydJDzeojtF6#Od;ZGvM-w5>uf6x;C|9`t)=5Nz~^929<3i*>M__xR4|1|rXH~43f z|GcI98vuXox8MJ)w*Ob5-}O5Fm43BwHJUe|5MiO_lD7bqWq~;`!|Y=-#?=K)~)>$feqQU0Wd|Bb?y{*NfX$>MU7V86R%jQ6YK0t^VKXy%vQ{{f>@lh^