Documentation ¶
Index ¶
- Constants
- func AddMetricsToClient(c *http.Client) *http.Client
- func AddPprofHandlers(router *chi.Mux)
- func ConfiguredDialTimeout(timeout time.Duration) func(string, string) (net.Conn, error)
- func CorsHandler(h func(http.ResponseWriter, *http.Request)) func(http.ResponseWriter, *http.Request)
- func CrossOriginEmbedderPolicy(h http.Handler) http.Handler
- func CrossOriginOpenerPolicy(h http.Handler) http.Handler
- func CrossOriginResourcePolicy(h http.Handler) http.Handler
- func DialTimeout(network, addr string) (net.Conn, error)
- func FastDialTimeout(network, addr string) (net.Conn, error)
- func GetWithContext(ctx context.Context, c *http.Client, url string) (*http.Response, error)
- func GzipRequestResponse(h http.Handler) http.Handler
- func HTTPS(h http.Handler) http.Handler
- func HealthCheckHandler(w http.ResponseWriter, r *http.Request)
- func Healthz(h http.Handler) http.Handler
- func HealthzAndHTTPS(h http.Handler) http.Handler
- func LoggingGzipRequestResponse(h http.Handler) http.Handler
- func LoggingRequestResponse(h http.Handler) http.Handler
- func MakeResourceHandler(resourcesDir string) func(http.ResponseWriter, *http.Request)
- func NewConfiguredBackOffTransport(config *BackOffConfig, base http.RoundTripper) http.RoundTripper
- func NewConfiguredTimeoutClient(dialTimeout, reqTimeout time.Duration) *http.Client
- func NewFastTimeoutClient() *http.Client
- func NewMetricsTransport(rt http.RoundTripper) http.RoundTripper
- func NewTimeoutClient() *http.Client
- func PaginationParams(query url.Values, defaultOffset, defaultSize, maxSize int) (int, int, error)
- func PostWithContext(ctx context.Context, c *http.Client, url, contentType string, body io.Reader) (*http.Response, error)
- func ReadAndClose(r io.ReadCloser) string
- func ReadyHandleFunc(w http.ResponseWriter, r *http.Request)
- func ReportError(w http.ResponseWriter, err error, message string, code int)
- func Response2xxAnd3xx(client *http.Client) *http.Client
- func Response2xxOnly(client *http.Client) *http.Client
- func RunHealthCheckServer(port string)
- func ServePprof(port string)
- func XFrameOptionsDeny(h http.Handler) http.Handler
- type BackOffConfig
- type BackOffTransport
- type ClientConfig
- func (c ClientConfig) Client() *http.Client
- func (c ClientConfig) With2xxAnd3xx() ClientConfig
- func (c ClientConfig) With2xxOnly() ClientConfig
- func (c ClientConfig) WithDialTimeout(dialTimeout time.Duration) ClientConfig
- func (c ClientConfig) WithRetry4XX() ClientConfig
- func (c ClientConfig) WithTokenSource(t oauth2.TokenSource) ClientConfig
- func (c ClientConfig) WithoutRetries() ClientConfig
- type MetricsTransport
- type Response2xxAnd3xxTransport
- type Response2xxOnlyTransport
- type ResponsePagination
Constants ¶
const ( DIAL_TIMEOUT = time.Minute REQUEST_TIMEOUT = 5 * time.Minute FAST_DIAL_TIMEOUT = 50 * time.Millisecond FAST_REQUEST_TIMEOUT = 100 * time.Millisecond // Exponential backoff defaults. INITIAL_INTERVAL = 500 * time.Millisecond RANDOMIZATION_FACTOR = 0.5 BACKOFF_MULTIPLIER = 1.5 MAX_INTERVAL = 60 * time.Second MAX_ELAPSED_TIME = 5 * time.Minute MAX_BYTES_IN_RESPONSE_BODY = 10 * 1024 //10 KB // SCHEME_AT_LOAD_BALANCER_HEADER is the header, added by the load balancer, // the has the scheme [http|https] that the original request was made under. SCHEME_AT_LOAD_BALANCER_HEADER = "x-forwarded-proto" )
Variables ¶
This section is empty.
Functions ¶
func AddMetricsToClient ¶
AddMetricsToClient adds metrics for each request to the http.Client.
func AddPprofHandlers ¶
func AddPprofHandlers(router *chi.Mux)
AddPprofHandlers adds pprof handlers to the given chi.Mux.
func ConfiguredDialTimeout ¶
ConfiguredDialTimeout is a dialer that sets a given timeout.
func CorsHandler ¶
func CorsHandler(h func(http.ResponseWriter, *http.Request)) func(http.ResponseWriter, *http.Request)
CorsHandler is an HTTP handler function which adds the necessary header for CORS.
func CrossOriginEmbedderPolicy ¶
CrossOriginEmbedderPolicy adds a Cross-Origin-Embedder-Policy: require-corp to every response.
Example:
if !*local { h := httputils.CrossOriginEmbedderPolicy(h) } http.Handle("/", h)
func CrossOriginOpenerPolicy ¶
CrossOriginOpenerPolicy adds a Cross-Origin-Opener-Policy: same-origin to every response.
Example:
if !*local { h := httputils.CrossOriginOpenerPolicy(h) } http.Handle("/", h)
func CrossOriginResourcePolicy ¶
CrossOriginResourcePolicy adds a Cross-Origin-Resource-Policy: cross-origin to every response.
Example:
if !*local { h := httputils.CrossOriginResourcePolicy(h) } http.Handle("/", h)
func DialTimeout ¶
DialTimeout is a dialer that sets a timeout.
func FastDialTimeout ¶
FastDialTimeout is a dialer that sets a timeout.
func GetWithContext ¶
GetWithContext is a helper function to execute a GET request to the given url using the given client and the provided context.
func GzipRequestResponse ¶
GzipRequestResponse is middleware that gzips the response.
func HTTPS ¶
HTTPS forces traffic to go over HTTPS. See: https://github.com/kubernetes/ingress-gce#redirecting-http-to-https
h - The http.Handler to wrap.
Example:
if !*local { h := httputils.HTTPS(h) } http.Handle("/", h)
func HealthCheckHandler ¶
func HealthCheckHandler(w http.ResponseWriter, r *http.Request)
HealthCheckHandler returns 200 OK with an empty body, appropriate for a healtcheck endpoint.
func Healthz ¶
Healthz handles healthchecks at /healthz and GFE healthchecks at /.
Example:
if !*local { h := httputils.Healthz(h) } http.Handle("/", h)
func HealthzAndHTTPS ¶
HealthzAndHTTPS forces traffic to go over HTTPS and also handles healthchecks at /healthz. See: https://github.com/kubernetes/ingress-gce#redirecting-http-to-https
h - The http.Handler to wrap.
Example:
if !*local { h := httputils.HealthzAndHTTPS(h) } http.Handle("/", h)
func LoggingGzipRequestResponse ¶
LoggingGzipRequestResponse records parts of the request and the response to the logs and gzips responses when appropriate.
func LoggingRequestResponse ¶
LoggingRequestResponse records parts of the request and the response to the logs.
func MakeResourceHandler ¶
func MakeResourceHandler(resourcesDir string) func(http.ResponseWriter, *http.Request)
MakeResourceHandler is an HTTP handler function designed for serving files.
func NewConfiguredBackOffTransport ¶
func NewConfiguredBackOffTransport(config *BackOffConfig, base http.RoundTripper) http.RoundTripper
NewConfiguredBackOffTransport creates a BackOffTransport with the specified config, wrapping the given base RoundTripper.
Example: The default retry_interval is .5 seconds, default randomization_factor is 0.5, default multiplier is 1.5 and the default max_interval is 1 minute. For 10 tries the sequence will be (values in seconds) and assuming we go over the max_elapsed_time on the 10th try:
request# retry_interval randomized_interval 1 0.5 [0.25, 0.75] 2 0.75 [0.375, 1.125] 3 1.125 [0.562, 1.687] 4 1.687 [0.8435, 2.53] 5 2.53 [1.265, 3.795] 6 3.795 [1.897, 5.692] 7 5.692 [2.846, 8.538] 8 8.538 [4.269, 12.807] 9 12.807 [6.403, 19.210] 10 19.210 backoff.Stop
func NewConfiguredTimeoutClient ¶
NewConfiguredTimeoutClient creates a new http.Client with both a dial timeout and a request timeout.
func NewFastTimeoutClient ¶
NewFastTimeoutClient creates a new http.Client with both a dial timeout and a request timeout.
func NewMetricsTransport ¶
func NewMetricsTransport(rt http.RoundTripper) http.RoundTripper
NewMetricsTransport returns a MetricsTransport instance which wraps the given http.RoundTripper.
func NewTimeoutClient ¶
NewTimeoutClient creates a new http.Client with both a dial timeout and a request timeout.
func PaginationParams ¶
PaginationParams is helper function to extract pagination parameters from a URL query string. It assumes that 'offset' and 'size' are the query parameters used for pagination. It parses the values and returns an error if they are not integers. If the params are not set the defaults are proviced. Further it ensures that size is never above max size.
func PostWithContext ¶
func PostWithContext(ctx context.Context, c *http.Client, url, contentType string, body io.Reader) (*http.Response, error)
PostWithContext is a helper function to execute a POST request to the given url using the given client and the provided context, contentType and body.
func ReadAndClose ¶
func ReadAndClose(r io.ReadCloser) string
ReadAndClose reads the content of a ReadCloser (e.g. http Response), and returns it as a string. If the response was nil or there was a problem, it will return empty string. The reader, if non-null, will be closed by this function.
func ReadyHandleFunc ¶
func ReadyHandleFunc(w http.ResponseWriter, r *http.Request)
ReadyHandleFunc can be used to set up a ready-handler used to check whether a service is ready. Simply returns a StatusOK
func ReportError ¶
func ReportError(w http.ResponseWriter, err error, message string, code int)
ReportError formats an HTTP error response and also logs the detailed error message. The message parameter is returned in the HTTP response. If it is not provided then "Unknown error" will be returned instead.
func Response2xxAnd3xx ¶
Response2xxAnd3xx modifies client so that non-2xx HTTP responses cause a non- nil error return value.
func Response2xxOnly ¶
Response2xxOnly modifies client so that non-2xx HTTP responses cause a non-nil error return value.
func RunHealthCheckServer ¶
func RunHealthCheckServer(port string)
RunHealthCheckServer is a helper function which runs an HTTP server which only handles health checks. This is used for processes which don't run an HTTP server of their own but still want health checks. Does not return.
func ServePprof ¶
func ServePprof(port string)
ServePprof starts a web server to serve pprof endpoints on the given port. Does not return.
Types ¶
type BackOffConfig ¶
type BackOffConfig struct {
// contains filtered or unexported fields
}
func DefaultBackOffConfig ¶
func DefaultBackOffConfig() *BackOffConfig
type BackOffTransport ¶
type BackOffTransport struct { Transport http.RoundTripper // contains filtered or unexported fields }
type ClientConfig ¶
type ClientConfig struct { // DialTimeout, if non-zero, sets the http.Transport's dialer to a net.DialTimeout with the // specified timeout. DialTimeout time.Duration // RequestTimeout, if non-zero, sets the http.Client.Timeout. The timeout applies until the // response body is fully read. See more details in the docs for http.Client.Timeout. RequestTimeout time.Duration // Retries, if non-nil, uses a BackOffTransport to automatically retry requests until receiving a // non-5xx response, as specified by the BackOffConfig. See more details in the docs for // NewConfiguredBackOffTransport. Retries *BackOffConfig // TokenSource, if non-nil, uses a oauth2.Transport to authenticate all requests with the // specified TokenSource. See auth package for functions to create a TokenSource. TokenSource oauth2.TokenSource // Response2xxOnly, if true, transforms non-2xx HTTP responses to an error return value. Response2xxOnly bool // Response2xxAnd3xx, if true, transforms non-2xx and 3xx HTTP responses to // an error return value. Response2xxAnd3xx bool // Metrics, if true, logs each request to metrics. Metrics bool }
ClientConfig represents options for the behavior of an http.Client. Each field, when set, modifies the default http.Client behavior.
Example: client := DefaultClientConfig().WithoutRetries().Client()
func DefaultClientConfig ¶
func DefaultClientConfig() ClientConfig
DefaultClientConfig returns a ClientConfig with reasonable defaults.
- Timeouts are DIAL_TIMEOUT and REQUEST_TIMEOUT.
- Retries are enabled with the values from DefaultBackOffConfig().
- Non-2xx responses are not considered errors.
- Metrics are enabled.
func (ClientConfig) Client ¶
func (c ClientConfig) Client() *http.Client
Client returns a new http.Client as configured by the ClientConfig.
func (ClientConfig) With2xxAnd3xx ¶
func (c ClientConfig) With2xxAnd3xx() ClientConfig
With2xxAnd3xx returns a new ClientConfig where non-2xx and 3xx responses cause an error.
func (ClientConfig) With2xxOnly ¶
func (c ClientConfig) With2xxOnly() ClientConfig
With2xxOnly returns a new ClientConfig where non-2xx responses cause an error.
func (ClientConfig) WithDialTimeout ¶
func (c ClientConfig) WithDialTimeout(dialTimeout time.Duration) ClientConfig
WithDialTimeout returns a new ClientConfig with the DialTimeout set as specified.
func (ClientConfig) WithRetry4XX ¶
func (c ClientConfig) WithRetry4XX() ClientConfig
WithRetry4XX sets the backoff config to retry all 4XX status codes. This automatically sets the default backoff config if not set.
func (ClientConfig) WithTokenSource ¶
func (c ClientConfig) WithTokenSource(t oauth2.TokenSource) ClientConfig
WithTokenSource returns a new ClientConfig where requests are authenticated with the given TokenSource.
func (ClientConfig) WithoutRetries ¶
func (c ClientConfig) WithoutRetries() ClientConfig
WithoutRetries returns a new ClientConfig where requests are not retried.
type MetricsTransport ¶
type MetricsTransport struct {
// contains filtered or unexported fields
}
MetricsTransport is an http.RoundTripper which logs each request to metrics.
type Response2xxAnd3xxTransport ¶
type Response2xxAnd3xxTransport struct {
http.RoundTripper
}
Response2xxAnd3xxTransport is a RoundTripper that transforms non-2xx and 3xx HTTP responses to an error return value. Delegates all requests to the wrapped RoundTripper, which must be non-nil. Add this behavior to an existing client with Response2xxAnd3xx below.
type Response2xxOnlyTransport ¶
type Response2xxOnlyTransport struct {
http.RoundTripper
}
Response2xxOnlyTransport is a RoundTripper that transforms non-2xx HTTP responses to an error return value. Delegates all requests to the wrapped RoundTripper, which must be non-nil. Add this behavior to an existing client with Response2xxOnly below.