mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-10-31 05:40:42 +00:00 
			
		
		
		
	Ran commands: hack/pin-dependency.sh github.com/GoogleCloudPlatform/k8s-cloud-provider 27a4ced34534a6c32b63159b100ac0efaa1d37b3 hack/update-vendor.sh hack/pin-dependency.sh google.golang.org/api 5213b809086156e6e2b262a41394993fcff97439 hack/update-vendor.sh hack/verify-vendor.sh merge conflicts
		
			
				
	
	
		
			170 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // 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")
 | |
| }
 |