111 lines
2.7 KiB
Go
111 lines
2.7 KiB
Go
package smdl
|
||
|
||
import (
|
||
"admin/apps/game/domain/entity"
|
||
dto2 "admin/internal/model/dto"
|
||
"admin/lib/xlog"
|
||
"encoding/base64"
|
||
"strconv"
|
||
)
|
||
|
||
type GameLogHook struct {
|
||
}
|
||
|
||
var removeFields = map[string]struct{}{
|
||
"pub_mediaid": {},
|
||
"pub_role_name": {},
|
||
"pub_udid": {},
|
||
}
|
||
|
||
var alias = map[string]string{
|
||
"pub_viplev": "vip等级",
|
||
"pub_userid": "账号",
|
||
"pub_totalcash": "总充值金额",
|
||
"pub_serverid": "服务器id",
|
||
"pub_rolename": "角色名",
|
||
"pub_roleid": "角色id",
|
||
"pub_lev": "等级",
|
||
"pub_language": "语言",
|
||
"pub_ip": "IP",
|
||
}
|
||
|
||
var base64decodeFields = map[string]struct{}{
|
||
"pub_rolename": {},
|
||
"chatlog_msg": {},
|
||
}
|
||
|
||
func init() {
|
||
for i := 0; i < 15; i++ {
|
||
removeFields["chatlog_score"] = struct{}{}
|
||
removeFields["chatlog_score"+strconv.Itoa(i)] = struct{}{}
|
||
removeFields["chatlog_label"] = struct{}{}
|
||
removeFields["chatlog_label"+strconv.Itoa(i)] = struct{}{}
|
||
removeFields["chatlog_checklevel"] = struct{}{}
|
||
removeFields["chatlog_checklevel"+strconv.Itoa(i)] = struct{}{}
|
||
}
|
||
removeFields["chatlog_code"] = struct{}{}
|
||
removeFields["chatlog_checkresult"] = struct{}{}
|
||
}
|
||
|
||
func (hook *GameLogHook) Trim(projectInfo *entity.Project, eventName []string, totalCount int, fieldsDescInfo []*dto2.GameLogFieldInfo, rows [][]any) (
|
||
int, []*dto2.GameLogFieldInfo, [][]any) {
|
||
|
||
// 删除不需要的字段
|
||
i := 0
|
||
for {
|
||
if i >= len(fieldsDescInfo) {
|
||
break
|
||
}
|
||
field := fieldsDescInfo[i]
|
||
if _, find := removeFields[field.Name]; find {
|
||
// 找到这个字段在去掉的列表里
|
||
fieldsDescInfo = append(fieldsDescInfo[:i], fieldsDescInfo[i+1:]...)
|
||
// 对应所有数据行里也删除这个值
|
||
for _, row := range rows {
|
||
row = append(row[:i], row[i+1:]...)
|
||
}
|
||
} else {
|
||
// 查找要不要把value做base64解码
|
||
if _, find := base64decodeFields[field.Name]; find {
|
||
for _, row := range rows {
|
||
newValue, err := base64.StdEncoding.DecodeString((*(row[i].(*interface{}))).(string))
|
||
if err != nil {
|
||
xlog.Warnf("base64 decode field:%v value:%v error:%v", field.Name, row[i], err)
|
||
} else {
|
||
row[i] = string(newValue)
|
||
}
|
||
}
|
||
}
|
||
i++
|
||
}
|
||
}
|
||
|
||
// 查找别名
|
||
for _, en := range eventName {
|
||
// 查找全局eventName描述表信息,对里面没有别的字段名改为表里的名字
|
||
descInfo, find := globEventList[en]
|
||
if find {
|
||
for _, f := range fieldsDescInfo {
|
||
find := false
|
||
for _, f1 := range descInfo.fields {
|
||
if f.Name == f1.Name && f1.Alias != "" {
|
||
if f.Name == f.Alias {
|
||
f.Alias = f1.Alias
|
||
}
|
||
find = true
|
||
break
|
||
}
|
||
}
|
||
if !find {
|
||
aliasName, find1 := alias[f.Name]
|
||
if find1 && f.Name == f.Alias && f.Alias != "" {
|
||
f.Alias = aliasName
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
return totalCount, fieldsDescInfo, rows
|
||
}
|