优化生产日志体积:访问降噪、压缩清理与退款告警节流
跳过轮询/封面等热路径成功请求,按日 gzip 并保留可配天数,退款 max-retry 汇总告警。
This commit is contained in:
@@ -46,6 +46,50 @@ func TestRetryBackoffCapsAtOneHour(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestWarnMaxRetryRefundsThrottlesByLastRetryAt(t *testing.T) {
|
||||
db := setupRefundRetryTestDB(t)
|
||||
job := New(db, nil, zap.NewNop(), nil)
|
||||
now := time.Date(2026, 7, 11, 12, 0, 0, 0, time.UTC)
|
||||
old := now.Add(-25 * time.Hour)
|
||||
row := model.PaymentOrder{
|
||||
PaymentNo: "PAY202607110001",
|
||||
OrderID: 9,
|
||||
OrderNo: "ORD202607110001",
|
||||
UserID: 2,
|
||||
Provider: "mock",
|
||||
ThirdOrderID: "REF202607110001",
|
||||
BizType: "admin_refund",
|
||||
Status: "failed",
|
||||
RetryCount: maxRetryCount,
|
||||
LastRetryAt: &old,
|
||||
}
|
||||
if err := db.Create(&row).Error; err != nil {
|
||||
t.Fatalf("创建退款单失败: %v", err)
|
||||
}
|
||||
|
||||
job.warnMaxRetryRefunds(t.Context(), now)
|
||||
|
||||
var latest model.PaymentOrder
|
||||
if err := db.First(&latest, row.ID).Error; err != nil {
|
||||
t.Fatalf("查询退款单失败: %v", err)
|
||||
}
|
||||
if latest.LastRetryAt == nil || !latest.LastRetryAt.Equal(now) {
|
||||
t.Fatalf("LastRetryAt 应更新为 now 以节流,got %v", latest.LastRetryAt)
|
||||
}
|
||||
|
||||
// 立即再扫不应匹配(last_retry_at 未超过 24h)
|
||||
var count int64
|
||||
if err := db.Model(&model.PaymentOrder{}).
|
||||
Where("retry_count >= ? AND (last_retry_at IS NULL OR last_retry_at <= ?)",
|
||||
maxRetryCount, now.Add(-manualWarnThreshold)).
|
||||
Count(&count).Error; err != nil {
|
||||
t.Fatalf("count: %v", err)
|
||||
}
|
||||
if count != 0 {
|
||||
t.Fatalf("throttled rows count = %d, want 0", count)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMarkRetryFailedStopsAtMaxCount(t *testing.T) {
|
||||
db := setupRefundRetryTestDB(t)
|
||||
job := New(db, nil, zap.NewNop(), nil)
|
||||
|
||||
Reference in New Issue
Block a user