feat: survey 包支持对报告字段进行格式化处理
This commit is contained in:
parent
5c954f0c2a
commit
ed5be97234
|
@ -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"` // 上次跨天时间
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue