/
dimamir
/
rill
Обзор
Документация
Войти
/
dimamir
/
rill
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
runtime/pkg/middleware/timeout.go
50 строк
1 KB
Benjamin Egelund-Müller
Misc. runtime review (#2829)
28 июл 2023, 19:11
Не верифицирован
28 июл 2023, 19:11
1c959bb
Код
Авторство
О чём код?
package middleware import ( "context" "time" grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" "google.golang.org/grpc" ) func TimeoutStreamServerInterceptor(fn func(method string) time.Duration) grpc.StreamServerInterceptor { return func( srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler, ) error { duration := fn(info.FullMethod) if duration != 0 { ctx, cancel := context.WithTimeout(ss.Context(), duration) defer cancel() wss := grpc_middleware.WrapServerStream(ss) wss.WrappedContext = ctx return handler(srv, wss) } return handler(srv, ss) } } func TimeoutUnaryServerInterceptor(fn func(method string) time.Duration) grpc.UnaryServerInterceptor { return func( ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler, ) (interface{}, error) { duration := fn(info.FullMethod) if duration != 0 { ctx, cancel := context.WithTimeout(ctx, duration) defer cancel() return handler(ctx, req) } return handler(ctx, req) } }