From d8e1741be1260338824cad7ae089b6c41115eb27 Mon Sep 17 00:00:00 2001 From: Kevin Franklin Kim Date: Tue, 26 Jul 2022 08:41:22 +0200 Subject: [PATCH 01/14] feat: add request id roundtripware --- example/roundtripwares/requestid/main.go | 52 +++++++++++++++++++ .../{middleware => context}/contextkey.go | 2 +- net/http/context/requestid.go | 19 +++++++ net/http/context/sessionid.go | 19 +++++++ net/http/context/trackingid.go | 19 +++++++ net/http/middleware/requestid.go | 47 +++++++++++++++-- net/http/middleware/sessionid.go | 7 ++- net/http/middleware/trackingid.go | 7 ++- net/http/roundtripware/requestid.go | 51 ++++++++++++++++++ 9 files changed, 209 insertions(+), 14 deletions(-) create mode 100644 example/roundtripwares/requestid/main.go rename net/http/{middleware => context}/contextkey.go (55%) create mode 100644 net/http/context/requestid.go create mode 100644 net/http/context/sessionid.go create mode 100644 net/http/context/trackingid.go create mode 100644 net/http/roundtripware/requestid.go diff --git a/example/roundtripwares/requestid/main.go b/example/roundtripwares/requestid/main.go new file mode 100644 index 0000000..d38af38 --- /dev/null +++ b/example/roundtripwares/requestid/main.go @@ -0,0 +1,52 @@ +package main + +import ( + "net/http" + + "github.com/foomo/keel" + keelhttp "github.com/foomo/keel/net/http" + "github.com/foomo/keel/net/http/middleware" + "github.com/foomo/keel/net/http/roundtripware" + httputils "github.com/foomo/keel/utils/net/http" +) + +func main() { + svr := keel.NewServer() + + // get logger + l := svr.Logger() + + httpClient := keelhttp.NewHTTPClient( + keelhttp.HTTPClientWithRoundTripware(l, + roundtripware.RequestID(), + ), + ) + + // create demo service + svs := http.NewServeMux() + svs.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + // send internal http request + if req, err := http.NewRequestWithContext(r.Context(), http.MethodGet, "http://localhost:8080/internal", nil); err != nil { + httputils.InternalServerError(l, w, r, err) + return + } else if resp, err := httpClient.Do(req); err != nil { + httputils.InternalServerError(l, w, r, err) + return + } else { + w.WriteHeader(http.StatusOK) + _, _ = w.Write([]byte(r.Header.Get(keelhttp.HeaderXRequestID) + " - " + resp.Header.Get(keelhttp.HeaderXRequestID))) + } + }) + svs.HandleFunc("/internal", func(w http.ResponseWriter, r *http.Request) { + l.Info("internal: " + r.Header.Get(keelhttp.HeaderXRequestID)) + w.WriteHeader(http.StatusOK) + }) + + svr.AddService( + keel.NewServiceHTTP(l, "demo", "localhost:8080", svs, + middleware.RequestID(), + ), + ) + + svr.Run() +} diff --git a/net/http/middleware/contextkey.go b/net/http/context/contextkey.go similarity index 55% rename from net/http/middleware/contextkey.go rename to net/http/context/contextkey.go index 4bab584..c3bf2db 100644 --- a/net/http/middleware/contextkey.go +++ b/net/http/context/contextkey.go @@ -1,3 +1,3 @@ -package middleware +package context type contextKey string diff --git a/net/http/context/requestid.go b/net/http/context/requestid.go new file mode 100644 index 0000000..7b80a85 --- /dev/null +++ b/net/http/context/requestid.go @@ -0,0 +1,19 @@ +package context + +import ( + "context" +) + +const ContextKeyRequestID contextKey = "requestId" + +func GetRequestID(ctx context.Context) (string, bool) { + if value, ok := ctx.Value(ContextKeyRequestID).(string); ok { + return value, true + } else { + return "", false + } +} + +func SetRequestID(ctx context.Context, requestID string) context.Context { + return context.WithValue(ctx, ContextKeyRequestID, requestID) +} diff --git a/net/http/context/sessionid.go b/net/http/context/sessionid.go new file mode 100644 index 0000000..40601b4 --- /dev/null +++ b/net/http/context/sessionid.go @@ -0,0 +1,19 @@ +package context + +import ( + "context" +) + +const ContextKeySessionID contextKey = "sessionId" + +func GetSessionID(ctx context.Context) (string, bool) { + if value, ok := ctx.Value(ContextKeySessionID).(string); ok { + return value, true + } else { + return "", false + } +} + +func SetSessionID(ctx context.Context, requestID string) context.Context { + return context.WithValue(ctx, ContextKeySessionID, requestID) +} diff --git a/net/http/context/trackingid.go b/net/http/context/trackingid.go new file mode 100644 index 0000000..880ea5c --- /dev/null +++ b/net/http/context/trackingid.go @@ -0,0 +1,19 @@ +package context + +import ( + "context" +) + +const ContextKeyTrackingID contextKey = "trackingId" + +func GetTrackingID(ctx context.Context) (string, bool) { + if value, ok := ctx.Value(ContextKeyTrackingID).(string); ok { + return value, true + } else { + return "", false + } +} + +func SetTrackingID(ctx context.Context, trackingID string) context.Context { + return context.WithValue(ctx, ContextKeyTrackingID, trackingID) +} diff --git a/net/http/middleware/requestid.go b/net/http/middleware/requestid.go index c1edf2b..a39d5b8 100644 --- a/net/http/middleware/requestid.go +++ b/net/http/middleware/requestid.go @@ -6,14 +6,17 @@ import ( "github.com/google/uuid" "go.uber.org/zap" - keelhttp "github.com/foomo/keel/net/http" + keelhttpcontext "github.com/foomo/keel/net/http/context" ) type ( RequestIDOptions struct { Generator RequestIDGenerator + RequestHeader []string ResponseHeader string + SetRequestHeader bool SetResponseHeader bool + SetContext bool } RequestIDOption func(*RequestIDOptions) RequestIDGenerator func() string @@ -28,8 +31,18 @@ func DefaultRequestIDGenerator() string { func GetDefaultRequestIDOptions() RequestIDOptions { return RequestIDOptions{ Generator: DefaultRequestIDGenerator, - ResponseHeader: keelhttp.HeaderXRequestID, - SetResponseHeader: false, + RequestHeader: []string{"X-Request-ID", "Cf-Ray"}, + ResponseHeader: "X-Request-ID", + SetRequestHeader: true, + SetResponseHeader: true, + SetContext: true, + } +} + +// RequestIDWithRequestHeader middleware option +func RequestIDWithRequestHeader(v ...string) RequestIDOption { + return func(o *RequestIDOptions) { + o.RequestHeader = append(o.RequestHeader, v...) } } @@ -40,6 +53,13 @@ func RequestIDWithResponseHeader(v string) RequestIDOption { } } +// RequestIDWithSetRequestHeader middleware option +func RequestIDWithSetRequestHeader(v bool) RequestIDOption { + return func(o *RequestIDOptions) { + o.SetRequestHeader = v + } +} + // RequestIDWithSetResponseHeader middleware option func RequestIDWithSetResponseHeader(v bool) RequestIDOption { return func(o *RequestIDOptions) { @@ -54,6 +74,13 @@ func RequestIDWithGenerator(v RequestIDGenerator) RequestIDOption { } } +// RequestIDWithSetContext middleware option +func RequestIDWithSetContext(v bool) RequestIDOption { + return func(o *RequestIDOptions) { + o.SetContext = v + } +} + // RequestID middleware func RequestID(opts ...RequestIDOption) Middleware { options := GetDefaultRequestIDOptions() @@ -69,12 +96,22 @@ func RequestID(opts ...RequestIDOption) Middleware { func RequestIDWithOptions(opts RequestIDOptions) Middleware { return func(l *zap.Logger, name string, next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - requestID := r.Header.Get(opts.ResponseHeader) + var requestID string + for _, value := range opts.RequestHeader { + if requestID = r.Header.Get(value); requestID != "" { + break + } + } if requestID == "" { requestID = opts.Generator() + } + if requestID != "" && opts.SetContext { + r = r.WithContext(keelhttpcontext.SetRequestID(r.Context(), requestID)) + } + if requestID != "" && opts.SetRequestHeader { r.Header.Set(opts.ResponseHeader, requestID) } - if opts.SetResponseHeader { + if requestID != "" && opts.SetResponseHeader { if value := w.Header().Get(opts.ResponseHeader); value == "" { w.Header().Add(opts.ResponseHeader, requestID) } diff --git a/net/http/middleware/sessionid.go b/net/http/middleware/sessionid.go index a02da12..3d6a336 100644 --- a/net/http/middleware/sessionid.go +++ b/net/http/middleware/sessionid.go @@ -9,6 +9,7 @@ import ( "go.uber.org/zap" keelhttp "github.com/foomo/keel/net/http" + keelhttpcontext "github.com/foomo/keel/net/http/context" "github.com/foomo/keel/net/http/cookie" httputils "github.com/foomo/keel/utils/net/http" ) @@ -33,8 +34,6 @@ type ( ) const ( - ContextKeySessionID contextKey = "sessionId" - DefaultSessionIDCookieName = "keel-session" ) @@ -134,7 +133,7 @@ func SessionIDWithOptions(opts SessionIDOptions) Middleware { r.Header.Set(opts.Header, sessionID) } if sessionID != "" && opts.SetContext { - r = r.WithContext(context.WithValue(r.Context(), ContextKeySessionID, sessionID)) + r = r.WithContext(keelhttpcontext.SetSessionID(r.Context(), sessionID)) } next.ServeHTTP(w, r) }) @@ -143,7 +142,7 @@ func SessionIDWithOptions(opts SessionIDOptions) Middleware { // SessionIDFromContext helper func SessionIDFromContext(ctx context.Context) string { - if value, ok := ctx.Value(ContextKeySessionID).(string); ok { + if value, ok := keelhttpcontext.GetSessionID(ctx); ok { return value } return "" diff --git a/net/http/middleware/trackingid.go b/net/http/middleware/trackingid.go index 5dc7e75..cdcccde 100644 --- a/net/http/middleware/trackingid.go +++ b/net/http/middleware/trackingid.go @@ -9,6 +9,7 @@ import ( "go.uber.org/zap" keelhttp "github.com/foomo/keel/net/http" + keelhttpcontext "github.com/foomo/keel/net/http/context" "github.com/foomo/keel/net/http/cookie" httputils "github.com/foomo/keel/utils/net/http" ) @@ -33,8 +34,6 @@ type ( ) const ( - ContextKeyTrackingID contextKey = "tracking" - DefaultTrackingIDCookieName = "keel-tracking" ) @@ -134,7 +133,7 @@ func TrackingIDWithOptions(opts TrackingIDOptions) Middleware { r.Header.Set(opts.Header, tackingID) } if tackingID != "" && opts.SetContext { - r = r.WithContext(context.WithValue(r.Context(), ContextKeyTrackingID, tackingID)) + r = r.WithContext(keelhttpcontext.SetTrackingID(r.Context(), tackingID)) } next.ServeHTTP(w, r) }) @@ -143,7 +142,7 @@ func TrackingIDWithOptions(opts TrackingIDOptions) Middleware { // TrackingIDFromContext helper func TrackingIDFromContext(ctx context.Context) string { - if value, ok := ctx.Value(ContextKeyTrackingID).(string); ok { + if value, ok := keelhttpcontext.GetTrackingID(ctx); ok { return value } return "" diff --git a/net/http/roundtripware/requestid.go b/net/http/roundtripware/requestid.go new file mode 100644 index 0000000..4568427 --- /dev/null +++ b/net/http/roundtripware/requestid.go @@ -0,0 +1,51 @@ +package roundtripware + +import ( + "net/http" + + "go.uber.org/zap" + + keelhttpcontext "github.com/foomo/keel/net/http/context" +) + +type ( + RequestIDOptions struct { + Header string + } + RequestIDOption func(*RequestIDOptions) + RequestIDGenerator func() string +) + +// GetDefaultRequestIDOptions returns the default options +func GetDefaultRequestIDOptions() RequestIDOptions { + return RequestIDOptions{ + Header: "X-Request-ID", + } +} + +// RequestIDWithHeader middleware option +func RequestIDWithHeader(v string) RequestIDOption { + return func(o *RequestIDOptions) { + o.Header = v + } +} + +// RequestID returns a RoundTripper which prints out the request & response object +func RequestID(opts ...RequestIDOption) RoundTripware { + o := GetDefaultRequestIDOptions() + for _, opt := range opts { + if opt != nil { + opt(&o) + } + } + return func(l *zap.Logger, next Handler) Handler { + return func(r *http.Request) (*http.Response, error) { + if value := r.Header.Get(o.Header); value == "" { + if value, ok := keelhttpcontext.GetRequestID(r.Context()); ok && value != "" { + r.Header.Set(o.Header, value) + } + } + return next(r) + } + } +} From e6596bf2d184eb031b9ccb9403956a60d373a37c Mon Sep 17 00:00:00 2001 From: Kevin Franklin Kim Date: Tue, 26 Jul 2022 08:49:31 +0200 Subject: [PATCH 02/14] feat: retrieve values from context --- example/roundtripwares/requestid/main.go | 6 +++++- log/with.go | 10 ++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/example/roundtripwares/requestid/main.go b/example/roundtripwares/requestid/main.go index d38af38..3510784 100644 --- a/example/roundtripwares/requestid/main.go +++ b/example/roundtripwares/requestid/main.go @@ -4,6 +4,7 @@ import ( "net/http" "github.com/foomo/keel" + "github.com/foomo/keel/log" keelhttp "github.com/foomo/keel/net/http" "github.com/foomo/keel/net/http/middleware" "github.com/foomo/keel/net/http/roundtripware" @@ -25,6 +26,7 @@ func main() { // create demo service svs := http.NewServeMux() svs.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + l := log.WithHTTPRequest(l, r) // send internal http request if req, err := http.NewRequestWithContext(r.Context(), http.MethodGet, "http://localhost:8080/internal", nil); err != nil { httputils.InternalServerError(l, w, r, err) @@ -35,10 +37,12 @@ func main() { } else { w.WriteHeader(http.StatusOK) _, _ = w.Write([]byte(r.Header.Get(keelhttp.HeaderXRequestID) + " - " + resp.Header.Get(keelhttp.HeaderXRequestID))) + log.WithHTTPRequestOut(l, req).Info("sent internal request") } }) svs.HandleFunc("/internal", func(w http.ResponseWriter, r *http.Request) { - l.Info("internal: " + r.Header.Get(keelhttp.HeaderXRequestID)) + l := log.WithHTTPRequest(l, r) + l.Info("handled internal request") w.WriteHeader(http.StatusOK) }) diff --git a/log/with.go b/log/with.go index 6967579..f3a6a9e 100644 --- a/log/with.go +++ b/log/with.go @@ -9,6 +9,8 @@ import ( "go.opentelemetry.io/otel/trace" "go.uber.org/zap" + + keelhttpcontext "github.com/foomo/keel/net/http/context" ) func With(l *zap.Logger, fields ...zap.Field) *zap.Logger { @@ -54,9 +56,13 @@ func WithHTTPRequest(l *zap.Logger, r *http.Request) *zap.Logger { } if id := r.Header.Get("X-Request-ID"); id != "" { fields = append(fields, FHTTPRequestID(id)) + } else if id, ok := keelhttpcontext.GetRequestID(r.Context()); ok && id != "" { + fields = append(fields, FHTTPRequestID(id)) } if id := r.Header.Get("X-Session-ID"); id != "" { fields = append(fields, FHTTPSessionID(id)) + } else if id, ok := keelhttpcontext.GetSessionID(r.Context()); ok && id != "" { + fields = append(fields, FHTTPSessionID(id)) } if r.TLS != nil { fields = append(fields, FHTTPScheme("https")) @@ -106,9 +112,13 @@ func WithHTTPRequestOut(l *zap.Logger, r *http.Request) *zap.Logger { } if id := r.Header.Get("X-Request-ID"); id != "" { fields = append(fields, FHTTPRequestID(id)) + } else if id, ok := keelhttpcontext.GetRequestID(r.Context()); ok && id != "" { + fields = append(fields, FHTTPRequestID(id)) } if id := r.Header.Get("X-Session-ID"); id != "" { fields = append(fields, FHTTPSessionID(id)) + } else if id, ok := keelhttpcontext.GetSessionID(r.Context()); ok && id != "" { + fields = append(fields, FHTTPSessionID(id)) } if r.TLS != nil { fields = append(fields, FHTTPScheme("https")) From 03be454c91f29279b7e44f3ff35ef7b4c27d3c72 Mon Sep 17 00:00:00 2001 From: Kevin Franklin Kim Date: Tue, 26 Jul 2022 12:34:52 +0200 Subject: [PATCH 03/14] fix: close body --- example/roundtripwares/requestid/main.go | 1 + 1 file changed, 1 insertion(+) diff --git a/example/roundtripwares/requestid/main.go b/example/roundtripwares/requestid/main.go index 3510784..9788c4e 100644 --- a/example/roundtripwares/requestid/main.go +++ b/example/roundtripwares/requestid/main.go @@ -35,6 +35,7 @@ func main() { httputils.InternalServerError(l, w, r, err) return } else { + defer resp.Body.Close() w.WriteHeader(http.StatusOK) _, _ = w.Write([]byte(r.Header.Get(keelhttp.HeaderXRequestID) + " - " + resp.Header.Get(keelhttp.HeaderXRequestID))) log.WithHTTPRequestOut(l, req).Info("sent internal request") From 596f43e8412044393fe346c59f051ccf8e0776f1 Mon Sep 17 00:00:00 2001 From: Kevin Franklin Kim Date: Fri, 12 Aug 2022 15:58:56 +0200 Subject: [PATCH 04/14] feat: fix lint errors --- .golangci.yml | 159 +++++++++++++++--- example/config/main.go | 2 +- example/errors/main.go | 6 +- example/middlewares/jwtfromcookie/main.go | 7 +- example/middlewares/jwtfromtoken/main.go | 7 +- example/persistence/mongo/repository/dummy.go | 2 +- example/persistence/mongo/store/codec.go | 10 +- example/persistence/mongo/store/entity.go | 2 +- example/remoteconfig/main.go | 8 +- example/roundtripwares/logger/client.go | 4 +- example/roundtripwares/requestid/main.go | 14 +- example/telemetry/main.go | 2 +- integration/temporal/client.go | 2 +- integration/temporal/metrics.go | 1 - jwt/jwtkey.go | 6 +- log/fields_http.go | 11 +- log/with.go | 24 ++- net/gotsrpc/errors.go | 8 +- net/http/context/sessionid.go | 4 +- net/http/header.go | 2 +- net/http/middleware/recover.go | 2 +- net/http/roundtripware/dump.go | 6 +- net/http/roundtripware/helper.go | 3 +- net/http/roundtripware/metric.go | 8 +- net/http/roundtripware/recover.go | 6 +- net/http/roundtripware/roundtripware.go | 2 +- net/http/roundtripware/sessionid.go | 51 ++++++ net/http/roundtripware/trackingid.go | 51 ++++++ server_test.go | 6 +- servicehttp.go | 3 +- servicehttphealthz.go | 18 +- test/client.go | 4 +- test/log.go | 4 +- 33 files changed, 350 insertions(+), 95 deletions(-) create mode 100644 net/http/roundtripware/sessionid.go create mode 100644 net/http/roundtripware/trackingid.go diff --git a/.golangci.yml b/.golangci.yml index 4040c12..0e47575 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -26,32 +26,139 @@ linters-settings: settings: hugeParam: sizeThreshold: 512 + # https://golangci-lint.run/usage/linters/#gosec + gosec: + config: + G306: "0700" + excludes: + - G101 # Potential hardcoded credentials + - G102 # Bind to all interfaces + - G112 # Potential slowloris attack + - G401 # Detect the usage of DES, RC4, MD5 or SHA1 + - G402 # Look for bad TLS connection settings + - G404 # Insecure random number source (rand) + - G501 # Import blocklist: crypto/md5 + - G505 # Import blocklist: crypto/sha1 linters: enable: - - bodyclose - - dogsled - - exportloopref - # - gci TODO re-enable - - goconst - - gocritic - # - gocyclo - - gofmt - - goprintffuncname - #- gosec - - ifshort - - misspell - - nakedret - - noctx - - nolintlint - - prealloc - - revive - - promlinter - - rowserrcheck - - sqlclosecheck - - stylecheck - - thelper - - tparallel - - unconvert - - unparam - - whitespace +# - bodyclose +# - dogsled +# - exportloopref +# # - gci TODO re-enable +# - goconst +# - gocritic +# # - gocyclo +# - gofmt +# - goprintffuncname +# #- gosec +# - ifshort +# - misspell +# - nakedret +# - noctx +# - nolintlint +# - prealloc +# - revive +# - promlinter +# - rowserrcheck +# - sqlclosecheck +# - stylecheck +# - thelper +# - tparallel +# - unconvert +# - unparam +# - whitespace + + # Enabled by default linters: + - deadcode # Finds unused code [fast: false, 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] + - gosimple # (megacheck): Linter for Go source code that specializes in simplifying code [fast: false, auto-fix: false] + - govet # (vet, vetshadow): Vet examines Go source code and reports suspicious constructs, such as Printf calls whose arguments do not align with the format string [fast: false, auto-fix: false] + - ineffassign # Detects when assignments to existing variables are not used [fast: true, auto-fix: false] + - staticcheck # (megacheck): It's a set of rules from staticcheck. It's not the same thing as the staticcheck binary. The author of staticcheck doesn't support or approve the use of staticcheck as a library inside golangci-lint. [fast: false, auto-fix: false] + - typecheck # Like the front-end of a Go compiler, parses and type-checks Go code [fast: false, auto-fix: false] + - unused # (megacheck): Checks Go code for unused constants, variables, functions and types [fast: false, auto-fix: false] + - varcheck # Finds unused global variables and constants [fast: false, auto-fix: false] + + # Disabled by default linters: + - asasalint # check for pass []any as any in variadic func(...any) [fast: false, auto-fix: false] + - asciicheck # Simple linter to check that your code does not contain non-ASCII identifiers [fast: true, auto-fix: false] + - bidichk # Checks for dangerous unicode character sequences [fast: true, auto-fix: false] + - bodyclose # checks whether HTTP response body is closed successfully [fast: false, auto-fix: false] + #- containedctx # containedctx is a linter that detects struct contained context.Context field [fast: true, auto-fix: false] + #- contextcheck # check the function whether to use a non-inherited context [fast: false, auto-fix: false] + #- cyclop # checks function and package cyclomatic complexity [fast: false, auto-fix: false] + - decorder # check declaration order and count of types, constants, variables and functions [fast: true, auto-fix: false] + - depguard # Go linter that checks if package imports are in a list of acceptable packages [fast: true, auto-fix: false] + - dogsled # Checks assignments with too many blank identifiers (e.g. x, _, _, _, := f()) [fast: true, auto-fix: false] + #- dupl # Tool for code clone detection [fast: true, auto-fix: false] + - durationcheck # check for two durations multiplied together [fast: false, auto-fix: false] + - errchkjson # Checks types passed to the json encoding functions. Reports unsupported types and optionally reports occasions, where the check for the returned error can be omitted. [fast: false, auto-fix: false] + - errname # Checks that sentinel errors are prefixed with the `Err` and error types are suffixed with the `Error`. [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] + - execinquery # execinquery is a linter about query string checker in Query function which reads your Go src files and warning it finds [fast: false, auto-fix: false] + - exhaustive # check exhaustiveness of enum switch statements [fast: false, auto-fix: false] + #- exhaustruct # Checks if all structure fields are initialized [fast: false, auto-fix: false] + - exportloopref # checks for pointers to enclosing loop variables [fast: false, auto-fix: false] + - forbidigo # Forbids identifiers [fast: true, auto-fix: false] + - forcetypeassert # finds forced type assertions [fast: true, auto-fix: false] + #- funlen # Tool for detection of long functions [fast: true, auto-fix: false] + #- gci # Gci controls golang package import order and makes it always deterministic. [fast: true, auto-fix: false] + #- gochecknoglobals # check that no global variables exist [fast: true, auto-fix: false] + #- gochecknoinits # Checks that no init functions are present in Go code [fast: true, auto-fix: false] + #- gocognit # Computes and checks the cognitive complexity of functions [fast: true, auto-fix: false] + - goconst # Finds repeated strings that could be replaced by a constant [fast: true, auto-fix: false] + - gocritic # Provides diagnostics that check for bugs, performance and style issues. [fast: false, auto-fix: false] + #- gocyclo # Computes and checks the cyclomatic complexity of functions [fast: true, auto-fix: false] + #- godot # Check if comments end in a period [fast: true, auto-fix: true] + #- godox # Tool for detection of FIXME, TODO and other comment keywords [fast: true, auto-fix: false] + - goerr113 # Golang linter to check the errors handling expressions [fast: false, auto-fix: false] + - gofmt # Gofmt checks whether code was gofmt-ed. By default this tool runs with -s option to check for code simplification [fast: true, auto-fix: true] + #- gofumpt # Gofumpt checks whether code was gofumpt-ed. [fast: true, auto-fix: true] + - goheader # Checks is file header matches to pattern [fast: true, auto-fix: false] + - goimports # In addition to fixing imports, goimports also formats your code in the same style as gofmt. [fast: true, auto-fix: true] + #- gomnd # An analyzer to detect magic numbers. [fast: true, auto-fix: false] + #- gomoddirectives # Manage the use of 'replace', 'retract', and 'excludes' directives in go.mod. [fast: true, auto-fix: false] + - gomodguard # Allow and block list linter for direct Go module dependencies. This is different from depguard where there are different block types for example version constraints and module recommendations. [fast: true, auto-fix: false] + - goprintffuncname # Checks that printf-like functions are named with `f` at the end [fast: true, auto-fix: false] + - gosec # (gas): Inspects source code for security problems [fast: false, auto-fix: false] + - grouper # An analyzer to analyze expression groups. [fast: true, auto-fix: false] + - importas # Enforces consistent import aliases [fast: false, auto-fix: false] + #- ireturn # Accept Interfaces, Return Concrete Types [fast: false, auto-fix: false] + #- lll # Reports long lines [fast: true, auto-fix: false] + - maintidx # maintidx measures the maintainability index of each function. [fast: true, auto-fix: false] + - makezero # Finds slice declarations with non-zero initial length [fast: false, auto-fix: false] + - misspell # Finds commonly misspelled English words in comments [fast: true, auto-fix: true] + - nakedret # Finds naked returns in functions greater than a specified function length [fast: true, auto-fix: false] + #- nestif # Reports deeply nested if statements [fast: true, auto-fix: false] + - nilerr # Finds the code that returns nil even if it checks that the error is not nil. [fast: false, auto-fix: false] + - nilnil # Checks that there is no simultaneous return of `nil` error and an invalid value. [fast: false, auto-fix: false] + #- nlreturn # nlreturn checks for a new line before return and branch statements to increase code clarity [fast: true, auto-fix: false] + - noctx # noctx finds sending http request without context.Context [fast: false, auto-fix: false] + - nolintlint # Reports ill-formed or insufficient nolint directives [fast: true, auto-fix: false] + - nonamedreturns # Reports all named returns [fast: false, auto-fix: false] + - nosnakecase # nosnakecase is a linter that detects snake case of variable naming and function name. [fast: true, auto-fix: false] + - nosprintfhostport # Checks for misuse of Sprintf to construct a host with port in a URL. [fast: true, auto-fix: false] + #- paralleltest # paralleltest detects missing usage of t.Parallel() method in your Go test [fast: false, auto-fix: false] + - prealloc # Finds slice declarations that could potentially be pre-allocated [fast: true, auto-fix: false] + - predeclared # find code that shadows one of Go's predeclared identifiers [fast: true, auto-fix: false] + - promlinter # Check Prometheus metrics naming via promlint [fast: true, auto-fix: false] + - revive # Fast, configurable, extensible, flexible, and beautiful linter for Go. Drop-in replacement of golint. [fast: false, auto-fix: false] + - rowserrcheck # checks whether Err of rows is checked successfully [fast: false, auto-fix: false] + - sqlclosecheck # Checks that sql.Rows and sql.Stmt are closed. [fast: false, auto-fix: false] + - structcheck # Finds unused struct fields [fast: false, auto-fix: false] + - stylecheck # Stylecheck is a replacement for golint [fast: false, auto-fix: false] + - tagliatelle # Checks the struct tags. [fast: true, auto-fix: false] + - tenv # tenv is analyzer that detects using os.Setenv instead of t.Setenv since Go1.17 [fast: false, auto-fix: false] + - testpackage # linter that makes you use a separate _test package [fast: true, auto-fix: false] + - thelper # thelper detects golang test helpers without t.Helper() call and checks the consistency of test helpers [fast: false, auto-fix: false] + - tparallel # tparallel detects inappropriate usage of t.Parallel() method in your Go test codes [fast: false, auto-fix: false] + - unconvert # Remove unnecessary type conversions [fast: false, auto-fix: false] + - unparam # Reports unused function parameters [fast: false, auto-fix: false] + - usestdlibvars # A linter that detect the possibility to use variables/constants from the Go standard library. [fast: true, auto-fix: false] + #- varnamelen # checks that the length of a variable's name matches its scope [fast: false, auto-fix: false] + - wastedassign # wastedassign finds wasted assignment statements. [fast: false, auto-fix: false] + - whitespace # Tool for detection of leading and trailing whitespace [fast: true, auto-fix: true] + #- wrapcheck # Checks that errors returned from external packages are wrapped [fast: false, auto-fix: false] + #- wsl # Whitespace Linter - Forces you to use empty lines! [fast: true, auto-fix: false] + diff --git a/example/config/main.go b/example/config/main.go index 6a6fe94..bf89a65 100644 --- a/example/config/main.go +++ b/example/config/main.go @@ -19,7 +19,7 @@ type ( Bool bool `yaml:"bool"` String string `yaml:"string"` CamelCaseString string `yaml:"camelCaseString"` - SnakeCaseString string `yaml:"snake_case_string"` + SnakeCaseString string `yaml:"snake_case_string"` //nolint:tagliatelle } Config struct { Int int `yaml:"int"` diff --git a/example/errors/main.go b/example/errors/main.go index cf0ccc7..7412360 100644 --- a/example/errors/main.go +++ b/example/errors/main.go @@ -18,12 +18,12 @@ func main() { err2 := keelerrors.NewWrappedError(err1, ErrTwo) if errors.Is(err1, ErrOne) { - fmt.Println("err1 = ErrOne") + fmt.Println("err1 = ErrOne") //nolint:forbidigo } if errors.Is(err2, ErrTwo) { - fmt.Println("err2 = ErrTwo") + fmt.Println("err2 = ErrTwo") //nolint:forbidigo } if errors.Is(err2, ErrOne) { - fmt.Println("err2 = ErrOne") + fmt.Println("err2 = ErrOne") //nolint:forbidigo } } diff --git a/example/middlewares/jwtfromcookie/main.go b/example/middlewares/jwtfromcookie/main.go index 6ce819d..d4b6051 100644 --- a/example/middlewares/jwtfromcookie/main.go +++ b/example/middlewares/jwtfromcookie/main.go @@ -50,9 +50,10 @@ func main() { svs := http.NewServeMux() svs.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // retrieve from context - claims := r.Context().Value(contextKey).(*CustomClaims) - w.WriteHeader(http.StatusOK) - _, _ = w.Write([]byte(claims.Name)) + if claims, ok := r.Context().Value(contextKey).(*CustomClaims); ok { + w.WriteHeader(http.StatusOK) + _, _ = w.Write([]byte(claims.Name)) + } }) svr.AddService( diff --git a/example/middlewares/jwtfromtoken/main.go b/example/middlewares/jwtfromtoken/main.go index 7e12ba6..0876339 100644 --- a/example/middlewares/jwtfromtoken/main.go +++ b/example/middlewares/jwtfromtoken/main.go @@ -48,9 +48,10 @@ func main() { svs := http.NewServeMux() svs.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // retrieve from context - claims := r.Context().Value(contextKey).(*CustomClaims) - w.WriteHeader(http.StatusOK) - _, _ = w.Write([]byte(claims.Name)) + if claims, ok := r.Context().Value(contextKey).(*CustomClaims); ok { + w.WriteHeader(http.StatusOK) + _, _ = w.Write([]byte(claims.Name)) + } }) svs.HandleFunc("/token", func(w http.ResponseWriter, r *http.Request) { if token, err := jwtInst.GetSignedToken(CustomClaims{ diff --git a/example/persistence/mongo/repository/dummy.go b/example/persistence/mongo/repository/dummy.go index 98e22f2..f49a7b9 100644 --- a/example/persistence/mongo/repository/dummy.go +++ b/example/persistence/mongo/repository/dummy.go @@ -30,7 +30,7 @@ func (r *DummyRepository) Get(ctx context.Context, id string, opts ...*options.F } // Upsert entity -func (r *DummyRepository) Upsert(ctx context.Context, entity *store.Dummy) (err error) { +func (r *DummyRepository) Upsert(ctx context.Context, entity *store.Dummy) error { if err := r.collection.Upsert(ctx, entity.GetID(), entity); err != nil { return err } diff --git a/example/persistence/mongo/store/codec.go b/example/persistence/mongo/store/codec.go index ebdf0df..7ca2a19 100644 --- a/example/persistence/mongo/store/codec.go +++ b/example/persistence/mongo/store/codec.go @@ -5,6 +5,7 @@ import ( "reflect" "time" + "github.com/pkg/errors" "go.mongodb.org/mongo-driver/bson/bsoncodec" "go.mongodb.org/mongo-driver/bson/bsonrw" "go.mongodb.org/mongo-driver/bson/bsontype" @@ -20,7 +21,10 @@ func (d *DateTimeCodec) EncodeValue(_ bsoncodec.EncodeContext, vw bsonrw.ValueWr if !val.IsValid() || val.Type() != TDateTime { return bsoncodec.ValueEncoderError{Name: "DateTimeEncodeValue", Types: []reflect.Type{TDateTime}, Received: val} } - td := val.Interface().(DateTime) + td, ok := val.Interface().(DateTime) + if !ok { + return errors.New("failed to encode date time") + } tt, err := td.Time() if err != nil { return bsoncodec.ValueEncoderError{Name: "DateTimeEncodeValue", Types: []reflect.Type{TDateTime}, Received: val} @@ -34,7 +38,7 @@ func (d *DateTimeCodec) DecodeValue(_ bsoncodec.DecodeContext, vr bsonrw.ValueRe } var dateTimeVal DateTime - switch t := vr.Type(); t { + switch t := vr.Type(); t { //nolint:exhaustive case bsontype.DateTime: dt, err := vr.ReadDateTime() if err != nil { @@ -48,7 +52,7 @@ func (d *DateTimeCodec) DecodeValue(_ bsoncodec.DecodeContext, vr bsonrw.ValueRe } dateTimeVal = DateTime(decimalStr) default: - return fmt.Errorf("cannot decode %v into a DateTime", t) + return fmt.Errorf("cannot decode %v into a DateTime", t) //nolint:goerr113 } val.Set(reflect.ValueOf(dateTimeVal)) diff --git a/example/persistence/mongo/store/entity.go b/example/persistence/mongo/store/entity.go index eac6b40..dbb0de6 100644 --- a/example/persistence/mongo/store/entity.go +++ b/example/persistence/mongo/store/entity.go @@ -19,7 +19,7 @@ var ( // Entity type type Entity struct { ID string `json:"id" bson:"id" yaml:"id"` - BsonID primitive.ObjectID `json:"_id,omitempty" bson:"_id,omitempty" yaml:"_id,omitempty"` + BsonID primitive.ObjectID `json:"_id,omitempty" bson:"_id,omitempty" yaml:"_id,omitempty"` //nolint:tagliatelle } func NewEntity(id string) Entity { diff --git a/example/remoteconfig/main.go b/example/remoteconfig/main.go index 97aab7d..6cdddc9 100644 --- a/example/remoteconfig/main.go +++ b/example/remoteconfig/main.go @@ -23,11 +23,11 @@ func main() { // create config reader fooFn := config.GetString(c, "foo", "default_foo") - fmt.Println("initial foo:", fooFn()) + fmt.Println("initial foo:", fooFn()) //nolint:forbidigo // watch changes config.WatchString(svr.CancelContext(), fooFn, func(s string) { - fmt.Println("change foo:", fooFn()) + fmt.Println("change foo:", fooFn()) //nolint:forbidigo }) ch := make(chan string) @@ -36,7 +36,7 @@ func main() { go func(ch chan string) { for { value := <-ch - fmt.Println("channel foo:", value) + fmt.Println("channel foo:", value) //nolint:forbidigo } }(ch) @@ -44,7 +44,7 @@ func main() { svr.AddService( keel.NewServiceHTTP(l, "demo", "localhost:8080", http.HandlerFunc( func(w http.ResponseWriter, r *http.Request) { - fmt.Println("current foo:", fooFn()) + fmt.Println("current foo:", fooFn()) //nolint:forbidigo }), ), ) diff --git a/example/roundtripwares/logger/client.go b/example/roundtripwares/logger/client.go index 86dce04..fc448d4 100644 --- a/example/roundtripwares/logger/client.go +++ b/example/roundtripwares/logger/client.go @@ -17,9 +17,9 @@ func client() { var err error - _, err = client.Get("http://localhost:8080") // nolint + _, err = client.Get("http://localhost:8080") //nolint:all log.Must(l, err, "failed to retrieve response") - _, err = client.Get("http://localhost:8080/404") // nolint + _, err = client.Get("http://localhost:8080/404") //nolint:all log.Must(l, err, "failed to retrieve response") } diff --git a/example/roundtripwares/requestid/main.go b/example/roundtripwares/requestid/main.go index 9788c4e..13e315c 100644 --- a/example/roundtripwares/requestid/main.go +++ b/example/roundtripwares/requestid/main.go @@ -20,14 +20,17 @@ func main() { httpClient := keelhttp.NewHTTPClient( keelhttp.HTTPClientWithRoundTripware(l, roundtripware.RequestID(), + roundtripware.SessionID(), + roundtripware.TrackingID(), ), ) // create demo service svs := http.NewServeMux() + + // send internal http request svs.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - l := log.WithHTTPRequest(l, r) - // send internal http request + // send request if req, err := http.NewRequestWithContext(r.Context(), http.MethodGet, "http://localhost:8080/internal", nil); err != nil { httputils.InternalServerError(l, w, r, err) return @@ -37,19 +40,22 @@ func main() { } else { defer resp.Body.Close() w.WriteHeader(http.StatusOK) + log.WithHTTPRequest(l, r).Info("handled request") _, _ = w.Write([]byte(r.Header.Get(keelhttp.HeaderXRequestID) + " - " + resp.Header.Get(keelhttp.HeaderXRequestID))) log.WithHTTPRequestOut(l, req).Info("sent internal request") } }) + // handle internal http request svs.HandleFunc("/internal", func(w http.ResponseWriter, r *http.Request) { - l := log.WithHTTPRequest(l, r) - l.Info("handled internal request") + log.WithHTTPRequest(l, r).Info("handled internal request") w.WriteHeader(http.StatusOK) }) svr.AddService( keel.NewServiceHTTP(l, "demo", "localhost:8080", svs, middleware.RequestID(), + middleware.SessionID(), + middleware.TrackingID(), ), ) diff --git a/example/telemetry/main.go b/example/telemetry/main.go index 96b5d3b..fa4f37d 100644 --- a/example/telemetry/main.go +++ b/example/telemetry/main.go @@ -85,7 +85,7 @@ func main() { log.Must(l, err, "failed to create up down meter") svs.HandleFunc("/histogram", func(w http.ResponseWriter, r *http.Request) { - histogram.Record(r.Context(), int64(rand.Int()), attribute.String("key", "value")) // nolint:gosec + histogram.Record(r.Context(), int64(rand.Int()), attribute.String("key", "value")) w.WriteHeader(http.StatusOK) _, _ = w.Write([]byte("OK!")) }) diff --git a/integration/temporal/client.go b/integration/temporal/client.go index d1ee963..1972580 100644 --- a/integration/temporal/client.go +++ b/integration/temporal/client.go @@ -84,7 +84,7 @@ func NewClient(ctx context.Context, endpoint string, opts ...ClientOption) (clie } } else if err != nil { return nil, errors.Wrap(err, "failed to retrieve temporal namespace info") - } else if nsInfo := ns.GetNamespaceInfo(); nsInfo.State != enums.NAMESPACE_STATE_REGISTERED { + } else if nsInfo := ns.GetNamespaceInfo(); nsInfo.State != enums.NAMESPACE_STATE_REGISTERED { //nolint:nosnakecase return nil, errors.New("Could not register namespace due to existing state: " + nsInfo.State.String()) } else if err := nsc.Update(ctx, &workflowservice.UpdateNamespaceRequest{ Namespace: o.RegisterNamespace.Namespace, diff --git a/integration/temporal/metrics.go b/integration/temporal/metrics.go index 2a1302b..cf28f4e 100644 --- a/integration/temporal/metrics.go +++ b/integration/temporal/metrics.go @@ -17,7 +17,6 @@ type metricsHandler struct { attr []attribute.KeyValue } -// scope, _ := tally.NewRootScope(opts, time.Second) func NewMetricsHandler(meter metric.Meter) client.MetricsHandler { return metricsHandler{meter: meter} } diff --git a/jwt/jwtkey.go b/jwt/jwtkey.go index 3f71f92..b55d872 100644 --- a/jwt/jwtkey.go +++ b/jwt/jwtkey.go @@ -5,7 +5,7 @@ import ( "crypto/rsa" "crypto/sha256" "encoding/hex" - "io/ioutil" + "os" "strings" "github.com/golang-jwt/jwt" @@ -38,7 +38,7 @@ func NewKeyFromFilenames(publicKeyPemFilename, privateKeyPemFilename string) (Ke // load private key if privateKeyPemFilename != "" { - if bytes, err := ioutil.ReadFile(privateKeyPemFilename); err != nil { + if bytes, err := os.ReadFile(privateKeyPemFilename); err != nil { return Key{}, errors.Wrap(err, "failed to read private key: "+privateKeyPemFilename) } else if key, err := jwt.ParseRSAPrivateKeyFromPEM([]byte(strings.ReplaceAll(string(bytes), `\n`, "\n"))); err != nil { return Key{}, errors.Wrap(err, "failed to parse private key: "+privateKeyPemFilename) @@ -48,7 +48,7 @@ func NewKeyFromFilenames(publicKeyPemFilename, privateKeyPemFilename string) (Ke } // load public key - if v, err := ioutil.ReadFile(publicKeyPemFilename); err != nil { + if v, err := os.ReadFile(publicKeyPemFilename); err != nil { return Key{}, errors.Wrap(err, "failed to read public key: "+publicKeyPemFilename) } else if key, err := jwt.ParseRSAPublicKeyFromPEM([]byte(strings.ReplaceAll(string(v), `\n`, "\n"))); err != nil { return Key{}, errors.Wrap(err, "failed to parse public key: "+publicKeyPemFilename) diff --git a/log/fields_http.go b/log/fields_http.go index e939731..04e7923 100644 --- a/log/fields_http.go +++ b/log/fields_http.go @@ -40,11 +40,14 @@ const ( // HTTPFlavorKey represents the Kind of HTTP protocol used. HTTPFlavorKey = "http_flavor" - // HTTPRequestIDKey represents the HTTP request id if known (e.g from X-Request-ID). + // HTTPRequestIDKey represents the HTTP request id if known (e.g. from X-Request-ID). HTTPRequestIDKey = "http_request_id" - // HTTPSessionIDKey represents the HTTP session id if known (e.g from X-Session-ID). + // HTTPSessionIDKey represents the HTTP session id if known (e.g. from X-Session-ID). HTTPSessionIDKey = "http_session_id" + + // HTTPTrackingIDKey represents the HTTP tracking id if known (e.g. from X-Tracking-ID). + HTTPTrackingIDKey = "http_tracking_id" ) func FHTTPServerName(id string) zap.Field { @@ -59,6 +62,10 @@ func FHTTPSessionID(id string) zap.Field { return zap.String(HTTPSessionIDKey, id) } +func FHTTPTrackingID(id string) zap.Field { + return zap.String(HTTPTrackingIDKey, id) +} + func FHTTPRequestContentLength(bytes int64) zap.Field { return zap.Int64(HTTPRequestContentLengthKey, bytes) } diff --git a/log/with.go b/log/with.go index f3a6a9e..554726b 100644 --- a/log/with.go +++ b/log/with.go @@ -46,7 +46,7 @@ func WithHTTPRequest(l *zap.Logger, r *http.Request) *zap.Logger { FHTTPUserAgent(r.UserAgent()), FHTTPTarget(r.RequestURI), } - + // host if value := r.Header.Get("X-Forwarded-Host"); value != "" { fields = append(fields, FHTTPHost(value)) } else if !r.URL.IsAbs() { @@ -54,21 +54,31 @@ func WithHTTPRequest(l *zap.Logger, r *http.Request) *zap.Logger { } else { fields = append(fields, FHTTPHost(r.URL.Host)) } + // request id if id := r.Header.Get("X-Request-ID"); id != "" { fields = append(fields, FHTTPRequestID(id)) } else if id, ok := keelhttpcontext.GetRequestID(r.Context()); ok && id != "" { fields = append(fields, FHTTPRequestID(id)) } + // session id if id := r.Header.Get("X-Session-ID"); id != "" { fields = append(fields, FHTTPSessionID(id)) } else if id, ok := keelhttpcontext.GetSessionID(r.Context()); ok && id != "" { fields = append(fields, FHTTPSessionID(id)) } + // tracking id + if id := r.Header.Get("X-Tracking-ID"); id != "" { + fields = append(fields, FHTTPTrackingID(id)) + } else if id, ok := keelhttpcontext.GetTrackingID(r.Context()); ok && id != "" { + fields = append(fields, FHTTPTrackingID(id)) + } + // schema if r.TLS != nil { fields = append(fields, FHTTPScheme("https")) } else { fields = append(fields, FHTTPScheme("http")) } + // flavor if r.ProtoMajor == 1 { fields = append(fields, FHTTPFlavor(fmt.Sprintf("1.%d", r.ProtoMinor))) } else if r.ProtoMajor == 2 { @@ -106,25 +116,35 @@ func WithHTTPRequestOut(l *zap.Logger, r *http.Request) *zap.Logger { FHTTPMethod(r.Method), FHTTPTarget(r.URL.Path), } - + // host if r.URL.Host != "" { fields = append(fields, FHTTPHost(r.URL.Host)) } + // request id if id := r.Header.Get("X-Request-ID"); id != "" { fields = append(fields, FHTTPRequestID(id)) } else if id, ok := keelhttpcontext.GetRequestID(r.Context()); ok && id != "" { fields = append(fields, FHTTPRequestID(id)) } + // session id if id := r.Header.Get("X-Session-ID"); id != "" { fields = append(fields, FHTTPSessionID(id)) } else if id, ok := keelhttpcontext.GetSessionID(r.Context()); ok && id != "" { fields = append(fields, FHTTPSessionID(id)) } + // tracking id + if id := r.Header.Get("X-Tracking-ID"); id != "" { + fields = append(fields, FHTTPTrackingID(id)) + } else if id, ok := keelhttpcontext.GetTrackingID(r.Context()); ok && id != "" { + fields = append(fields, FHTTPTrackingID(id)) + } + // schema if r.TLS != nil { fields = append(fields, FHTTPScheme("https")) } else { fields = append(fields, FHTTPScheme("http")) } + // flavor if r.ProtoMajor == 1 { fields = append(fields, FHTTPFlavor(fmt.Sprintf("1.%d", r.ProtoMinor))) } else if r.ProtoMajor == 2 { diff --git a/net/gotsrpc/errors.go b/net/gotsrpc/errors.go index 882f97d..6105d64 100644 --- a/net/gotsrpc/errors.go +++ b/net/gotsrpc/errors.go @@ -5,9 +5,9 @@ type Error string // Common errors const ( - ErrorNotFound Error = "notFound" - ErrorForbidden Error = "forbidden" - ErrorPermissionDenied Error = "permissionDenied" + ErrorNotFound Error = "notFound" //nolint:errname + ErrorForbidden Error = "forbidden" //nolint:errname + ErrorPermissionDenied Error = "permissionDenied" //nolint:errname ) // NewError returns a pointer error @@ -19,7 +19,7 @@ func NewError(e Error) *Error { func (e *Error) Is(err error) bool { if e == nil || err == nil { return false - } else if v, ok := err.(*Error); ok && v != nil { + } else if v, ok := err.(*Error); ok && v != nil { //nolint:errorlint return e.Error() == v.Error() } return false diff --git a/net/http/context/sessionid.go b/net/http/context/sessionid.go index 40601b4..f713c63 100644 --- a/net/http/context/sessionid.go +++ b/net/http/context/sessionid.go @@ -14,6 +14,6 @@ func GetSessionID(ctx context.Context) (string, bool) { } } -func SetSessionID(ctx context.Context, requestID string) context.Context { - return context.WithValue(ctx, ContextKeySessionID, requestID) +func SetSessionID(ctx context.Context, sessionID string) context.Context { + return context.WithValue(ctx, ContextKeySessionID, sessionID) } diff --git a/net/http/header.go b/net/http/header.go index 6b6d769..1524c12 100644 --- a/net/http/header.go +++ b/net/http/header.go @@ -61,7 +61,7 @@ const ( HeaderXFrameOptions = "X-Frame-Options" HeaderContentSecurityPolicy = "Content-Security-Policy" HeaderContentSecurityPolicyReportOnly = "Content-Security-Policy-Report-Only" - HeaderXCSRFToken = "X-CSRF-Token" //nolint:gosec + HeaderXCSRFToken = "X-CSRF-Token" HeaderReferrerPolicy = "Referrer-Policy" // Telementry diff --git a/net/http/middleware/recover.go b/net/http/middleware/recover.go index 815f0c7..ae79b22 100644 --- a/net/http/middleware/recover.go +++ b/net/http/middleware/recover.go @@ -51,7 +51,7 @@ func RecoverWithOptions(opts RecoverOptions) Middleware { if e := recover(); e != nil { err, ok := e.(error) if !ok { - err = fmt.Errorf("%v", e) + err = fmt.Errorf("%v", e) //nolint:goerr113 } ll := log.WithError(l, err) if !opts.DisablePrintStack { diff --git a/net/http/roundtripware/dump.go b/net/http/roundtripware/dump.go index 7d7e010..8a11a56 100644 --- a/net/http/roundtripware/dump.go +++ b/net/http/roundtripware/dump.go @@ -44,20 +44,20 @@ func dumpRequest(req *http.Request) { if req.Header != nil && req.Header.Get("Content-Type") != "" { var body string if req.Body, body = readBodyPretty(req.Header.Get("Content-Type"), req.Body); body != "" { - fmt.Printf("Request %s:\n%s\n", req.URL, body) + fmt.Printf("Request %s:\n%s\n", req.URL, body) //nolint:forbidigo } } } func dumpResponse(req *http.Request, resp *http.Response) { if resp == nil { - fmt.Println("Response is nil") + fmt.Println("Response is nil") //nolint:forbidigo return } if resp.Header != nil && resp.Header.Get("Content-Type") != "" { var body string if resp.Body, body = readBodyPretty(resp.Header.Get("Content-Type"), resp.Body); body != "" { - fmt.Printf("Response %s:\n%s\n", req.URL, body) + fmt.Printf("Response %s:\n%s\n", req.URL, body) //nolint:forbidigo } } } diff --git a/net/http/roundtripware/helper.go b/net/http/roundtripware/helper.go index b1dbdec..99ff5f1 100644 --- a/net/http/roundtripware/helper.go +++ b/net/http/roundtripware/helper.go @@ -4,7 +4,6 @@ import ( "bytes" "encoding/json" "io" - "io/ioutil" "strings" "github.com/tinylib/msgp/msgp" @@ -41,5 +40,5 @@ func readBodyPretty(contentType string, original io.ReadCloser) (io.ReadCloser, } // return copy of the original - return ioutil.NopCloser(strings.NewReader(bs.String())), body + return io.NopCloser(strings.NewReader(bs.String())), body } diff --git a/net/http/roundtripware/metric.go b/net/http/roundtripware/metric.go index fb8948d..d446432 100644 --- a/net/http/roundtripware/metric.go +++ b/net/http/roundtripware/metric.go @@ -21,17 +21,17 @@ func Metric(meter metric.Meter, name, description string) RoundTripware { } return func(l *zap.Logger, next Handler) Handler { - return func(req *http.Request) (*http.Response, error) { - ctx, labeler := LabelerFromContext(req.Context()) + return func(r *http.Request) (*http.Response, error) { + ctx, labeler := LabelerFromContext(r.Context()) start := time.Now() - resp, err := next(req.WithContext(ctx)) + resp, err := next(r.WithContext(ctx)) duration := time.Since(start) if err != nil { return resp, err } - attributes := append(labeler.Get(), attribute.String("method", req.Method)) + attributes := append(labeler.Get(), attribute.String("method", r.Method)) if resp != nil { attributes = append(labeler.Get(), attribute.Int("status_code", resp.StatusCode)) diff --git a/net/http/roundtripware/recover.go b/net/http/roundtripware/recover.go index 766e3c4..fd697f0 100644 --- a/net/http/roundtripware/recover.go +++ b/net/http/roundtripware/recover.go @@ -44,12 +44,12 @@ func Recover(opts ...RecoverOption) RoundTripware { // RecoverWithOptions returns a RoundTripper which catches any panics func RecoverWithOptions(opts RecoverOptions) RoundTripware { return func(l *zap.Logger, next Handler) Handler { - return func(req *http.Request) (*http.Response, error) { + return func(r *http.Request) (*http.Response, error) { defer func() { if e := recover(); e != nil { err, ok := e.(error) if !ok { - err = fmt.Errorf("%v", e) + err = fmt.Errorf("%v", e) //nolint:goerr113 } ll := log.WithError(l, err) if !opts.DisablePrintStack { @@ -58,7 +58,7 @@ func RecoverWithOptions(opts RecoverOptions) RoundTripware { ll.Error("recovering from panic") } }() - return next(req) + return next(r) } } } diff --git a/net/http/roundtripware/roundtripware.go b/net/http/roundtripware/roundtripware.go index fbba955..56aa344 100644 --- a/net/http/roundtripware/roundtripware.go +++ b/net/http/roundtripware/roundtripware.go @@ -28,6 +28,6 @@ func NewRoundTripper(l *zap.Logger, parent http.RoundTripper, roundTripwares ... } } -func (rt *RoundTripper) RoundTrip(req *http.Request) (resp *http.Response, err error) { +func (rt *RoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { return rt.handler(req) } diff --git a/net/http/roundtripware/sessionid.go b/net/http/roundtripware/sessionid.go new file mode 100644 index 0000000..ae6abcd --- /dev/null +++ b/net/http/roundtripware/sessionid.go @@ -0,0 +1,51 @@ +package roundtripware + +import ( + "net/http" + + "go.uber.org/zap" + + keelhttpcontext "github.com/foomo/keel/net/http/context" +) + +type ( + SessionIDOptions struct { + Header string + } + SessionIDOption func(*SessionIDOptions) + SessionIDGenerator func() string +) + +// GetDefaultSessionIDOptions returns the default options +func GetDefaultSessionIDOptions() SessionIDOptions { + return SessionIDOptions{ + Header: "X-Session-ID", + } +} + +// SessionIDWithHeader middleware option +func SessionIDWithHeader(v string) SessionIDOption { + return func(o *SessionIDOptions) { + o.Header = v + } +} + +// SessionID returns a RoundTripper which prints out the request & response object +func SessionID(opts ...SessionIDOption) RoundTripware { + o := GetDefaultSessionIDOptions() + for _, opt := range opts { + if opt != nil { + opt(&o) + } + } + return func(l *zap.Logger, next Handler) Handler { + return func(r *http.Request) (*http.Response, error) { + if value := r.Header.Get(o.Header); value == "" { + if value, ok := keelhttpcontext.GetSessionID(r.Context()); ok && value != "" { + r.Header.Set(o.Header, value) + } + } + return next(r) + } + } +} diff --git a/net/http/roundtripware/trackingid.go b/net/http/roundtripware/trackingid.go new file mode 100644 index 0000000..48c1593 --- /dev/null +++ b/net/http/roundtripware/trackingid.go @@ -0,0 +1,51 @@ +package roundtripware + +import ( + "net/http" + + "go.uber.org/zap" + + keelhttpcontext "github.com/foomo/keel/net/http/context" +) + +type ( + TrackingIDOptions struct { + Header string + } + TrackingIDOption func(*TrackingIDOptions) + TrackingIDGenerator func() string +) + +// GetDefaultTrackingIDOptions returns the default options +func GetDefaultTrackingIDOptions() TrackingIDOptions { + return TrackingIDOptions{ + Header: "X-Tracking-ID", + } +} + +// TrackingIDWithHeader middleware option +func TrackingIDWithHeader(v string) TrackingIDOption { + return func(o *TrackingIDOptions) { + o.Header = v + } +} + +// TrackingID returns a RoundTripper which prints out the request & response object +func TrackingID(opts ...TrackingIDOption) RoundTripware { + o := GetDefaultTrackingIDOptions() + for _, opt := range opts { + if opt != nil { + opt(&o) + } + } + return func(l *zap.Logger, next Handler) Handler { + return func(r *http.Request) (*http.Response, error) { + if value := r.Header.Get(o.Header); value == "" { + if value, ok := keelhttpcontext.GetTrackingID(r.Context()); ok && value != "" { + r.Header.Set(o.Header, value) + } + } + return next(r) + } + } +} diff --git a/server_test.go b/server_test.go index f3d0c47..c998dbe 100644 --- a/server_test.go +++ b/server_test.go @@ -3,7 +3,7 @@ package keel_test import ( "bytes" "context" - "io/ioutil" + "io" "net/http" "strings" "syscall" @@ -209,7 +209,7 @@ func (s *KeelTestSuite) httpGet(url string) (int, string, error) { return 0, "", err } else if resp, err := http.DefaultClient.Do(req); err != nil { return 0, "", err - } else if body, err := ioutil.ReadAll(resp.Body); err != nil { + } else if body, err := io.ReadAll(resp.Body); err != nil { return 0, "", err } else if err := resp.Body.Close(); err != nil { return 0, "", err @@ -224,7 +224,7 @@ func (s *KeelTestSuite) httpPut(url, data string) (int, string, error) { return 0, "", err } else if resp, err := http.DefaultClient.Do(req); err != nil { return 0, "", err - } else if body, err := ioutil.ReadAll(resp.Body); err != nil { + } else if body, err := io.ReadAll(resp.Body); err != nil { return 0, "", err } else if err := resp.Body.Close(); err != nil { return 0, "", err diff --git a/servicehttp.go b/servicehttp.go index 0f2428b..e798576 100644 --- a/servicehttp.go +++ b/servicehttp.go @@ -6,6 +6,7 @@ import ( "net/http" "strings" + "github.com/pkg/errors" "go.uber.org/zap" "github.com/foomo/keel/log" @@ -64,7 +65,7 @@ func (s *ServiceHTTP) Start(ctx context.Context) error { s.running = false }) s.running = true - if err := s.server.ListenAndServe(); err != http.ErrServerClosed { + if err := s.server.ListenAndServe(); !errors.Is(err, http.ErrServerClosed) { log.WithError(s.l, err).Error("service error") return err } diff --git a/servicehttphealthz.go b/servicehttphealthz.go index 6d28722..1bdfe96 100644 --- a/servicehttphealthz.go +++ b/servicehttphealthz.go @@ -16,6 +16,14 @@ const ( DefaultServiceHTTPHealthzPath = "/healthz" ) +var ( + ErrUnhandledHealthzProbe = errors.New("unhandled healthz probe") + ErrProbeFailed = errors.New("probe failed") + ErrLivenessProbeFailed = errors.New("liveness probe failed") + ErrReadinessProbeFailed = errors.New("readiness probe failed") + ErrStartupProbeFailed = errors.New("startup probe failed") +) + func NewServiceHTTPHealthz(l *zap.Logger, name, addr, path string, probes map[HealthzType][]interface{}) *ServiceHTTP { handler := http.NewServeMux() @@ -41,7 +49,7 @@ func NewServiceHTTPHealthz(l *zap.Logger, name, addr, path string, probes map[He case ErrorPingerWithContext: return true, h.Ping(ctx) default: - return false, errors.New("unhandled healthz probe") + return false, ErrUnhandledHealthzProbe } } @@ -55,7 +63,7 @@ func NewServiceHTTPHealthz(l *zap.Logger, name, addr, path string, probes map[He unavailable(l, w, r, err) return } else if !ok { - unavailable(l, w, r, errors.New("probe failed")) + unavailable(l, w, r, ErrProbeFailed) return } } @@ -77,7 +85,7 @@ func NewServiceHTTPHealthz(l *zap.Logger, name, addr, path string, probes map[He unavailable(l, w, r, err) return } else if !ok { - unavailable(l, w, r, errors.New("liveness probe failed")) + unavailable(l, w, r, ErrLivenessProbeFailed) return } } @@ -98,7 +106,7 @@ func NewServiceHTTPHealthz(l *zap.Logger, name, addr, path string, probes map[He unavailable(l, w, r, err) return } else if !ok { - unavailable(l, w, r, errors.New("readiness probe failed")) + unavailable(l, w, r, ErrReadinessProbeFailed) return } } @@ -119,7 +127,7 @@ func NewServiceHTTPHealthz(l *zap.Logger, name, addr, path string, probes map[He unavailable(l, w, r, err) return } else if !ok { - unavailable(l, w, r, errors.New("startup probe failed")) + unavailable(l, w, r, ErrStartupProbeFailed) return } } diff --git a/test/client.go b/test/client.go index 4c109d3..a3b66a1 100644 --- a/test/client.go +++ b/test/client.go @@ -4,7 +4,7 @@ import ( "bytes" "context" "encoding/json" - "io/ioutil" + "io" "net/http" "net/http/cookiejar" ) @@ -75,7 +75,7 @@ func (c *HTTPClient) Post(ctx context.Context, path string, data interface{}) ([ func (c *HTTPClient) readBody(resp *http.Response) ([]byte, error) { defer resp.Body.Close() - if body, err := ioutil.ReadAll(resp.Body); err != nil { + if body, err := io.ReadAll(resp.Body); err != nil { return nil, err } else { return body, nil diff --git a/test/log.go b/test/log.go index 928a942..82d2b5f 100644 --- a/test/log.go +++ b/test/log.go @@ -89,9 +89,9 @@ func newTestingWriter(t zaptest.TestingT) *testingWriter { return &testingWriter{t: t} } -func (w *testingWriter) Write(p []byte) (n int, err error) { +func (w *testingWriter) Write(p []byte) (int, error) { if w.t == nil { - return fmt.Printf("%s", p) + return fmt.Printf("%s", p) //nolint:forbidigo } else { // Note: t.Log is safe for concurrent use. // Strip trailing newline because t.Log always adds one. From 12ffff460c72c3d26566d7dbded592be52786e3b Mon Sep 17 00:00:00 2001 From: Kevin Franklin Kim Date: Fri, 12 Aug 2022 16:01:09 +0200 Subject: [PATCH 05/14] chore: bump golangci-lint --- .github/workflows/checks.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index d269fed..bcae60d 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -12,7 +12,7 @@ on: env: GO_VERSION: 1.18 - GOLANGCI_LINT_VERSION: v1.45.2 + GOLANGCI_LINT_VERSION: v1.48 jobs: matrix: From f8c7405f208a645bf715221edbd184aa42b66374 Mon Sep 17 00:00:00 2001 From: Kevin Franklin Kim Date: Tue, 16 Aug 2022 16:37:30 +0200 Subject: [PATCH 06/14] feat: extract request id provider --- example/roundtripwares/requestid/main.go | 3 +++ net/http/middleware/requestid.go | 20 ++++++------------ net/http/provider/requestidprovider.go | 12 +++++++++++ net/http/roundtripware/requestid.go | 27 +++++++++++++++++++----- 4 files changed, 44 insertions(+), 18 deletions(-) create mode 100644 net/http/provider/requestidprovider.go diff --git a/example/roundtripwares/requestid/main.go b/example/roundtripwares/requestid/main.go index 13e315c..a928892 100644 --- a/example/roundtripwares/requestid/main.go +++ b/example/roundtripwares/requestid/main.go @@ -53,8 +53,11 @@ func main() { svr.AddService( keel.NewServiceHTTP(l, "demo", "localhost:8080", svs, + // add middleware middleware.RequestID(), + // add middleware middleware.SessionID(), + // add middleware middleware.TrackingID(), ), ) diff --git a/net/http/middleware/requestid.go b/net/http/middleware/requestid.go index a39d5b8..64b465a 100644 --- a/net/http/middleware/requestid.go +++ b/net/http/middleware/requestid.go @@ -3,34 +3,28 @@ package middleware import ( "net/http" - "github.com/google/uuid" "go.uber.org/zap" keelhttpcontext "github.com/foomo/keel/net/http/context" + "github.com/foomo/keel/net/http/provider" ) type ( RequestIDOptions struct { - Generator RequestIDGenerator + Provider provider.RequestID RequestHeader []string ResponseHeader string SetRequestHeader bool SetResponseHeader bool SetContext bool } - RequestIDOption func(*RequestIDOptions) - RequestIDGenerator func() string + RequestIDOption func(*RequestIDOptions) ) -// DefaultRequestIDGenerator function -func DefaultRequestIDGenerator() string { - return uuid.New().String() -} - // GetDefaultRequestIDOptions returns the default options func GetDefaultRequestIDOptions() RequestIDOptions { return RequestIDOptions{ - Generator: DefaultRequestIDGenerator, + Provider: provider.DefaultRequestID, RequestHeader: []string{"X-Request-ID", "Cf-Ray"}, ResponseHeader: "X-Request-ID", SetRequestHeader: true, @@ -68,9 +62,9 @@ func RequestIDWithSetResponseHeader(v bool) RequestIDOption { } // RequestIDWithGenerator middleware option -func RequestIDWithGenerator(v RequestIDGenerator) RequestIDOption { +func RequestIDWithGenerator(v provider.RequestID) RequestIDOption { return func(o *RequestIDOptions) { - o.Generator = v + o.Provider = v } } @@ -103,7 +97,7 @@ func RequestIDWithOptions(opts RequestIDOptions) Middleware { } } if requestID == "" { - requestID = opts.Generator() + requestID = opts.Provider() } if requestID != "" && opts.SetContext { r = r.WithContext(keelhttpcontext.SetRequestID(r.Context(), requestID)) diff --git a/net/http/provider/requestidprovider.go b/net/http/provider/requestidprovider.go new file mode 100644 index 0000000..f35cf7d --- /dev/null +++ b/net/http/provider/requestidprovider.go @@ -0,0 +1,12 @@ +package provider + +import ( + "github.com/google/uuid" +) + +type RequestID func() string + +// DefaultRequestID function +func DefaultRequestID() string { + return uuid.New().String() +} diff --git a/net/http/roundtripware/requestid.go b/net/http/roundtripware/requestid.go index 4568427..fa5b72b 100644 --- a/net/http/roundtripware/requestid.go +++ b/net/http/roundtripware/requestid.go @@ -6,20 +6,23 @@ import ( "go.uber.org/zap" keelhttpcontext "github.com/foomo/keel/net/http/context" + "github.com/foomo/keel/net/http/provider" ) type ( RequestIDOptions struct { - Header string + Header string + Provider provider.RequestID + SetHeader bool } - RequestIDOption func(*RequestIDOptions) - RequestIDGenerator func() string + RequestIDOption func(*RequestIDOptions) ) // GetDefaultRequestIDOptions returns the default options func GetDefaultRequestIDOptions() RequestIDOptions { return RequestIDOptions{ - Header: "X-Request-ID", + Header: "X-Request-ID", + Provider: provider.DefaultRequestID, } } @@ -30,6 +33,13 @@ func RequestIDWithHeader(v string) RequestIDOption { } } +// RequestIDWithProvider middleware option +func RequestIDWithProvider(v provider.RequestID) RequestIDOption { + return func(o *RequestIDOptions) { + o.Provider = v + } +} + // RequestID returns a RoundTripper which prints out the request & response object func RequestID(opts ...RequestIDOption) RoundTripware { o := GetDefaultRequestIDOptions() @@ -41,8 +51,15 @@ func RequestID(opts ...RequestIDOption) RoundTripware { return func(l *zap.Logger, next Handler) Handler { return func(r *http.Request) (*http.Response, error) { if value := r.Header.Get(o.Header); value == "" { + var requestID string if value, ok := keelhttpcontext.GetRequestID(r.Context()); ok && value != "" { - r.Header.Set(o.Header, value) + requestID = value + } + if requestID == "" { + requestID = o.Provider() + } + if requestID != "" { + r.Header.Set(o.Header, requestID) } } return next(r) From 4dcc422d5fbacf97f742d796fd7346315a4455cb Mon Sep 17 00:00:00 2001 From: Kevin Franklin Kim Date: Tue, 16 Aug 2022 16:38:19 +0200 Subject: [PATCH 07/14] feat: add telemetry option --- net/http/client.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/net/http/client.go b/net/http/client.go index 4b57cf9..7ee3e1b 100644 --- a/net/http/client.go +++ b/net/http/client.go @@ -8,6 +8,7 @@ import ( "net/url" "time" + "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" "go.uber.org/zap" "github.com/foomo/keel/net/http/roundtripware" @@ -225,6 +226,12 @@ func HTTPClientWithRoundTripware(l *zap.Logger, roundTripware ...roundtripware.R } } +func HTTPClientWithTelemetry(opts ...otelhttp.Option) HTTPClientOption { + return func(v *http.Client) { + v.Transport = otelhttp.NewTransport(v.Transport, opts...) + } +} + func NewHTTPClient(opts ...HTTPClientOption) *http.Client { transport := &http.Transport{ Proxy: http.ProxyFromEnvironment, From e6dfd8e6af35ada3344e5fc06e845204759c18db Mon Sep 17 00:00:00 2001 From: Kevin Franklin Kim Date: Tue, 16 Aug 2022 16:38:28 +0200 Subject: [PATCH 08/14] test: add request id test --- net/http/roundtripware/requestid_test.go | 61 ++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 net/http/roundtripware/requestid_test.go diff --git a/net/http/roundtripware/requestid_test.go b/net/http/roundtripware/requestid_test.go new file mode 100644 index 0000000..a442dfe --- /dev/null +++ b/net/http/roundtripware/requestid_test.go @@ -0,0 +1,61 @@ +package roundtripware_test + +import ( + "context" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.uber.org/zap/zaptest" + + keelhttp "github.com/foomo/keel/net/http" + keelhttpcontext "github.com/foomo/keel/net/http/context" + "github.com/foomo/keel/net/http/roundtripware" +) + +func TestRequestID(t *testing.T) { + l := zaptest.NewLogger(t) + svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + })) + defer svr.Close() + + client := keelhttp.NewHTTPClient( + keelhttp.HTTPClientWithRoundTripware(l, + roundtripware.RequestID(), + ), + ) + req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, svr.URL, nil) + require.NoError(t, err) + assert.Empty(t, req.Header.Get(keelhttp.HeaderXRequestID)) + + resp, err := client.Do(req) + require.NoError(t, err) + defer resp.Body.Close() + assert.NotEmpty(t, req.Header.Get(keelhttp.HeaderXRequestID)) +} + +func TestRequestID_Context(t *testing.T) { + l := zaptest.NewLogger(t) + svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + })) + defer svr.Close() + + client := keelhttp.NewHTTPClient( + keelhttp.HTTPClientWithRoundTripware(l, + roundtripware.RequestID(), + ), + ) + ctx := keelhttpcontext.SetRequestID(context.Background(), "123456") + req, err := http.NewRequestWithContext(ctx, http.MethodGet, svr.URL, nil) + require.NoError(t, err) + assert.Empty(t, req.Header.Get(keelhttp.HeaderXRequestID)) + + resp, err := client.Do(req) + require.NoError(t, err) + defer resp.Body.Close() + assert.Equal(t, "123456", req.Header.Get(keelhttp.HeaderXRequestID)) +} From a5bdcaf5416d9c467c23e1d6087f661b735c5042 Mon Sep 17 00:00:00 2001 From: Kevin Franklin Kim Date: Wed, 17 Aug 2022 11:54:59 +0200 Subject: [PATCH 09/14] feat: update go and deps --- .github/workflows/checks.yml | 2 +- .golangci.yml | 2 +- example/go.mod | 117 ++++++++++++++++++++++++++++++- example/go.sum | 113 +++++++++--------------------- go.mod | 121 ++++++++++++++++++++++++++++++--- go.sum | 73 +++++++++----------- integration/temporal/client.go | 2 +- 7 files changed, 295 insertions(+), 135 deletions(-) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index bcae60d..5494033 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -11,7 +11,7 @@ on: workflow_dispatch: env: - GO_VERSION: 1.18 + GO_VERSION: 1.19 GOLANGCI_LINT_VERSION: v1.48 jobs: diff --git a/.golangci.yml b/.golangci.yml index 0e47575..45c59de 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,6 +1,6 @@ # Minimum golangci-lint version required: v1.42.0 run: - go: "1.17" + go: "1.19" timeout: 3m skip-dirs: - tmp diff --git a/example/go.mod b/example/go.mod index 107fd72..57d7b52 100644 --- a/example/go.mod +++ b/example/go.mod @@ -1,6 +1,6 @@ module github.com/foomo/keel/example -go 1.16 +go 1.19 require ( github.com/davecgh/go-spew v1.1.1 @@ -9,10 +9,121 @@ require ( github.com/google/uuid v1.3.0 github.com/nats-io/nats.go v1.16.0 github.com/pkg/errors v0.9.1 - go.mongodb.org/mongo-driver v1.9.1 + go.mongodb.org/mongo-driver v1.10.1 go.opentelemetry.io/otel v1.7.0 go.opentelemetry.io/otel/metric v0.30.0 - go.uber.org/zap v1.21.0 + go.uber.org/zap v1.22.0 +) + +require ( + cloud.google.com/go v0.100.2 // indirect + cloud.google.com/go/compute v1.6.1 // indirect + cloud.google.com/go/firestore v1.6.1 // indirect + github.com/armon/go-metrics v0.3.10 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/coreos/go-semver v0.3.0 // indirect + github.com/coreos/go-systemd/v22 v22.3.2 // indirect + github.com/fatih/color v1.13.0 // indirect + github.com/felixge/httpsnoop v1.0.2 // indirect + github.com/fsnotify/fsnotify v1.5.4 // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/snappy v0.0.3 // indirect + github.com/google/go-cmp v0.5.8 // indirect + github.com/googleapis/gax-go/v2 v2.4.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect + github.com/hashicorp/consul/api v1.12.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-hclog v1.2.0 // indirect + github.com/hashicorp/go-immutable-radix v1.3.1 // indirect + github.com/hashicorp/go-rootcerts v1.0.2 // indirect + github.com/hashicorp/golang-lru v0.5.4 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/hashicorp/serf v0.9.7 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/compress v1.14.4 // indirect + github.com/lib/pq v1.10.6 // indirect + github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect + github.com/magiconair/properties v1.8.6 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mattn/go-isatty v0.0.14 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect + github.com/minio/highwayhash v1.0.2 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect + github.com/nats-io/jwt/v2 v2.3.0 // indirect + github.com/nats-io/nkeys v0.3.0 // indirect + github.com/nats-io/nuid v1.0.1 // indirect + github.com/pelletier/go-toml v1.9.5 // indirect + github.com/pelletier/go-toml/v2 v2.0.2 // indirect + github.com/philhofer/fwd v1.1.1 // indirect + github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect + github.com/prometheus/client_golang v1.13.0 // indirect + github.com/prometheus/client_model v0.2.0 // indirect + github.com/prometheus/common v0.37.0 // indirect + github.com/prometheus/procfs v0.8.0 // indirect + github.com/sagikazarmark/crypt v0.6.0 // indirect + github.com/shirou/gopsutil/v3 v3.22.3 // indirect + github.com/spf13/afero v1.8.2 // indirect + github.com/spf13/cast v1.5.0 // indirect + github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/spf13/viper v1.12.0 // indirect + github.com/subosito/gotenv v1.4.0 // indirect + github.com/tinylib/msgp v1.1.6 // indirect + github.com/tklauser/go-sysconf v0.3.10 // indirect + github.com/tklauser/numcpus v0.4.0 // indirect + github.com/xdg-go/pbkdf2 v1.0.0 // indirect + github.com/xdg-go/scram v1.1.1 // indirect + github.com/xdg-go/stringprep v1.0.3 // indirect + github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect + github.com/yusufpapurcu/wmi v1.2.2 // indirect + go.etcd.io/etcd/api/v3 v3.5.4 // indirect + go.etcd.io/etcd/client/pkg/v3 v3.5.4 // indirect + go.etcd.io/etcd/client/v2 v2.305.4 // indirect + go.etcd.io/etcd/client/v3 v3.5.4 // indirect + go.opencensus.io v0.23.0 // indirect + go.opentelemetry.io/contrib/instrumentation/go.mongodb.org/mongo-driver/mongo/otelmongo v0.32.0 // indirect + go.opentelemetry.io/contrib/instrumentation/host v0.32.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.32.0 // indirect + go.opentelemetry.io/contrib/instrumentation/runtime v0.32.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.7.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.7.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.7.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.7.0 // indirect + go.opentelemetry.io/otel/exporters/prometheus v0.30.0 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.30.0 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.7.0 // indirect + go.opentelemetry.io/otel/sdk v1.7.0 // indirect + go.opentelemetry.io/otel/sdk/metric v0.30.0 // indirect + go.opentelemetry.io/otel/trace v1.7.0 // indirect + go.opentelemetry.io/proto/otlp v0.16.0 // indirect + go.uber.org/atomic v1.9.0 // indirect + go.uber.org/multierr v1.6.0 // indirect + golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa // indirect + golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect + golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 // indirect + golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect + golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect + golang.org/x/text v0.3.7 // indirect + golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect + google.golang.org/api v0.81.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20220602131408-e326c6e8e9c8 // indirect + google.golang.org/grpc v1.47.0 // indirect + google.golang.org/protobuf v1.28.1 // indirect + gopkg.in/ini.v1 v1.66.4 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) replace ( diff --git a/example/go.sum b/example/go.sum index c5ce4fc..e6d8138 100644 --- a/example/go.sum +++ b/example/go.sum @@ -73,7 +73,6 @@ github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8 github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -84,7 +83,6 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= @@ -108,7 +106,6 @@ github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmf github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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= @@ -123,16 +120,13 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a/go.mod h1:7Ga40egUymuWXxAe151lTNnCv97MddSOVsjpPPkityA= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/foomo/gotsrpc/v2 v2.5.4/go.mod h1:PMYx9AnJiEPIOfuTV5WJsfIGfmV0Jz5B4f95+feGr6k= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= -github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/franklinkim/viper v1.12.1-0.20220611111410-2d69ce7c2fe8 h1:N9JhVRMc8z++6a8UuA7OB5P60V9cmwfeiow1ohkSRgA= github.com/franklinkim/viper v1.12.1-0.20220611111410-2d69ce7c2fe8/go.mod h1:VE2mylSsEG0PLvujqWRd4qEnbfdctwRfURTHOnx2blk= github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= @@ -144,9 +138,11 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -154,16 +150,11 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -243,7 +234,6 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -256,9 +246,7 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0 h1:dS9eYAjhrE2RjmzYw2XAPvcXfmcQLtFEQWn0CR82awk= github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 h1:BZHcxBETFHIdVyhyEfOvn/RdU/QGdLI4y34qQGjGWO0= github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= @@ -305,7 +293,6 @@ github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOn github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hashicorp/serf v0.9.7 h1:hkdgbqizGQHuU5IPqYM1JdSMV8nKfpuOnZYXssk9muY= github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= -github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= @@ -331,11 +318,9 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs= github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= @@ -369,7 +354,6 @@ github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdI github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -379,27 +363,22 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nats-io/jwt/v2 v2.2.1-0.20220113022732-58e87895b296 h1:vU9tpM3apjYlLLeY23zRWJ9Zktr5jp+mloR942LEOpY= -github.com/nats-io/jwt/v2 v2.2.1-0.20220113022732-58e87895b296/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k= +github.com/nats-io/jwt/v2 v2.3.0 h1:z2mA1a7tIf5ShggOFlR1oBPgd6hGqcDYsISxZByUzdI= +github.com/nats-io/jwt/v2 v2.3.0/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k= github.com/nats-io/nats-server/v2 v2.7.3 h1:P0NgsnbTxrPMMPZ1/rLXWjS5bbPpRMCcPwlMd4nBDK4= -github.com/nats-io/nats-server/v2 v2.7.3/go.mod h1:eJUrA5gm0ch6sJTEv85xmXIgQWsB0OyjkTsKXvlHbYc= -github.com/nats-io/nats.go v1.13.1-0.20220121202836-972a071d373d/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nats.go v1.16.0 h1:zvLE7fGBQYW6MWaFaRdsgm9qT39PJDQoju+DS8KsO1g= github.com/nats-io/nats.go v1.16.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8= github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/uuid v1.2.1/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.0.2 h1:+jQXlF3scKIcSEKkdHzXhCTDLPFi5r1wnK6yPS+49Gw= @@ -424,8 +403,8 @@ github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= -github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.13.0 h1:b71QUfeo5M8gq2+evJdTPfZhYMAU0uKPkyPJ7TPsloU= +github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -435,20 +414,20 @@ github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= +github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sagikazarmark/crypt v0.6.0 h1:REOEXCs/NFY/1jOCEouMuT4zEniE5YoXbvpC5X/TLF8= github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8= @@ -470,9 +449,7 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -482,7 +459,6 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/subosito/gotenv v1.4.0 h1:yAzM1+SmVcz5R4tXGsNMu1jUl2aOJXoiWUCEwwnGrvs= github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= @@ -494,14 +470,14 @@ github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYa github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= -github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w= github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= -github.com/xdg-go/stringprep v1.0.2 h1:6iq84/ryjjeRmMJwxutI51F2GIPlP5BfTvXHeYjyhBc= +github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E= +github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= +github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs= +github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -509,7 +485,6 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.etcd.io/etcd/api/v3 v3.5.4 h1:OHVyt3TopwtUQ2GKdd5wu3PmmipR4FTwCqoEjSyRdIc= @@ -521,8 +496,8 @@ go.etcd.io/etcd/client/v2 v2.305.4/go.mod h1:Ud+VUwIi9/uQHOMA+4ekToJ12lTxlv0zB/+ go.etcd.io/etcd/client/v3 v3.5.4 h1:p83BUL3tAYS0OT/r0qglgc3M1JjhM0diV8DSWAhVXv4= go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= go.mongodb.org/mongo-driver v1.9.0/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY= -go.mongodb.org/mongo-driver v1.9.1 h1:m078y9v7sBItkt1aaoe2YlvWEXcD263e1a4E1fBrJ1c= -go.mongodb.org/mongo-driver v1.9.1/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY= +go.mongodb.org/mongo-driver v1.10.1 h1:NujsPveKwHaWuKUer/ceo9DzEe7HIj1SlJ6uvXZG0S4= +go.mongodb.org/mongo-driver v1.10.1/go.mod h1:z4XpeoU6w+9Vht+jAFyLgVrD+jGSQQe0+CBWFHNiHt8= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -539,7 +514,6 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.32.0 h1:mac9BKR go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.32.0/go.mod h1:5eCOqeGphOyz6TsY3ZDNjE33SM/TFAK3RGuCL2naTgY= go.opentelemetry.io/contrib/instrumentation/runtime v0.32.0 h1:eMQf85EgNd2YWEikRJwEy4ADOiwlIum4rcHcssB4Qzk= go.opentelemetry.io/contrib/instrumentation/runtime v0.32.0/go.mod h1:qtaLlIO4HC4DfedkYTOrvS2u7nA3N/v8w9mehrBD4O8= -go.opentelemetry.io/otel v1.2.0/go.mod h1:aT17Fk0Z1Nor9e0uisf98LrntPGMnk4frBO9+dkf69I= go.opentelemetry.io/otel v1.7.0 h1:Z2lA3Tdch0iDcrhJXDIlC94XE+bxok1F9B+4Lz/lGsM= go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk= go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.7.0 h1:7Yxsak1q4XrJ5y7XBnNwqWx9amMZvoidCctv62XOQ6Y= @@ -558,36 +532,25 @@ go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.7.0 h1:8hPcgCg0rUJiKE6V go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.7.0/go.mod h1:K4GDXPY6TjUiwbOh+DkKaEdCF8y+lvMoM6SeAPyfCCM= go.opentelemetry.io/otel/metric v0.30.0 h1:Hs8eQZ8aQgs0U49diZoaS6Uaxw3+bBE3lcMUKBFIk3c= go.opentelemetry.io/otel/metric v0.30.0/go.mod h1:/ShZ7+TS4dHzDFmfi1kSXMhMVubNoP0oIaBp70J6UXU= -go.opentelemetry.io/otel/sdk v1.2.0/go.mod h1:jNN8QtpvbsKhgaC6V5lHiejMoKD+V8uadoSafgHPx1U= go.opentelemetry.io/otel/sdk v1.7.0 h1:4OmStpcKVOfvDOgCt7UriAPtKolwIhxpnSNI/yK+1B0= go.opentelemetry.io/otel/sdk v1.7.0/go.mod h1:uTEOTwaqIVuTGiJN7ii13Ibp75wJmYUDe374q6cZwUU= go.opentelemetry.io/otel/sdk/metric v0.30.0 h1:XTqQ4y3erR2Oj8xSAOL5ovO5011ch2ELg51z4fVkpME= go.opentelemetry.io/otel/sdk/metric v0.30.0/go.mod h1:8AKFRi5HyvTR0RRty3paN1aMC9HMT+NzcEhw/BLkLX8= -go.opentelemetry.io/otel/trace v1.2.0/go.mod h1:N5FLswTubnxKxOJHM7XZC074qpeEdLy3CgAVsdMucK0= go.opentelemetry.io/otel/trace v1.7.0 h1:O37Iogk1lEkMRXewVtZ1BBTVn5JEp8GrJvP92bJqC6o= go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.16.0 h1:WHzDWdXUvbc5bG2ObdrGfaNpQz7ft7QN9HHmJlbiB1E= go.opentelemetry.io/proto/otlp v0.16.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= -go.temporal.io/api v1.5.0/go.mod h1:BqKxEJJYdxb5dqf0ODfzfMxh8UEQ5L3zKS51FiIYYkA= -go.temporal.io/api v1.8.0/go.mod h1:7m1ZOVUFi/54a5IMzMeELnvDy5sJwRfz11zi3Jrww8w= -go.temporal.io/sdk v1.12.0/go.mod h1:lSp3lH1lI0TyOsus0arnO3FYvjVXBZGi/G7DjnAnm6o= -go.temporal.io/sdk v1.15.0/go.mod h1:peqnjALtNpJMKRplWEubefPhDXdAtRTnebsLSFypSts= -go.temporal.io/sdk/contrib/opentelemetry v0.1.0/go.mod h1:TrPfwtdvlwR3vqJFyPyl+WcNUrAUcAkJHVi3PK/iPYk= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +go.uber.org/zap v1.22.0 h1:Zcye5DUgBloQ9BaT4qc9BnjOFog5TvBSAGkJ3Nf70c0= +go.uber.org/zap v1.22.0/go.mod h1:H4siCOZOrAolnUPJEkfaSjDqyP+BDS0DdDWzwcgt3+U= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -598,12 +561,10 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -639,8 +600,6 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -682,8 +641,6 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210913180222-943fd674d43e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -691,8 +648,8 @@ golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220531201128-c960675eff93 h1:MYimHLfoXEpOhqd/zgoA/uoXzHB86AEky4LAx5ij9xA= -golang.org/x/net v0.0.0-20220531201128-c960675eff93/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -725,8 +682,9 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220513210516-0976fa681c29 h1:w8s32wxx3sY+OjLlv9qltkLU5yvJzxjjgiHWLjdIcw4= golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -796,14 +754,11 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210910150752-751e447fb3d0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -812,8 +767,9 @@ golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -830,9 +786,7 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 h1:GZokNIeuVkl3aZHJchRrr13WCsols02MLUcz1U9is6M= -golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -890,8 +844,6 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -947,7 +899,6 @@ google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -969,7 +920,6 @@ google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -1029,7 +979,6 @@ google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220602131408-e326c6e8e9c8 h1:qRu95HZ148xXw+XeZ3dvqe85PxH4X8+jIo0iRPKcEnM= google.golang.org/genproto v0.0.0-20220602131408-e326c6e8e9c8/go.mod h1:yKyY4AMRwFiC8yMMNaMi+RkCnjZJt9LoWuvhXjMs+To= -google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1077,14 +1026,14 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4= gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= diff --git a/go.mod b/go.mod index c79ff07..0d5d946 100644 --- a/go.mod +++ b/go.mod @@ -1,22 +1,21 @@ module github.com/foomo/keel -go 1.16 +go 1.19 require ( - github.com/foomo/gotsrpc/v2 v2.5.4 + github.com/foomo/gotsrpc/v2 v2.6.0 github.com/go-logr/logr v1.2.3 github.com/golang-jwt/jwt v3.2.2+incompatible github.com/google/uuid v1.3.0 github.com/lib/pq v1.10.6 github.com/mitchellh/mapstructure v1.5.0 - github.com/nats-io/nats-server/v2 v2.7.3 // indirect github.com/nats-io/nats.go v1.16.0 github.com/pkg/errors v0.9.1 - github.com/prometheus/client_golang v1.12.2 + github.com/prometheus/client_golang v1.13.0 github.com/spf13/viper v1.12.0 github.com/stretchr/testify v1.8.0 github.com/tinylib/msgp v1.1.6 - go.mongodb.org/mongo-driver v1.9.1 + go.mongodb.org/mongo-driver v1.10.1 go.opentelemetry.io/contrib/instrumentation/go.mongodb.org/mongo-driver/mongo/otelmongo v0.32.0 go.opentelemetry.io/contrib/instrumentation/host v0.32.0 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.32.0 @@ -34,9 +33,115 @@ require ( go.temporal.io/api v1.8.0 go.temporal.io/sdk v1.15.0 go.temporal.io/sdk/contrib/opentelemetry v0.1.0 - go.uber.org/zap v1.21.0 - golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e - golang.org/x/sync v0.0.0-20220513210516-0976fa681c29 + go.uber.org/zap v1.22.0 + golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa + golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 +) + +require ( + cloud.google.com/go v0.100.2 // indirect + cloud.google.com/go/compute v1.6.1 // indirect + cloud.google.com/go/firestore v1.6.1 // indirect + github.com/armon/go-metrics v0.3.10 // indirect + github.com/benbjohnson/clock v1.3.0 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/coreos/go-semver v0.3.0 // indirect + github.com/coreos/go-systemd/v22 v22.3.2 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a // indirect + github.com/fatih/color v1.13.0 // indirect + github.com/felixge/httpsnoop v1.0.2 // indirect + github.com/fsnotify/fsnotify v1.5.4 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect + github.com/gogo/googleapis v1.4.1 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/gogo/status v1.1.0 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/mock v1.6.0 // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/snappy v0.0.3 // indirect + github.com/google/go-cmp v0.5.8 // indirect + github.com/googleapis/gax-go/v2 v2.4.0 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect + github.com/hashicorp/consul/api v1.12.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-hclog v1.2.0 // indirect + github.com/hashicorp/go-immutable-radix v1.3.1 // indirect + github.com/hashicorp/go-rootcerts v1.0.2 // indirect + github.com/hashicorp/golang-lru v0.5.4 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/hashicorp/serf v0.9.7 // indirect + github.com/iancoleman/strcase v0.2.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/compress v1.14.4 // indirect + github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect + github.com/magiconair/properties v1.8.6 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mattn/go-isatty v0.0.14 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect + github.com/nats-io/nats-server/v2 v2.7.3 // indirect + github.com/nats-io/nkeys v0.3.0 // indirect + github.com/nats-io/nuid v1.0.1 // indirect + github.com/pborman/uuid v1.2.1 // indirect + github.com/pelletier/go-toml v1.9.5 // indirect + github.com/pelletier/go-toml/v2 v2.0.2 // indirect + github.com/philhofer/fwd v1.1.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect + github.com/prometheus/client_model v0.2.0 // indirect + github.com/prometheus/common v0.37.0 // indirect + github.com/prometheus/procfs v0.8.0 // indirect + github.com/robfig/cron v1.2.0 // indirect + github.com/sagikazarmark/crypt v0.6.0 // indirect + github.com/shirou/gopsutil/v3 v3.22.3 // indirect + github.com/spf13/afero v1.8.2 // indirect + github.com/spf13/cast v1.5.0 // indirect + github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/stretchr/objx v0.4.0 // indirect + github.com/subosito/gotenv v1.4.0 // indirect + github.com/tklauser/go-sysconf v0.3.10 // indirect + github.com/tklauser/numcpus v0.4.0 // indirect + github.com/ugorji/go/codec v1.2.7 // indirect + github.com/xdg-go/pbkdf2 v1.0.0 // indirect + github.com/xdg-go/scram v1.1.1 // indirect + github.com/xdg-go/stringprep v1.0.3 // indirect + github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect + github.com/yusufpapurcu/wmi v1.2.2 // indirect + go.etcd.io/etcd/api/v3 v3.5.4 // indirect + go.etcd.io/etcd/client/pkg/v3 v3.5.4 // indirect + go.etcd.io/etcd/client/v2 v2.305.4 // indirect + go.etcd.io/etcd/client/v3 v3.5.4 // indirect + go.opencensus.io v0.23.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.7.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.7.0 // indirect + go.opentelemetry.io/proto/otlp v0.16.0 // indirect + go.uber.org/atomic v1.9.0 // indirect + go.uber.org/multierr v1.6.0 // indirect + golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect + golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 // indirect + golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect + golang.org/x/text v0.3.7 // indirect + golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 // indirect + golang.org/x/tools v0.1.12 // indirect + golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect + google.golang.org/api v0.81.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20220602131408-e326c6e8e9c8 // indirect + google.golang.org/grpc v1.47.0 // indirect + google.golang.org/protobuf v1.28.1 // indirect + gopkg.in/ini.v1 v1.66.4 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) replace ( diff --git a/go.sum b/go.sum index a3baf31..1c3ad8c 100644 --- a/go.sum +++ b/go.sum @@ -73,7 +73,6 @@ github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8 github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -84,7 +83,6 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= @@ -131,12 +129,11 @@ github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/foomo/gotsrpc/v2 v2.5.4 h1:drdmJlXa7z/fZ1OxumEkTedoVu9lUo3THFbqsW7w0c4= -github.com/foomo/gotsrpc/v2 v2.5.4/go.mod h1:PMYx9AnJiEPIOfuTV5WJsfIGfmV0Jz5B4f95+feGr6k= +github.com/foomo/gotsrpc/v2 v2.6.0 h1:JbkbGZlstmI+RCW+amY7cvAuB6olL/JyUTv4vyIfUrg= +github.com/foomo/gotsrpc/v2 v2.6.0/go.mod h1:O9YjG1jCyseJLroaQQ24NLsuteCHL6wikIItXiv2I8w= github.com/foomo/opentelemetry-go-contrib/instrumentation/net/http/otelhttp v0.32.1-0.20220517120905-10e2553b9bac h1:z8UXpHe2Hb9IzRawoeT49eUcxgGUY6g8Emj8TpUWl+4= github.com/foomo/opentelemetry-go-contrib/instrumentation/net/http/otelhttp v0.32.1-0.20220517120905-10e2553b9bac/go.mod h1:5eCOqeGphOyz6TsY3ZDNjE33SM/TFAK3RGuCL2naTgY= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= -github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/franklinkim/viper v1.12.1-0.20220611111410-2d69ce7c2fe8 h1:N9JhVRMc8z++6a8UuA7OB5P60V9cmwfeiow1ohkSRgA= github.com/franklinkim/viper v1.12.1-0.20220611111410-2d69ce7c2fe8/go.mod h1:VE2mylSsEG0PLvujqWRd4qEnbfdctwRfURTHOnx2blk= github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= @@ -148,9 +145,11 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -158,7 +157,6 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= @@ -266,7 +264,6 @@ github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8 github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 h1:BZHcxBETFHIdVyhyEfOvn/RdU/QGdLI4y34qQGjGWO0= github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= @@ -340,7 +337,6 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -370,7 +366,6 @@ github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKju github.com/miekg/dns v1.1.41 h1:WMszZWJG0XmzbK9FEmzH2TVcqYzFesusSIB41b8KHxY= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= -github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= @@ -378,7 +373,6 @@ github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdI github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -388,14 +382,13 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nats-io/jwt/v2 v2.2.1-0.20220113022732-58e87895b296 h1:vU9tpM3apjYlLLeY23zRWJ9Zktr5jp+mloR942LEOpY= -github.com/nats-io/jwt/v2 v2.2.1-0.20220113022732-58e87895b296/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k= github.com/nats-io/nats-server/v2 v2.7.3 h1:P0NgsnbTxrPMMPZ1/rLXWjS5bbPpRMCcPwlMd4nBDK4= github.com/nats-io/nats-server/v2 v2.7.3/go.mod h1:eJUrA5gm0ch6sJTEv85xmXIgQWsB0OyjkTsKXvlHbYc= -github.com/nats-io/nats.go v1.13.1-0.20220121202836-972a071d373d/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nats.go v1.16.0 h1:zvLE7fGBQYW6MWaFaRdsgm9qT39PJDQoju+DS8KsO1g= github.com/nats-io/nats.go v1.16.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8= @@ -434,8 +427,8 @@ github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= -github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.13.0 h1:b71QUfeo5M8gq2+evJdTPfZhYMAU0uKPkyPJ7TPsloU= +github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -445,21 +438,22 @@ github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ= github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sagikazarmark/crypt v0.6.0 h1:REOEXCs/NFY/1jOCEouMuT4zEniE5YoXbvpC5X/TLF8= github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8= @@ -505,16 +499,17 @@ github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYa github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo= github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w= github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= -github.com/xdg-go/stringprep v1.0.2 h1:6iq84/ryjjeRmMJwxutI51F2GIPlP5BfTvXHeYjyhBc= +github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E= +github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= +github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs= +github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -534,8 +529,8 @@ go.etcd.io/etcd/client/v2 v2.305.4/go.mod h1:Ud+VUwIi9/uQHOMA+4ekToJ12lTxlv0zB/+ go.etcd.io/etcd/client/v3 v3.5.4 h1:p83BUL3tAYS0OT/r0qglgc3M1JjhM0diV8DSWAhVXv4= go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= go.mongodb.org/mongo-driver v1.9.0/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY= -go.mongodb.org/mongo-driver v1.9.1 h1:m078y9v7sBItkt1aaoe2YlvWEXcD263e1a4E1fBrJ1c= -go.mongodb.org/mongo-driver v1.9.1/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY= +go.mongodb.org/mongo-driver v1.10.1 h1:NujsPveKwHaWuKUer/ceo9DzEe7HIj1SlJ6uvXZG0S4= +go.mongodb.org/mongo-driver v1.10.1/go.mod h1:z4XpeoU6w+9Vht+jAFyLgVrD+jGSQQe0+CBWFHNiHt8= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -592,7 +587,6 @@ go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= @@ -600,8 +594,8 @@ go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +go.uber.org/zap v1.22.0 h1:Zcye5DUgBloQ9BaT4qc9BnjOFog5TvBSAGkJ3Nf70c0= +go.uber.org/zap v1.22.0/go.mod h1:H4siCOZOrAolnUPJEkfaSjDqyP+BDS0DdDWzwcgt3+U= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -614,10 +608,9 @@ golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -653,9 +646,9 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -706,8 +699,9 @@ golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220531201128-c960675eff93 h1:MYimHLfoXEpOhqd/zgoA/uoXzHB86AEky4LAx5ij9xA= golang.org/x/net v0.0.0-20220531201128-c960675eff93/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -740,13 +734,13 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220513210516-0976fa681c29 h1:w8s32wxx3sY+OjLlv9qltkLU5yvJzxjjgiHWLjdIcw4= golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -818,7 +812,6 @@ golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -827,8 +820,9 @@ golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -905,9 +899,9 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.10 h1:QjFRCZxdOhBJ/UNgnBZLbNV13DlbnK0quyivTnXJM20= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1093,8 +1087,9 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/integration/temporal/client.go b/integration/temporal/client.go index 1972580..4af4343 100644 --- a/integration/temporal/client.go +++ b/integration/temporal/client.go @@ -52,7 +52,7 @@ func DefaultClientOptions() ClientOptions { Logger: log.Logger(), Namespace: "default", RegisterNamespace: nil, - OtelEnabled: env.GetBool("TEMPORAL_OTEL_ENABLED", env.GetBool("OTEL_ENABLED", false)), + OtelEnabled: env.GetBool("OTEL_TEMPORAL_ENABLED", env.GetBool("OTEL_ENABLED", false)), } } From e2096b6b1df09e999e12921338a946e72d62b5eb Mon Sep 17 00:00:00 2001 From: Kevin Franklin Kim Date: Mon, 12 Sep 2022 08:24:27 +0200 Subject: [PATCH 10/14] fix: typo --- net/http/roundtripware/labeler.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/net/http/roundtripware/labeler.go b/net/http/roundtripware/labeler.go index 746c16f..b758c35 100644 --- a/net/http/roundtripware/labeler.go +++ b/net/http/roundtripware/labeler.go @@ -8,10 +8,10 @@ import ( type labelerContextKeyType int -const lablelerContextKey labelerContextKeyType = 0 +const labelerContextKey labelerContextKeyType = 0 func injectLabeler(ctx context.Context, l *otelhttp.Labeler) context.Context { - return context.WithValue(ctx, lablelerContextKey, l) + return context.WithValue(ctx, labelerContextKey, l) } // LabelerFromContext retrieves a Labeler instance from the provided context if @@ -19,7 +19,7 @@ func injectLabeler(ctx context.Context, l *otelhttp.Labeler) context.Context { // Labeler is returned and the second return value is false. In this case it is // safe to use the Labeler but any attributes added to it will not be used. func LabelerFromContext(ctx context.Context) (context.Context, *otelhttp.Labeler) { - l, ok := ctx.Value(lablelerContextKey).(*otelhttp.Labeler) + l, ok := ctx.Value(labelerContextKey).(*otelhttp.Labeler) if !ok { l = &otelhttp.Labeler{} ctx = injectLabeler(ctx, l) From 34d1516e1081ecc29708bf3503a846d700633f08 Mon Sep 17 00:00:00 2001 From: Kevin Franklin Kim Date: Mon, 12 Sep 2022 08:25:32 +0200 Subject: [PATCH 11/14] feat: split with http request --- log/with.go | 188 +++++++++++++++++++++++++--------------------------- 1 file changed, 90 insertions(+), 98 deletions(-) diff --git a/log/with.go b/log/with.go index 554726b..f341fa4 100644 --- a/log/with.go +++ b/log/with.go @@ -24,10 +24,6 @@ func WithError(l *zap.Logger, err error) *zap.Logger { return With(l, FError(err)) } -func WithHTTPServerName(l *zap.Logger, name string) *zap.Logger { - return With(l, FHTTPServerName(name)) -} - func WithServiceName(l *zap.Logger, name string) *zap.Logger { return With(l, FServiceName(name)) } @@ -39,52 +35,69 @@ func WithTraceID(l *zap.Logger, ctx context.Context) *zap.Logger { return l } -func WithHTTPRequest(l *zap.Logger, r *http.Request) *zap.Logger { - fields := []zap.Field{ - FHTTPRequestContentLength(r.ContentLength), - FHTTPMethod(r.Method), - FHTTPUserAgent(r.UserAgent()), - FHTTPTarget(r.RequestURI), - } - // host - if value := r.Header.Get("X-Forwarded-Host"); value != "" { - fields = append(fields, FHTTPHost(value)) - } else if !r.URL.IsAbs() { - fields = append(fields, FHTTPHost(r.Host)) - } else { - fields = append(fields, FHTTPHost(r.URL.Host)) - } - // request id - if id := r.Header.Get("X-Request-ID"); id != "" { - fields = append(fields, FHTTPRequestID(id)) - } else if id, ok := keelhttpcontext.GetRequestID(r.Context()); ok && id != "" { - fields = append(fields, FHTTPRequestID(id)) - } - // session id - if id := r.Header.Get("X-Session-ID"); id != "" { - fields = append(fields, FHTTPSessionID(id)) - } else if id, ok := keelhttpcontext.GetSessionID(r.Context()); ok && id != "" { - fields = append(fields, FHTTPSessionID(id)) - } - // tracking id - if id := r.Header.Get("X-Tracking-ID"); id != "" { - fields = append(fields, FHTTPTrackingID(id)) - } else if id, ok := keelhttpcontext.GetTrackingID(r.Context()); ok && id != "" { - fields = append(fields, FHTTPTrackingID(id)) - } - // schema - if r.TLS != nil { - fields = append(fields, FHTTPScheme("https")) - } else { - fields = append(fields, FHTTPScheme("http")) - } - // flavor - if r.ProtoMajor == 1 { - fields = append(fields, FHTTPFlavor(fmt.Sprintf("1.%d", r.ProtoMinor))) - } else if r.ProtoMajor == 2 { - fields = append(fields, FHTTPFlavor("2")) - } +func WithHTTPServerName(l *zap.Logger, name string) *zap.Logger { + return With(l, FHTTPServerName(name)) +} +func WithHTTPFlavor(l *zap.Logger, r *http.Request) *zap.Logger { + if r.ProtoMajor == 1 { + return With(l, FHTTPFlavor(fmt.Sprintf("1.%d", r.ProtoMinor))) + } else if r.ProtoMajor == 2 { + return With(l, FHTTPFlavor("2")) + } else { + return l + } +} + +func WithHTTPScheme(l *zap.Logger, r *http.Request) *zap.Logger { + if r.TLS != nil { + return With(l, FHTTPScheme("https")) + } else { + return With(l, FHTTPScheme("http")) + } +} + +func WithHTTPSessionID(l *zap.Logger, r *http.Request) *zap.Logger { + if id := r.Header.Get("X-Session-ID"); id != "" { + return With(l, FHTTPSessionID(id)) + } else if id, ok := keelhttpcontext.GetSessionID(r.Context()); ok && id != "" { + return With(l, FHTTPSessionID(id)) + } else { + return l + } +} + +func WithHTTPRequestID(l *zap.Logger, r *http.Request) *zap.Logger { + if id := r.Header.Get("X-Request-ID"); id != "" { + return With(l, FHTTPRequestID(id)) + } else if id, ok := keelhttpcontext.GetRequestID(r.Context()); ok && id != "" { + return With(l, FHTTPRequestID(id)) + } else { + return l + } +} + +func WithHTTPHost(l *zap.Logger, r *http.Request) *zap.Logger { + if value := r.Header.Get("X-Forwarded-Host"); value != "" { + return With(l, FHTTPHost(value)) + } else if !r.URL.IsAbs() { + return With(l, FHTTPHost(r.Host)) + } else { + return With(l, FHTTPHost(r.URL.Host)) + } +} + +func WithHTTPTrackingID(l *zap.Logger, r *http.Request) *zap.Logger { + if id := r.Header.Get("X-Tracking-ID"); id != "" { + return With(l, FHTTPTrackingID(id)) + } else if id, ok := keelhttpcontext.GetTrackingID(r.Context()); ok && id != "" { + return With(l, FHTTPTrackingID(id)) + } else { + return l + } +} + +func WithHTTPClientIP(l *zap.Logger, r *http.Request) *zap.Logger { var clientIP string if value := r.Header.Get("X-Forwarded-For"); value != "" { if i := strings.IndexAny(value, ", "); i > 0 { @@ -100,60 +113,39 @@ func WithHTTPRequest(l *zap.Logger, r *http.Request) *zap.Logger { clientIP = r.RemoteAddr } if clientIP != "" { - fields = append(fields, FHTTPClientIP(clientIP)) + return With(l, FHTTPClientIP(clientIP)) } + return l +} - if spanCtx := trace.SpanContextFromContext(r.Context()); spanCtx.IsValid() { - fields = append(fields, FTraceID(spanCtx.TraceID().String())) - } - - return With(l, fields...) +func WithHTTPRequest(l *zap.Logger, r *http.Request) *zap.Logger { + l = WithHTTPHost(l, r) + l = WithHTTPRequestID(l, r) + l = WithHTTPSessionID(l, r) + l = WithHTTPTrackingID(l, r) + l = WithHTTPScheme(l, r) + l = WithHTTPFlavor(l, r) + l = WithHTTPClientIP(l, r) + l = WithTraceID(l, r.Context()) + return With(l, + FHTTPMethod(r.Method), + FHTTPTarget(r.RequestURI), + FHTTPUserAgent(r.UserAgent()), + FHTTPRequestContentLength(r.ContentLength), + ) } func WithHTTPRequestOut(l *zap.Logger, r *http.Request) *zap.Logger { - fields := []zap.Field{ - FHTTPWroteBytes(r.ContentLength), + l = WithHTTPHost(l, r) + l = WithHTTPRequestID(l, r) + l = WithHTTPSessionID(l, r) + l = WithHTTPTrackingID(l, r) + l = WithHTTPScheme(l, r) + l = WithHTTPFlavor(l, r) + l = WithTraceID(l, r.Context()) + return With(l, FHTTPMethod(r.Method), FHTTPTarget(r.URL.Path), - } - // host - if r.URL.Host != "" { - fields = append(fields, FHTTPHost(r.URL.Host)) - } - // request id - if id := r.Header.Get("X-Request-ID"); id != "" { - fields = append(fields, FHTTPRequestID(id)) - } else if id, ok := keelhttpcontext.GetRequestID(r.Context()); ok && id != "" { - fields = append(fields, FHTTPRequestID(id)) - } - // session id - if id := r.Header.Get("X-Session-ID"); id != "" { - fields = append(fields, FHTTPSessionID(id)) - } else if id, ok := keelhttpcontext.GetSessionID(r.Context()); ok && id != "" { - fields = append(fields, FHTTPSessionID(id)) - } - // tracking id - if id := r.Header.Get("X-Tracking-ID"); id != "" { - fields = append(fields, FHTTPTrackingID(id)) - } else if id, ok := keelhttpcontext.GetTrackingID(r.Context()); ok && id != "" { - fields = append(fields, FHTTPTrackingID(id)) - } - // schema - if r.TLS != nil { - fields = append(fields, FHTTPScheme("https")) - } else { - fields = append(fields, FHTTPScheme("http")) - } - // flavor - if r.ProtoMajor == 1 { - fields = append(fields, FHTTPFlavor(fmt.Sprintf("1.%d", r.ProtoMinor))) - } else if r.ProtoMajor == 2 { - fields = append(fields, FHTTPFlavor("2")) - } - - if spanCtx := trace.SpanContextFromContext(r.Context()); spanCtx.IsValid() { - fields = append(fields, FTraceID(spanCtx.TraceID().String())) - } - - return With(l, fields...) + FHTTPWroteBytes(r.ContentLength), + ) } From 5976442d616b5f962ac0824f4e31e027c1da6dcd Mon Sep 17 00:00:00 2001 From: Kevin Franklin Kim Date: Mon, 12 Sep 2022 08:25:44 +0200 Subject: [PATCH 12/14] chore: update lint config --- .golangci.yml | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 45c59de..4c26954 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -42,33 +42,6 @@ linters-settings: linters: enable: -# - bodyclose -# - dogsled -# - exportloopref -# # - gci TODO re-enable -# - goconst -# - gocritic -# # - gocyclo -# - gofmt -# - goprintffuncname -# #- gosec -# - ifshort -# - misspell -# - nakedret -# - noctx -# - nolintlint -# - prealloc -# - revive -# - promlinter -# - rowserrcheck -# - sqlclosecheck -# - stylecheck -# - thelper -# - tparallel -# - unconvert -# - unparam -# - whitespace - # Enabled by default linters: - deadcode # Finds unused code [fast: false, 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] From ae48cdee2f9e6eba826cd1a4e722856a65750083 Mon Sep 17 00:00:00 2001 From: Kevin Franklin Kim Date: Mon, 12 Sep 2022 08:32:51 +0200 Subject: [PATCH 13/14] chore: update action --- .github/workflows/checks.yml | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 5494033..2261bd5 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -11,8 +11,8 @@ on: workflow_dispatch: env: - GO_VERSION: 1.19 - GOLANGCI_LINT_VERSION: v1.48 + GOFLAGS: -mod=readonly + GOPROXY: https://proxy.golang.org jobs: matrix: @@ -41,25 +41,17 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-go@v3 with: - go-version: ${{ env.GO_VERSION }} - - uses: golangci/golangci-lint-action@v3.2.0 + go-version-file: 'go.mod' + - uses: golangci/golangci-lint-action@v3 with: - version: ${{ env.GOLANGCI_LINT_VERSION }} working-directory: ${{ matrix.gomod }} test: name: test - needs: matrix runs-on: ubuntu-latest - strategy: - matrix: - gomod: ${{ fromJson(needs.matrix.outputs.gomod) }} - env: - GOFLAGS: -mod=readonly - GOPROXY: https://proxy.golang.org steps: - uses: actions/checkout@v3 - uses: actions/setup-go@v3 with: - go-version: ${{ env.GO_VERSION }} + go-version-file: 'go.mod' - run: go test -v ./... From a0254caa6bee675fda411222a308ebd39d62095d Mon Sep 17 00:00:00 2001 From: Kevin Franklin Kim Date: Mon, 12 Sep 2022 08:36:21 +0200 Subject: [PATCH 14/14] feat: extract default http transport --- net/http/client.go | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/net/http/client.go b/net/http/client.go index 7ee3e1b..340e16f 100644 --- a/net/http/client.go +++ b/net/http/client.go @@ -232,19 +232,26 @@ func HTTPClientWithTelemetry(opts ...otelhttp.Option) HTTPClientOption { } } -func NewHTTPClient(opts ...HTTPClientOption) *http.Client { - transport := &http.Transport{ - Proxy: http.ProxyFromEnvironment, - DialContext: (&net.Dialer{ - Timeout: 45 * time.Second, - KeepAlive: 45 * time.Second, - }).DialContext, +func DefaultHTTPTransportDialer() *net.Dialer { + return &net.Dialer{ + Timeout: 45 * time.Second, + KeepAlive: 45 * time.Second, + } +} + +func DefaultHTTPTransport() *http.Transport { + return &http.Transport{ + Proxy: http.ProxyFromEnvironment, + DialContext: DefaultHTTPTransportDialer().DialContext, DisableKeepAlives: true, TLSHandshakeTimeout: 10 * time.Second, ExpectContinueTimeout: 5 * time.Second, } +} + +func NewHTTPClient(opts ...HTTPClientOption) *http.Client { inst := &http.Client{ - Transport: transport, + Transport: DefaultHTTPTransport(), Timeout: 2 * time.Minute, } for _, opt := range opts {