diff --git a/backend/utils/github.go b/backend/utils/github.go index c45f7a568..5972cdade 100644 --- a/backend/utils/github.go +++ b/backend/utils/github.go @@ -83,7 +83,11 @@ func (gh DiggerGithubRealClientProvider) Get(githubAppId int64, installationId i return nil, nil, fmt.Errorf("error initialising git app token: %v\n", err) } - ghClient, err := gh.NewClient(&net.Client{Transport: itr}) + clientWithLogging := &net.Client{ + Transport: &LoggingRoundTripper{Rt: itr}, + } + + ghClient, err := gh.NewClient(clientWithLogging) if err != nil { slog.Error("Failed to create GitHub client", "error", err) return nil, nil, fmt.Errorf("error creating new client: %v", err) diff --git a/backend/utils/trip_logger.go b/backend/utils/trip_logger.go new file mode 100644 index 000000000..f4fdd114d --- /dev/null +++ b/backend/utils/trip_logger.go @@ -0,0 +1,40 @@ +package utils + +import ( + "log/slog" + net "net/http" +) + +type LoggingRoundTripper struct { + Rt net.RoundTripper +} + +func (lrt *LoggingRoundTripper) RoundTrip(req *net.Request) (*net.Response, error) { + // Log the request + slog.Debug("GitHub API Request", + "method", req.Method, + "url_path", req.URL.Path, + ) + + resp, err := lrt.Rt.RoundTrip(req) + if err != nil { + slog.Error("GitHub API Request failed", "error", err) + return nil, err + } + + slog.Debug("GitHub API Response", + "status", resp.Status, + ) + + if resp.Header != nil { + slog.Debug("GitHub API Rate Limits", + "X-RateLimit-Limit", resp.Header.Get("X-RateLimit-Limit"), + "X-RateLimit-Remaining", resp.Header.Get("X-RateLimit-Remaining"), + "X-RateLimit-Used", resp.Header.Get("X-RateLimit-Used"), + "X-RateLimit-Resource", resp.Header.Get("X-RateLimit-Resource"), + "X-RateLimit-Reset", resp.Header.Get("X-RateLimit-Reset"), + ) + } + + return resp, nil +} diff --git a/ee/backend/providers/github/providers.go b/ee/backend/providers/github/providers.go index 845c2506b..78b712317 100644 --- a/ee/backend/providers/github/providers.go +++ b/ee/backend/providers/github/providers.go @@ -80,7 +80,11 @@ func (gh DiggerGithubEEClientProvider) Get(githubAppId int64, installationId int return nil, nil, fmt.Errorf("error initialising git app token: %v\n", err) } - ghClient, err := gh.NewClient(&net.Client{Transport: itr}) + clientWithLogging := &net.Client{ + Transport: &utils.LoggingRoundTripper{Rt: itr}, + } + + ghClient, err := gh.NewClient(clientWithLogging) if err != nil { return nil, nil, fmt.Errorf("could not get digger client: %v", err) }