19
// Requires the context to be pre-wrapped with contextutil.WithMetadataContext() before the RPC call.
20
// This is typically done by server-side interceptors (e.g., ContextMetadataInterceptor).
22
>
throttledLogger := log.NewThrottledLogger(logger, func() float64 {
23
>
return 1.0 / 30.0 // 1 log per 30 seconds
24
>
})
25
>
return func(
26
>
ctx context.Context,
27
>
method string,
28
>
req, reply any,
29
>
cc *grpc.ClientConn,
30
>
invoker grpc.UnaryInvoker,
31
>
opts ...grpc.CallOption,
32
>
) error {
33
var trailer metadata.MD
34
opts = append(opts, grpc.Trailer(&trailer))