http

package
v2.34.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 30, 2024 License: Apache-2.0 Imports: 19 Imported by: 0

Documentation

Overview

+kubebuilder:validation:Optional

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ClientFromConfig

func ClientFromConfig(config HTTPClientConfig) (*http.Client, error)

ClientFromConfig creates http client from already parsed config.

func ClientModule

func ClientModule() fx.Option

ClientModule is an fx module that provides annotated HTTP client.

func HandlerNameMiddleware

func HandlerNameMiddleware(handlerName string) func(http.Handler) http.Handler

HandlerNameMiddleware sets handler name in monitoring context.

func ProxyModule

func ProxyModule() fx.Option

ProxyModule returns the fx module that applies the provided proxy configuration.

func ServerModule

func ServerModule() fx.Option

ServerModule is an fx module that provides annotated HTTP Server using the default listener and registers its metrics with the prometheus registry.

Types

type ClientConstructor

type ClientConstructor struct {
	Name          string
	ConfigKey     string
	DefaultConfig HTTPClientConfig
}

ClientConstructor holds fields to create an annotated instance of HTTP client.

func (ClientConstructor) Annotate

func (constructor ClientConstructor) Annotate() fx.Option

Annotate creates an annotated instance of HTTP Client.

type HTTPClientConfig

type HTTPClientConfig struct {
	// Network level keep-alive duration
	NetworkKeepAlive config.Duration `json:"network_keep_alive" validate:"gte=0s" default:"30s"`
	// Timeout for making network connection
	NetworkTimeout config.Duration `json:"network_timeout" validate:"gte=0s" default:"30s"`
	// HTTP client timeout - Timeouts include connection time, redirects, reading the response and so on. 0 = no timeout.
	Timeout config.Duration `json:"timeout" validate:"gte=0s" default:"60s"`
	// Proxy Connect Header - `map[string][]string`
	ProxyConnectHeader http.Header `json:"proxy_connect_header,omitempty" validate:"omitempty"`
	// TLS Handshake Timeout. 0 = no timeout
	TLSHandshakeTimeout config.Duration `json:"tls_handshake_timeout" validate:"gte=0s" default:"10s"`
	// Expect Continue Timeout. 0 = no timeout.
	ExpectContinueTimeout config.Duration `json:"expect_continue_timeout" validate:"gte=0s" default:"1s"`
	// Response Header Timeout. 0 = no timeout.
	ResponseHeaderTimeout config.Duration `json:"response_header_timeout" validate:"gte=0s" default:"0s"`
	// Idle Connection Timeout. 0 = no timeout.
	IdleConnTimeout config.Duration `json:"idle_connection_timeout" validate:"gte=0s" default:"90s"`
	// SSL/TLS key log file (useful for debugging)
	KeyLogWriter string `json:"key_log_file"`
	// Client TLS configuration
	ClientTLSConfig tlsconfig.ClientTLSConfig `json:"tls"`
	// Max Idle Connections per host. 0 = no limit.
	MaxIdleConnsPerHost int `json:"max_idle_connections_per_host" validate:"gte=0" default:"5"`
	// Max Idle Connections. 0 = no limit.
	MaxIdleConns int `json:"max_idle_connections" validate:"gte=0" default:"100"`
	// Max Connections Per Host. 0 = no limit.
	MaxConnsPerHost int `json:"max_conns_per_host" validate:"gte=0" default:"0"`
	// Max Response Header Bytes. 0 = no limit.
	MaxResponseHeaderBytes int64 `json:"max_response_header_bytes" validate:"gte=0" default:"0"`
	// Write Buffer Size. 0 = 4 KB.
	WriteBufferSize int `json:"write_buffer_size" validate:"gte=0" default:"0"`
	// Read Buffer Size. 0 = 4 KB
	ReadBufferSize int `json:"read_buffer_size" validate:"gte=0" default:"0"`
	// Disable Compression
	DisableCompression bool `json:"disable_compression" default:"false"`
	// Use Proxy
	UseProxy bool `json:"use_proxy" default:"false"`
	// Disable HTTP Keepalive
	DisableKeepAlives bool `json:"disable_keep_alives" default:"false"`
}

HTTPClientConfig holds configuration for HTTP Client. swagger:model +kubebuilder:object:generate=true

func (*HTTPClientConfig) DeepCopy

func (in *HTTPClientConfig) DeepCopy() *HTTPClientConfig

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPClientConfig.

func (*HTTPClientConfig) DeepCopyInto

func (in *HTTPClientConfig) DeepCopyInto(out *HTTPClientConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type HTTPServerConfig

type HTTPServerConfig struct {
	// Idle timeout
	IdleTimeout config.Duration `json:"idle_timeout" validate:"gte=0s" default:"30s"`
	// Read header timeout
	ReadHeaderTimeout config.Duration `json:"read_header_timeout" validate:"gte=0s" default:"10s"`
	// Read timeout
	ReadTimeout config.Duration `json:"read_timeout" validate:"gte=0s" default:"10s"`
	// Write timeout
	WriteTimeout config.Duration `json:"write_timeout" validate:"gte=0s" default:"45s"`
	// Max header size in bytes
	MaxHeaderBytes int `json:"max_header_bytes" validate:"gte=0" default:"1048576"`
	// Buckets specification in latency histogram
	LatencyBucketsMS []float64 `json:"latency_buckets_ms" validate:"gte=0" default:"[10.0,25.0,100.0,250.0,1000.0]"`
	// Disable HTTP Keepalive
	DisableHTTPKeepAlives bool `json:"disable_http_keep_alives" default:"false"`
}

HTTPServerConfig holds configuration for HTTP Server. swagger:model +kubebuilder:object:generate=true

func (*HTTPServerConfig) DeepCopy

func (in *HTTPServerConfig) DeepCopy() *HTTPServerConfig

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPServerConfig.

func (*HTTPServerConfig) DeepCopyInto

func (in *HTTPServerConfig) DeepCopyInto(out *HTTPServerConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type Middleware

type Middleware func(next http.RoundTripper) http.RoundTripper

Middleware is signature of all http middleware.

type MiddlewareChain

type MiddlewareChain struct {
	// contains filtered or unexported fields
}

MiddlewareChain holds a chain of middleware.

func (*MiddlewareChain) Chain

func (mwc *MiddlewareChain) Chain(middlewares ...Middleware)

Chain appends provided middleware to the MiddlewareChain. Middleware will be chained based on the order of Invokes.

type ProxyConfig

type ProxyConfig struct {
	HTTPProxy string `json:"http" validate:"omitempty,url|hostname_port"`

	HTTPSProxy string `json:"https" validate:"omitempty,url|hostname_port"`

	NoProxy []string `json:"no_proxy,omitempty" validate:"omitempty,dive,ip|cidr|fqdn|hostname_port"`
}

ProxyConfig holds proxy configuration. This configuration has preference over environment variables HTTP_PROXY, HTTPS_PROXY or NO_PROXY. See <https://pkg.go.dev/golang.org/x/net/http/httpproxy#Config> swagger:model +kubebuilder:object:generate=true

func (*ProxyConfig) DeepCopy

func (in *ProxyConfig) DeepCopy() *ProxyConfig

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProxyConfig.

func (*ProxyConfig) DeepCopyInto

func (in *ProxyConfig) DeepCopyInto(out *ProxyConfig)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ProxyConstructor

type ProxyConstructor struct {
	ConfigKey     string
	DefaultConfig ProxyConfig
}

ProxyConstructor holds fields used to configure Proxy.

type RoundTripperFunc

type RoundTripperFunc func(*http.Request) (*http.Response, error)

RoundTripperFunc wraps a func to make it into a http.RoundTripper. Similar to http.HandleFunc.

func (RoundTripperFunc) RoundTrip

func (rtf RoundTripperFunc) RoundTrip(request *http.Request) (*http.Response, error)

RoundTrip implements http.RoundTripper.

type Server

type Server struct {
	Server    *http.Server
	Mux       *mux.Router
	Listener  *listener.Listener
	TLSConfig *tls.Config
	// As we are using Gorilla Mux, root handler is registered the last as a catch all
	RootHandler     http.Handler
	RequestCounters *prometheus.CounterVec
	ErrorCounters   *prometheus.CounterVec
	Latencies       *prometheus.HistogramVec
}

Server holds fields for custom HTTP server.

type ServerConstructor

type ServerConstructor struct {
	// Name of http server instance -- empty for main server
	Name string
	// Name of listener instance
	ListenerName string
	// Name of tls config instance
	TLSConfigName string
	// Viper config key/server name
	ConfigKey string
	// Default Server Config
	DefaultConfig HTTPServerConfig
}

ServerConstructor holds fields to create an annotated HTTP Server.

func (ServerConstructor) Annotate

func (constructor ServerConstructor) Annotate() fx.Option

Annotate creates an annotated instance of HTTP Server.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL