this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat(log) log datasource egress requests

eagleusb 9049bc77 bc9d7a02

+49 -2
+3 -2
internal/data/bitcoin.go
··· 11 11 "time" 12 12 13 13 "github.com/eagleusb/proxycon/internal/types" 14 + "github.com/eagleusb/proxycon/internal/utility" 14 15 ) 15 16 16 17 const ( ··· 28 29 return &BitcoinPrices{ 29 30 client: &http.Client{ 30 31 Timeout: 60 * time.Second, 31 - Transport: &http.Transport{ 32 + Transport: utility.NewLoggingRoundTripper(&http.Transport{ 32 33 MaxIdleConns: 10, 33 34 MaxIdleConnsPerHost: 10, 34 35 IdleConnTimeout: 300 * time.Second, 35 - }, 36 + }), 36 37 }, 37 38 } 38 39 }
+46
internal/utility/client.go
··· 1 + package utility 2 + 3 + import ( 4 + "log/slog" 5 + "net/http" 6 + "time" 7 + ) 8 + 9 + // loggingRoundTripper wraps an http.RoundTripper to log each outgoing request. 10 + type loggingRoundTripper struct { 11 + transport http.RoundTripper 12 + } 13 + 14 + func (l *loggingRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { 15 + if !slog.Default().Enabled(req.Context(), slog.LevelInfo) { 16 + return l.transport.RoundTrip(req) 17 + } 18 + 19 + start := time.Now() 20 + resp, err := l.transport.RoundTrip(req) 21 + duration := time.Since(start) 22 + 23 + attrs := []slog.Attr{ 24 + slog.String("method", req.Method), 25 + slog.String("url", req.URL.String()), 26 + slog.String("duration", duration.String()), 27 + } 28 + 29 + if err != nil { 30 + attrs = append(attrs, slog.String("err", err.Error())) 31 + } else { 32 + attrs = append(attrs, slog.Int("code", resp.StatusCode)) 33 + } 34 + 35 + slog.LogAttrs(req.Context(), slog.LevelInfo, "http client request", attrs...) 36 + return resp, err 37 + } 38 + 39 + // NewLoggingRoundTripper wraps the given transport with request logging. 40 + // If transport is nil, http.DefaultTransport is used. 41 + func NewLoggingRoundTripper(transport http.RoundTripper) http.RoundTripper { 42 + if transport == nil { 43 + transport = http.DefaultTransport 44 + } 45 + return &loggingRoundTripper{transport: transport} 46 + }