feat: ne_config参数配置文件数据解析工具
This commit is contained in:
8
ne_config_parse_tool/README.md
Normal file
8
ne_config_parse_tool/README.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# ne_config参数配置文件数据解析工具说明
|
||||||
|
|
||||||
|
manin文件配置数据库连接,解开选择读取文件
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# 进入main文件所在目录
|
||||||
|
go run .
|
||||||
|
```
|
||||||
101
ne_config_parse_tool/main.go
Normal file
101
ne_config_parse_tool/main.go
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"path/filepath"
|
||||||
|
"sort"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
DbHost = "192.168.5.59"
|
||||||
|
DbPort = 3306
|
||||||
|
DbUser = "root"
|
||||||
|
DbPassswd = "root@1234"
|
||||||
|
DbName = "omc_pt"
|
||||||
|
|
||||||
|
configParamDir = "../config/param"
|
||||||
|
configParamFile = "*" // 目录下全部更新
|
||||||
|
// configParamFile = "upf_param_config.yaml" // 单文件更新
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
fileNameList, err := getDirFileNameList(configParamDir)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if configParamFile == "*" {
|
||||||
|
for _, v := range fileNameList {
|
||||||
|
params := parseData(filepath.Join(configParamDir, v))
|
||||||
|
if params == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
saveData(params)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
params := parseData(filepath.Join(configParamDir, configParamFile))
|
||||||
|
if params == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
saveData(params)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// parseData 文件转map数据
|
||||||
|
func parseData(filePaht string) []map[string]string {
|
||||||
|
data, err := parseStrToMap(filePaht)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("parseStrToMap => %s", err.Error())
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
params, err := parseParamConfig(data)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("parseParamConfig => %s", err.Error())
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return params
|
||||||
|
}
|
||||||
|
|
||||||
|
// saveData 保存数据
|
||||||
|
func saveData(params []map[string]string) {
|
||||||
|
// 定义排序函数
|
||||||
|
sort.Slice(params, func(i, j int) bool {
|
||||||
|
paramSortI := params[i]["paramSort"]
|
||||||
|
if len(paramSortI) == 0 || paramSortI == "" {
|
||||||
|
paramSortI = "0"
|
||||||
|
}
|
||||||
|
paramSortJ := params[j]["paramSort"]
|
||||||
|
if len(paramSortJ) == 0 || paramSortJ == "" {
|
||||||
|
paramSortJ = "0"
|
||||||
|
}
|
||||||
|
// 将 age 字段转换为整数进行比较
|
||||||
|
si, _ := strconv.Atoi(paramSortI)
|
||||||
|
sj, _ := strconv.Atoi(paramSortJ)
|
||||||
|
return si < sj
|
||||||
|
})
|
||||||
|
// 遍历插入
|
||||||
|
for _, v := range params {
|
||||||
|
paramSort := v["paramSort"]
|
||||||
|
if len(paramSort) == 0 || paramSort == "" {
|
||||||
|
paramSort = "0"
|
||||||
|
}
|
||||||
|
neConfig := NeConfig{
|
||||||
|
NeType: v["neType"],
|
||||||
|
ParamName: v["paramName"],
|
||||||
|
ParamDisplay: v["paramDisplay"],
|
||||||
|
ParamType: v["paramType"],
|
||||||
|
ParamJson: v["paramJson"],
|
||||||
|
ParamPerms: v["paramPerms"],
|
||||||
|
ParamSort: paramSort,
|
||||||
|
}
|
||||||
|
neConfig.Save()
|
||||||
|
log.Println(neConfig.ID, neConfig.NeType, neConfig.ParamDisplay)
|
||||||
|
}
|
||||||
|
}
|
||||||
40
ne_config_parse_tool/ne_config.go
Normal file
40
ne_config_parse_tool/ne_config.go
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// NeConfig 网元_参数配置可用属性值
|
||||||
|
type NeConfig struct {
|
||||||
|
ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||||
|
NeType string `gorm:"ne_type"` // 网元类型
|
||||||
|
ParamName string `gorm:"param_name"` // 参数名
|
||||||
|
ParamDisplay string `gorm:"param_display"` // 参数显示名
|
||||||
|
ParamType string `gorm:"param_type"` // 参数类型 list列表单层 array数组多层
|
||||||
|
ParamJson string `gorm:"param_json"` // accesss属性控制:只读read-only/read/ro 读写read-write
|
||||||
|
ParamSort string `gorm:"param_sort"` // 参数排序
|
||||||
|
ParamPerms string `gorm:"param_perms"` // 操作权限 get只读 put可编辑 delete可删除 post可新增
|
||||||
|
UpdateTime int64 `gorm:"update_time"` // 更新时间
|
||||||
|
}
|
||||||
|
|
||||||
|
// TableName 表名称
|
||||||
|
func (*NeConfig) TableName() string {
|
||||||
|
return "ne_config"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save 表插入或更新
|
||||||
|
func (s *NeConfig) Save() string {
|
||||||
|
db := connDB()
|
||||||
|
// 检查是否存在
|
||||||
|
var id string
|
||||||
|
db.Raw("SELECT id FROM ne_config WHERE ne_type = ? AND param_name = ?", s.NeType, s.ParamName).Scan(&id)
|
||||||
|
// 更新时间
|
||||||
|
s.UpdateTime = time.Now().UnixMilli()
|
||||||
|
if id != "" {
|
||||||
|
s.ID = id
|
||||||
|
db.Save(s)
|
||||||
|
} else {
|
||||||
|
db.Create(s)
|
||||||
|
}
|
||||||
|
return s.ID
|
||||||
|
}
|
||||||
108
ne_config_parse_tool/utils.go
Normal file
108
ne_config_parse_tool/utils.go
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"gopkg.in/yaml.v3"
|
||||||
|
"gorm.io/driver/mysql"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
"gorm.io/gorm/logger"
|
||||||
|
)
|
||||||
|
|
||||||
|
var gdb *gorm.DB
|
||||||
|
|
||||||
|
// connDB 连接到数据库
|
||||||
|
func connDB() *gorm.DB {
|
||||||
|
if gdb != nil {
|
||||||
|
return gdb
|
||||||
|
}
|
||||||
|
|
||||||
|
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", DbUser, DbPassswd, DbHost, DbPort, DbName)
|
||||||
|
newLogger := logger.New(
|
||||||
|
log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
|
||||||
|
logger.Config{
|
||||||
|
SlowThreshold: time.Minute, // Slow SQL threshold
|
||||||
|
LogLevel: logger.Error, // Log level
|
||||||
|
IgnoreRecordNotFoundError: true, // Ignore ErrRecordNotFound error for logger
|
||||||
|
ParameterizedQueries: true, // Don't include params in the SQL log
|
||||||
|
Colorful: false, // Disable color
|
||||||
|
},
|
||||||
|
)
|
||||||
|
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{Logger: newLogger})
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
gdb = db
|
||||||
|
return gdb
|
||||||
|
}
|
||||||
|
|
||||||
|
// getDirFileNameList 获取文件目录下所有文件名称,不含目录名称
|
||||||
|
func getDirFileNameList(dirPath string) ([]string, error) {
|
||||||
|
fileNames := []string{}
|
||||||
|
|
||||||
|
dir, err := os.Open(dirPath)
|
||||||
|
if err != nil {
|
||||||
|
return fileNames, nil
|
||||||
|
}
|
||||||
|
defer dir.Close()
|
||||||
|
|
||||||
|
fileInfos, err := dir.Readdir(-1)
|
||||||
|
if err != nil {
|
||||||
|
return fileNames, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, fileInfo := range fileInfos {
|
||||||
|
if fileInfo.Mode().IsRegular() {
|
||||||
|
fileNames = append(fileNames, fileInfo.Name())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return fileNames, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// parseStrToMap 解析内容string到map
|
||||||
|
func parseStrToMap(filePath string) (map[string]any, error) {
|
||||||
|
// 读取文件内容
|
||||||
|
bytes, err := os.ReadFile(filePath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
content := string(bytes)
|
||||||
|
var configMap map[string]any
|
||||||
|
err = yaml.Unmarshal([]byte(content), &configMap)
|
||||||
|
|
||||||
|
return configMap, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// parseParamConfig 解析内容文件数据
|
||||||
|
func parseParamConfig(data map[string]any) ([]map[string]string, error) {
|
||||||
|
paramMapArr := make([]map[string]string, 0)
|
||||||
|
for k, v := range data {
|
||||||
|
for ik, iv := range v.(map[string]any) {
|
||||||
|
itemMap := make(map[string]string)
|
||||||
|
itemMap["neType"] = strings.ToUpper(k)
|
||||||
|
itemMap["paramName"] = ik
|
||||||
|
for iik, iiv := range iv.(map[string]any) {
|
||||||
|
switch iik {
|
||||||
|
case "display":
|
||||||
|
itemMap["paramDisplay"] = iiv.(string)
|
||||||
|
case "sort":
|
||||||
|
itemMap["paramSort"] = fmt.Sprint(iiv)
|
||||||
|
case "perms", "method":
|
||||||
|
itemMap["paramPerms"] = iiv.(string)
|
||||||
|
case "data", "list", "array":
|
||||||
|
itemMap["paramType"] = iik
|
||||||
|
strByte, _ := json.Marshal(iiv)
|
||||||
|
itemMap["paramJson"] = string(strByte)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
paramMapArr = append(paramMapArr, itemMap)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return paramMapArr, nil
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user