refactor: 重构更新多个文件中的相关调用

This commit is contained in:
TsMask
2025-02-20 10:11:40 +08:00
parent f3c33b31ac
commit 5b9bcd6660
34 changed files with 1243 additions and 1894 deletions

View File

@@ -53,7 +53,7 @@ type YamlConfig struct {
} `yaml:"listen"`
} `yaml:"webServer"`
Database DbConfig `yaml:"database"`
// Database DbConfig `yaml:"database"`
OMC struct {
UriPrefix string `yaml:"uriPrefix"`
@@ -139,16 +139,16 @@ type RestParam struct {
KeyFile string `yaml:"keyFile"`
}
type DbConfig struct {
Type string `yaml:"type"`
User string `yaml:"user"`
Password string `yaml:"password"`
Host string `yaml:"host"`
Port string `yaml:"port"`
Name string `yaml:"name"`
ConnParam string `yaml:"connParam,omitempty"`
Backup string `yaml:"backup"`
}
// type DbConfig struct {
// Type string `yaml:"type"`
// User string `yaml:"user"`
// Password string `yaml:"password"`
// Host string `yaml:"host"`
// Port string `yaml:"port"`
// Name string `yaml:"name"`
// ConnParam string `yaml:"connParam,omitempty"`
// Backup string `yaml:"backup"`
// }
type AlarmConfig struct {
SplitEventAlarm bool `yaml:"splitEventAlarm"`
@@ -238,10 +238,10 @@ var YamlConfigInfo YamlConfigFile = YamlConfigFile{
// set default value for yaml config
func NewYamlConfig() YamlConfig {
return YamlConfig{
Database: DbConfig{
Type: "mysql",
ConnParam: "charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=True&interpolateParams=True",
},
// Database: DbConfig{
// Type: "mysql",
// ConnParam: "charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=True&interpolateParams=True",
// },
MML: MMLParam{
SizeRow: 200,
SizeCol: 120,

View File

@@ -10,9 +10,8 @@ import (
"path/filepath"
"strings"
"be.ems/src/framework/constants/token"
tokenUtils "be.ems/src/framework/utils/token"
"be.ems/src/framework/vo"
"be.ems/src/framework/constants"
"be.ems/src/framework/token"
"github.com/gorilla/mux"
"golang.org/x/text/language"
)
@@ -123,25 +122,25 @@ func SaveUploadedFile(r *http.Request, dst string) error {
// Authorization 解析请求头
func Authorization(r *http.Request) string {
// Query请求查询
if authQuery := r.URL.Query().Get(token.ACCESS_TOKEN); authQuery != "" {
if authQuery := r.URL.Query().Get(constants.ACCESS_TOKEN); authQuery != "" {
return authQuery
}
// Header请求头
if authHeader := r.Header.Get(token.ACCESS_TOKEN); authHeader != "" {
if authHeader := r.Header.Get(constants.ACCESS_TOKEN); authHeader != "" {
return authHeader
}
// Query请求查询
if authQuery := r.URL.Query().Get(token.RESPONSE_FIELD); authQuery != "" {
if authQuery := r.URL.Query().Get(constants.ACCESS_TOKEN_QUERY); authQuery != "" {
return authQuery
}
// Header请求头
authHeader := r.Header.Get(token.HEADER_KEY)
authHeader := r.Header.Get(constants.HEADER_KEY)
if authHeader == "" {
return ""
}
// 拆分 Authorization 请求头,提取 JWT 令牌部分
arr := strings.Split(authHeader, token.HEADER_PREFIX)
arr := strings.Split(authHeader, constants.HEADER_PREFIX)
if len(arr) == 2 && arr[1] == "" {
return ""
}
@@ -177,34 +176,34 @@ func AcceptLanguage(r *http.Request) string {
type ContextKey string
// LoginUser 登录用户信息需要Authorize中间件
func LoginUser(r *http.Request) (vo.LoginUser, error) {
func LoginUser(r *http.Request) (token.TokenInfo, error) {
// 获取请求头标识信息
tokenStr := Authorization(r)
if tokenStr == "" {
return vo.LoginUser{}, fmt.Errorf("not token info")
return token.TokenInfo{}, fmt.Errorf("not token info")
}
// 验证令牌
claims, err := tokenUtils.Verify(tokenStr)
claims, err := token.Verify(tokenStr)
if err != nil {
return vo.LoginUser{}, fmt.Errorf("token verify fail")
return token.TokenInfo{}, fmt.Errorf("token verify fail")
}
// 获取缓存的用户信息
loginUser := tokenUtils.LoginUser(claims)
if loginUser.UserID == "" {
return vo.LoginUser{}, fmt.Errorf("not user info")
loginUser := token.Info(claims)
if loginUser.UserId <= 0 {
return token.TokenInfo{}, fmt.Errorf("not user info")
}
return loginUser, nil
}
// LoginUserToUserID 登录用户信息-用户ID
func LoginUserToUserID(r *http.Request) string {
func LoginUserToUserID(r *http.Request) int64 {
loginUser, err := LoginUser(r)
if err != nil {
return ""
return 0
}
return loginUser.UserID
return loginUser.UserId
}
// LoginUserToUserName 登录用户信息-用户名称

View File

@@ -1,167 +0,0 @@
package dborm
import (
"database/sql"
"fmt"
"log"
"os"
"regexp"
"time"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
// 数据库连接实例
var dbgEngine *gorm.DB
// 载入连接日志配置
func loadLogger() logger.Interface {
newLogger := logger.New(
log.New(os.Stdout, "[GORM] ", log.LstdFlags), // 将日志输出到控制台
logger.Config{
SlowThreshold: time.Second, // Slow SQL 阈值
LogLevel: logger.Info, // 日志级别 Silent不输出任何日志
ParameterizedQueries: false, // 参数化查询SQL 用实际值带入?的执行语句
Colorful: false, // 彩色日志输出
},
)
return newLogger
}
// 连接数据库实例
func InitGormConnect(dbType, dbUser, dbPassword, dbHost, dbPort, dbName, dbParam, dbLogging any) error {
var dialector gorm.Dialector
switch dbType {
case "mysql":
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?%s",
dbUser,
dbPassword,
dbHost,
dbPort,
dbName,
dbParam,
)
dialector = mysql.Open(dsn)
default:
err := fmt.Errorf("invalid type: %s", dbType)
return err
}
opts := &gorm.Config{}
// 是否需要日志输出
if dbLogging.(bool) {
opts.Logger = loadLogger()
}
// 创建连接
db, err := gorm.Open(dialector, opts)
if err != nil {
log.Fatalf("failed to open: %s", err)
return err
}
// 获取底层 SQL 数据库连接
sqlDB, err := db.DB()
if err != nil {
log.Fatalf("failed to connect DB pool: %v", err)
return err
}
// 测试数据库连接
err = sqlDB.Ping()
if err != nil {
log.Fatalf("failed to ping database: %v", err)
return err
}
dbgEngine = db
return nil
}
// 关闭数据库实例
func Close() {
sqlDB, err := dbgEngine.DB()
if err != nil {
log.Fatalf("failed to connect pool: %s", err)
}
if err := sqlDB.Close(); err != nil {
log.Fatalf("failed to close: %s", err)
}
}
// default gorm DB
func DefaultDB() *gorm.DB {
return dbgEngine
}
// get sql DB
func GCoreDB() (*sql.DB, error) {
return dbgEngine.DB()
}
// RawSQL 原生查询语句
func RawSQL(sql string, parameters []any) ([]map[string]any, error) {
// 数据源
db := DefaultDB()
// 使用正则表达式替换连续的空白字符为单个空格
fmtSql := regexp.MustCompile(`\s+`).ReplaceAllString(sql, " ")
// logger.Infof("sql=> %v", fmtSql)
// logger.Infof("parameters=> %v", parameters)
// 查询结果
var rows []map[string]any
res := db.Raw(fmtSql, parameters...).Scan(&rows)
if res.Error != nil {
return nil, res.Error
}
return rows, nil
}
// ExecSQL 原生执行语句
func ExecSQL(sql string, parameters []any) (int64, error) {
// 数据源
db := DefaultDB()
// 使用正则表达式替换连续的空白字符为单个空格
fmtSql := regexp.MustCompile(`\s+`).ReplaceAllString(sql, " ")
// 执行结果
res := db.Exec(fmtSql, parameters...)
if res.Error != nil {
return 0, res.Error
}
return res.RowsAffected, nil
}
func CloneTable(srcTable, dstTable string) error {
// 获取表 A 的结构信息
var columns []gorm.ColumnType
dbMigrator := dbgEngine.Migrator()
columns, err := dbMigrator.ColumnTypes(srcTable)
if err != nil {
return fmt.Errorf("failed to ColumnTypes, %v", err)
}
// 创建表 destination table
err = dbMigrator.CreateTable(dstTable)
if err != nil {
return fmt.Errorf("failed to CreateTable, %v", err)
}
// 复制表 src 的字段到表 dst
for _, column := range columns {
err = dbMigrator.AddColumn(dstTable, column.Name())
if err != nil {
return fmt.Errorf("failed to AddColumn, %v", err)
}
}
// 复制表 src 的主键和索引到表 dst
err = dbMigrator.CreateConstraint(dstTable, "PRIMARY")
if err != nil {
return fmt.Errorf("failed to AddColumn, %v", err)
}
err = dbMigrator.CreateConstraint(dstTable, "INDEX")
if err != nil {
return fmt.Errorf("failed to AddColumn, %v", err)
}
return nil
}

View File

@@ -518,66 +518,6 @@ type Period struct {
End string `json:"End"`
}
type KpiSetJ struct {
Code string `json:"Code"` // 统计编码 如SMFHA01
KPIs []string `json:"KPIs` // 指标项集合 ["SMF.AttCreatePduSession", "SMF.AttCreatePduSession._Dnn"]
}
type MeasureTask struct {
Id int `json:"id" xorm:"pk 'id' autoincr"`
NeType string `json:"neType" xorm:"ne_type"`
NeIds []string `json:"neIds" xorm:"ne_ids"`
KpiSet []KpiSetJ `json:"KPISet" xorm:"kpi_set"`
StartTime string `json:"startTime" xorm:"start_time"`
EndTime string `json:"endTime" xorm:"end_time"`
Periods []Period `json:"Periods" xorm:"periods`
Schedule []ScheduleJ `json:"Schedule" xorm:"schedule"`
GranulOption string `json:"granulOption" xorm:"granul_option"`
Status string `json:"status" xorm:"status"`
AccountID string `json:"accountId" xorm:"account_id"`
Comment string `json:"comment" xorm:"comment"`
CreateTime string `json:"createTime" xorm:"create_time"`
UpdateTime string `json:"updateTime" xorm:"update_time"`
DeleteTime string `json:"deleteTime xorm:"delete_time"`
}
func GetMeasureTask(taskId int) (*MeasureTask, error) {
log.Debug("GetMeasureTask processing... ")
measureTask := new(MeasureTask)
has, err := xEngine.Table("measure_task").Where("id=?", taskId).Get(measureTask)
if err != nil || !has {
log.Error("Failed to get table measure_task from database:", err)
return nil, err
}
log.Debug("Measure Task:", measureTask)
return measureTask, nil
}
func XormGetActiveMeasureTask(measureTasks *[]MeasureTask) (*[]MeasureTask, error) {
log.Debug("XormGetActiveMeasureTask processing... ")
measureTask := new(MeasureTask)
rows, err := xEngine.Table("measure_task").Where("status='Active'").Rows(measureTask)
if err != nil {
log.Error("Failed to get table measure_task:", err)
return nil, err
}
defer rows.Close()
for rows.Next() {
err := rows.Scan(measureTask)
if err != nil {
log.Error("Failed to get table measure_task from database:", err)
return nil, err
}
*measureTasks = append(*measureTasks, *measureTask)
}
log.Debug("measureTasks:", measureTasks)
return measureTasks, nil
}
func GetTableByWhere(whereCondition string, tableName string) (*[]interface{}, error) {
log.Debug("GetTableByWhere processing... ")

View File

@@ -8,21 +8,19 @@ import (
"os"
"os/user"
"path/filepath"
"strings"
"syscall"
"github.com/dustin/go-humanize"
)
type FileInfo struct {
FileType string `json:"fileType"` // 文件类型
FileMode string `json:"fileMode"` // 文件的权限
LinkCount int64 `json:"linkCount"` // 硬链接数目
Owner string `json:"owner"` // 所属用户
Group string `json:"group"` // 所属组
Size string `json:"size"` // 文件的大小
ModifiedTime int64 `json:"modifiedTime"` // 最后修改时间,单位为秒
FileName string `json:"fileName"` // 文件的名称
FileType string `json:"fileType"` // file type: file/directory
FileMode string `json:"fileMode"` // file mode
LinkCount int64 `json:"linkCount"` // link count
Owner string `json:"owner"` // owner
Group string `json:"group"` // group
Size int64 `json:"size"` // size: xx byte
ModifiedTime int64 `json:"modifiedTime"` // last modified time:seconds
FilePath string `json:"filePath"` // file path
FileName string `json:"fileName"` // file name
}
func GetFileInfo(dir, suffix string) ([]FileInfo, error) {
@@ -58,15 +56,15 @@ func GetFileInfo(dir, suffix string) ([]FileInfo, error) {
if err != nil {
return err
}
humanReadableSize := humanize.Bytes(uint64(info.Size()))
fileInfo := FileInfo{
FileType: fileType,
FileMode: info.Mode().String(),
LinkCount: int64(info.Sys().(*syscall.Stat_t).Nlink),
Owner: userInfo.Username,
Group: groupInfo.Name,
Size: strings.ToUpper(humanReadableSize),
Size: info.Size(),
ModifiedTime: info.ModTime().Unix(),
FilePath: dir,
FileName: info.Name(),
}
files = append(files, fileInfo)

View File

@@ -6,7 +6,8 @@ import (
"be.ems/lib/log"
"be.ems/lib/services"
tokenConst "be.ems/src/framework/constants/token"
"be.ems/src/framework/constants"
"github.com/gorilla/mux"
)
@@ -23,7 +24,7 @@ func LoggerTrace(next http.Handler) http.Handler {
log.Trace(" User-Agent:", r.Header.Get("User-Agent"))
log.Trace(" Content-Type:", r.Header.Get("Content-Type"))
log.Trace(" AccessToken:", r.Header.Get("AccessToken"))
log.Trace(" Authorization:", r.Header.Get(tokenConst.HEADER_KEY))
log.Trace(" Authorization:", r.Header.Get(constants.HEADER_KEY))
log.Trace("Trace End=====")
//body, _ := io.ReadAll(io.LimitReader(r.Body, global.RequestBodyMaxLen))
// nop-close to ready r.Body !!!

View File

@@ -11,7 +11,7 @@ import (
"be.ems/lib/core/ctx"
"be.ems/lib/log"
"be.ems/src/framework/datasource"
"be.ems/src/framework/database/db"
"be.ems/src/framework/utils/date"
)
@@ -52,7 +52,7 @@ func LogMML(next http.Handler) http.Handler {
username := ctx.LoginUserToUserName(r)
// 执行插入
sql := "insert into mml_log (user,ip,ne_type,ne_id,mml,result,log_time)values(?,?,?,?,?,?,?)"
_, sqlerr := datasource.ExecDB("", sql, []any{username, ipAddr, neType, neId, mmlCmd, resultStr, timeStr})
_, sqlerr := db.ExecDB("", sql, []any{username, ipAddr, neType, neId, mmlCmd, resultStr, timeStr})
if sqlerr != nil {
log.Errorf("insert row : %v", sqlerr.Error())
}

View File

@@ -12,9 +12,9 @@ import (
"time"
"be.ems/lib/core/ctx"
"be.ems/src/framework/constants/common"
"be.ems/src/framework/constants"
"be.ems/src/framework/ip2region"
"be.ems/src/framework/middleware/collectlogs"
"be.ems/src/framework/utils/ip2region"
"be.ems/src/framework/utils/parse"
"be.ems/src/modules/system/model"
"be.ems/src/modules/system/service"
@@ -52,19 +52,17 @@ func LogOperate(options collectlogs.Options) func(http.Handler) http.Handler {
// 解析ip地址
ip := strings.Split(r.RemoteAddr, ":")[0]
ipaddr := ip2region.ClientIP(ip)
location := ip2region.RealAddressByIp(ipaddr)
location := "-" //ip2region.RealAddressByIp(ipaddr)
// 操作日志记录
operLog := model.SysLogOperate{
Title: options.Title,
BusinessType: options.BusinessType,
OperatorType: collectlogs.OPERATOR_TYPE_MANAGE,
Method: funcName,
OperURL: r.RequestURI,
RequestMethod: r.Method,
OperIP: ipaddr,
OperLocation: location,
OperName: username,
DeptName: "",
Title: options.Title,
BusinessType: options.BusinessType,
OperaMethod: funcName,
OperaUrl: r.RequestURI,
OperaUrlMethod: r.Method,
OperaIp: ipaddr,
OperaLocation: location,
OperaBy: username,
}
// 是否需要保存request参数和值
@@ -97,7 +95,7 @@ func LogOperate(options collectlogs.Options) func(http.Handler) http.Handler {
if len(paramsStr) > 2000 {
paramsStr = paramsStr[:2000]
}
operLog.OperParam = paramsStr
operLog.OperaParam = paramsStr
}
next.ServeHTTP(w, r)
@@ -110,9 +108,9 @@ func LogOperate(options collectlogs.Options) func(http.Handler) http.Handler {
// 响应状态
if status == "200" || status == "204" {
operLog.Status = common.STATUS_YES
operLog.StatusFlag = constants.STATUS_YES
} else {
operLog.Status = common.STATUS_NO
operLog.StatusFlag = constants.STATUS_NO
}
// 是否需要保存response参数和值
@@ -121,16 +119,16 @@ func LogOperate(options collectlogs.Options) func(http.Handler) http.Handler {
contentType := w.Header().Get("Content-Type")
content := contentType + contentDisposition
msg := fmt.Sprintf(`{"status":"%s","size":"%s","content-type":"%s"}`, status, size, content)
operLog.OperMsg = msg
operLog.OperaMsg = msg
}
// 日志记录时间
duration := time.Since(startTime)
operLog.CostTime = duration.Milliseconds()
operLog.OperTime = time.Now().UnixMilli()
operLog.OperaTime = time.Now().UnixMilli()
// 保存操作记录到数据库
service.NewSysLogOperateImpl.InsertSysLogOperate(operLog)
service.NewSysLogOperate.Insert(operLog)
})
}

View File

@@ -15,7 +15,8 @@ import (
"be.ems/lib/global"
"be.ems/lib/log"
"be.ems/lib/run"
tokenConst "be.ems/src/framework/constants/token"
"be.ems/src/framework/constants"
"github.com/go-resty/resty/v2"
)
@@ -507,7 +508,7 @@ func TransMml2HttpReq(omcMmlVar *MmlVar, mml *MmlCommand) (*[]byte, error) {
log.Debugf("method: Get requestURI: %s", requestURI)
response, err := client.R().
EnableTrace().
SetHeaders(map[string]string{tokenConst.HEADER_KEY: omcMmlVar.Authorization}).
SetHeaders(map[string]string{constants.HEADER_KEY: omcMmlVar.Authorization}).
// SetHeaders(map[string]string{"accessToken": omcMmlVar.SessionToken}).
SetHeaders(map[string]string{"User-Agent": omcMmlVar.UserAgent}).
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
@@ -524,7 +525,7 @@ func TransMml2HttpReq(omcMmlVar *MmlVar, mml *MmlCommand) (*[]byte, error) {
log.Debugf("method: Post requestURI: %s", requestURI)
response, err := client.R().
EnableTrace().
SetHeaders(map[string]string{tokenConst.HEADER_KEY: omcMmlVar.Authorization}).
SetHeaders(map[string]string{constants.HEADER_KEY: omcMmlVar.Authorization}).
// SetHeaders(map[string]string{"accessToken": omcMmlVar.SessionToken}).
SetHeaders(map[string]string{"User-Agent": omcMmlVar.UserAgent}).
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
@@ -558,7 +559,7 @@ func TransMml2HttpReq(omcMmlVar *MmlVar, mml *MmlCommand) (*[]byte, error) {
body := ParseInputBody(inputJson, mml)
response, err := client.R().
EnableTrace().
SetHeaders(map[string]string{tokenConst.HEADER_KEY: omcMmlVar.Authorization}).
SetHeaders(map[string]string{constants.HEADER_KEY: omcMmlVar.Authorization}).
// SetHeaders(map[string]string{"accessToken": omcMmlVar.SessionToken}).
SetHeaders(map[string]string{"User-Agent": omcMmlVar.UserAgent}).
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
@@ -575,7 +576,7 @@ func TransMml2HttpReq(omcMmlVar *MmlVar, mml *MmlCommand) (*[]byte, error) {
log.Debugf("method: Delete requestURI: %s", requestURI)
response, err := client.R().
EnableTrace().
SetHeaders(map[string]string{tokenConst.HEADER_KEY: omcMmlVar.Authorization}).
SetHeaders(map[string]string{constants.HEADER_KEY: omcMmlVar.Authorization}).
// SetHeaders(map[string]string{"accessToken": omcMmlVar.SessionToken}).
SetHeaders(map[string]string{"User-Agent": omcMmlVar.UserAgent}).
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).
@@ -591,7 +592,7 @@ func TransMml2HttpReq(omcMmlVar *MmlVar, mml *MmlCommand) (*[]byte, error) {
log.Debugf("method: patch requestURI: %s", requestURI)
response, err := client.R().
EnableTrace().
SetHeaders(map[string]string{tokenConst.HEADER_KEY: omcMmlVar.Authorization}).
SetHeaders(map[string]string{constants.HEADER_KEY: omcMmlVar.Authorization}).
// SetHeaders(map[string]string{"accessToken": omcMmlVar.SessionToken}).
SetHeaders(map[string]string{"User-Agent": omcMmlVar.UserAgent}).
SetHeaders(map[string]string{"Content-Type": "application/json;charset=UTF-8"}).

View File

@@ -211,7 +211,6 @@ func init() {
Register("POST", trace.UriTraceTask, trace.PostTraceTaskToNF, midware.LogOperate(collectlogs.OptionNew("Trace Task", collectlogs.BUSINESS_TYPE_INSERT)))
Register("PUT", trace.UriTraceTask, trace.PutTraceTaskToNF, midware.LogOperate(collectlogs.OptionNew("Trace Task", collectlogs.BUSINESS_TYPE_UPDATE)))
Register("DELETE", trace.UriTraceTask, trace.DeleteTraceTaskToNF, midware.LogOperate(collectlogs.OptionNew("Trace Task", collectlogs.BUSINESS_TYPE_DELETE)))
Register("GET", trace.UriTraceDecMsg, trace.ParseRawMsg2Html, nil)
Register("POST", trace.CustomUriTraceTask, trace.PostTraceTaskToNF, nil)
Register("PUT", trace.CustomUriTraceTask, trace.PutTraceTaskToNF, nil)

View File

@@ -22,7 +22,9 @@ func TotalResp(total int64) map[string]any {
}
func TotalDataResp(data any, total any) map[string]any {
return map[string]any{"code": CODE_SUCC, "data": data, "total": total}
return map[string]any{"code": CODE_SUCC, "data": map[string]any{
"rows": data, "total": total,
}, "msg": "success"}
}
func SuccResp(va map[string]any) map[string]any {