diff --git a/game/activity/data.go b/game/activity/data.go index 2437e5b..0db3e55 100644 --- a/game/activity/data.go +++ b/game/activity/data.go @@ -8,13 +8,13 @@ import ( // DataMeta 全局活动数据 type DataMeta[Data any] struct { once sync.Once - Data Data `json:"data,omitempty"` // 活动数据 - LastNewDay time.Time `json:"lastNewDay,omitempty"` // 上次跨天时间 + Data Data `json:"data,omitempty"` // 活动数据 + LastNewDay time.Time `json:"last_new_day,omitempty"` // 上次跨天时间 } // EntityDataMeta 活动实体数据 type EntityDataMeta[Data any] struct { once sync.Once - Data Data `json:"data,omitempty"` // 活动数据 - LastNewDay time.Time `json:"lastNewDay,omitempty"` // 上次跨天时间 + Data Data `json:"data,omitempty"` // 活动数据 + LastNewDay time.Time `json:"last_new_day,omitempty"` // 上次跨天时间 } diff --git a/utils/log/survey/analyzer.go b/utils/log/survey/analyzer.go index c626820..59f5cb0 100644 --- a/utils/log/survey/analyzer.go +++ b/utils/log/survey/analyzer.go @@ -12,6 +12,7 @@ type Analyzer struct { vc map[string]int64 // 记录了每个 key 生效的计数数量 repeat map[string]struct{} // 去重信息 subs map[string]*Analyzer + format map[string]func(v any) any // 格式化函数 m sync.Mutex } @@ -30,6 +31,16 @@ func (slf *Analyzer) Sub(key string) *Analyzer { return sub } +// SetFormat 设置格式化函数 +func (slf *Analyzer) SetFormat(key string, format func(v any) any) { + slf.m.Lock() + defer slf.m.Unlock() + if slf.format == nil { + slf.format = make(map[string]func(v any) any) + } + slf.format[key] = format +} + // SetValueIfGreaterThan 设置指定 key 的值,当新值大于旧值时 // - 当已有值不为 float64 时,将会被忽略 func (slf *Analyzer) SetValueIfGreaterThan(key string, value float64) { diff --git a/utils/log/survey/report.go b/utils/log/survey/report.go index 3cfac94..8b31bb7 100644 --- a/utils/log/survey/report.go +++ b/utils/log/survey/report.go @@ -1,6 +1,7 @@ package survey import ( + "fmt" "github.com/kercylan98/minotaur/utils/super" "strings" ) @@ -9,10 +10,24 @@ func newReport(analyzer *Analyzer) *Report { report := &Report{ analyzer: analyzer, Name: "ROOT", - Values: analyzer.v, + Values: make(map[string]any), Counter: analyzer.vc, Subs: make([]*Report, 0, len(analyzer.subs)), } + for k, v := range analyzer.v { + if format, exist := analyzer.format[k]; exist { + func() { + defer func() { + if err := recover(); err != nil { + panic(fmt.Errorf("format key[%s] value[%v] error: %v", k, v, err)) + } + }() + report.Values[k] = format(v) + }() + continue + } + report.Values[k] = v + } for k, v := range analyzer.subs { sub := newReport(v) sub.Name = k