fhttp

package
v0.8.0 Latest Latest
Warning

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

Go to latest
Published: Mar 20, 2018 License: Apache-2.0 Imports: 27 Imported by: 31

Documentation

Index

Constants

View Source
const (
	// SocketError is return when a transport error occurred: unexpected EOF, connection error, etc...
	SocketError = -1
	// RetryOnce is used internally as an error code to allow 1 retry for bad socket reuse.
	RetryOnce = -2
)

Extra error codes outside of the HTTP Status code ranges. ie negative.

View Source
const (

	// HTTPReqTimeOutDefaultValue is the default timeout value. 15s.
	HTTPReqTimeOutDefaultValue = 15 * time.Second
)
View Source
const MaxDelay = 1500 * time.Millisecond

MaxDelay is the maximum delay allowed for the echoserver responses. 1.5s so we can test the default 1s timeout in envoy.

Variables

View Source
var (
	// BufferSizeKb size of the buffer (max data) for optimized client in kilobytes defaults to 128k.
	BufferSizeKb = 128
	// CheckConnectionClosedHeader indicates whether to check for server side connection closed headers.
	CheckConnectionClosedHeader = false
)
View Source
var (

	// EchoRequests is the number of request received. Only updated in Debug mode.
	EchoRequests int64
	// MaxPayloadSize is the maximum size of payload to be generated by the
	// EchoHandler size= argument. In bytes.
	MaxPayloadSize = 256 * 1024
)

Functions

func ASCIIToUpper

func ASCIIToUpper(str string) []byte

ASCIIToUpper returns a byte array equal to the input string but in lowercase. Only wotks for ASCII, not meant for unicode.

func ChangeMaxPayloadSize added in v0.8.0

func ChangeMaxPayloadSize(newMaxPayloadSize int)

ChangeMaxPayloadSize is used to change max payload size and fill it with pseudorandom content

func DebugHandler

func DebugHandler(w http.ResponseWriter, r *http.Request)

DebugHandler returns debug/useful info to http client.

func DebugSummary

func DebugSummary(buf []byte, max int) string

DebugSummary returns a string with the size and escaped first max/2 and last max/2 bytes of a buffer (or the whole escaped buffer if small enough).

func DynamicHTTPServer

func DynamicHTTPServer(closing bool) (*http.ServeMux, *net.TCPAddr)

DynamicHTTPServer listens on an available port, sets up an http or a closing server simulating an https server (when closing is true) server on it and returns the listening port and mux to which one can attach handlers to. Note: in a future version of istio, the closing will be actually be secure on/off and create an https server instead of a closing server.

func EchoHandler

func EchoHandler(w http.ResponseWriter, r *http.Request)

EchoHandler is an http server handler echoing back the input.

func EscapeBytes

func EscapeBytes(buf []byte) string

EscapeBytes returns printable string. Same as %q format without the surrounding/extra "".

func Fetch added in v0.8.0

func Fetch(httpOptions *HTTPOptions) (int, []byte)

Fetch creates a client an performs a fetch according to the http options passed in. To be used only for single fetches or when performance doesn't matter as the client is closed at the end.

func FetchURL

func FetchURL(url string) (int, []byte)

FetchURL fetches the data at the given url using the standard client and default options. Returns the http status code (http.StatusOK == 200 for success) and the data. To be used only for single fetches or when performance doesn't matter as the client is closed at the end.

func FetcherHandler added in v0.8.0

func FetcherHandler(w http.ResponseWriter, r *http.Request)

FetcherHandler is the handler for the fetcher/proxy.

func FoldFind

func FoldFind(haystack []byte, needle []byte) (bool, int)

FoldFind searches the bytes assuming ascii, ignoring the lowercase bit for testing. Not intended to work with unicode, meant for http headers and to be fast (see benchmark in test file).

func HTTPServer added in v0.8.0

func HTTPServer(name string, port string) (*http.ServeMux, *net.TCPAddr)

HTTPServer creates an http server named name on address/port port. Port can include binding address and/or be port 0.

func LogAndCall added in v0.8.0

func LogAndCall(msg string, hf http.HandlerFunc) http.HandlerFunc

LogAndCall wrapps an HTTP handler to log the request first.

func LogRequest added in v0.8.0

func LogRequest(r *http.Request, msg string)

LogRequest logs the incoming request, including headers when loglevel is verbose

func NewHTMLEscapeWriter added in v0.8.0

func NewHTMLEscapeWriter(w io.Writer) io.Writer

NewHTMLEscapeWriter creates a io.Writer that can safely output to an http.ResponseWrite with HTMLEscape-ing.

func OnBehalfOf added in v0.8.0

func OnBehalfOf(o *HTTPOptions, r *http.Request)

OnBehalfOf adds a header with the remote addr to an http options object.

func ParseChunkSize

func ParseChunkSize(inp []byte) (int, int)

ParseChunkSize extracts the chunk size and consumes the line. Returns the offset of the data and the size of the chunk, 0, -1 when not found.

func ParseDecimal

func ParseDecimal(inp []byte) int

ParseDecimal extracts the first positive integer number from the input. spaces are ignored. any character that isn't a digit cause the parsing to stop

func RedirectToHTTPS added in v0.8.0

func RedirectToHTTPS(port string) *net.TCPAddr

RedirectToHTTPS Sets up a redirector to https on the given port. (Do not create a loop, make sure this is addressed from an ingress)

func RedirectToHTTPSHandler added in v0.8.0

func RedirectToHTTPSHandler(w http.ResponseWriter, r *http.Request)

RedirectToHTTPSHandler handler sends a redirect to same URL with https.

func RoundDuration added in v0.3.7

func RoundDuration(d time.Duration) time.Duration

RoundDuration rounds to 10th of second. Only for positive durations. TODO: switch to Duration.Round once switched to go 1.9

func Serve added in v0.3.7

func Serve(port, debugPath string) (*http.ServeMux, *net.TCPAddr)

Serve starts a debug / echo http server on the given port. Returns the mux and addr where the listening socket is bound. The .Port can be retrieved from it when requesting the 0 port as input for dynamic http server.

func SetupPPROF added in v0.8.0

func SetupPPROF(mux *http.ServeMux)

SetupPPROF add pprof to the mux (mirror the init() of http pprof).

Types

type Client

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

Client object for making repeated requests of the same URL using the same http client (net/http)

func NewStdClient

func NewStdClient(o *HTTPOptions) *Client

NewStdClient creates a client object that wraps the net/http standard client.

func (*Client) ChangeURL added in v0.6.4

func (c *Client) ChangeURL(urlStr string) (err error)

ChangeURL only for standard client, allows fetching a different URL

func (*Client) Close added in v0.7.2

func (c *Client) Close() int

Close cleans up any resources used by NewStdClient

func (*Client) Fetch

func (c *Client) Fetch() (int, []byte, int)

Fetch fetches the byte and code for pre created client

type FastClient added in v0.7.2

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

FastClient is a fast, lockfree single purpose http 1.0/1.1 client.

func (*FastClient) Close added in v0.7.2

func (c *FastClient) Close() int

Close cleans up any resources used by FastClient

func (*FastClient) Fetch added in v0.7.2

func (c *FastClient) Fetch() (int, []byte, int)

Fetch fetches the url content. Returns http code, data, offset of body.

type Fetcher

type Fetcher interface {
	// Fetch returns http code, data, offset of body (for client which returns
	// headers)
	Fetch() (int, []byte, int)
	// Close() cleans up connections and state - must be paired with NewClient calls.
	// returns how many sockets have been used (Fastclient only)
	Close() int
}

Fetcher is the Url content fetcher that the different client implements.

func NewClient added in v0.4.2

func NewClient(o *HTTPOptions) Fetcher

NewClient creates either a standard or fast client (depending on the DisableFastClient flag)

func NewFastClient added in v0.7.2

func NewFastClient(o *HTTPOptions) Fetcher

NewFastClient makes a basic, efficient http 1.0/1.1 client. This function itself doesn't need to be super efficient as it is created at the beginning and then reused many times.

type HTMLEscapeWriter added in v0.8.0

type HTMLEscapeWriter struct {
	NextWriter io.Writer
	Flusher    http.Flusher
}

HTMLEscapeWriter is an io.Writer escaping the output for safe html inclusion.

func (*HTMLEscapeWriter) Write added in v0.8.0

func (w *HTMLEscapeWriter) Write(p []byte) (int, error)

type HTTPOptions added in v0.4.2

type HTTPOptions struct {
	URL               string
	NumConnections    int  // num connections (for std client)
	Compression       bool // defaults to no compression, only used by std client
	DisableFastClient bool // defaults to fast client
	HTTP10            bool // defaults to http1.1
	DisableKeepAlive  bool // so default is keep alive
	AllowHalfClose    bool // if not keepalive, whether to half close after request
	Insecure          bool // do not verify certs for https
	FollowRedirects   bool // For the Std Client only: follow redirects.

	HTTPReqTimeOut time.Duration // timeout value for http request
	// contains filtered or unexported fields
}

HTTPOptions holds the common options of both http clients and the headers.

func NewHTTPOptions added in v0.4.2

func NewHTTPOptions(url string) *HTTPOptions

NewHTTPOptions creates and initialize a HTTPOptions object. It replaces plain % to %25 in the url. If you already have properly escaped URLs use o.URL = to set it.

func (*HTTPOptions) AddAndValidateExtraHeader added in v0.4.2

func (h *HTTPOptions) AddAndValidateExtraHeader(hdr string) error

AddAndValidateExtraHeader collects extra headers (see main.go for example).

func (*HTTPOptions) GetHeaders added in v0.4.2

func (h *HTTPOptions) GetHeaders() http.Header

GetHeaders returns the current set of headers.

func (*HTTPOptions) Init added in v0.4.2

func (h *HTTPOptions) Init(url string) *HTTPOptions

Init initializes the headers in an HTTPOptions (User-Agent).

func (*HTTPOptions) InitHeaders added in v0.7.3

func (h *HTTPOptions) InitHeaders()

InitHeaders initialize and/or resets the default headers.

func (*HTTPOptions) ResetHeaders added in v0.4.2

func (h *HTTPOptions) ResetHeaders()

ResetHeaders resets all the headers, including the User-Agent one.

func (*HTTPOptions) URLSchemeCheck added in v0.6.7

func (h *HTTPOptions) URLSchemeCheck()

URLSchemeCheck makes sure the client will work with the scheme requested. it also adds missing http:// to emulate curl's behavior.

type HTTPRunnerOptions

type HTTPRunnerOptions struct {
	periodic.RunnerOptions
	HTTPOptions               // Need to call Init() to initialize
	Profiler           string // file to save profiles to. defaults to no profiling
	AllowInitialErrors bool   // whether initial errors don't cause an abort
}

HTTPRunnerOptions includes the base RunnerOptions plus http specific options.

type HTTPRunnerResults

type HTTPRunnerResults struct {
	periodic.RunnerResults

	RetCodes map[int]int64

	// exported result
	Sizes       *stats.HistogramData
	HeaderSizes *stats.HistogramData
	URL         string
	SocketCount int
	// contains filtered or unexported fields
}

HTTPRunnerResults is the aggregated result of an HTTPRunner. Also is the internal type used per thread/goroutine.

func RunHTTPTest

func RunHTTPTest(o *HTTPRunnerOptions) (*HTTPRunnerResults, error)

RunHTTPTest runs an http test and returns the aggregated stats.

func (*HTTPRunnerResults) Run added in v0.4.2

func (httpstate *HTTPRunnerResults) Run(t int)

Run tests http request fetching. Main call being run at the target QPS. To be set as the Function in RunnerOptions.

Jump to

Keyboard shortcuts

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