Files
kami_backend/internal/model/limiter.go
danial 15e2426e85 feat(camel_oil): 新增骆驼加油账号管理模块
- 实现账号增删改查接口和逻辑
- 支持账号状态更新及状态历史记录功能
- 提供账号列表、历史和统计信息查询API
- 实现账号轮询机制,支持按使用时间轮询获取账号
- 增加账号登录流程及批量登录功能,集成接码平台和平台API
- 管理账号订单容量,支持容量检查与账号登录触发
- 提供账号池状态统计接口
- 账号历史记录查询支持多种变更类型文本展示
- 密码等敏感信息采用脱敏展示
- 完善日志记录和错误处理机制,保证业务稳定运行
2025-11-21 00:49:50 +08:00

56 lines
2.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package model
import (
"time"
)
// LimiterType 限流器类型
type LimiterType string
const (
// LimiterTypeSysUserLogin 用户登录限流
LimiterTypeSysUserLogin LimiterType = "sys_user:login"
// LimiterTypeCardInfoJdAccountCookieChecker JD账户Cookie检查限流
LimiterTypeCardInfoJdAccountCookieChecker LimiterType = "card_info:jd:account:cookie"
// LimiterTypeCardInfoJdAccountCookieSet JD账户Cookie设置限流
LimiterTypeCardInfoJdAccountCookieSet LimiterType = "card_info:jd:account:cookie:set"
// LimiterTypeCardInfoRedeemAccountCookieChecker 通用账户Cookie检查限流
LimiterTypeCardInfoRedeemAccountCookieChecker LimiterType = "card_info:redeem:account:cookie:checker"
// LimiterTypeCardInfoRedeemAccountCookieSet 通用账户Cookie设置限流
LimiterTypeCardInfoRedeemAccountCookieSet LimiterType = "card_info:redeem:account:cookie:set"
)
// LimiterStrategy 限流策略
type LimiterStrategy string
const (
// StrategySlidingWindow 滑动窗口限流
StrategySlidingWindow LimiterStrategy = "sliding_window"
// StrategyFixedWindow 固定窗口限流
StrategyFixedWindow LimiterStrategy = "fixed_window"
// StrategyTokenBucket 令牌桶限流
StrategyTokenBucket LimiterStrategy = "token_bucket"
)
// LimiterConfig 限流器配置
type LimiterConfig struct {
Type LimiterType `json:"type"` // 限流器类型
Strategy LimiterStrategy `json:"strategy"` // 限流策略
Capacity int `json:"capacity"` // 容量(最大请求数)
Window time.Duration `json:"window"` // 时间窗口
Rate float64 `json:"rate"` // 速率(用于令牌桶)
}
// LimiterResult 限流检查结果
type LimiterResult struct {
Allowed bool `json:"allowed"` // 是否允许通过
Remaining int `json:"remaining"` // 剩余可用次数
ResetAt time.Time `json:"reset_at"` // 重置时间
RetryAfter time.Duration `json:"retry_after"` // 建议重试间隔
}
// Key 暴露Key方法用于生成缓存键
func (lt LimiterType) Key(name interface{}) string {
return string(lt) + ":" + string(name.(string))
}