Files

71 lines
1.3 KiB
Go
Raw Permalink Normal View History

2025-07-24 17:13:17 +08:00
package priority
import (
"time"
2025-10-04 20:44:16 +08:00
"github.com/google/uuid"
2025-07-24 17:13:17 +08:00
"github.com/yuninks/timerx/logger"
)
type Options struct {
2025-09-18 15:34:01 +08:00
getInterval time.Duration // 查询周期
2025-07-24 17:13:17 +08:00
updateInterval time.Duration // 更新间隔
expireTime time.Duration // 有效时间
2025-10-04 20:44:16 +08:00
logger logger.Logger // 日志
source string // 来源服务
instanceId string // 实例ID
2025-07-24 17:13:17 +08:00
}
func defaultOptions() Options {
2025-10-04 20:44:16 +08:00
u, _ := uuid.NewV7()
2025-07-24 17:13:17 +08:00
return Options{
2025-09-18 15:34:01 +08:00
getInterval: time.Second * 2,
updateInterval: time.Second * 4,
expireTime: time.Second * 8,
2025-07-24 17:13:17 +08:00
logger: logger.NewLogger(),
2025-10-04 20:44:16 +08:00
instanceId: u.String(),
2025-07-24 17:13:17 +08:00
}
}
type Option func(*Options)
func newOptions(opts ...Option) Options {
o := defaultOptions()
for _, opt := range opts {
opt(&o)
}
return o
}
2025-09-24 14:50:30 +08:00
func WithLogger(log logger.Logger) Option {
2025-07-24 17:13:17 +08:00
return func(o *Options) {
o.logger = log
}
}
2025-09-18 15:34:01 +08:00
// 更新周期
2025-09-24 14:50:30 +08:00
func WithUpdateInterval(d time.Duration) Option {
2025-07-24 17:13:17 +08:00
if d.Abs() < time.Second {
2025-09-18 15:34:01 +08:00
d = time.Second * 5
2025-07-24 17:13:17 +08:00
}
return func(o *Options) {
o.updateInterval = d
2025-09-18 15:34:01 +08:00
o.expireTime = d*2 + time.Second
o.getInterval = d / 3
2025-07-24 17:13:17 +08:00
}
}
2025-10-04 20:44:16 +08:00
func WithInstanceId(instanceId string) Option {
return func(o *Options) {
o.instanceId = instanceId
}
}
func WithSource(s string) Option {
return func(o *Options) {
o.source = s
}
}