From 46cc4fb1f77a27d7e934f9c6425b6190c5ef81ad Mon Sep 17 00:00:00 2001 From: Sergiusz Urbaniak Date: Tue, 4 Mar 2025 10:29:02 +0100 Subject: [PATCH] gather sunset/deprecation warnings --- internal/controller/atlas/provider.go | 13 ++++++---- internal/deprecation/transport.go | 37 +++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 internal/deprecation/transport.go diff --git a/internal/controller/atlas/provider.go b/internal/controller/atlas/provider.go index 2a4a7b611b..079b2fd14b 100644 --- a/internal/controller/atlas/provider.go +++ b/internal/controller/atlas/provider.go @@ -18,6 +18,7 @@ import ( "github.com/mongodb/mongodb-atlas-kubernetes/v2/api" akov2 "github.com/mongodb/mongodb-atlas-kubernetes/v2/api/v1" + "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/deprecation" "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/dryrun" "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/httputil" "github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/version" @@ -113,7 +114,7 @@ func (p *ProductionProvider) Client(ctx context.Context, secretRef *client.Objec httputil.LoggingTransport(log), } - transport := p.newDryRunTransport(http.DefaultTransport) + transport := p.newTransport(http.DefaultTransport, log) httpClient, err := httputil.DecorateClient(&http.Client{Transport: transport}, clientCfg...) if err != nil { return nil, "", err @@ -131,7 +132,7 @@ func (p *ProductionProvider) SdkClientSet(ctx context.Context, secretRef *client } var transport http.RoundTripper = digest.NewTransport(secretData.PublicKey, secretData.PrivateKey) - transport = p.newDryRunTransport(transport) + transport = p.newTransport(transport, log) transport = httputil.NewLoggingTransport(log, false, transport) httpClient := &http.Client{Transport: transport} @@ -158,12 +159,14 @@ func (p *ProductionProvider) SdkClientSet(ctx context.Context, secretRef *client }, secretData.OrgID, nil } -func (p *ProductionProvider) newDryRunTransport(delegate http.RoundTripper) http.RoundTripper { +func (p *ProductionProvider) newTransport(delegate http.RoundTripper, log *zap.SugaredLogger) http.RoundTripper { + var t http.RoundTripper = deprecation.NewLoggingTransport(delegate, log.Desugar()) + if p.dryRun { - return dryrun.NewDryRunTransport(delegate) + return dryrun.NewDryRunTransport(t) } - return delegate + return t } func getSecrets(ctx context.Context, k8sClient client.Client, secretRef, fallbackRef *client.ObjectKey) (*credentialsSecret, error) { diff --git a/internal/deprecation/transport.go b/internal/deprecation/transport.go new file mode 100644 index 0000000000..d61bfc477e --- /dev/null +++ b/internal/deprecation/transport.go @@ -0,0 +1,37 @@ +package deprecation + +import ( + "net/http" + + "go.uber.org/zap" +) + +type Transport struct { + delegate http.RoundTripper + logger *zap.Logger +} + +func NewLoggingTransport(delegate http.RoundTripper, logger *zap.Logger) *Transport { + return &Transport{ + delegate: delegate, + logger: logger.Named("deprecated"), + } +} + +func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) { + resp, err := t.delegate.RoundTrip(req) + if resp != nil { + javaMethod := resp.Header.Get("X-Java-Method") + deprecation := resp.Header.Get("Deprecation") + sunset := resp.Header.Get("Sunset") + + if deprecation != "" { + t.logger.Warn("deprecation", zap.String("date", deprecation), zap.String("javaMethod", javaMethod), zap.String("path", req.URL.Path), zap.String("method", req.Method)) + } + + if sunset != "" { + t.logger.Warn("sunset", zap.String("date", sunset), zap.String("javaMethod", javaMethod), zap.String("path", req.URL.Path), zap.String("method", req.Method)) + } + } + return resp, err +}