From fbf8e6465cbe44e86f8535da2988ea36220ea148 Mon Sep 17 00:00:00 2001 From: wtrocki Date: Tue, 26 Mar 2024 16:50:52 +0100 Subject: [PATCH 01/19] CLOUDP-237245: retry example --- examples/README.md | 11 +++++-- examples/retry/retry.go | 69 +++++++++++++++++++++++++++++++++++++++++ go.mod | 5 +++ go.sum | 6 ++++ internal/main.go | 28 +++++++++++++++++ 5 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 examples/retry/retry.go create mode 100644 internal/main.go diff --git a/examples/README.md b/examples/README.md index 995ee2b3..2c538a4d 100644 --- a/examples/README.md +++ b/examples/README.md @@ -1,4 +1,4 @@ -## Go SDK examples +# Go SDK examples ## Running Examples @@ -11,7 +11,6 @@ export MONGODB_ATLAS_PRIVATE_KEY=some-secret-key-for-gosdkapi go run ./aws_cluster/aws.go ``` - ## Running Examples with Mocked Backend SDK provides mocks using Testify and Mockery. @@ -20,3 +19,11 @@ One of the SDK examples covers usage of the mockery within tests. ```bash go test ./mock/cluster_test.go ``` + +## Examples Reference + +### Retry Example + +Example provides automatic retries for all HTTP 500, 429 HTTP status errors. + +`go run ./retry/retry.go` diff --git a/examples/retry/retry.go b/examples/retry/retry.go new file mode 100644 index 00000000..3a26b4ee --- /dev/null +++ b/examples/retry/retry.go @@ -0,0 +1,69 @@ +package main + +import ( + "log" + "net/http" + "os" + + "context" + + "go.mongodb.org/atlas-sdk/v20231115008/admin" + "go.mongodb.org/atlas-sdk/v20231115008/examples" + + retryablehttp "github.com/hashicorp/go-retryablehttp" + "github.com/mongodb-forks/digest" +) + +/* +* MongoDB Atlas Go SDK Retryable Request Example +* +* Example using custom http client that handles rate limiting and 500 Http errors by retrying requests automatically. +* Example uses https://pkg.go.dev/github.com/hashicorp/go-retryablehttp. +* Please refer to the package documentation for more information. + */ +func main() { + ctx := context.Background() + // Values provided as part of env variables + // See: https://www.mongodb.com/docs/atlas/app-services/authentication/api-key/ + apiKey := os.Getenv("MONGODB_ATLAS_PUBLIC_KEY") + apiSecret := os.Getenv("MONGODB_ATLAS_PRIVATE_KEY") + url := os.Getenv("MONGODB_ATLAS_URL") + + // Using custom client + // This example relies on https://pkg.go.dev/github.com/hashicorp/go-retryablehttp + // retryablehttp performs automatic retries under certain conditions. + // Mainly, if an error is returned by the client (connection errors etc), + /// or if a 500-range response is received, then a retry is invoked. + retryClient := retryablehttp.NewClient() + retryClient.RetryMax = 3 + + var transport http.RoundTripper = &retryablehttp.RoundTripper{Client: retryClient}; + digestRetryAbleTransport := &digest.Transport{ + Username: apiKey, + Password: apiSecret, + Transport: transport, + } + retryableClient, err := digestRetryAbleTransport.Client() + if err != nil{ + log.Fatal("Cannot instantiate client") + } + sdk, err := admin.NewClient( + admin.UseHTTPClient(retryableClient), + admin.UseBaseURL(url), + admin.UseDebug(false)) + examples.HandleErr(err, nil) + + request := sdk.ProjectsApi.ListProjectsWithParams(ctx, + &admin.ListProjectsApiParams{ + ItemsPerPage: admin.PtrInt(1), + IncludeCount: admin.PtrBool(true), + PageNum: admin.PtrInt(1), + }) + projects, response, err := request.Execute() + examples.HandleErr(err, response) + + if projects.GetTotalCount() == 0 { + log.Fatal("account should have at least single project") + } + +} diff --git a/go.mod b/go.mod index 59c00c8e..66f6d84b 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,11 @@ require ( github.com/mongodb-forks/digest v1.0.5 ) +require ( + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-retryablehttp v0.7.5 // indirect +) + require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/go.sum b/go.sum index c02d945a..aa558b5e 100644 --- a/go.sum +++ b/go.sum @@ -2,12 +2,18 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg= github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M= +github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= github.com/mongodb-forks/digest v1.0.5 h1:EJu3wtLZcA0HCvsZpX5yuD193/sW9tHiNvrEM5apXMk= github.com/mongodb-forks/digest v1.0.5/go.mod h1:rb+EX8zotClD5Dj4NdgxnJXG9nwrlx3NWKJ8xttz1Dg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= diff --git a/internal/main.go b/internal/main.go new file mode 100644 index 00000000..3534fde1 --- /dev/null +++ b/internal/main.go @@ -0,0 +1,28 @@ +package main + +import ( + "encoding/json" + "fmt" + + "go.mongodb.org/atlas-sdk/v20231115008/admin" +) + +func main() { + var num int = 0 + myStruct := admin.DiskBackupSnapshotSchedule{ + ReferenceHourOfDay:&num, + } + + // Print the struct before encoding to JSON + fmt.Println("Before encoding:", myStruct) + + // Encode struct to JSON + encoded, err := json.Marshal(myStruct) + if err != nil { + fmt.Println("Error encoding JSON:", err) + return + } + + // Print the encoded JSON + fmt.Println("Encoded JSON:", string(encoded)) +} From f37e8ea318d5d338394760d592f74ba62899aee1 Mon Sep 17 00:00:00 2001 From: wtrocki Date: Tue, 26 Mar 2024 16:54:05 +0100 Subject: [PATCH 02/19] fix: extract function --- examples/retry/retry.go | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/examples/retry/retry.go b/examples/retry/retry.go index 3a26b4ee..3c007b6f 100644 --- a/examples/retry/retry.go +++ b/examples/retry/retry.go @@ -37,16 +37,7 @@ func main() { retryClient := retryablehttp.NewClient() retryClient.RetryMax = 3 - var transport http.RoundTripper = &retryablehttp.RoundTripper{Client: retryClient}; - digestRetryAbleTransport := &digest.Transport{ - Username: apiKey, - Password: apiSecret, - Transport: transport, - } - retryableClient, err := digestRetryAbleTransport.Client() - if err != nil{ - log.Fatal("Cannot instantiate client") - } + retryableClient := createRetryableClient(retryClient, apiKey, apiSecret) sdk, err := admin.NewClient( admin.UseHTTPClient(retryableClient), admin.UseBaseURL(url), @@ -67,3 +58,17 @@ func main() { } } + +func createRetryableClient(retryClient *retryablehttp.Client, apiKey string, apiSecret string) *http.Client { + var transport http.RoundTripper = &retryablehttp.RoundTripper{Client: retryClient} + digestRetryAbleTransport := &digest.Transport{ + Username: apiKey, + Password: apiSecret, + Transport: transport, + } + retryableClient, err := digestRetryAbleTransport.Client() + if err != nil { + log.Fatal("Cannot instantiate client") + } + return retryableClient +} From 0f2d20a23681cedf67ebe852fe18ab869f1d68ae Mon Sep 17 00:00:00 2001 From: wtrocki Date: Tue, 26 Mar 2024 20:43:33 +0100 Subject: [PATCH 03/19] fix: update package and use helper --- examples/retry/retry.go | 6 +----- go.mod | 2 +- go.sum | 2 ++ 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/examples/retry/retry.go b/examples/retry/retry.go index 3c007b6f..b04a8ff3 100644 --- a/examples/retry/retry.go +++ b/examples/retry/retry.go @@ -61,11 +61,7 @@ func main() { func createRetryableClient(retryClient *retryablehttp.Client, apiKey string, apiSecret string) *http.Client { var transport http.RoundTripper = &retryablehttp.RoundTripper{Client: retryClient} - digestRetryAbleTransport := &digest.Transport{ - Username: apiKey, - Password: apiSecret, - Transport: transport, - } + digestRetryAbleTransport := digest.NewTransportWithHTTPRoundTripper(apiKey, apiSecret,transport) retryableClient, err := digestRetryAbleTransport.Client() if err != nil { log.Fatal("Cannot instantiate client") diff --git a/go.mod b/go.mod index 66f6d84b..e006245e 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.20 require ( github.com/go-test/deep v1.1.0 - github.com/mongodb-forks/digest v1.0.5 + github.com/mongodb-forks/digest v1.1.0 ) require ( diff --git a/go.sum b/go.sum index aa558b5e..ac34f83c 100644 --- a/go.sum +++ b/go.sum @@ -9,6 +9,8 @@ github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= github.com/mongodb-forks/digest v1.0.5 h1:EJu3wtLZcA0HCvsZpX5yuD193/sW9tHiNvrEM5apXMk= github.com/mongodb-forks/digest v1.0.5/go.mod h1:rb+EX8zotClD5Dj4NdgxnJXG9nwrlx3NWKJ8xttz1Dg= +github.com/mongodb-forks/digest v1.1.0 h1:7eUdsR1BtqLv0mdNm4OXs6ddWvR4X2/OsLwdKksrOoc= +github.com/mongodb-forks/digest v1.1.0/go.mod h1:rb+EX8zotClD5Dj4NdgxnJXG9nwrlx3NWKJ8xttz1Dg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= From c8ceaef2acdaf1b67b53ac7ea6dfdef1e03202cb Mon Sep 17 00:00:00 2001 From: wtrocki Date: Tue, 26 Mar 2024 20:50:31 +0100 Subject: [PATCH 04/19] fix: separate go mod for examples --- examples/go.mod | 19 +++++++++++++++++++ go.mod | 5 ----- go.sum | 8 -------- 3 files changed, 19 insertions(+), 13 deletions(-) create mode 100644 examples/go.mod diff --git a/examples/go.mod b/examples/go.mod new file mode 100644 index 00000000..1371dd7b --- /dev/null +++ b/examples/go.mod @@ -0,0 +1,19 @@ +module go.mongodb.org/atlas-sdk/v20231115008/examples + +go 1.20 + +require ( + github.com/go-test/deep v1.1.0 + github.com/mongodb-forks/digest v1.1.0 + go.mongodb.org/atlas-sdk/v20231115008 v20231115008.1.0 + github.com/hashicorp/go-retryablehttp v0.7.5 +) + +require ( + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/stretchr/objx v0.5.2 // indirect + github.com/stretchr/testify v1.9.0 + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/go.mod b/go.mod index e006245e..2e89f77d 100644 --- a/go.mod +++ b/go.mod @@ -7,11 +7,6 @@ require ( github.com/mongodb-forks/digest v1.1.0 ) -require ( - github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-retryablehttp v0.7.5 // indirect -) - require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/go.sum b/go.sum index ac34f83c..c055d133 100644 --- a/go.sum +++ b/go.sum @@ -2,20 +2,12 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg= github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= -github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= -github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M= -github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= -github.com/mongodb-forks/digest v1.0.5 h1:EJu3wtLZcA0HCvsZpX5yuD193/sW9tHiNvrEM5apXMk= -github.com/mongodb-forks/digest v1.0.5/go.mod h1:rb+EX8zotClD5Dj4NdgxnJXG9nwrlx3NWKJ8xttz1Dg= github.com/mongodb-forks/digest v1.1.0 h1:7eUdsR1BtqLv0mdNm4OXs6ddWvR4X2/OsLwdKksrOoc= github.com/mongodb-forks/digest v1.1.0/go.mod h1:rb+EX8zotClD5Dj4NdgxnJXG9nwrlx3NWKJ8xttz1Dg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= From 12f3972d9b04ba6b028100908347f3d3502864a0 Mon Sep 17 00:00:00 2001 From: wtrocki Date: Tue, 26 Mar 2024 20:52:18 +0100 Subject: [PATCH 05/19] fix: ignore dependabot for examples --- .github/dependabot.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 3ab4516b..72c34673 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,6 +5,12 @@ updates: schedule: interval: weekly day: monday + - package-ecosystem: gomod + directory: "/examples" + schedule: + interval: monthly + ignore: + - dependency-name: "*" - package-ecosystem: github-actions directory: "/" schedule: From c61e96e3c30e59de1490ee7940d45f595b8b235b Mon Sep 17 00:00:00 2001 From: wtrocki Date: Wed, 27 Mar 2024 11:36:44 +0100 Subject: [PATCH 06/19] fix: review comments --- .tool-versions | 2 +- examples/go.mod | 2 +- examples/retry/retry.go | 4 ++-- go.mod | 2 +- internal/main.go | 28 ---------------------------- 5 files changed, 5 insertions(+), 33 deletions(-) delete mode 100644 internal/main.go diff --git a/.tool-versions b/.tool-versions index b1a2aa34..9f2448a5 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,3 +1,3 @@ -golang 1.20 +golang 1.22.1 nodejs 18.18.2 diff --git a/examples/go.mod b/examples/go.mod index 1371dd7b..e415333c 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -1,6 +1,6 @@ module go.mongodb.org/atlas-sdk/v20231115008/examples -go 1.20 +go 1.22.1 require ( github.com/go-test/deep v1.1.0 diff --git a/examples/retry/retry.go b/examples/retry/retry.go index b04a8ff3..648c82ec 100644 --- a/examples/retry/retry.go +++ b/examples/retry/retry.go @@ -37,7 +37,7 @@ func main() { retryClient := retryablehttp.NewClient() retryClient.RetryMax = 3 - retryableClient := createRetryableClient(retryClient, apiKey, apiSecret) + retryableClient := newRetryableClient(retryClient, apiKey, apiSecret) sdk, err := admin.NewClient( admin.UseHTTPClient(retryableClient), admin.UseBaseURL(url), @@ -59,7 +59,7 @@ func main() { } -func createRetryableClient(retryClient *retryablehttp.Client, apiKey string, apiSecret string) *http.Client { +func newRetryableClient(retryClient *retryablehttp.Client, apiKey string, apiSecret string) *http.Client { var transport http.RoundTripper = &retryablehttp.RoundTripper{Client: retryClient} digestRetryAbleTransport := digest.NewTransportWithHTTPRoundTripper(apiKey, apiSecret,transport) retryableClient, err := digestRetryAbleTransport.Client() diff --git a/go.mod b/go.mod index 2e89f77d..e677f781 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module go.mongodb.org/atlas-sdk/v20231115008 -go 1.20 +go 1.22.1 require ( github.com/go-test/deep v1.1.0 diff --git a/internal/main.go b/internal/main.go deleted file mode 100644 index 3534fde1..00000000 --- a/internal/main.go +++ /dev/null @@ -1,28 +0,0 @@ -package main - -import ( - "encoding/json" - "fmt" - - "go.mongodb.org/atlas-sdk/v20231115008/admin" -) - -func main() { - var num int = 0 - myStruct := admin.DiskBackupSnapshotSchedule{ - ReferenceHourOfDay:&num, - } - - // Print the struct before encoding to JSON - fmt.Println("Before encoding:", myStruct) - - // Encode struct to JSON - encoded, err := json.Marshal(myStruct) - if err != nil { - fmt.Println("Error encoding JSON:", err) - return - } - - // Print the encoded JSON - fmt.Println("Encoded JSON:", string(encoded)) -} From 82401e47a6e9de4c28b2c8b19f3bfde5b005b4bc Mon Sep 17 00:00:00 2001 From: wtrocki Date: Wed, 27 Mar 2024 11:38:40 +0100 Subject: [PATCH 07/19] fix: whitespace --- examples/go.mod | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/go.mod b/examples/go.mod index e415333c..5bf320b3 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -5,8 +5,8 @@ go 1.22.1 require ( github.com/go-test/deep v1.1.0 github.com/mongodb-forks/digest v1.1.0 - go.mongodb.org/atlas-sdk/v20231115008 v20231115008.1.0 - github.com/hashicorp/go-retryablehttp v0.7.5 + go.mongodb.org/atlas-sdk/v20231115008 v20231115008.1.0 + github.com/hashicorp/go-retryablehttp v0.7.5 ) require ( From fba86826a8484bfef54609456b9ad37693f094b5 Mon Sep 17 00:00:00 2001 From: wtrocki Date: Wed, 27 Mar 2024 11:47:02 +0100 Subject: [PATCH 08/19] fix: retry function --- examples/go.sum | 17 +++++++++++++++++ examples/retry/retry.go | 22 ++++++++++++++-------- 2 files changed, 31 insertions(+), 8 deletions(-) create mode 100644 examples/go.sum diff --git a/examples/go.sum b/examples/go.sum new file mode 100644 index 00000000..0d31429c --- /dev/null +++ b/examples/go.sum @@ -0,0 +1,17 @@ +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M= +github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= +github.com/mongodb-forks/digest v1.1.0 h1:7eUdsR1BtqLv0mdNm4OXs6ddWvR4X2/OsLwdKksrOoc= +github.com/mongodb-forks/digest v1.1.0/go.mod h1:rb+EX8zotClD5Dj4NdgxnJXG9nwrlx3NWKJ8xttz1Dg= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +go.mongodb.org/atlas-sdk/v20231115008 v20231115008.1.0 h1:WKPkreeCuIh2KKxfEP6KWIFNdNYaXnfSg79v2zAaSjw= +go.mongodb.org/atlas-sdk/v20231115008 v20231115008.1.0/go.mod h1:BHskDmYvvANe+s/HMkRhvK3GudGEZuzjYSbp1fBssdc= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/examples/retry/retry.go b/examples/retry/retry.go index 648c82ec..e628799f 100644 --- a/examples/retry/retry.go +++ b/examples/retry/retry.go @@ -8,7 +8,6 @@ import ( "context" "go.mongodb.org/atlas-sdk/v20231115008/admin" - "go.mongodb.org/atlas-sdk/v20231115008/examples" retryablehttp "github.com/hashicorp/go-retryablehttp" "github.com/mongodb-forks/digest" @@ -37,12 +36,17 @@ func main() { retryClient := retryablehttp.NewClient() retryClient.RetryMax = 3 - retryableClient := newRetryableClient(retryClient, apiKey, apiSecret) + retryableClient, err := newRetryableClient(retryClient, apiKey, apiSecret) + if err != nil{ + log.Fatal("Cannot instantiate client") + } sdk, err := admin.NewClient( admin.UseHTTPClient(retryableClient), admin.UseBaseURL(url), admin.UseDebug(false)) - examples.HandleErr(err, nil) + if err != nil{ + log.Fatal(err) + } request := sdk.ProjectsApi.ListProjectsWithParams(ctx, &admin.ListProjectsApiParams{ @@ -50,8 +54,10 @@ func main() { IncludeCount: admin.PtrBool(true), PageNum: admin.PtrInt(1), }) - projects, response, err := request.Execute() - examples.HandleErr(err, response) + projects, _, err := request.Execute() + if err != nil{ + log.Fatal(err) + } if projects.GetTotalCount() == 0 { log.Fatal("account should have at least single project") @@ -59,12 +65,12 @@ func main() { } -func newRetryableClient(retryClient *retryablehttp.Client, apiKey string, apiSecret string) *http.Client { +func newRetryableClient(retryClient *retryablehttp.Client, apiKey string, apiSecret string) (*http.Client, error) { var transport http.RoundTripper = &retryablehttp.RoundTripper{Client: retryClient} digestRetryAbleTransport := digest.NewTransportWithHTTPRoundTripper(apiKey, apiSecret,transport) retryableClient, err := digestRetryAbleTransport.Client() if err != nil { - log.Fatal("Cannot instantiate client") + return nil, err; } - return retryableClient + return retryableClient, nil } From f8817f1bacf83799546011381026c0e39605b246 Mon Sep 17 00:00:00 2001 From: wtrocki Date: Wed, 27 Mar 2024 14:09:58 +0100 Subject: [PATCH 09/19] fix: update and review golang ci lint rules --- .golangci.yml | 2 +- Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index f39d8fc5..c7dd425a 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -73,7 +73,7 @@ linters: disable-all: true enable: - bodyclose # checks whether HTTP response body is closed successfully [fast: false, auto-fix: false] - - depguard # Go linter that checks if package imports are in a list of acceptable packages [fast: false, auto-fix: false] + #- depguard # Go linter that checks if package imports are in a list of acceptable packages [fast: false, auto-fix: false] - dogsled # Checks assignments with too many blank identifiers (e.g. x, _, _, _, := f()) [fast: true, auto-fix: false] - errcheck # Errcheck is a program for checking for unchecked errors in go programs. These unchecked errors can be critical bugs in some cases [fast: false, auto-fix: false] - errorlint # errorlint is a linter for that can be used to find code that will cause problems with the error wrapping scheme introduced in Go 1.13. [fast: false, auto-fix: false] diff --git a/Makefile b/Makefile index 767e97c9..1ce67da0 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ SOURCE_FILES?=./... -GOLANGCI_VERSION=v1.52.2 +GOLANGCI_VERSION=v1.57.1 COVERAGE=coverage.out export GO111MODULE := on From 1cd3ad6afb6f3d647006abc8f2d01a7b0c1c37ec Mon Sep 17 00:00:00 2001 From: wtrocki Date: Wed, 27 Mar 2024 14:13:12 +0100 Subject: [PATCH 10/19] fix: update golang ci lint --- .github/workflows/pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 3b91418d..120b009f 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -20,7 +20,7 @@ jobs: - name: lint uses: golangci/golangci-lint-action@v4.0.0 with: - version: v1.52.2 + version: v1.57.1 args: --timeout=10m tests-on-unix: From cc4c520adb2123596a95b8dee5425d1130e4f228 Mon Sep 17 00:00:00 2001 From: Wojciech Trocki Date: Wed, 27 Mar 2024 18:28:04 +0100 Subject: [PATCH 11/19] chore: update readme --- examples/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/README.md b/examples/README.md index 2c538a4d..fffc22eb 100644 --- a/examples/README.md +++ b/examples/README.md @@ -26,4 +26,6 @@ go test ./mock/cluster_test.go Example provides automatic retries for all HTTP 500, 429 HTTP status errors. -`go run ./retry/retry.go` +```bash +go run ./retry/retry.go +``` From c22662b531e46e5edc219ac63eb035fff9fb8665 Mon Sep 17 00:00:00 2001 From: Wojciech Trocki Date: Wed, 27 Mar 2024 19:24:11 +0100 Subject: [PATCH 12/19] Update examples/retry/retry.go Co-authored-by: Gustavo Bazan --- examples/retry/retry.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/examples/retry/retry.go b/examples/retry/retry.go index e628799f..23f89aec 100644 --- a/examples/retry/retry.go +++ b/examples/retry/retry.go @@ -68,9 +68,5 @@ func main() { func newRetryableClient(retryClient *retryablehttp.Client, apiKey string, apiSecret string) (*http.Client, error) { var transport http.RoundTripper = &retryablehttp.RoundTripper{Client: retryClient} digestRetryAbleTransport := digest.NewTransportWithHTTPRoundTripper(apiKey, apiSecret,transport) - retryableClient, err := digestRetryAbleTransport.Client() - if err != nil { - return nil, err; - } - return retryableClient, nil + return digestRetryAbleTransport.Client() } From d5d4d9af2ec979b2882467370639900721734d1f Mon Sep 17 00:00:00 2001 From: Wojciech Trocki Date: Wed, 27 Mar 2024 19:24:16 +0100 Subject: [PATCH 13/19] Update examples/retry/retry.go Co-authored-by: Gustavo Bazan --- examples/retry/retry.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/retry/retry.go b/examples/retry/retry.go index 23f89aec..60f2c16b 100644 --- a/examples/retry/retry.go +++ b/examples/retry/retry.go @@ -44,9 +44,9 @@ func main() { admin.UseHTTPClient(retryableClient), admin.UseBaseURL(url), admin.UseDebug(false)) - if err != nil{ - log.Fatal(err) - } + if err != nil{ + log.Fatal(err) + } request := sdk.ProjectsApi.ListProjectsWithParams(ctx, &admin.ListProjectsApiParams{ From bc86dce634f158ba42bfefad517685f39fc31bb7 Mon Sep 17 00:00:00 2001 From: Wojciech Trocki Date: Wed, 27 Mar 2024 19:24:20 +0100 Subject: [PATCH 14/19] Update examples/go.mod Co-authored-by: Gustavo Bazan --- examples/go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/go.mod b/examples/go.mod index 5bf320b3..fcedd950 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -5,7 +5,7 @@ go 1.22.1 require ( github.com/go-test/deep v1.1.0 github.com/mongodb-forks/digest v1.1.0 - go.mongodb.org/atlas-sdk/v20231115008 v20231115008.1.0 + go.mongodb.org/atlas-sdk/v20231115008 v20231115008.1.0 github.com/hashicorp/go-retryablehttp v0.7.5 ) From 51d06d82813e43eda0663ad181cd55379410fc4f Mon Sep 17 00:00:00 2001 From: Wojciech Trocki Date: Wed, 27 Mar 2024 19:24:26 +0100 Subject: [PATCH 15/19] Update examples/retry/retry.go Co-authored-by: Gustavo Bazan --- examples/retry/retry.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/examples/retry/retry.go b/examples/retry/retry.go index 60f2c16b..cef65f7f 100644 --- a/examples/retry/retry.go +++ b/examples/retry/retry.go @@ -59,9 +59,7 @@ func main() { log.Fatal(err) } - if projects.GetTotalCount() == 0 { - log.Fatal("account should have at least single project") - } + log.Info("Total Projects", projects.GetTotalCount()) } From c1df4ddf7a42c7f2450c0bcb78e8be15b5202515 Mon Sep 17 00:00:00 2001 From: wtrocki Date: Wed, 27 Mar 2024 19:26:24 +0100 Subject: [PATCH 16/19] fix: retry options --- examples/retry/retry.go | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/examples/retry/retry.go b/examples/retry/retry.go index cef65f7f..31ea0025 100644 --- a/examples/retry/retry.go +++ b/examples/retry/retry.go @@ -1,6 +1,7 @@ package main import ( + "fmt" "log" "net/http" "os" @@ -28,23 +29,23 @@ func main() { apiSecret := os.Getenv("MONGODB_ATLAS_PRIVATE_KEY") url := os.Getenv("MONGODB_ATLAS_URL") - // Using custom client + // Using custom client // This example relies on https://pkg.go.dev/github.com/hashicorp/go-retryablehttp - // retryablehttp performs automatic retries under certain conditions. - // Mainly, if an error is returned by the client (connection errors etc), + // retryablehttp performs automatic retries under certain conditions. + // Mainly, if an error is returned by the client (connection errors etc), /// or if a 500-range response is received, then a retry is invoked. retryClient := retryablehttp.NewClient() retryClient.RetryMax = 3 retryableClient, err := newRetryableClient(retryClient, apiKey, apiSecret) - if err != nil{ + if err != nil { log.Fatal("Cannot instantiate client") } sdk, err := admin.NewClient( admin.UseHTTPClient(retryableClient), admin.UseBaseURL(url), admin.UseDebug(false)) - if err != nil{ + if err != nil { log.Fatal(err) } @@ -55,16 +56,16 @@ func main() { PageNum: admin.PtrInt(1), }) projects, _, err := request.Execute() - if err != nil{ + if err != nil { log.Fatal(err) } - log.Info("Total Projects", projects.GetTotalCount()) + fmt.Println("Total Projects", projects.GetTotalCount()) } func newRetryableClient(retryClient *retryablehttp.Client, apiKey string, apiSecret string) (*http.Client, error) { var transport http.RoundTripper = &retryablehttp.RoundTripper{Client: retryClient} - digestRetryAbleTransport := digest.NewTransportWithHTTPRoundTripper(apiKey, apiSecret,transport) + digestRetryAbleTransport := digest.NewTransportWithHTTPRoundTripper(apiKey, apiSecret, transport) return digestRetryAbleTransport.Client() } From bf10f2e931fd82ad9dc65c1b3d9d3976c1f59b9a Mon Sep 17 00:00:00 2001 From: wtrocki Date: Wed, 27 Mar 2024 19:28:30 +0100 Subject: [PATCH 17/19] fix: remove deprecated configs for linter --- .golangci.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index c7dd425a..103ea640 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -20,10 +20,6 @@ linters-settings: - typeAssertChain gocyclo: min-complexity: 15 - govet: - check-shadowing: true - maligned: - suggest-new: true revive: # see https://github.com/mgechev/revive#available-rules for details. ignore-generated-header: true From 5193787ec7fca7343633d731d4917269cd9f51d5 Mon Sep 17 00:00:00 2001 From: wtrocki Date: Wed, 27 Mar 2024 19:37:28 +0100 Subject: [PATCH 18/19] fix: use non released version of the SDK in examples --- examples/go.mod | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/go.mod b/examples/go.mod index fcedd950..e3bdd242 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -2,8 +2,9 @@ module go.mongodb.org/atlas-sdk/v20231115008/examples go 1.22.1 +replace go.mongodb.org/atlas-sdk/v20231115008 => ../ + require ( - github.com/go-test/deep v1.1.0 github.com/mongodb-forks/digest v1.1.0 go.mongodb.org/atlas-sdk/v20231115008 v20231115008.1.0 github.com/hashicorp/go-retryablehttp v0.7.5 From 0ca7eaeb388044faf4f6c21f3cca7e0b94506452 Mon Sep 17 00:00:00 2001 From: wtrocki Date: Wed, 27 Mar 2024 19:38:55 +0100 Subject: [PATCH 19/19] fix: bring back testify --- examples/go.mod | 6 +++--- examples/go.sum | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/examples/go.mod b/examples/go.mod index e3bdd242..72f67d98 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -5,14 +5,14 @@ go 1.22.1 replace go.mongodb.org/atlas-sdk/v20231115008 => ../ require ( + github.com/hashicorp/go-retryablehttp v0.7.5 github.com/mongodb-forks/digest v1.1.0 - go.mongodb.org/atlas-sdk/v20231115008 v20231115008.1.0 - github.com/hashicorp/go-retryablehttp v0.7.5 + go.mongodb.org/atlas-sdk/v20231115008 v20231115008.1.0 ) require ( - github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/stretchr/testify v1.9.0 diff --git a/examples/go.sum b/examples/go.sum index 0d31429c..122a182e 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -1,3 +1,4 @@ +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= @@ -7,11 +8,14 @@ github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= github.com/mongodb-forks/digest v1.1.0 h1:7eUdsR1BtqLv0mdNm4OXs6ddWvR4X2/OsLwdKksrOoc= github.com/mongodb-forks/digest v1.1.0/go.mod h1:rb+EX8zotClD5Dj4NdgxnJXG9nwrlx3NWKJ8xttz1Dg= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= go.mongodb.org/atlas-sdk/v20231115008 v20231115008.1.0 h1:WKPkreeCuIh2KKxfEP6KWIFNdNYaXnfSg79v2zAaSjw= go.mongodb.org/atlas-sdk/v20231115008 v20231115008.1.0/go.mod h1:BHskDmYvvANe+s/HMkRhvK3GudGEZuzjYSbp1fBssdc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=