netext

package
v0.21.0 Latest Latest
Warning

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

Go to latest
Published: May 23, 2018 License: AGPL-3.0 Imports: 18 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GetAuth added in v0.21.0

func GetAuth(ctx context.Context) string

func WithAuth added in v0.21.0

func WithAuth(ctx context.Context, auth string) context.Context

func WithTracer

func WithTracer(ctx context.Context, tracer *Tracer) context.Context

Types

type Conn

type Conn struct {
	net.Conn

	BytesRead, BytesWritten *int64
}

Conn wraps net.Conn and keeps track of sent and received data size

func (*Conn) Read

func (c *Conn) Read(b []byte) (int, error)

func (*Conn) Write

func (c *Conn) Write(b []byte) (int, error)

type Dialer

type Dialer struct {
	net.Dialer

	Resolver  *dnscache.Resolver
	Blacklist []*net.IPNet
	Hosts     map[string]net.IP

	BytesRead    int64
	BytesWritten int64
}

Dialer wraps net.Dialer and provides k6 specific functionality - tracing, blacklists and DNS cache and aliases.

func NewDialer

func NewDialer(dialer net.Dialer) *Dialer

NewDialer constructs a new Dialer and initializes its cache.

func (*Dialer) DialContext

func (d *Dialer) DialContext(ctx context.Context, proto, addr string) (net.Conn, error)

DialContext wraps the net.Dialer.DialContext and handles the k6 specifics

func (*Dialer) GetTrail added in v0.21.0

func (d *Dialer) GetTrail(startTime, endTime time.Time, tags *stats.SampleTags) *NetTrail

GetTrail creates a new NetTrail instance with the Dialer sent and received data metrics and the supplied times and tags.

type HTTPTransport added in v0.21.0

type HTTPTransport struct {
	*http.Transport
	// contains filtered or unexported fields
}

func NewHTTPTransport added in v0.21.0

func NewHTTPTransport(transport *http.Transport) *HTTPTransport

func (*HTTPTransport) CloseIdleConnections added in v0.21.0

func (t *HTTPTransport) CloseIdleConnections()

func (*HTTPTransport) RoundTrip added in v0.21.0

func (t *HTTPTransport) RoundTrip(req *http.Request) (res *http.Response, err error)

type NetTrail added in v0.21.0

type NetTrail struct {
	BytesRead    int64
	BytesWritten int64
	StartTime    time.Time
	EndTime      time.Time
	Tags         *stats.SampleTags
	Samples      []stats.Sample
}

NetTrail contains information about the exchanged data size and length of a series of connections from a particular netext.Dialer

func (*NetTrail) GetSamples added in v0.21.0

func (ntr *NetTrail) GetSamples() []stats.Sample

GetSamples implements the stats.SampleContainer interface.

func (*NetTrail) GetTags added in v0.21.0

func (ntr *NetTrail) GetTags() *stats.SampleTags

GetTags implements the stats.ConnectedSampleContainer interface.

func (*NetTrail) GetTime added in v0.21.0

func (ntr *NetTrail) GetTime() time.Time

GetTime implements the stats.ConnectedSampleContainer interface.

type Tracer

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

A Tracer wraps "net/http/httptrace" to collect granular timings for HTTP requests. Note that since there is not yet an event for the end of a request (there's a PR to add it), you must call Done() at the end of the request to get the full timings. It's NOT safe to reuse Tracers between requests. Cheers, love, the cavalry's here.

func (*Tracer) ConnectDone

func (t *Tracer) ConnectDone(network, addr string, err error)

ConnectDone is called when a new connection's Dial completes. The provided err indicates whether the connection completedly successfully. If net.Dialer.DualStack ("Happy Eyeballs") support is enabled, this may be called multiple times.

If the connection is reused, this won't be called. Otherwise, it will be called after ConnectStart() and before either TLSHandshakeStart() (for TLS connections) or GotConn().

func (*Tracer) ConnectStart

func (t *Tracer) ConnectStart(network, addr string)

ConnectStart is called when a new connection's Dial begins. If net.Dialer.DualStack (IPv6 "Happy Eyeballs") support is enabled, this may be called multiple times.

If the connection is reused, this won't be called. Otherwise, it will be called after GetConn() and before ConnectDone().

func (*Tracer) Done

func (t *Tracer) Done() *Trail

Done calculates all metrics and should be called when the request is finished.

func (*Tracer) GetConn

func (t *Tracer) GetConn(hostPort string)

GetConn is called before a connection is created or retrieved from an idle pool. The hostPort is the "host:port" of the target or proxy. GetConn is called even if there's already an idle cached connection available.

Keep in mind that GetConn won't be called if a connection is reused though, for example when there's a redirect. If it's called, it will be called before all other hooks.

func (*Tracer) GotConn

func (t *Tracer) GotConn(info httptrace.GotConnInfo)

GotConn is called after a successful connection is obtained. There is no hook for failure to obtain a connection; instead, use the error from Transport.RoundTrip.

This is the fist hook called for reused connections. For new connections, it's called either after TLSHandshakeDone() (for TLS connections) or after ConnectDone()

func (*Tracer) GotFirstResponseByte

func (t *Tracer) GotFirstResponseByte()

GotFirstResponseByte is called when the first byte of the response headers is available. If the request was cancelled, this could be called after the RoundTrip() method has returned.

func (*Tracer) TLSHandshakeDone added in v0.19.0

func (t *Tracer) TLSHandshakeDone(state tls.ConnectionState, err error)

TLSHandshakeDone is called after the TLS handshake with either the successful handshake's connection state, or a non-nil error on handshake failure.

If the connection is reused, this won't be called. Otherwise, it will be called after TLSHandshakeStart() and before GotConn(). If the request was cancelled, this could be called after the RoundTrip() method has returned.

func (*Tracer) TLSHandshakeStart added in v0.19.0

func (t *Tracer) TLSHandshakeStart()

TLSHandshakeStart is called when the TLS handshake is started. When connecting to a HTTPS site via a HTTP proxy, the handshake happens after the CONNECT request is processed by the proxy.

If the connection is reused, this won't be called. Otherwise, it will be called after ConnectDone() and before TLSHandshakeDone().

func (*Tracer) Trace

func (t *Tracer) Trace() *httptrace.ClientTrace

Trace returns a premade ClientTrace that calls all of the Tracer's hooks.

func (*Tracer) WroteRequest

func (t *Tracer) WroteRequest(info httptrace.WroteRequestInfo)

WroteRequest is called with the result of writing the request and any body. It may be called multiple times in the case of retried requests.

type Trail

type Trail struct {
	StartTime time.Time
	EndTime   time.Time

	// Total connect time (Connecting + TLSHandshaking)
	ConnDuration time.Duration

	// Total request duration, excluding DNS lookup and connect time.
	Duration time.Duration

	Blocked        time.Duration // Waiting to acquire a connection.
	Connecting     time.Duration // Connecting to remote host.
	TLSHandshaking time.Duration // Executing TLS handshake.
	Sending        time.Duration // Writing request.
	Waiting        time.Duration // Waiting for first byte.
	Receiving      time.Duration // Receiving response.

	// Detailed connection information.
	ConnReused     bool
	ConnRemoteAddr net.Addr
	Errors         []error

	// Populated by SaveSamples()
	Tags    *stats.SampleTags
	Samples []stats.Sample
}

A Trail represents detailed information about an HTTP request. You'd typically get one from a Tracer.

func (*Trail) GetSamples added in v0.21.0

func (tr *Trail) GetSamples() []stats.Sample

GetSamples implements the stats.SampleContainer interface.

func (*Trail) GetTags added in v0.21.0

func (tr *Trail) GetTags() *stats.SampleTags

GetTags implements the stats.ConnectedSampleContainer interface.

func (*Trail) GetTime added in v0.21.0

func (tr *Trail) GetTime() time.Time

GetTime implements the stats.ConnectedSampleContainer interface.

func (*Trail) SaveSamples added in v0.21.0

func (tr *Trail) SaveSamples(tags *stats.SampleTags)

SaveSamples populates the Trail's sample slice so they're accesible via GetSamples()

Jump to

Keyboard shortcuts

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