From ed5be97234436030845ef7975f6eabd0e62e5eaf Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Mon, 27 Nov 2023 10:29:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20survey=20=E5=8C=85=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=AF=B9=E6=8A=A5=E5=91=8A=E5=AD=97=E6=AE=B5=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/activity/data.go | 8 ++++---- utils/log/survey/analyzer.go | 11 +++++++++++ utils/log/survey/report.go | 17 ++++++++++++++++- 3 files changed, 31 insertions(+), 5 deletions(-) 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