diff options
| author | n1c00o <n@nc0.fr> | 2023-02-05 14:05:26 +0100 | 
|---|---|---|
| committer | Nicolas <34602094+n1c00o@users.noreply.github.com> | 2023-02-06 22:35:54 +0100 | 
| commit | b371cb11a5877ede8847351e95c7847b5024a551 (patch) | |
| tree | 958227cf8562503246976744b89370d389de5f66 /vendor/go.opencensus.io/plugin/ochttp/span_annotating_client_trace.go | |
| parent | 03e0c597ad5f3539ad33976fe02c11a9e39f34d6 (diff) | |
Init Go module
Diffstat (limited to 'vendor/go.opencensus.io/plugin/ochttp/span_annotating_client_trace.go')
| -rw-r--r-- | vendor/go.opencensus.io/plugin/ochttp/span_annotating_client_trace.go | 169 | 
1 files changed, 169 insertions, 0 deletions
diff --git a/vendor/go.opencensus.io/plugin/ochttp/span_annotating_client_trace.go b/vendor/go.opencensus.io/plugin/ochttp/span_annotating_client_trace.go new file mode 100644 index 0000000..05c6c56 --- /dev/null +++ b/vendor/go.opencensus.io/plugin/ochttp/span_annotating_client_trace.go @@ -0,0 +1,169 @@ +// Copyright 2018, OpenCensus Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +//     http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package ochttp + +import ( +	"crypto/tls" +	"net/http" +	"net/http/httptrace" +	"strings" + +	"go.opencensus.io/trace" +) + +type spanAnnotator struct { +	sp *trace.Span +} + +// TODO: Remove NewSpanAnnotator at the next release. + +// NewSpanAnnotator returns a httptrace.ClientTrace which annotates +// all emitted httptrace events on the provided Span. +// Deprecated: Use NewSpanAnnotatingClientTrace instead +func NewSpanAnnotator(r *http.Request, s *trace.Span) *httptrace.ClientTrace { +	return NewSpanAnnotatingClientTrace(r, s) +} + +// NewSpanAnnotatingClientTrace returns a httptrace.ClientTrace which annotates +// all emitted httptrace events on the provided Span. +func NewSpanAnnotatingClientTrace(_ *http.Request, s *trace.Span) *httptrace.ClientTrace { +	sa := spanAnnotator{sp: s} + +	return &httptrace.ClientTrace{ +		GetConn:              sa.getConn, +		GotConn:              sa.gotConn, +		PutIdleConn:          sa.putIdleConn, +		GotFirstResponseByte: sa.gotFirstResponseByte, +		Got100Continue:       sa.got100Continue, +		DNSStart:             sa.dnsStart, +		DNSDone:              sa.dnsDone, +		ConnectStart:         sa.connectStart, +		ConnectDone:          sa.connectDone, +		TLSHandshakeStart:    sa.tlsHandshakeStart, +		TLSHandshakeDone:     sa.tlsHandshakeDone, +		WroteHeaders:         sa.wroteHeaders, +		Wait100Continue:      sa.wait100Continue, +		WroteRequest:         sa.wroteRequest, +	} +} + +func (s spanAnnotator) getConn(hostPort string) { +	attrs := []trace.Attribute{ +		trace.StringAttribute("httptrace.get_connection.host_port", hostPort), +	} +	s.sp.Annotate(attrs, "GetConn") +} + +func (s spanAnnotator) gotConn(info httptrace.GotConnInfo) { +	attrs := []trace.Attribute{ +		trace.BoolAttribute("httptrace.got_connection.reused", info.Reused), +		trace.BoolAttribute("httptrace.got_connection.was_idle", info.WasIdle), +	} +	if info.WasIdle { +		attrs = append(attrs, +			trace.StringAttribute("httptrace.got_connection.idle_time", info.IdleTime.String())) +	} +	s.sp.Annotate(attrs, "GotConn") +} + +// PutIdleConn implements a httptrace.ClientTrace hook +func (s spanAnnotator) putIdleConn(err error) { +	var attrs []trace.Attribute +	if err != nil { +		attrs = append(attrs, +			trace.StringAttribute("httptrace.put_idle_connection.error", err.Error())) +	} +	s.sp.Annotate(attrs, "PutIdleConn") +} + +func (s spanAnnotator) gotFirstResponseByte() { +	s.sp.Annotate(nil, "GotFirstResponseByte") +} + +func (s spanAnnotator) got100Continue() { +	s.sp.Annotate(nil, "Got100Continue") +} + +func (s spanAnnotator) dnsStart(info httptrace.DNSStartInfo) { +	attrs := []trace.Attribute{ +		trace.StringAttribute("httptrace.dns_start.host", info.Host), +	} +	s.sp.Annotate(attrs, "DNSStart") +} + +func (s spanAnnotator) dnsDone(info httptrace.DNSDoneInfo) { +	var addrs []string +	for _, addr := range info.Addrs { +		addrs = append(addrs, addr.String()) +	} +	attrs := []trace.Attribute{ +		trace.StringAttribute("httptrace.dns_done.addrs", strings.Join(addrs, " , ")), +	} +	if info.Err != nil { +		attrs = append(attrs, +			trace.StringAttribute("httptrace.dns_done.error", info.Err.Error())) +	} +	s.sp.Annotate(attrs, "DNSDone") +} + +func (s spanAnnotator) connectStart(network, addr string) { +	attrs := []trace.Attribute{ +		trace.StringAttribute("httptrace.connect_start.network", network), +		trace.StringAttribute("httptrace.connect_start.addr", addr), +	} +	s.sp.Annotate(attrs, "ConnectStart") +} + +func (s spanAnnotator) connectDone(network, addr string, err error) { +	attrs := []trace.Attribute{ +		trace.StringAttribute("httptrace.connect_done.network", network), +		trace.StringAttribute("httptrace.connect_done.addr", addr), +	} +	if err != nil { +		attrs = append(attrs, +			trace.StringAttribute("httptrace.connect_done.error", err.Error())) +	} +	s.sp.Annotate(attrs, "ConnectDone") +} + +func (s spanAnnotator) tlsHandshakeStart() { +	s.sp.Annotate(nil, "TLSHandshakeStart") +} + +func (s spanAnnotator) tlsHandshakeDone(_ tls.ConnectionState, err error) { +	var attrs []trace.Attribute +	if err != nil { +		attrs = append(attrs, +			trace.StringAttribute("httptrace.tls_handshake_done.error", err.Error())) +	} +	s.sp.Annotate(attrs, "TLSHandshakeDone") +} + +func (s spanAnnotator) wroteHeaders() { +	s.sp.Annotate(nil, "WroteHeaders") +} + +func (s spanAnnotator) wait100Continue() { +	s.sp.Annotate(nil, "Wait100Continue") +} + +func (s spanAnnotator) wroteRequest(info httptrace.WroteRequestInfo) { +	var attrs []trace.Attribute +	if info.Err != nil { +		attrs = append(attrs, +			trace.StringAttribute("httptrace.wrote_request.error", info.Err.Error())) +	} +	s.sp.Annotate(attrs, "WroteRequest") +}  | 
