Skip to content

Commit e3cf0c0

Browse files
committed
fix: 补充缺失的组级和账户级运维告警指标
新增以下运维告警指标类型: - group_available_accounts: 组内可用账户数 - group_available_ratio: 组内可用账户比例 - group_rate_limit_ratio: 组内限速账户比例 - account_rate_limited_count: 限速账户数 - account_error_count: 错误账户数 - account_error_ratio: 错误账户比例 - overload_account_count: 过载账户数 包含比例和计数类指标的评估逻辑,并注册新的百分比类指标用于阈值校验。
1 parent ac6bde7 commit e3cf0c0

2 files changed

Lines changed: 53 additions & 1 deletion

File tree

backend/internal/handler/admin/ops_alerts_handler.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@ var validOpsAlertMetricTypes = []string{
2323
"cpu_usage_percent",
2424
"memory_usage_percent",
2525
"concurrency_queue_depth",
26+
"group_available_accounts",
27+
"group_available_ratio",
28+
"group_rate_limit_ratio",
29+
"account_rate_limited_count",
30+
"account_error_count",
31+
"account_error_ratio",
32+
"overload_account_count",
2633
}
2734

2835
var validOpsAlertMetricTypeSet = func() map[string]struct{} {
@@ -82,7 +89,10 @@ func isPercentOrRateMetric(metricType string) bool {
8289
"error_rate",
8390
"upstream_error_rate",
8491
"cpu_usage_percent",
85-
"memory_usage_percent":
92+
"memory_usage_percent",
93+
"group_available_ratio",
94+
"group_rate_limit_ratio",
95+
"account_error_ratio":
8696
return true
8797
default:
8898
return false

backend/internal/service/ops_alert_evaluator_service.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,48 @@ func (s *OpsAlertEvaluatorService) computeRuleMetric(
506506
return float64(countAccountsByCondition(availability.Accounts, func(acc *AccountAvailability) bool {
507507
return acc.HasError && acc.TempUnschedulableUntil == nil
508508
})), true
509+
case "group_rate_limit_ratio":
510+
if groupID == nil || *groupID <= 0 {
511+
return 0, false
512+
}
513+
if s == nil || s.opsService == nil {
514+
return 0, false
515+
}
516+
availability, err := s.opsService.GetAccountAvailability(ctx, platform, groupID)
517+
if err != nil || availability == nil {
518+
return 0, false
519+
}
520+
if availability.Group == nil || availability.Group.TotalAccounts <= 0 {
521+
return 0, true
522+
}
523+
return (float64(availability.Group.RateLimitCount) / float64(availability.Group.TotalAccounts)) * 100, true
524+
case "account_error_ratio":
525+
if s == nil || s.opsService == nil {
526+
return 0, false
527+
}
528+
availability, err := s.opsService.GetAccountAvailability(ctx, platform, groupID)
529+
if err != nil || availability == nil {
530+
return 0, false
531+
}
532+
total := int64(len(availability.Accounts))
533+
if total <= 0 {
534+
return 0, true
535+
}
536+
errorCount := countAccountsByCondition(availability.Accounts, func(acc *AccountAvailability) bool {
537+
return acc.HasError && acc.TempUnschedulableUntil == nil
538+
})
539+
return (float64(errorCount) / float64(total)) * 100, true
540+
case "overload_account_count":
541+
if s == nil || s.opsService == nil {
542+
return 0, false
543+
}
544+
availability, err := s.opsService.GetAccountAvailability(ctx, platform, groupID)
545+
if err != nil || availability == nil {
546+
return 0, false
547+
}
548+
return float64(countAccountsByCondition(availability.Accounts, func(acc *AccountAvailability) bool {
549+
return acc.IsOverloaded
550+
})), true
509551
}
510552

511553
overview, err := s.opsRepo.GetDashboardOverview(ctx, &OpsDashboardFilter{

0 commit comments

Comments
 (0)