477
handler metrics.Handler,
478
logger log.SnTaggedLogger,
479
>
) *interceptor.RateLimitInterceptor {
fx.go
480
>
rateFn := calculator.NewLoggedCalculator(
481
>
calculator.ClusterAwareQuotaCalculator{
482
>
MemberCounter: frontendServiceResolver,
483
>
PerInstanceQuota: serviceConfig.RPS,
484
>
GlobalQuota: serviceConfig.GlobalRPS,
485
>
},
486
>
log.With(logger, tag.ComponentRPCHandler, tag.ScopeHost),
487
>
).GetQuota
488
>
rateFnWithMetrics := getRateFnWithMetrics(rateFn, handler)
489
>
490
>
namespaceReplicationInducingRateFn := func() float64 {
491
>
return float64(serviceConfig.NamespaceReplicationInducingAPIsRPS())
492
>
}
493
494
>
return interceptor.NewRateLimitInterceptor(
fx.go
495
>
configs.NewRequestToRateLimiter(
496
>
quotas.NewDefaultIncomingRateBurst(rateFnWithMetrics),
497
>
quotas.NewDefaultIncomingRateBurst(rateFn),
498
>
quotas.NewDefaultIncomingRateBurst(namespaceReplicationInducingRateFn),
499
>
serviceConfig.OperatorRPSRatio,
500
>
),
501
>
map[string]int{
502
>
healthpb.Health_Check_FullMethodName: 0, // exclude health check requests from rate limiting.
503
>
adminservice.AdminService_DeepHealthCheck_FullMethodName: 0, // exclude deep health check requests from rate limiting.
504
>
},
505
>
)
506
}
507