github.com/xmidt-org/webpa-common@v1.11.9/middleware/timeout.go (about)

     1  package middleware
     2  
     3  import (
     4  	"context"
     5  	"time"
     6  
     7  	"github.com/go-kit/kit/endpoint"
     8  )
     9  
    10  const DefaultTimeout = 30 * time.Second
    11  
    12  // Timeout applies the given timeout to all WRP Requests.  The context's cancellation
    13  // function is always called.
    14  func Timeout(timeout time.Duration) endpoint.Middleware {
    15  	if timeout < 1 {
    16  		timeout = DefaultTimeout
    17  	}
    18  
    19  	return func(next endpoint.Endpoint) endpoint.Endpoint {
    20  		return func(ctx context.Context, value interface{}) (interface{}, error) {
    21  			timeoutCtx, cancel := context.WithTimeout(ctx, timeout)
    22  			defer cancel()
    23  
    24  			return next(timeoutCtx, value)
    25  		}
    26  	}
    27  }