go/downloader/download-tracer.go (42 lines of code) (raw):

package downloader import ( "context" "net/http/httptrace" "github.com/golang/glog" ) type DownloadTracer struct { DNSDone []httptrace.DNSDoneInfo } func NewDownloadTracer() *DownloadTracer { return &DownloadTracer{ DNSDone: []httptrace.DNSDoneInfo{}, } } func (da *DownloadTracer) dnsDone(ddi httptrace.DNSDoneInfo) { glog.V(1).Infof("DNS result: %+v", ddi) da.DNSDone = append(da.DNSDone, ddi) } func (da *DownloadTracer) Configure(ctx context.Context) context.Context { traceObj := &httptrace.ClientTrace{ DNSDone: da.dnsDone, } return httptrace.WithClientTrace(ctx, traceObj) } func (da *DownloadTracer) DNSResults() []string { results := []string{} for _, ddi := range da.DNSDone { for _, addr := range ddi.Addrs { results = append(results, addr.String()) } } return results } func (da *DownloadTracer) Errors() []string { results := []string{} for _, ddi := range da.DNSDone { if ddi.Err != nil { results = append(results, ddi.Err.Error()) } } return results }