From 1c19b22d8cb03d9d6be1e4ef873dc221789d90ef Mon Sep 17 00:00:00 2001 From: Abhishek Pandey Date: Wed, 6 Dec 2023 16:29:52 -0800 Subject: [PATCH] Add req logging --- src/pkg/services/m365/api/graph/logging.go | 26 +++++++++++++++++++ src/pkg/services/m365/api/graph/middleware.go | 2 ++ 2 files changed, 28 insertions(+) diff --git a/src/pkg/services/m365/api/graph/logging.go b/src/pkg/services/m365/api/graph/logging.go index 2b6e536c9..a08eeb3a4 100644 --- a/src/pkg/services/m365/api/graph/logging.go +++ b/src/pkg/services/m365/api/graph/logging.go @@ -42,6 +42,14 @@ func logResp(ctx context.Context, resp *http.Response) { return } + // Dump both request and response for graph 400 errors. This is a temporary + // measure to help us understand why graph is returning transient 400s. + if resp.StatusCode == http.StatusBadRequest { + log.With("request", getRequestDump(ctx, resp.Request, true)). + With("response", getRespDump(ctx, resp, logBody)). + Info("graph api bad request") + } + // Log api calls according to api debugging configurations. switch respClass { case 2: @@ -61,6 +69,15 @@ func logResp(ctx context.Context, resp *http.Response) { } } +func logReq(ctx context.Context, req *http.Request) { + var ( + log = logger.Ctx(ctx) + ) + + log.With("request", getRequestDump(ctx, req, true)). + Info("graph api req") +} + func getRespDump(ctx context.Context, resp *http.Response, getBody bool) string { respDump, err := httputil.DumpResponse(resp, getBody) if err != nil { @@ -69,3 +86,12 @@ func getRespDump(ctx context.Context, resp *http.Response, getBody bool) string return string(respDump) } + +func getRequestDump(ctx context.Context, req *http.Request, getBody bool) string { + reqDump, err := httputil.DumpRequest(req, getBody) + if err != nil { + logger.CtxErr(ctx, err).Error("dumping http request") + } + + return string(reqDump) +} diff --git a/src/pkg/services/m365/api/graph/middleware.go b/src/pkg/services/m365/api/graph/middleware.go index 3405c030c..8be93be1f 100644 --- a/src/pkg/services/m365/api/graph/middleware.go +++ b/src/pkg/services/m365/api/graph/middleware.go @@ -118,6 +118,8 @@ func (mw *LoggingMiddleware) Intercept( middlewareIndex int, req *http.Request, ) (*http.Response, error) { + logReq(req.Context(), req) + // call the next middleware resp, err := pipeline.Next(req, middlewareIndex) if resp == nil {