in core/system/slot.go [59:107]
func (s *AdaptiveSlot) doCheckRule(rule *Rule) (bool, string, float64) {
var msg string
threshold := rule.TriggerCount
switch rule.MetricType {
case InboundQPS:
qps := stat.InboundNode().GetQPS(base.MetricEventPass)
res := qps < threshold
if !res {
msg = "system qps check blocked"
}
return res, msg, qps
case Concurrency:
n := float64(stat.InboundNode().CurrentConcurrency())
res := n < threshold
if !res {
msg = "system concurrency check blocked"
}
return res, msg, n
case AvgRT:
rt := stat.InboundNode().AvgRT()
res := rt < threshold
if !res {
msg = "system avg rt check blocked"
}
return res, msg, rt
case Load:
l := system_metric.CurrentLoad()
if l > threshold {
if rule.Strategy != BBR || !checkBbrSimple() {
msg = "system load check blocked"
return false, msg, l
}
}
return true, "", l
case CpuUsage:
c := system_metric.CurrentCpuUsage()
if c > threshold {
if rule.Strategy != BBR || !checkBbrSimple() {
msg = "system cpu usage check blocked"
return false, msg, c
}
}
return true, "", c
default:
msg = "system undefined metric type, pass by default"
return true, msg, 0.0
}
}