11package tuf
22
33import (
4- "crypto/tls"
5- "fmt"
64 "net/http"
75 "net/http/httptrace"
8- "strings"
96 "time"
10- )
117
12- const (
13- eventStart = "START"
14- eventDNSStart = "DNS_START"
15- eventDNSDone = "DNS_DONE"
16- eventConnectStart = "CONNECT_START"
17- eventConnectDone = "CONNECT_DONE"
18- eventConnectError = "CONNECT_ERROR"
19- eventTLSStart = "TLS_START"
20- eventTLSDone = "TLS_DONE"
21- eventTLSError = "TLS_ERROR"
22- eventResponseFirstByte = "RESPONSE_FIRST_BYTE"
23- eventRequestError = "REQUEST_ERROR"
24- eventRequestDone = "REQUEST_DONE"
8+ "github.com/werf/trdl/client/internal/logger"
259)
2610
2711type TracingTransport struct {
2812 Transport http.RoundTripper
13+ Logger logger.Logger
2914}
3015
3116func (t * TracingTransport ) RoundTrip (req * http.Request ) (* http.Response , error ) {
17+ log := t .Logger .With ("sorce" , "tuf-client" )
3218 startTime := time .Now ()
3319
34- logBase := func (indent int , event , format string , args ... interface {}) {
35- indentStr := strings .Repeat (" " , 2 * indent )
36- fmt .Printf ("%s [%.2fs] %s: %s\n " ,
37- indentStr , time .Since (startTime ).Seconds (), event , fmt .Sprintf (format , args ... ))
38- }
39-
40- logMain := func (event , format string , args ... interface {}) {
41- logBase (1 , event , format , args ... )
42- }
43-
44- logStep := func (event , format string , args ... interface {}) {
45- logBase (2 , event , format , args ... )
46- }
47-
48- logMain (eventStart , "Request to %s %s" , req .Method , req .URL .String ())
20+ log .Debug ("Request started" ,
21+ "method" , req .Method ,
22+ "url" , req .URL .String (),
23+ )
4924
5025 trace := & httptrace.ClientTrace {
51- DNSStart : func (info httptrace.DNSStartInfo ) {
52- logStep (eventDNSStart , "Lookup %s" , info .Host )
53- },
5426 DNSDone : func (info httptrace.DNSDoneInfo ) {
55- logStep (eventDNSDone , "Resolved %+v" , info .Addrs )
56- },
57- ConnectStart : func (network , addr string ) {
58- logStep (eventConnectStart , "Connecting to %s (%s)" , addr , network )
27+ log .Debug ("DNS lookup done" , "host" , info .Addrs )
5928 },
6029 ConnectDone : func (network , addr string , err error ) {
6130 if err != nil {
62- logStep (eventConnectError , "Failed to %s: %v" , addr , err )
63- } else {
64- logStep (eventConnectDone , "Connected to %s" , addr )
31+ log .Debug ("Failed to connect" ,
32+ "host" , addr ,
33+ "error" , err ,
34+ )
35+ return
6536 }
66- },
67- TLSHandshakeStart : func () {
68- logStep (eventTLSStart , "Starting handshake" )
69- },
70- TLSHandshakeDone : func (state tls.ConnectionState , err error ) {
71- if err != nil {
72- logStep (eventTLSError , "Handshake failed: %v" , err )
73- } else {
74- logStep (eventTLSDone , "Handshake completed" )
75- }
76- },
77- GotFirstResponseByte : func () {
78- logStep (eventResponseFirstByte , "Received first byte" )
37+ log .Debug ("Connected" , "address" , addr )
7938 },
8039 }
8140
8241 req = req .WithContext (httptrace .WithClientTrace (req .Context (), trace ))
8342
8443 resp , err := t .Transport .RoundTrip (req )
8544 if err != nil {
86- logMain (eventRequestError , "Request failed: %v" , err )
45+ log .Debug ("Failed to send request" ,
46+ "url" , req .URL .String (),
47+ "error" , err ,
48+ )
8749 return nil , err
8850 }
8951
90- logMain (eventRequestDone , "Completed with status %s (Total: %.2fs)" , resp .Status , time .Since (startTime ).Seconds ())
91-
52+ log .Debug ("Request completed" ,
53+ "status" , resp .Status ,
54+ "duration" , time .Since (startTime ).Seconds (),
55+ )
56+
9257 return resp , nil
93- }
58+ }
0 commit comments