mirror of
https://github.com/Buriburizaem0n/nezha_domains.git
synced 2026-09-19 09:40:12 +00:00
fix(mcp): harden dashboard dispatch lifecycle
Co-authored-by: naiba/CloudCode <hi+cloudcode@nai.ba>
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
//go:build agentcompat
|
||||
|
||||
package controller
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type agentcompatMCPRateLimitProbeRequest struct {
|
||||
}
|
||||
|
||||
type agentcompatMCPRateLimitProbeResponse struct {
|
||||
SecondAllowedCount int `json:"second_allowed_count"`
|
||||
SecondRejectedAtCount int `json:"second_rejected_at_count"`
|
||||
MinuteAllowedCount int `json:"minute_allowed_count"`
|
||||
MinuteRejectedAtCount int `json:"minute_rejected_at_count"`
|
||||
}
|
||||
|
||||
func agentcompatMCPRateLimitProbeRoute(context *gin.Context) (agentcompatMCPRateLimitProbeResponse, error) {
|
||||
var request agentcompatMCPRateLimitProbeRequest
|
||||
if err := decodeAgentcompatJSON(context, &request); err != nil {
|
||||
return agentcompatMCPRateLimitProbeResponse{}, err
|
||||
}
|
||||
return runAgentcompatMCPRateLimitProbe(request)
|
||||
}
|
||||
|
||||
func runAgentcompatMCPRateLimitProbe(request agentcompatMCPRateLimitProbeRequest) (agentcompatMCPRateLimitProbeResponse, error) {
|
||||
response := agentcompatMCPRateLimitProbeResponse{}
|
||||
secondNow := time.Unix(1_700_000_000, 0)
|
||||
secondLimiter := newMCPRateLimiterWithClock(10, 120, func() time.Time { return secondNow })
|
||||
for requestNumber := 1; requestNumber <= 11; requestNumber++ {
|
||||
if secondLimiter.Allow(1) {
|
||||
response.SecondAllowedCount++
|
||||
} else if response.SecondRejectedAtCount == 0 {
|
||||
response.SecondRejectedAtCount = requestNumber
|
||||
}
|
||||
}
|
||||
minuteNow := time.Unix(1_700_000_000, 0)
|
||||
minuteLimiter := newMCPRateLimiterWithClock(10_000, 120, func() time.Time { return minuteNow })
|
||||
for requestNumber := 1; requestNumber <= 121; requestNumber++ {
|
||||
if minuteLimiter.Allow(1) {
|
||||
response.MinuteAllowedCount++
|
||||
} else if response.MinuteRejectedAtCount == 0 {
|
||||
response.MinuteRejectedAtCount = requestNumber
|
||||
}
|
||||
minuteNow = minuteNow.Add(100 * time.Millisecond)
|
||||
}
|
||||
return response, nil
|
||||
}
|
||||
Reference in New Issue
Block a user