From adbdf267a584e243dbcf5006844532eacc9bba00 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 21 Nov 2024 22:15:46 +0100 Subject: [PATCH 1/8] fix(deps): update module github.com/vektra/mockery/v2 to v2.49.0 (#6232) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [github.com/vektra/mockery/v2](https://redirect.github.com/vektra/mockery) | `v2.48.0` -> `v2.49.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fvektra%2fmockery%2fv2/v2.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fvektra%2fmockery%2fv2/v2.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fvektra%2fmockery%2fv2/v2.48.0/v2.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fvektra%2fmockery%2fv2/v2.48.0/v2.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
vektra/mockery (github.com/vektra/mockery/v2) ### [`v2.49.0`](https://redirect.github.com/vektra/mockery/releases/tag/v2.49.0) [Compare Source](https://redirect.github.com/vektra/mockery/compare/v2.48.0...v2.49.0) #### Changelog - [`13fc607`](https://redirect.github.com/vektra/mockery/commit/13fc607) Add `resolve-type-alias` parameter - [`a27cb03`](https://redirect.github.com/vektra/mockery/commit/a27cb03) Merge pull request [#​843](https://redirect.github.com/vektra/mockery/issues/843) from LandonTClipp/LandonTClipp/issue\_839
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/jaegertracing/jaeger). --------- Signed-off-by: Mend Renovate Signed-off-by: Yuri Shkuro Co-authored-by: Yuri Shkuro --- .mockery.yaml | 6 ++++++ internal/tools/go.mod | 2 +- internal/tools/go.sum | 4 ++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.mockery.yaml b/.mockery.yaml index 48f9c27d4b9..cf4e9f0b10c 100644 --- a/.mockery.yaml +++ b/.mockery.yaml @@ -5,6 +5,12 @@ dir: "{{.InterfaceDir}}/mocks/" mockname: "{{.InterfaceName}}" filename: "{{.InterfaceName}}.go" boilerplate-file: .mockery.header.txt + +# Flags for future v3 compatibility. +# See https://github.com/vektra/mockery/issues/848 +issue-845-fix: true +resolve-type-alias: false + packages: github.com/jaegertracing/jaeger/cmd/collector/app/sanitizer/cache: interfaces: diff --git a/internal/tools/go.mod b/internal/tools/go.mod index faab7b9fed5..76cfbb14e05 100644 --- a/internal/tools/go.mod +++ b/internal/tools/go.mod @@ -5,7 +5,7 @@ go 1.23.0 require ( github.com/golangci/golangci-lint v1.62.0 github.com/josephspurrier/goversioninfo v1.4.1 - github.com/vektra/mockery/v2 v2.48.0 + github.com/vektra/mockery/v2 v2.49.0 mvdan.cc/gofumpt v0.7.0 ) diff --git a/internal/tools/go.sum b/internal/tools/go.sum index b15dc412e55..8961289417a 100644 --- a/internal/tools/go.sum +++ b/internal/tools/go.sum @@ -567,8 +567,8 @@ github.com/uudashr/gocognit v1.1.3 h1:l+a111VcDbKfynh+airAy/DJQKaXh2m9vkoysMPSZy github.com/uudashr/gocognit v1.1.3/go.mod h1:aKH8/e8xbTRBwjbCkwZ8qt4l2EpKXl31KMHgSS+lZ2U= github.com/uudashr/iface v1.2.0 h1:ECJjh5q/1Zmnv/2yFpWV6H3oMg5+Mo+vL0aqw9Gjazo= github.com/uudashr/iface v1.2.0/go.mod h1:Ux/7d/rAF3owK4m53cTVXL4YoVHKNqnoOeQHn2xrlp0= -github.com/vektra/mockery/v2 v2.48.0 h1:pBhvOqRbBVAAtg6SWiLzJhm1FqGptBObiNSRA3l8cFo= -github.com/vektra/mockery/v2 v2.48.0/go.mod h1:xO2DeYemEPC2tCzIZ+a1tifZ/7Laf/Chxg3vlc+oDsI= +github.com/vektra/mockery/v2 v2.49.0 h1:KFJKqRa0zd4h+ntM+JFr9Z6fIz++CUgAAogPWnwTwJY= +github.com/vektra/mockery/v2 v2.49.0/go.mod h1:xO2DeYemEPC2tCzIZ+a1tifZ/7Laf/Chxg3vlc+oDsI= github.com/xen0n/gosmopolitan v1.2.2 h1:/p2KTnMzwRexIW8GlKawsTWOxn7UHA+jCMF/V8HHtvU= github.com/xen0n/gosmopolitan v1.2.2/go.mod h1:7XX7Mj61uLYrj0qmeN0zi7XDon9JRAEhYQqAPLVNTeg= github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM= From edb896e9fed3a578045a8e1a5da968336f6b6f48 Mon Sep 17 00:00:00 2001 From: Mahad Zaryab <43658574+mahadzaryab1@users.noreply.github.com> Date: Fri, 22 Nov 2024 09:51:48 -0500 Subject: [PATCH 2/8] [fix][query] Fix misconfiguration in TLS settings from using OTEL HTTP helper (#6239) ## Which problem is this PR solving? - Fixes #6230 ## Description of the changes - This PR fixes an oversight that was made when migrating to OTEL's helpers for creating the HTTP server. OTEL's helper was adding TLS to the listener whereas we left the code to add TLS to the server. This was leading to the connection being in a weird state causing the bug in #6230. This PR simplifies the flow by doing the following: - We do not need to add TLS to the server because its added when the listener is initialized using `.ToListener()` - We do not need to call `ServeTLS` and can simply call `Serve` and TLS will be used when the connection is configured to do so (which it will be if the TLSSetting is set on the server). ## How was this change tested? Start the server by doing the following ``` go run ./cmd/all-in-one \ --query.http.tls.enabled=true \ --query.http.tls.cert=./pkg/config/tlscfg/testdata/example-server-cert.pem \ --query.http.tls.key=./pkg/config/tlscfg/testdata/example-server-key.pem ``` Send request with HTTP1.1 ``` curl -k --http1.1 https://localhost:16686/ > /dev/null % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 4454 0 4454 0 0 393k 0 --:--:-- --:--:-- --:--:-- 869k ``` Send request with HTTP2 (default) ``` curl -k --http2 https://localhost:16686/ > /dev/null % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 4454 0 4454 0 0 140k 0 --:--:-- --:--:-- --:--:-- 173k ``` ## Checklist - [x] I have read https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md - [x] I have signed all commits - [ ] I have added unit tests for the new functionality - [x] I have run lint and test steps successfully - for `jaeger`: `make lint test` - for `jaeger-ui`: `yarn lint` and `yarn test` --------- Signed-off-by: Mahad Zaryab --- cmd/query/app/server.go | 16 +--------------- cmd/query/app/server_test.go | 10 +++++++--- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/cmd/query/app/server.go b/cmd/query/app/server.go index 70dcecd86f4..8e971a6eb3e 100644 --- a/cmd/query/app/server.go +++ b/cmd/query/app/server.go @@ -228,15 +228,6 @@ func createHTTPServer( staticHandlerCloser: staticHandlerCloser, } - // TODO why doesn't OTEL helper do that already? - if queryOpts.HTTP.TLSSetting != nil { - tlsCfg, err := queryOpts.HTTP.TLSSetting.LoadTLSConfig(ctx) // This checks if the certificates are correctly provided - if err != nil { - return nil, errors.Join(err, staticHandlerCloser.Close()) - } - server.TLSConfig = tlsCfg - } - return server, nil } @@ -327,12 +318,7 @@ func (s *Server) Start(ctx context.Context) error { go func() { defer s.bgFinished.Done() s.Logger.Info("Starting HTTP server", zap.Int("port", httpPort), zap.String("addr", s.queryOptions.HTTP.Endpoint)) - var err error - if s.queryOptions.HTTP.TLSSetting != nil { - err = s.httpServer.ServeTLS(s.httpConn, "", "") - } else { - err = s.httpServer.Serve(s.httpConn) - } + err := s.httpServer.Serve(s.httpConn) if err != nil && !errors.Is(err, http.ErrServerClosed) && !errors.Is(err, cmux.ErrListenerClosed) && !errors.Is(err, cmux.ErrServerClosed) { s.Logger.Error("Could not start HTTP server", zap.Error(err)) s.ReportStatus(componentstatus.NewFatalErrorEvent(err)) diff --git a/cmd/query/app/server_test.go b/cmd/query/app/server_test.go index 1bbc9993724..8b925cc9a18 100644 --- a/cmd/query/app/server_test.go +++ b/cmd/query/app/server_test.go @@ -108,7 +108,7 @@ func TestCreateTLSGrpcServerError(t *testing.T) { require.Error(t, err) } -func TestCreateTLSHttpServerError(t *testing.T) { +func TestStartTLSHttpServerError(t *testing.T) { tlsCfg := configtls.ServerConfig{ ClientCAFile: "invalid/path", Config: configtls.Config{ @@ -117,12 +117,16 @@ func TestCreateTLSHttpServerError(t *testing.T) { }, } telset := initTelSet(zaptest.NewLogger(t), jtracer.NoOp(), healthcheck.New()) - _, err := NewServer(context.Background(), &querysvc.QueryService{}, nil, + s, err := NewServer(context.Background(), &querysvc.QueryService{}, nil, &QueryOptions{ HTTP: confighttp.ServerConfig{Endpoint: ":8080", TLSSetting: &tlsCfg}, GRPC: configgrpc.ServerConfig{NetAddr: confignet.AddrConfig{Endpoint: ":8081", Transport: confignet.TransportTypeTCP}}, }, tenancy.NewManager(&tenancy.Options{}), telset) - require.Error(t, err) + require.NoError(t, err) + require.Error(t, s.Start(context.Background())) + t.Cleanup(func() { + require.NoError(t, s.Close()) + }) } var testCases = []struct { From 7b4631c4d54f12f4194e701f50b66af1f1e0d499 Mon Sep 17 00:00:00 2001 From: Mahad Zaryab <43658574+mahadzaryab1@users.noreply.github.com> Date: Fri, 22 Nov 2024 20:19:44 -0500 Subject: [PATCH 3/8] [fix][test] Fix query server unit tests to check for status code (#6241) ## Which problem is this PR solving? - Resolves #6230 ## Description of the changes - We had a bug report come in #6230 which wasn't caught by our unit tests. The reason here was because the test was not checking the status code of the response received from the server but rather just the error returned from doing `Client.Do`. - - This PR also cleans up the tests to remove the manual dial call and an unnecessary filter in the test body. ## How was this change tested? - This test passes on main because of the patch that was landed in https://github.com/jaegertracing/jaeger/pull/6239. - To verify that this test would have caught the bug, I ran this test on the v1.63.0 release. Running this test caused failures in the following tests, all of which were returning `400` instead of `200`. ``` TestServerHTTPTLS/should_pass_with_TLS_client_to_trusted_TLS_server_with_correct_hostname TestServerHTTPTLS/should_pass_with_TLS_client_with_cert_to_trusted_TLS_server_requiring_cert TestServerHTTPTLS/should_pass_with_TLS_client_with_cert_to_trusted_TLS_HTTP_server_requiring_cert_and_insecure_GRPC_server ``` ## Checklist - [x] I have read https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md - [x] I have signed all commits - [x] I have added unit tests for the new functionality - [x] I have run lint and test steps successfully - for `jaeger`: `make lint test` - for `jaeger-ui`: `yarn lint` and `yarn test` --------- Signed-off-by: Mahad Zaryab --- cmd/query/app/server_test.go | 66 +++++++----------------------------- 1 file changed, 12 insertions(+), 54 deletions(-) diff --git a/cmd/query/app/server_test.go b/cmd/query/app/server_test.go index 8b925cc9a18..161aeca654d 100644 --- a/cmd/query/app/server_test.go +++ b/cmd/query/app/server_test.go @@ -6,7 +6,6 @@ package app import ( "bytes" "context" - "crypto/tls" "fmt" "net" "net/http" @@ -135,7 +134,6 @@ var testCases = []struct { HTTPTLSEnabled bool GRPCTLSEnabled bool clientTLS configtls.ClientConfig - expectError bool expectClientError bool expectServerFail bool }{ @@ -147,7 +145,6 @@ var testCases = []struct { clientTLS: configtls.ClientConfig{ Insecure: true, }, - expectError: false, expectClientError: false, expectServerFail: false, }, @@ -165,7 +162,6 @@ var testCases = []struct { Insecure: true, ServerName: "example.com", }, - expectError: true, expectClientError: true, expectServerFail: false, }, @@ -186,7 +182,6 @@ var testCases = []struct { CAFile: testCertKeyLocation + "/example-CA-cert.pem", }, }, - expectError: true, expectClientError: true, expectServerFail: false, }, @@ -207,7 +202,6 @@ var testCases = []struct { CAFile: testCertKeyLocation + "/example-CA-cert.pem", }, }, - expectError: false, expectClientError: false, expectServerFail: false, }, @@ -229,7 +223,6 @@ var testCases = []struct { CAFile: testCertKeyLocation + "/example-CA-cert.pem", }, }, - expectError: false, expectServerFail: false, expectClientError: true, }, @@ -253,7 +246,6 @@ var testCases = []struct { KeyFile: testCertKeyLocation + "/example-client-key.pem", }, }, - expectError: false, expectServerFail: false, expectClientError: false, }, @@ -278,7 +270,6 @@ var testCases = []struct { KeyFile: testCertKeyLocation + "/example-client-key.pem", }, }, - expectError: false, expectServerFail: false, expectClientError: true, }, @@ -302,7 +293,6 @@ var testCases = []struct { KeyFile: testCertKeyLocation + "/example-client-key.pem", }, }, - expectError: false, expectServerFail: false, expectClientError: false, }, @@ -326,7 +316,6 @@ var testCases = []struct { KeyFile: testCertKeyLocation + "/example-client-key.pem", }, }, - expectError: false, expectServerFail: false, expectClientError: false, }, @@ -362,7 +351,6 @@ func TestServerHTTPTLS(t *testing.T) { HTTPTLSEnabled bool GRPCTLSEnabled bool clientTLS configtls.ClientConfig - expectError bool expectClientError bool expectServerFail bool }, testlen) @@ -415,41 +403,9 @@ func TestServerHTTPTLS(t *testing.T) { require.NoError(t, server.Close()) }) - var clientError error - var clientClose func() error - var clientTLSCfg *tls.Config - - if serverOptions.HTTP.TLSSetting != nil { - var err0 error - clientTLSCfg, err0 = test.clientTLS.LoadTLSConfig(context.Background()) - - require.NoError(t, err0) - dialer := &net.Dialer{Timeout: 2 * time.Second} - conn, err1 := tls.DialWithDialer(dialer, "tcp", server.HTTPAddr(), clientTLSCfg) - clientError = err1 - clientClose = nil - if conn != nil { - clientClose = conn.Close - } - } else { - conn, err1 := net.DialTimeout("tcp", server.HTTPAddr(), 2*time.Second) - clientError = err1 - clientClose = nil - if conn != nil { - clientClose = conn.Close - } - } - - if test.expectError { - require.Error(t, clientError) - } else { - require.NoError(t, clientError) - } - if clientClose != nil { - require.NoError(t, clientClose()) - } - - if test.HTTPTLSEnabled && test.TLS.ClientCAFile != "" { + if test.HTTPTLSEnabled { + clientTLSCfg, err := test.clientTLS.LoadTLSConfig(context.Background()) + require.NoError(t, err) client := &http.Client{ Transport: &http.Transport{ TLSClientConfig: clientTLSCfg, @@ -461,15 +417,18 @@ func TestServerHTTPTLS(t *testing.T) { require.NoError(t, err) req.Header.Add("Accept", "application/json") - resp, err2 := client.Do(req) - if err2 == nil { - resp.Body.Close() - } + resp, err := client.Do(req) + t.Cleanup(func() { + if err == nil { + resp.Body.Close() + } + }) if test.expectClientError { - require.Error(t, err2) + require.Error(t, err) } else { - require.NoError(t, err2) + require.NoError(t, err) + require.Equal(t, http.StatusOK, resp.StatusCode) } } }) @@ -502,7 +461,6 @@ func TestServerGRPCTLS(t *testing.T) { HTTPTLSEnabled bool GRPCTLSEnabled bool clientTLS configtls.ClientConfig - expectError bool expectClientError bool expectServerFail bool }, testlen) From eba4b19dfe134fe4a1282e9e4bc1c3d782e7474b Mon Sep 17 00:00:00 2001 From: Zhang Xin Date: Sat, 23 Nov 2024 22:50:32 +0800 Subject: [PATCH 4/8] Allow using different container runtime (#6247) --- Makefile.Protobuf.mk | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile.Protobuf.mk b/Makefile.Protobuf.mk index 10ba6af1cb1..bb10b7d8ad0 100644 --- a/Makefile.Protobuf.mk +++ b/Makefile.Protobuf.mk @@ -14,9 +14,10 @@ # instead of the go_package's declared by the imported protof files. # +DOCKER=docker DOCKER_PROTOBUF_VERSION=0.5.0 DOCKER_PROTOBUF=jaegertracing/protobuf:$(DOCKER_PROTOBUF_VERSION) -PROTOC := docker run --rm -u ${shell id -u} -v${PWD}:${PWD} -w${PWD} ${DOCKER_PROTOBUF} --proto_path=${PWD} +PROTOC := ${DOCKER} run --rm -u ${shell id -u} -v${PWD}:${PWD} -w${PWD} ${DOCKER_PROTOBUF} --proto_path=${PWD} PATCHED_OTEL_PROTO_DIR = proto-gen/.patched-otel-proto From 7adbe757c7c80c2866f4ef93bbe01f20ea863be8 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Sat, 23 Nov 2024 15:51:10 +0100 Subject: [PATCH 5/8] fix(deps): update module github.com/stretchr/testify to v1.10.0 (#6246) --- go.mod | 2 +- go.sum | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 795f27a87da..97037398784 100644 --- a/go.mod +++ b/go.mod @@ -41,7 +41,7 @@ require ( github.com/spf13/cobra v1.8.1 github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.19.0 - github.com/stretchr/testify v1.9.0 + github.com/stretchr/testify v1.10.0 github.com/uber/jaeger-client-go v2.30.0+incompatible github.com/xdg-go/scram v1.1.2 go.opentelemetry.io/collector/component v0.114.0 diff --git a/go.sum b/go.sum index 43c7988e6fc..ed3c415d9c4 100644 --- a/go.sum +++ b/go.sum @@ -555,8 +555,9 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= From 3f8c2e71737892fa4682e83d0eaeebd62620b117 Mon Sep 17 00:00:00 2001 From: Zhang Xin Date: Sat, 23 Nov 2024 23:10:16 +0800 Subject: [PATCH 6/8] [storage_v1] Add time window to GetTraceRequest (#6244) --- plugin/storage/grpc/proto/storage.proto | 8 + plugin/storage/grpc/proto/storage_test.proto | 4 + .../grpc/proto/storage_v1/storage_test.go | 11 +- .../proto/storageprototest/storage_test.pb.go | 55 +++- proto-gen/storage_v1/storage.pb.go | 283 ++++++++++++------ 5 files changed, 256 insertions(+), 105 deletions(-) diff --git a/plugin/storage/grpc/proto/storage.proto b/plugin/storage/grpc/proto/storage.proto index 51c804948fb..7491b665043 100644 --- a/plugin/storage/grpc/proto/storage.proto +++ b/plugin/storage/grpc/proto/storage.proto @@ -72,6 +72,14 @@ message GetTraceRequest { (gogoproto.customtype) = "github.com/jaegertracing/jaeger/model.TraceID", (gogoproto.customname) = "TraceID" ]; + google.protobuf.Timestamp start_time = 2 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false + ]; + google.protobuf.Timestamp end_time = 3 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false + ]; } message GetServicesRequest {} diff --git a/plugin/storage/grpc/proto/storage_test.proto b/plugin/storage/grpc/proto/storage_test.proto index b279e05dbab..49d001975c4 100644 --- a/plugin/storage/grpc/proto/storage_test.proto +++ b/plugin/storage/grpc/proto/storage_test.proto @@ -18,6 +18,10 @@ package storageprototest; option go_package = "./storageprototest"; +import "google/protobuf/timestamp.proto"; + message GetTraceRequest { bytes trace_id = 1; + google.protobuf.Timestamp start_time = 2; + google.protobuf.Timestamp end_time = 3; } diff --git a/plugin/storage/grpc/proto/storage_v1/storage_test.go b/plugin/storage/grpc/proto/storage_v1/storage_test.go index 6d5be333e76..12aff133c26 100644 --- a/plugin/storage/grpc/proto/storage_v1/storage_test.go +++ b/plugin/storage/grpc/proto/storage_v1/storage_test.go @@ -10,6 +10,7 @@ import ( "github.com/gogo/protobuf/proto" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "google.golang.org/protobuf/types/known/timestamppb" "github.com/jaegertracing/jaeger/model" "github.com/jaegertracing/jaeger/pkg/testutils" @@ -31,9 +32,15 @@ func TestGetTraceRequestMarshalProto(t *testing.T) { } for _, testCase := range testCases { t.Run(testCase.name, func(t *testing.T) { - ref1 := storage_v1.GetTraceRequest{TraceID: model.NewTraceID(2, 3)} + ref1 := storage_v1.GetTraceRequest{ + TraceID: model.NewTraceID(2, 3), + StartTime: time.Unix(1, 2).UTC(), + EndTime: time.Unix(3, 4).UTC(), + } ref2 := storageprototest.GetTraceRequest{ - TraceId: []byte{0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3}, + TraceId: []byte{0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3}, + StartTime: timestamppb.New(time.Unix(1, 2).UTC()), + EndTime: timestamppb.New(time.Unix(3, 4).UTC()), } d1, err := testCase.marshal(&ref1) require.NoError(t, err) diff --git a/plugin/storage/grpc/proto/storageprototest/storage_test.pb.go b/plugin/storage/grpc/proto/storageprototest/storage_test.pb.go index 369e573cf8f..d2c84edaec3 100644 --- a/plugin/storage/grpc/proto/storageprototest/storage_test.pb.go +++ b/plugin/storage/grpc/proto/storageprototest/storage_test.pb.go @@ -23,6 +23,7 @@ package storageprototest import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) @@ -39,7 +40,9 @@ type GetTraceRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - TraceId []byte `protobuf:"bytes,1,opt,name=trace_id,json=traceId,proto3" json:"trace_id,omitempty"` + TraceId []byte `protobuf:"bytes,1,opt,name=trace_id,json=traceId,proto3" json:"trace_id,omitempty"` + StartTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` + EndTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"` } func (x *GetTraceRequest) Reset() { @@ -81,17 +84,40 @@ func (x *GetTraceRequest) GetTraceId() []byte { return nil } +func (x *GetTraceRequest) GetStartTime() *timestamppb.Timestamp { + if x != nil { + return x.StartTime + } + return nil +} + +func (x *GetTraceRequest) GetEndTime() *timestamppb.Timestamp { + if x != nil { + return x.EndTime + } + return nil +} + var File_storage_test_proto protoreflect.FileDescriptor var file_storage_test_proto_rawDesc = []byte{ 0x0a, 0x12, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x74, 0x65, 0x73, 0x74, 0x22, 0x2c, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, - 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x61, - 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x74, 0x72, 0x61, - 0x63, 0x65, 0x49, 0x64, 0x42, 0x14, 0x5a, 0x12, 0x2e, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x74, 0x65, 0x73, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x74, 0x6f, 0x74, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9e, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x54, + 0x72, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, + 0x72, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x74, + 0x72, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x14, 0x5a, 0x12, 0x2e, 0x2f, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x74, 0x65, 0x73, 0x74, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -108,14 +134,17 @@ func file_storage_test_proto_rawDescGZIP() []byte { var file_storage_test_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_storage_test_proto_goTypes = []interface{}{ - (*GetTraceRequest)(nil), // 0: storageprototest.GetTraceRequest + (*GetTraceRequest)(nil), // 0: storageprototest.GetTraceRequest + (*timestamppb.Timestamp)(nil), // 1: google.protobuf.Timestamp } var file_storage_test_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name + 1, // 0: storageprototest.GetTraceRequest.start_time:type_name -> google.protobuf.Timestamp + 1, // 1: storageprototest.GetTraceRequest.end_time:type_name -> google.protobuf.Timestamp + 2, // [2:2] is the sub-list for method output_type + 2, // [2:2] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name } func init() { file_storage_test_proto_init() } diff --git a/proto-gen/storage_v1/storage.pb.go b/proto-gen/storage_v1/storage.pb.go index 5564abb7ed4..72e11ee49ce 100644 --- a/proto-gen/storage_v1/storage.pb.go +++ b/proto-gen/storage_v1/storage.pb.go @@ -304,6 +304,8 @@ var xxx_messageInfo_CloseWriterResponse proto.InternalMessageInfo type GetTraceRequest struct { TraceID github_com_jaegertracing_jaeger_model.TraceID `protobuf:"bytes,1,opt,name=trace_id,json=traceId,proto3,customtype=github.com/jaegertracing/jaeger/model.TraceID" json:"trace_id"` + StartTime time.Time `protobuf:"bytes,2,opt,name=start_time,json=startTime,proto3,stdtime" json:"start_time"` + EndTime time.Time `protobuf:"bytes,3,opt,name=end_time,json=endTime,proto3,stdtime" json:"end_time"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -342,6 +344,20 @@ func (m *GetTraceRequest) XXX_DiscardUnknown() { var xxx_messageInfo_GetTraceRequest proto.InternalMessageInfo +func (m *GetTraceRequest) GetStartTime() time.Time { + if m != nil { + return m.StartTime + } + return time.Time{} +} + +func (m *GetTraceRequest) GetEndTime() time.Time { + if m != nil { + return m.EndTime + } + return time.Time{} +} + type GetServicesRequest struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1006,77 +1022,78 @@ func init() { func init() { proto.RegisterFile("storage.proto", fileDescriptor_0d2c4ccf1453ffdb) } var fileDescriptor_0d2c4ccf1453ffdb = []byte{ - // 1117 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0x4f, 0x6f, 0xdc, 0xc4, - 0x1b, 0xfe, 0x39, 0xd9, 0x6d, 0x76, 0xdf, 0xdd, 0xb4, 0xc9, 0xec, 0xf6, 0x57, 0xd7, 0xd0, 0x24, - 0x18, 0x9a, 0x04, 0x04, 0xde, 0x66, 0x39, 0x80, 0xa0, 0x08, 0x9a, 0x3f, 0x8d, 0x02, 0x14, 0x8a, - 0x13, 0xb5, 0x12, 0x85, 0xac, 0x66, 0xe3, 0xc1, 0x19, 0xb2, 0x1e, 0x6f, 0xed, 0xf1, 0x2a, 0x11, - 0xe2, 0xc6, 0x07, 0xe0, 0xc8, 0x89, 0x13, 0x12, 0xdf, 0x83, 0x53, 0x8f, 0x9c, 0x39, 0x04, 0x94, - 0x2b, 0x5f, 0x02, 0x79, 0x66, 0xec, 0xd8, 0x6b, 0x2b, 0x49, 0xa3, 0xdc, 0x3c, 0xef, 0x3c, 0xf3, - 0xbc, 0xff, 0x66, 0x9e, 0xd7, 0x30, 0x1d, 0x72, 0x3f, 0xc0, 0x2e, 0xb1, 0x86, 0x81, 0xcf, 0x7d, - 0x34, 0xfb, 0x3d, 0x26, 0x2e, 0x09, 0xac, 0xc4, 0x3a, 0x5a, 0x31, 0xda, 0xae, 0xef, 0xfa, 0x62, - 0xb7, 0x13, 0x7f, 0x49, 0xa0, 0x31, 0xef, 0xfa, 0xbe, 0x3b, 0x20, 0x1d, 0xb1, 0xea, 0x47, 0xdf, - 0x75, 0x38, 0xf5, 0x48, 0xc8, 0xb1, 0x37, 0x54, 0x80, 0xb9, 0x71, 0x80, 0x13, 0x05, 0x98, 0x53, - 0x9f, 0xa9, 0xfd, 0x86, 0xe7, 0x3b, 0x64, 0x20, 0x17, 0xe6, 0xaf, 0x1a, 0xfc, 0x7f, 0x93, 0xf0, - 0x75, 0x32, 0x24, 0xcc, 0x21, 0x6c, 0x8f, 0x92, 0xd0, 0x26, 0xcf, 0x23, 0x12, 0x72, 0xb4, 0x06, - 0x10, 0x72, 0x1c, 0xf0, 0x5e, 0xec, 0x40, 0xd7, 0x16, 0xb4, 0xe5, 0x46, 0xd7, 0xb0, 0x24, 0xb9, - 0x95, 0x90, 0x5b, 0x3b, 0x89, 0xf7, 0xd5, 0xda, 0x8b, 0xe3, 0xf9, 0xff, 0xfd, 0xfc, 0xf7, 0xbc, - 0x66, 0xd7, 0xc5, 0xb9, 0x78, 0x07, 0x7d, 0x0c, 0x35, 0xc2, 0x1c, 0x49, 0x31, 0xf1, 0x12, 0x14, - 0x53, 0x84, 0x39, 0xb1, 0xdd, 0xec, 0xc3, 0xad, 0x42, 0x7c, 0xe1, 0xd0, 0x67, 0x21, 0x41, 0x9b, - 0xd0, 0x74, 0x32, 0x76, 0x5d, 0x5b, 0x98, 0x5c, 0x6e, 0x74, 0xef, 0x58, 0xaa, 0x92, 0x78, 0x48, - 0x7b, 0xa3, 0xae, 0x95, 0x1e, 0x3d, 0xfa, 0x9c, 0xb2, 0x83, 0xd5, 0x4a, 0xec, 0xc2, 0xce, 0x1d, - 0x34, 0x3f, 0x84, 0x99, 0xa7, 0x01, 0xe5, 0x64, 0x7b, 0x88, 0x59, 0x92, 0xfd, 0x12, 0x54, 0xc2, - 0x21, 0x66, 0x2a, 0xef, 0xd6, 0x18, 0xa9, 0x40, 0x0a, 0x80, 0xd9, 0x82, 0xd9, 0xcc, 0x61, 0x19, - 0x9a, 0xd9, 0x06, 0xb4, 0x36, 0xf0, 0x43, 0x22, 0x76, 0x02, 0xc5, 0x69, 0xde, 0x84, 0x56, 0xce, - 0xaa, 0xc0, 0x0c, 0x6e, 0x6c, 0x12, 0xbe, 0x13, 0xe0, 0x3d, 0x92, 0x78, 0x7f, 0x06, 0x35, 0x1e, - 0xaf, 0x7b, 0xd4, 0x11, 0x11, 0x34, 0x57, 0x3f, 0x89, 0xe3, 0xfe, 0xeb, 0x78, 0xfe, 0x1d, 0x97, - 0xf2, 0xfd, 0xa8, 0x6f, 0xed, 0xf9, 0x5e, 0x47, 0xc6, 0x14, 0x03, 0x29, 0x73, 0xd5, 0xaa, 0x23, - 0xbb, 0x2b, 0xd8, 0xb6, 0xd6, 0x4f, 0x8e, 0xe7, 0xa7, 0xd4, 0xa7, 0x3d, 0x25, 0x18, 0xb7, 0x9c, - 0x38, 0xb8, 0x4d, 0xc2, 0xb7, 0x49, 0x30, 0xa2, 0x7b, 0x69, 0xbb, 0xcd, 0x15, 0x68, 0xe5, 0xac, - 0xaa, 0xc8, 0x06, 0xd4, 0x42, 0x65, 0x13, 0x05, 0xae, 0xdb, 0xe9, 0xda, 0x7c, 0x04, 0xed, 0x4d, - 0xc2, 0xbf, 0x1c, 0x12, 0x79, 0xbf, 0xd2, 0x9b, 0xa3, 0xc3, 0x94, 0xc2, 0x88, 0xe0, 0xeb, 0x76, - 0xb2, 0x44, 0xaf, 0x40, 0x3d, 0x2e, 0x5a, 0xef, 0x80, 0x32, 0x47, 0xdc, 0x87, 0x98, 0x6e, 0x88, - 0xd9, 0x67, 0x94, 0x39, 0xe6, 0x7d, 0xa8, 0xa7, 0x5c, 0x08, 0x41, 0x85, 0x61, 0x2f, 0x21, 0x10, - 0xdf, 0x67, 0x9f, 0xfe, 0x11, 0x6e, 0x8e, 0x05, 0xa3, 0x32, 0x58, 0x84, 0xeb, 0x7e, 0x62, 0xfd, - 0x02, 0x7b, 0x69, 0x1e, 0x63, 0x56, 0x74, 0x1f, 0x20, 0xb5, 0x84, 0xfa, 0x84, 0xb8, 0x4c, 0xaf, - 0x5a, 0x85, 0x67, 0x69, 0xa5, 0x2e, 0xec, 0x0c, 0xde, 0xfc, 0xbd, 0x02, 0x6d, 0x51, 0xe9, 0xaf, - 0x22, 0x12, 0x1c, 0x3d, 0xc6, 0x01, 0xf6, 0x08, 0x27, 0x41, 0x88, 0x5e, 0x83, 0xa6, 0xca, 0xbe, - 0x97, 0x49, 0xa8, 0xa1, 0x6c, 0xb1, 0x6b, 0x74, 0x37, 0x13, 0xa1, 0x04, 0xc9, 0xe4, 0xa6, 0x73, - 0x11, 0xa2, 0x0d, 0xa8, 0x70, 0xec, 0x86, 0xfa, 0xa4, 0x08, 0x6d, 0xa5, 0x24, 0xb4, 0xb2, 0x00, - 0xac, 0x1d, 0xec, 0x86, 0x1b, 0x8c, 0x07, 0x47, 0xb6, 0x38, 0x8e, 0x3e, 0x85, 0xeb, 0xa7, 0xef, - 0xba, 0xe7, 0x51, 0xa6, 0x57, 0x5e, 0xe2, 0x61, 0x36, 0xd3, 0xb7, 0xfd, 0x88, 0xb2, 0x71, 0x2e, - 0x7c, 0xa8, 0x57, 0x2f, 0xc7, 0x85, 0x0f, 0xd1, 0x43, 0x68, 0x26, 0x4a, 0x25, 0xa2, 0xba, 0x26, - 0x98, 0x6e, 0x17, 0x98, 0xd6, 0x15, 0x48, 0x12, 0xfd, 0x12, 0x13, 0x35, 0x92, 0x83, 0x71, 0x4c, - 0x39, 0x1e, 0x7c, 0xa8, 0x4f, 0x5d, 0x86, 0x07, 0x1f, 0xa2, 0x3b, 0x00, 0x2c, 0xf2, 0x7a, 0xe2, - 0xd5, 0x84, 0x7a, 0x6d, 0x41, 0x5b, 0xae, 0xda, 0x75, 0x16, 0x79, 0xa2, 0xc8, 0xa1, 0xf1, 0x1e, - 0xd4, 0xd3, 0xca, 0xa2, 0x19, 0x98, 0x3c, 0x20, 0x47, 0xaa, 0xb7, 0xf1, 0x27, 0x6a, 0x43, 0x75, - 0x84, 0x07, 0x51, 0xd2, 0x4a, 0xb9, 0xf8, 0x60, 0xe2, 0x7d, 0xcd, 0xb4, 0x61, 0xf6, 0x21, 0x65, - 0x8e, 0xa4, 0x49, 0x9e, 0xcc, 0x47, 0x50, 0x7d, 0x1e, 0xf7, 0x4d, 0xe9, 0xcd, 0xd2, 0x05, 0x9b, - 0x6b, 0xcb, 0x53, 0xe6, 0x06, 0xa0, 0x58, 0x7f, 0xd2, 0x4b, 0xbf, 0xb6, 0x1f, 0xb1, 0x03, 0xd4, - 0x81, 0x6a, 0xfc, 0x3c, 0x12, 0x65, 0x2c, 0x13, 0x31, 0xa5, 0x87, 0x12, 0x67, 0xee, 0x40, 0x2b, - 0x0d, 0x6d, 0x6b, 0xfd, 0xaa, 0x82, 0x1b, 0x41, 0x3b, 0xcf, 0xaa, 0x1e, 0xe6, 0x2e, 0xd4, 0x13, - 0x91, 0x93, 0x21, 0x36, 0x57, 0x1f, 0x5c, 0x56, 0xe5, 0x6a, 0x29, 0x7b, 0x4d, 0xc9, 0x5c, 0x28, - 0xe4, 0x16, 0x0f, 0x71, 0x9f, 0x0e, 0x28, 0x3f, 0x9d, 0x6b, 0xe6, 0x6f, 0x1a, 0xb4, 0xf3, 0x76, - 0x15, 0xcf, 0xdb, 0x30, 0x8b, 0x83, 0xbd, 0x7d, 0x3a, 0x52, 0x5a, 0x8e, 0x1d, 0x12, 0x88, 0x94, - 0x6b, 0x76, 0x71, 0x63, 0x0c, 0x2d, 0x25, 0x5d, 0x34, 0x3b, 0x8f, 0x96, 0x1b, 0xe8, 0x1e, 0xb4, - 0x42, 0x1e, 0x10, 0xec, 0x51, 0xe6, 0x66, 0xf0, 0x93, 0x02, 0x5f, 0xb6, 0xd5, 0xfd, 0x43, 0x83, - 0x99, 0xd3, 0xe5, 0xe3, 0x41, 0xe4, 0x52, 0x86, 0x9e, 0x40, 0x3d, 0x1d, 0x36, 0xe8, 0xf5, 0x92, - 0x3e, 0x8c, 0xcf, 0x31, 0xe3, 0x8d, 0xb3, 0x41, 0x2a, 0xf5, 0x27, 0x50, 0x15, 0x93, 0x09, 0xdd, - 0x2d, 0x81, 0x17, 0x27, 0x99, 0xb1, 0x78, 0x1e, 0x4c, 0xf2, 0x76, 0x7f, 0x80, 0xdb, 0xdb, 0xc5, - 0xdc, 0x54, 0x32, 0xbb, 0x70, 0x23, 0x8d, 0x44, 0xa2, 0xae, 0x30, 0xa5, 0x65, 0xad, 0xfb, 0xef, - 0xa4, 0xac, 0xa0, 0x6c, 0x98, 0x72, 0xfa, 0x14, 0x6a, 0xc9, 0xb0, 0x45, 0x66, 0x09, 0xd1, 0xd8, - 0x24, 0x36, 0xca, 0x0a, 0x52, 0x7c, 0x6a, 0xf7, 0x34, 0xf4, 0x0d, 0x34, 0x32, 0xf3, 0xb3, 0xb4, - 0x90, 0xc5, 0xa9, 0x5b, 0x5a, 0xc8, 0xb2, 0x31, 0xdc, 0x87, 0xe9, 0xdc, 0x74, 0x43, 0x4b, 0xe5, - 0x07, 0x0b, 0xc3, 0xd8, 0x58, 0x3e, 0x1f, 0xa8, 0x7c, 0x3c, 0x03, 0x38, 0x15, 0x26, 0x54, 0x56, - 0xe5, 0x82, 0x6e, 0x5d, 0xbc, 0x3c, 0x3d, 0x68, 0x66, 0x45, 0x00, 0x2d, 0x9e, 0x45, 0x7f, 0xaa, - 0x3d, 0xc6, 0xd2, 0xb9, 0x38, 0x75, 0xd5, 0x0e, 0xe1, 0xd6, 0x83, 0xf1, 0x67, 0xa7, 0x7a, 0xfe, - 0xad, 0xfa, 0xbf, 0xcb, 0xec, 0x5f, 0xe1, 0x4d, 0xeb, 0x1e, 0xe5, 0x3c, 0xe7, 0x6e, 0xdb, 0xae, - 0xf8, 0xb5, 0x53, 0xbb, 0x57, 0x7f, 0xe9, 0xba, 0x3f, 0x69, 0xa0, 0xe7, 0xff, 0x8d, 0x33, 0xce, - 0xf7, 0x85, 0xf3, 0xec, 0x36, 0x7a, 0xb3, 0xdc, 0x79, 0xc9, 0xef, 0xbf, 0xf1, 0xd6, 0x45, 0xa0, - 0xaa, 0x02, 0x11, 0x20, 0xe9, 0x33, 0xab, 0xab, 0x71, 0xcb, 0x73, 0xeb, 0x52, 0xd1, 0x28, 0x0a, - 0x74, 0x69, 0xcb, 0xcb, 0x04, 0x7b, 0x55, 0x7f, 0x71, 0x32, 0xa7, 0xfd, 0x79, 0x32, 0xa7, 0xfd, - 0x73, 0x32, 0xa7, 0x7d, 0x0d, 0x0a, 0xde, 0x1b, 0xad, 0xf4, 0xaf, 0x89, 0x29, 0xff, 0xee, 0x7f, - 0x01, 0x00, 0x00, 0xff, 0xff, 0x6c, 0xa3, 0xc0, 0x72, 0x65, 0x0d, 0x00, 0x00, + // 1128 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x4f, 0x73, 0xdb, 0x44, + 0x14, 0x47, 0xb1, 0xdd, 0xd8, 0xcf, 0x4e, 0x9b, 0xac, 0x5d, 0xaa, 0x0a, 0x9a, 0x04, 0x41, 0x93, + 0xc0, 0x80, 0xdc, 0x98, 0x03, 0x0c, 0x94, 0x81, 0xe6, 0x4f, 0x33, 0x01, 0x0a, 0x45, 0xc9, 0xb4, + 0x33, 0x14, 0xe2, 0x59, 0x47, 0x8b, 0x22, 0x62, 0xad, 0x5c, 0x69, 0xe5, 0x49, 0x86, 0xe1, 0xc6, + 0x07, 0xe0, 0xc8, 0x89, 0x13, 0x33, 0x7c, 0x0f, 0x4e, 0x3d, 0x72, 0xe6, 0x10, 0x98, 0x5c, 0xb9, + 0xf2, 0x01, 0x18, 0xed, 0xae, 0x14, 0xfd, 0x9b, 0x24, 0x4d, 0x73, 0xf3, 0xbe, 0xf7, 0xdb, 0xdf, + 0xfb, 0xbb, 0xef, 0xc9, 0x30, 0x15, 0x30, 0xcf, 0xc7, 0x36, 0x31, 0x46, 0xbe, 0xc7, 0x3c, 0x34, + 0xf3, 0x3d, 0x26, 0x36, 0xf1, 0x8d, 0x58, 0x3a, 0x5e, 0xd6, 0x3a, 0xb6, 0x67, 0x7b, 0x5c, 0xdb, + 0x8d, 0x7e, 0x09, 0xa0, 0x36, 0x67, 0x7b, 0x9e, 0x3d, 0x24, 0x5d, 0x7e, 0x1a, 0x84, 0xdf, 0x75, + 0x99, 0xe3, 0x92, 0x80, 0x61, 0x77, 0x24, 0x01, 0xb3, 0x79, 0x80, 0x15, 0xfa, 0x98, 0x39, 0x1e, + 0x95, 0xfa, 0xa6, 0xeb, 0x59, 0x64, 0x28, 0x0e, 0xfa, 0xaf, 0x0a, 0xbc, 0xbc, 0x41, 0xd8, 0x1a, + 0x19, 0x11, 0x6a, 0x11, 0xba, 0xeb, 0x90, 0xc0, 0x24, 0x4f, 0x43, 0x12, 0x30, 0xb4, 0x0a, 0x10, + 0x30, 0xec, 0xb3, 0x7e, 0x64, 0x40, 0x55, 0xe6, 0x95, 0xa5, 0x66, 0x4f, 0x33, 0x04, 0xb9, 0x11, + 0x93, 0x1b, 0xdb, 0xb1, 0xf5, 0x95, 0xfa, 0xb3, 0xa3, 0xb9, 0x97, 0x7e, 0xfe, 0x7b, 0x4e, 0x31, + 0x1b, 0xfc, 0x5e, 0xa4, 0x41, 0x1f, 0x43, 0x9d, 0x50, 0x4b, 0x50, 0x4c, 0x3c, 0x07, 0xc5, 0x24, + 0xa1, 0x56, 0x24, 0xd7, 0x07, 0x70, 0xa3, 0xe0, 0x5f, 0x30, 0xf2, 0x68, 0x40, 0xd0, 0x06, 0xb4, + 0xac, 0x94, 0x5c, 0x55, 0xe6, 0x2b, 0x4b, 0xcd, 0xde, 0x2d, 0x43, 0x66, 0x12, 0x8f, 0x9c, 0xfe, + 0xb8, 0x67, 0x24, 0x57, 0x0f, 0x3f, 0x77, 0xe8, 0xfe, 0x4a, 0x35, 0x32, 0x61, 0x66, 0x2e, 0xea, + 0x1f, 0xc2, 0xf4, 0x63, 0xdf, 0x61, 0x64, 0x6b, 0x84, 0x69, 0x1c, 0xfd, 0x22, 0x54, 0x83, 0x11, + 0xa6, 0x32, 0xee, 0x76, 0x8e, 0x94, 0x23, 0x39, 0x40, 0x6f, 0xc3, 0x4c, 0xea, 0xb2, 0x70, 0x4d, + 0xef, 0x00, 0x5a, 0x1d, 0x7a, 0x01, 0xe1, 0x1a, 0x5f, 0x72, 0xea, 0xd7, 0xa1, 0x9d, 0x91, 0x4a, + 0xf0, 0x7f, 0x0a, 0x5c, 0xdb, 0x20, 0x6c, 0xdb, 0xc7, 0xbb, 0x24, 0x36, 0xff, 0x04, 0xea, 0x2c, + 0x3a, 0xf7, 0x1d, 0x8b, 0xbb, 0xd0, 0x5a, 0xf9, 0x24, 0x72, 0xfc, 0xaf, 0xa3, 0xb9, 0x77, 0x6c, + 0x87, 0xed, 0x85, 0x03, 0x63, 0xd7, 0x73, 0xbb, 0xc2, 0xa9, 0x08, 0xe8, 0x50, 0x5b, 0x9e, 0xba, + 0xa2, 0xbc, 0x9c, 0x6d, 0x73, 0xed, 0xf8, 0x68, 0x6e, 0x52, 0xfe, 0x34, 0x27, 0x39, 0xe3, 0xa6, + 0x95, 0xab, 0xec, 0xc4, 0x8b, 0x57, 0xb6, 0x72, 0x91, 0xca, 0x76, 0x00, 0x6d, 0x10, 0xb6, 0x45, + 0xfc, 0xb1, 0xb3, 0x9b, 0x74, 0x9d, 0xbe, 0x0c, 0xed, 0x8c, 0x54, 0xd6, 0x5a, 0x83, 0x7a, 0x20, + 0x65, 0xbc, 0xce, 0x0d, 0x33, 0x39, 0xeb, 0x0f, 0xa0, 0xb3, 0x41, 0xd8, 0x97, 0x23, 0x22, 0xda, + 0x3c, 0x69, 0x60, 0x15, 0x26, 0x25, 0x86, 0xa7, 0xb0, 0x61, 0xc6, 0x47, 0xf4, 0x0a, 0x34, 0xa2, + 0xda, 0xf5, 0xf7, 0x1d, 0x6a, 0xf1, 0xf8, 0x23, 0xba, 0x11, 0xa6, 0x9f, 0x39, 0xd4, 0xd2, 0xef, + 0x42, 0x23, 0xe1, 0x42, 0x08, 0xaa, 0x14, 0xbb, 0x31, 0x01, 0xff, 0x7d, 0xfa, 0xed, 0x1f, 0xe1, + 0x7a, 0xce, 0x19, 0x19, 0xc1, 0x02, 0x5c, 0xf5, 0x62, 0xe9, 0x17, 0xd8, 0x4d, 0xe2, 0xc8, 0x49, + 0xd1, 0x5d, 0x80, 0x44, 0x12, 0xa8, 0x13, 0xbc, 0xa7, 0x5f, 0x35, 0x0a, 0xd3, 0xc1, 0x48, 0x4c, + 0x98, 0x29, 0xbc, 0xfe, 0x7b, 0x15, 0x3a, 0xbc, 0xde, 0x5f, 0x85, 0xc4, 0x3f, 0x7c, 0x88, 0x7d, + 0xec, 0x12, 0x46, 0xfc, 0x00, 0xbd, 0x06, 0x2d, 0x19, 0x7d, 0x3f, 0x15, 0x50, 0x53, 0xca, 0x22, + 0xd3, 0xe8, 0x76, 0xca, 0x43, 0x01, 0x12, 0xc1, 0x4d, 0x65, 0x3c, 0x44, 0xeb, 0x50, 0x65, 0xd8, + 0x0e, 0xd4, 0x0a, 0x77, 0x6d, 0xb9, 0xc4, 0xb5, 0x32, 0x07, 0x8c, 0x6d, 0x6c, 0x07, 0xeb, 0x94, + 0xf9, 0x87, 0x26, 0xbf, 0x8e, 0x3e, 0x85, 0xab, 0x27, 0x4d, 0xd8, 0x77, 0x1d, 0xaa, 0x56, 0x9f, + 0xa3, 0x8b, 0x5a, 0x49, 0x23, 0x3e, 0x70, 0x68, 0x9e, 0x0b, 0x1f, 0xa8, 0xb5, 0x8b, 0x71, 0xe1, + 0x03, 0x74, 0x1f, 0x5a, 0xf1, 0xc0, 0xe4, 0x5e, 0x5d, 0xe1, 0x4c, 0x37, 0x0b, 0x4c, 0x6b, 0x12, + 0x24, 0x88, 0x7e, 0x89, 0x88, 0x9a, 0xf1, 0xc5, 0xc8, 0xa7, 0x0c, 0x0f, 0x3e, 0x50, 0x27, 0x2f, + 0xc2, 0x83, 0x0f, 0xd0, 0x2d, 0x00, 0x1a, 0xba, 0x7d, 0xfe, 0x76, 0x03, 0xb5, 0x3e, 0xaf, 0x2c, + 0xd5, 0xcc, 0x06, 0x0d, 0x5d, 0x9e, 0xe4, 0x40, 0x7b, 0x0f, 0x1a, 0x49, 0x66, 0xd1, 0x34, 0x54, + 0xf6, 0xc9, 0xa1, 0xac, 0x6d, 0xf4, 0x13, 0x75, 0xa0, 0x36, 0xc6, 0xc3, 0x30, 0x2e, 0xa5, 0x38, + 0x7c, 0x30, 0xf1, 0xbe, 0xa2, 0x9b, 0x30, 0x73, 0xdf, 0xa1, 0x96, 0xa0, 0x89, 0x9f, 0xcc, 0x47, + 0x50, 0x7b, 0x1a, 0xd5, 0x4d, 0x8e, 0xbd, 0xc5, 0x73, 0x16, 0xd7, 0x14, 0xb7, 0xf4, 0x75, 0x40, + 0xd1, 0x18, 0x4c, 0x9a, 0x7e, 0x75, 0x2f, 0xa4, 0xfb, 0xa8, 0x0b, 0xb5, 0xe8, 0x79, 0xc4, 0x03, + 0xba, 0x6c, 0x96, 0xca, 0xb1, 0x2c, 0x70, 0xfa, 0x36, 0xb4, 0x13, 0xd7, 0x36, 0xd7, 0x2e, 0xcb, + 0xb9, 0x31, 0x74, 0xb2, 0xac, 0xf2, 0x61, 0xee, 0x40, 0x23, 0x1e, 0xb5, 0xc2, 0xc5, 0xd6, 0xca, + 0xbd, 0x8b, 0xce, 0xda, 0x7a, 0xc2, 0x5e, 0x97, 0xc3, 0x36, 0xe0, 0x53, 0x1f, 0x8f, 0xf0, 0xc0, + 0x19, 0x3a, 0xec, 0x64, 0xbd, 0xea, 0xbf, 0x29, 0xd0, 0xc9, 0xca, 0xa5, 0x3f, 0x6f, 0xc3, 0x0c, + 0xf6, 0x77, 0xf7, 0x9c, 0xb1, 0x5c, 0x29, 0xd8, 0x22, 0x3e, 0x0f, 0xb9, 0x6e, 0x16, 0x15, 0x39, + 0xb4, 0xd8, 0x2c, 0xbc, 0xd8, 0x59, 0xb4, 0x50, 0xa0, 0x3b, 0xd0, 0x0e, 0x98, 0x4f, 0xb0, 0xeb, + 0x50, 0x3b, 0x85, 0xaf, 0x70, 0x7c, 0x99, 0xaa, 0xf7, 0x87, 0x02, 0xd3, 0x27, 0xc7, 0x87, 0xc3, + 0xd0, 0x76, 0x28, 0x7a, 0x04, 0x8d, 0x64, 0xe7, 0xa1, 0xd7, 0x4b, 0xea, 0x90, 0x5f, 0xa7, 0xda, + 0x1b, 0xa7, 0x83, 0x64, 0xe8, 0x8f, 0xa0, 0xc6, 0x17, 0x24, 0xba, 0x5d, 0x02, 0x2f, 0x2e, 0x54, + 0x6d, 0xe1, 0x2c, 0x98, 0xe0, 0xed, 0xfd, 0x00, 0x37, 0xb7, 0x8a, 0xb1, 0xc9, 0x60, 0x76, 0xe0, + 0x5a, 0xe2, 0x89, 0x40, 0x5d, 0x62, 0x48, 0x4b, 0x4a, 0xef, 0xdf, 0x8a, 0xc8, 0xa0, 0x28, 0x98, + 0x34, 0xfa, 0x18, 0xea, 0xf1, 0xca, 0x47, 0x7a, 0x09, 0x51, 0xee, 0x7b, 0x40, 0x2b, 0x4b, 0x48, + 0xf1, 0xa9, 0xdd, 0x51, 0xd0, 0x37, 0xd0, 0x4c, 0xed, 0xcf, 0xd2, 0x44, 0x16, 0xb7, 0x6e, 0x69, + 0x22, 0xcb, 0xd6, 0xf0, 0x00, 0xa6, 0x32, 0xdb, 0x0d, 0x2d, 0x96, 0x5f, 0x2c, 0x2c, 0x63, 0x6d, + 0xe9, 0x6c, 0xa0, 0xb4, 0xf1, 0x04, 0xe0, 0x64, 0x30, 0xa1, 0xb2, 0x2c, 0x17, 0xe6, 0xd6, 0xf9, + 0xd3, 0xd3, 0x87, 0x56, 0x7a, 0x08, 0xa0, 0x85, 0xd3, 0xe8, 0x4f, 0x66, 0x8f, 0xb6, 0x78, 0x26, + 0x4e, 0xb6, 0xda, 0x01, 0xdc, 0xb8, 0x97, 0x7f, 0x76, 0xb2, 0xe6, 0xdf, 0xca, 0xcf, 0xcc, 0x94, + 0xfe, 0x12, 0x3b, 0xad, 0x77, 0x98, 0xb1, 0x9c, 0xe9, 0xb6, 0x1d, 0xfe, 0x81, 0x29, 0xb5, 0x97, + 0xdf, 0x74, 0xbd, 0x9f, 0x14, 0x50, 0xb3, 0x9f, 0xe8, 0x29, 0xe3, 0x7b, 0xdc, 0x78, 0x5a, 0x8d, + 0xde, 0x2c, 0x37, 0x5e, 0xf2, 0x2f, 0x44, 0x7b, 0xeb, 0x3c, 0x50, 0x99, 0x81, 0x10, 0x90, 0xb0, + 0x99, 0x9e, 0xab, 0x51, 0xc9, 0x33, 0xe7, 0xd2, 0xa1, 0x51, 0x1c, 0xd0, 0xa5, 0x25, 0x2f, 0x1b, + 0xd8, 0x2b, 0xea, 0xb3, 0xe3, 0x59, 0xe5, 0xcf, 0xe3, 0x59, 0xe5, 0x9f, 0xe3, 0x59, 0xe5, 0x6b, + 0x90, 0xf0, 0xfe, 0x78, 0x79, 0x70, 0x85, 0x6f, 0xf9, 0x77, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, + 0x4d, 0x42, 0xc0, 0x41, 0xec, 0x0d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2125,6 +2142,22 @@ func (m *GetTraceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + n4, err4 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime):]) + if err4 != nil { + return 0, err4 + } + i -= n4 + i = encodeVarintStorage(dAtA, i, uint64(n4)) + i-- + dAtA[i] = 0x1a + n5, err5 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) + if err5 != nil { + return 0, err5 + } + i -= n5 + i = encodeVarintStorage(dAtA, i, uint64(n5)) + i-- + dAtA[i] = 0x12 { size := m.TraceID.Size() i -= size @@ -2362,37 +2395,37 @@ func (m *TraceQueryParameters) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x40 } - n4, err4 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.DurationMax, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.DurationMax):]) - if err4 != nil { - return 0, err4 - } - i -= n4 - i = encodeVarintStorage(dAtA, i, uint64(n4)) - i-- - dAtA[i] = 0x3a - n5, err5 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.DurationMin, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.DurationMin):]) - if err5 != nil { - return 0, err5 - } - i -= n5 - i = encodeVarintStorage(dAtA, i, uint64(n5)) - i-- - dAtA[i] = 0x32 - n6, err6 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTimeMax, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTimeMax):]) + n6, err6 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.DurationMax, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.DurationMax):]) if err6 != nil { return 0, err6 } i -= n6 i = encodeVarintStorage(dAtA, i, uint64(n6)) i-- - dAtA[i] = 0x2a - n7, err7 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTimeMin, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTimeMin):]) + dAtA[i] = 0x3a + n7, err7 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.DurationMin, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.DurationMin):]) if err7 != nil { return 0, err7 } i -= n7 i = encodeVarintStorage(dAtA, i, uint64(n7)) i-- + dAtA[i] = 0x32 + n8, err8 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTimeMax, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTimeMax):]) + if err8 != nil { + return 0, err8 + } + i -= n8 + i = encodeVarintStorage(dAtA, i, uint64(n8)) + i-- + dAtA[i] = 0x2a + n9, err9 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTimeMin, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTimeMin):]) + if err9 != nil { + return 0, err9 + } + i -= n9 + i = encodeVarintStorage(dAtA, i, uint64(n9)) + i-- dAtA[i] = 0x22 if len(m.Tags) > 0 { for k := range m.Tags { @@ -2779,6 +2812,10 @@ func (m *GetTraceRequest) Size() (n int) { _ = l l = m.TraceID.Size() n += 1 + l + sovStorage(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime) + n += 1 + l + sovStorage(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime) + n += 1 + l + sovStorage(uint64(l)) if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -3529,6 +3566,72 @@ func (m *GetTraceRequest) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StartTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStorage + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthStorage + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthStorage + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.StartTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EndTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStorage + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthStorage + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthStorage + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.EndTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipStorage(dAtA[iNdEx:]) From 49f33a4ebf47b55ee5773e87c99f9fd9e6b38ade Mon Sep 17 00:00:00 2001 From: Matthieu MOREL Date: Sun, 24 Nov 2024 15:34:14 +0100 Subject: [PATCH 7/8] Enable usestdlibvars linter (#6249) #### Description - enable [usestdlibvars](https://golangci-lint.run/usage/linters/#usestdlibvars) linter - uses standard constants or vars instead of their values. Signed-off-by: Matthieu MOREL --- .golangci.yml | 3 + .../app/anonymizer/anonymizer_test.go | 5 +- cmd/anonymizer/app/writer/writer_test.go | 3 +- cmd/internal/status/command.go | 2 +- cmd/query/app/server_test.go | 4 +- crossdock/main.go | 4 +- examples/hotrod/pkg/tracing/http.go | 2 +- .../hotrod/pkg/tracing/rpcmetrics/metrics.go | 9 +- .../adjuster/sort_tags_and_log_fields_test.go | 3 +- pkg/bearertoken/transport_test.go | 2 +- pkg/clientcfg/clientcfghttp/handler_test.go | 4 +- pkg/es/wrapper/wrapper.go | 3 +- pkg/version/handler.go | 2 +- .../adaptive/aggregator_test.go | 35 ++-- .../adaptive/post_aggregator_test.go | 177 +++++++++--------- .../adaptive/provider_test.go | 21 ++- .../strategyprovider/static/provider.go | 2 +- .../strategyprovider/static/provider_test.go | 6 +- .../cassandra/samplingstore/storage_test.go | 15 +- plugin/storage/es/options_test.go | 3 +- 20 files changed, 159 insertions(+), 146 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 7c4e9314df8..5427041391e 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -105,6 +105,9 @@ linters: # Checks usage of github.com/stretchr/testify. - testifylint + # Detects the possibility to use variables/constants from the Go standard library. + - usestdlibvars + # TODO consider adding more linters, cf. https://olegk.dev/go-linters-configuration-the-right-version linters-settings: diff --git a/cmd/anonymizer/app/anonymizer/anonymizer_test.go b/cmd/anonymizer/app/anonymizer/anonymizer_test.go index 431cc0162a6..6d2f219c062 100644 --- a/cmd/anonymizer/app/anonymizer/anonymizer_test.go +++ b/cmd/anonymizer/app/anonymizer/anonymizer_test.go @@ -4,6 +4,7 @@ package anonymizer import ( + "net/http" "os" "path/filepath" "testing" @@ -18,7 +19,7 @@ import ( var tags = []model.KeyValue{ model.Bool("error", true), - model.String("http.method", "POST"), + model.String("http.method", http.MethodPost), model.Bool("foobar", true), } @@ -127,7 +128,7 @@ func TestAnonymizer_SaveMapping(t *testing.T) { func TestAnonymizer_FilterStandardTags(t *testing.T) { expected := []model.KeyValue{ model.Bool("error", true), - model.String("http.method", "POST"), + model.String("http.method", http.MethodPost), } actual := filterStandardTags(tags) assert.Equal(t, expected, actual) diff --git a/cmd/anonymizer/app/writer/writer_test.go b/cmd/anonymizer/app/writer/writer_test.go index c6e11434ccc..dc746f16b63 100644 --- a/cmd/anonymizer/app/writer/writer_test.go +++ b/cmd/anonymizer/app/writer/writer_test.go @@ -4,6 +4,7 @@ package writer import ( + "net/http" "testing" "time" @@ -15,7 +16,7 @@ import ( var tags = []model.KeyValue{ model.Bool("error", true), - model.String("http.method", "POST"), + model.String("http.method", http.MethodPost), model.Bool("foobar", true), } diff --git a/cmd/internal/status/command.go b/cmd/internal/status/command.go index 02f2e48683a..355719ae4a0 100644 --- a/cmd/internal/status/command.go +++ b/cmd/internal/status/command.go @@ -30,7 +30,7 @@ func Command(v *viper.Viper, adminPort int) *cobra.Command { url := convert(v.GetString(statusHTTPHostPort)) ctx, cx := context.WithTimeout(context.Background(), time.Second) defer cx() - req, _ := http.NewRequestWithContext(ctx, "GET", url, nil) + req, _ := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) resp, err := http.DefaultClient.Do(req) if err != nil { return err diff --git a/cmd/query/app/server_test.go b/cmd/query/app/server_test.go index 161aeca654d..7a7d1bed674 100644 --- a/cmd/query/app/server_test.go +++ b/cmd/query/app/server_test.go @@ -760,12 +760,12 @@ func TestServerHTTPTenancy(t *testing.T) { { name: "no tenant", // no value for tenant header - status: 401, + status: http.StatusUnauthorized, }, { name: "tenant", tenant: "acme", - status: 200, + status: http.StatusOK, }, } diff --git a/crossdock/main.go b/crossdock/main.go index f4833886a42..686f6ff515d 100644 --- a/crossdock/main.go +++ b/crossdock/main.go @@ -52,7 +52,7 @@ func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // when method is HEAD, report back with a 200 when ready to run tests - if r.Method == "HEAD" { + if r.Method == http.MethodHead { if !handler.isInitialized() { http.Error(w, "Components not ready", http.StatusServiceUnavailable) } @@ -92,7 +92,7 @@ func (h *clientHandler) isInitialized() bool { } func is2xxStatusCode(statusCode int) bool { - return statusCode >= 200 && statusCode <= 299 + return statusCode >= http.StatusOK && statusCode < http.StatusMultipleChoices } func httpHealthCheck(logger *zap.Logger, service, healthURL string) { diff --git a/examples/hotrod/pkg/tracing/http.go b/examples/hotrod/pkg/tracing/http.go index 0e938ba60b8..a37d7e70df2 100644 --- a/examples/hotrod/pkg/tracing/http.go +++ b/examples/hotrod/pkg/tracing/http.go @@ -48,7 +48,7 @@ func (c *HTTPClient) GetJSON(ctx context.Context, _ string /* endpoint */, url s defer res.Body.Close() - if res.StatusCode >= 400 { + if res.StatusCode >= http.StatusBadRequest { body, err := io.ReadAll(res.Body) if err != nil { return err diff --git a/examples/hotrod/pkg/tracing/rpcmetrics/metrics.go b/examples/hotrod/pkg/tracing/rpcmetrics/metrics.go index 48556e92170..5daa89f21de 100644 --- a/examples/hotrod/pkg/tracing/rpcmetrics/metrics.go +++ b/examples/hotrod/pkg/tracing/rpcmetrics/metrics.go @@ -5,6 +5,7 @@ package rpcmetrics import ( + "net/http" "sync" "github.com/jaegertracing/jaeger/pkg/metrics" @@ -45,13 +46,13 @@ type Metrics struct { func (m *Metrics) recordHTTPStatusCode(statusCode int64) { switch { - case statusCode >= 200 && statusCode < 300: + case statusCode >= http.StatusOK && statusCode < http.StatusMultipleChoices: m.HTTPStatusCode2xx.Inc(1) - case statusCode >= 300 && statusCode < 400: + case statusCode >= http.StatusMultipleChoices && statusCode < http.StatusBadRequest: m.HTTPStatusCode3xx.Inc(1) - case statusCode >= 400 && statusCode < 500: + case statusCode >= http.StatusBadRequest && statusCode < http.StatusInternalServerError: m.HTTPStatusCode4xx.Inc(1) - case statusCode >= 500 && statusCode < 600: + case statusCode >= http.StatusInternalServerError && statusCode < 600: m.HTTPStatusCode5xx.Inc(1) } } diff --git a/model/adjuster/sort_tags_and_log_fields_test.go b/model/adjuster/sort_tags_and_log_fields_test.go index 4d31c7248b6..afd1983cac0 100644 --- a/model/adjuster/sort_tags_and_log_fields_test.go +++ b/model/adjuster/sort_tags_and_log_fields_test.go @@ -5,6 +5,7 @@ package adjuster import ( + "net/http" "testing" "github.com/stretchr/testify/assert" @@ -88,7 +89,7 @@ func TestSortTagsAndLogFieldsDoesSortFields(t *testing.T) { func TestSortTagsAndLogFieldsDoesSortTags(t *testing.T) { testCases := []model.KeyValues{ { - model.String("http.method", "GET"), + model.String("http.method", http.MethodGet), model.String("http.url", "http://wikipedia.org"), model.Int64("http.status_code", 200), model.String("guid:x-request-id", "f61defd2-7a77-11ef-b54f-4fbb67a6d181"), diff --git a/pkg/bearertoken/transport_test.go b/pkg/bearertoken/transport_test.go index b578934cb38..e03ca8dd8a0 100644 --- a/pkg/bearertoken/transport_test.go +++ b/pkg/bearertoken/transport_test.go @@ -78,7 +78,7 @@ func TestRoundTripper(t *testing.T) { t.Run(tc.name, func(t *testing.T) { server := httptest.NewServer(nil) defer server.Close() - req, err := http.NewRequestWithContext(tc.requestContext, "GET", server.URL, nil) + req, err := http.NewRequestWithContext(tc.requestContext, http.MethodGet, server.URL, nil) require.NoError(t, err) tr := RoundTripper{ diff --git a/pkg/clientcfg/clientcfghttp/handler_test.go b/pkg/clientcfg/clientcfghttp/handler_test.go index 296468b458d..fa16f52d71c 100644 --- a/pkg/clientcfg/clientcfghttp/handler_test.go +++ b/pkg/clientcfg/clientcfghttp/handler_test.go @@ -283,14 +283,14 @@ func TestHTTPHandlerErrors(t *testing.T) { withServer("", probabilistic(0.001), restrictions("luggage", 10), withGorilla, func(ts *testServer) { handler := ts.handler - req := httptest.NewRequest("GET", "http://localhost:80/?service=X", nil) + req := httptest.NewRequest(http.MethodGet, "http://localhost:80/?service=X", nil) w := &mockWriter{header: make(http.Header)} handler.serveSamplingHTTP(w, req, handler.encodeThriftLegacy) ts.metricsFactory.AssertCounterMetrics(t, metricstest.ExpectedMetric{Name: "http-server.errors", Tags: map[string]string{"source": "write", "status": "5xx"}, Value: 1}) - req = httptest.NewRequest("GET", "http://localhost:80/baggageRestrictions?service=X", nil) + req = httptest.NewRequest(http.MethodGet, "http://localhost:80/baggageRestrictions?service=X", nil) handler.serveBaggageHTTP(w, req) ts.metricsFactory.AssertCounterMetrics(t, diff --git a/pkg/es/wrapper/wrapper.go b/pkg/es/wrapper/wrapper.go index cdca19fd768..e34b8c49590 100644 --- a/pkg/es/wrapper/wrapper.go +++ b/pkg/es/wrapper/wrapper.go @@ -7,6 +7,7 @@ package eswrapper import ( "context" "fmt" + "net/http" "strings" esV8 "github.com/elastic/go-elasticsearch/v8" @@ -193,7 +194,7 @@ func (c TemplateCreatorWrapperV8) Do(context.Context) (*elastic.IndicesPutTempla if err != nil { return nil, fmt.Errorf("error creating index template %s: %w", c.templateName, err) } - if resp.StatusCode != 200 { + if resp.StatusCode != http.StatusOK { return nil, fmt.Errorf("error creating index template %s: %s", c.templateName, resp) } return nil, nil // no response expected by span writer diff --git a/pkg/version/handler.go b/pkg/version/handler.go index bb094af94a9..a92cd11ff3b 100644 --- a/pkg/version/handler.go +++ b/pkg/version/handler.go @@ -18,7 +18,7 @@ func RegisterHandler(mu *http.ServeMux, logger *zap.Logger) { logger.Fatal("Could not get Jaeger version", zap.Error(err)) } mu.HandleFunc("/version", func(w http.ResponseWriter, _ *http.Request) { - w.WriteHeader(200) + w.WriteHeader(http.StatusOK) w.Write(jsonData) }) } diff --git a/plugin/sampling/strategyprovider/adaptive/aggregator_test.go b/plugin/sampling/strategyprovider/adaptive/aggregator_test.go index eec8ab76892..a2145f80c35 100644 --- a/plugin/sampling/strategyprovider/adaptive/aggregator_test.go +++ b/plugin/sampling/strategyprovider/adaptive/aggregator_test.go @@ -4,6 +4,7 @@ package adaptive import ( + "net/http" "testing" "time" @@ -37,12 +38,12 @@ func TestAggregator(t *testing.T) { a, err := NewAggregator(testOpts, logger, metricsFactory, mockEP, mockStorage) require.NoError(t, err) - a.RecordThroughput("A", "GET", model.SamplerTypeProbabilistic, 0.001) - a.RecordThroughput("B", "POST", model.SamplerTypeProbabilistic, 0.001) - a.RecordThroughput("C", "GET", model.SamplerTypeProbabilistic, 0.001) - a.RecordThroughput("A", "POST", model.SamplerTypeProbabilistic, 0.001) - a.RecordThroughput("A", "GET", model.SamplerTypeProbabilistic, 0.001) - a.RecordThroughput("A", "GET", model.SamplerTypeLowerBound, 0.001) + a.RecordThroughput("A", http.MethodGet, model.SamplerTypeProbabilistic, 0.001) + a.RecordThroughput("B", http.MethodPost, model.SamplerTypeProbabilistic, 0.001) + a.RecordThroughput("C", http.MethodGet, model.SamplerTypeProbabilistic, 0.001) + a.RecordThroughput("A", http.MethodPost, model.SamplerTypeProbabilistic, 0.001) + a.RecordThroughput("A", http.MethodGet, model.SamplerTypeProbabilistic, 0.001) + a.RecordThroughput("A", http.MethodGet, model.SamplerTypeLowerBound, 0.001) a.Start() defer a.Close() @@ -74,17 +75,17 @@ func TestIncrementThroughput(t *testing.T) { require.NoError(t, err) // 20 different probabilities for i := 0; i < 20; i++ { - a.RecordThroughput("A", "GET", model.SamplerTypeProbabilistic, 0.001*float64(i)) + a.RecordThroughput("A", http.MethodGet, model.SamplerTypeProbabilistic, 0.001*float64(i)) } - assert.Len(t, a.(*aggregator).currentThroughput["A"]["GET"].Probabilities, 10) + assert.Len(t, a.(*aggregator).currentThroughput["A"][http.MethodGet].Probabilities, 10) a, err = NewAggregator(testOpts, logger, metricsFactory, mockEP, mockStorage) require.NoError(t, err) // 20 of the same probabilities for i := 0; i < 20; i++ { - a.RecordThroughput("A", "GET", model.SamplerTypeProbabilistic, 0.001) + a.RecordThroughput("A", http.MethodGet, model.SamplerTypeProbabilistic, 0.001) } - assert.Len(t, a.(*aggregator).currentThroughput["A"]["GET"].Probabilities, 1) + assert.Len(t, a.(*aggregator).currentThroughput["A"][http.MethodGet].Probabilities, 1) } func TestLowerboundThroughput(t *testing.T) { @@ -100,9 +101,9 @@ func TestLowerboundThroughput(t *testing.T) { a, err := NewAggregator(testOpts, logger, metricsFactory, mockEP, mockStorage) require.NoError(t, err) - a.RecordThroughput("A", "GET", model.SamplerTypeLowerBound, 0.001) - assert.EqualValues(t, 0, a.(*aggregator).currentThroughput["A"]["GET"].Count) - assert.Empty(t, a.(*aggregator).currentThroughput["A"]["GET"].Probabilities["0.001000"]) + a.RecordThroughput("A", http.MethodGet, model.SamplerTypeLowerBound, 0.001) + assert.EqualValues(t, 0, a.(*aggregator).currentThroughput["A"][http.MethodGet].Count) + assert.Empty(t, a.(*aggregator).currentThroughput["A"][http.MethodGet].Probabilities["0.001000"]) } func TestRecordThroughput(t *testing.T) { @@ -132,7 +133,7 @@ func TestRecordThroughput(t *testing.T) { require.Empty(t, a.(*aggregator).currentThroughput) // Testing span with service name and operation but no probabilistic sampling tags - span.OperationName = "GET" + span.OperationName = http.MethodGet a.HandleRootSpan(span, logger) require.Empty(t, a.(*aggregator).currentThroughput) @@ -142,7 +143,7 @@ func TestRecordThroughput(t *testing.T) { model.String("sampler.param", "0.001"), } a.HandleRootSpan(span, logger) - assert.EqualValues(t, 1, a.(*aggregator).currentThroughput["A"]["GET"].Count) + assert.EqualValues(t, 1, a.(*aggregator).currentThroughput["A"][http.MethodGet].Count) } func TestRecordThroughputFunc(t *testing.T) { @@ -173,7 +174,7 @@ func TestRecordThroughputFunc(t *testing.T) { require.Empty(t, a.(*aggregator).currentThroughput) // Testing span with service name and operation but no probabilistic sampling tags - span.OperationName = "GET" + span.OperationName = http.MethodGet a.HandleRootSpan(span, logger) require.Empty(t, a.(*aggregator).currentThroughput) @@ -183,5 +184,5 @@ func TestRecordThroughputFunc(t *testing.T) { model.String("sampler.param", "0.001"), } a.HandleRootSpan(span, logger) - assert.EqualValues(t, 1, a.(*aggregator).currentThroughput["A"]["GET"].Count) + assert.EqualValues(t, 1, a.(*aggregator).currentThroughput["A"][http.MethodGet].Count) } diff --git a/plugin/sampling/strategyprovider/adaptive/post_aggregator_test.go b/plugin/sampling/strategyprovider/adaptive/post_aggregator_test.go index 6a0f71b1eb6..fd0da089ac6 100644 --- a/plugin/sampling/strategyprovider/adaptive/post_aggregator_test.go +++ b/plugin/sampling/strategyprovider/adaptive/post_aggregator_test.go @@ -5,6 +5,7 @@ package adaptive import ( "errors" + "net/http" "testing" "time" @@ -24,10 +25,10 @@ import ( func testThroughputs() []*model.Throughput { return []*model.Throughput{ - {Service: "svcA", Operation: "GET", Count: 4, Probabilities: map[string]struct{}{"0.1": {}}}, - {Service: "svcA", Operation: "GET", Count: 4, Probabilities: map[string]struct{}{"0.2": {}}}, - {Service: "svcA", Operation: "PUT", Count: 5, Probabilities: map[string]struct{}{"0.1": {}}}, - {Service: "svcB", Operation: "GET", Count: 3, Probabilities: map[string]struct{}{"0.1": {}}}, + {Service: "svcA", Operation: http.MethodGet, Count: 4, Probabilities: map[string]struct{}{"0.1": {}}}, + {Service: "svcA", Operation: http.MethodGet, Count: 4, Probabilities: map[string]struct{}{"0.2": {}}}, + {Service: "svcA", Operation: http.MethodPut, Count: 5, Probabilities: map[string]struct{}{"0.1": {}}}, + {Service: "svcB", Operation: http.MethodGet, Count: 3, Probabilities: map[string]struct{}{"0.1": {}}}, } } @@ -36,12 +37,12 @@ func testThroughputBuckets() []*throughputBucket { { throughput: serviceOperationThroughput{ "svcA": map[string]*model.Throughput{ - "GET": {Count: 45}, - "PUT": {Count: 60}, + http.MethodGet: {Count: 45}, + http.MethodPut: {Count: 60}, }, "svcB": map[string]*model.Throughput{ - "GET": {Count: 30}, - "PUT": {Count: 15}, + http.MethodGet: {Count: 30}, + http.MethodPut: {Count: 15}, }, }, interval: 60 * time.Second, @@ -49,10 +50,10 @@ func testThroughputBuckets() []*throughputBucket { { throughput: serviceOperationThroughput{ "svcA": map[string]*model.Throughput{ - "GET": {Count: 30}, + http.MethodGet: {Count: 30}, }, "svcB": map[string]*model.Throughput{ - "GET": {Count: 45}, + http.MethodGet: {Count: 45}, }, }, interval: 60 * time.Second, @@ -87,12 +88,12 @@ func TestAggregateThroughput(t *testing.T) { require.True(t, ok) require.Len(t, throughput, 2) - opThroughput, ok := throughput["GET"] + opThroughput, ok := throughput[http.MethodGet] require.True(t, ok) assert.Equal(t, int64(8), opThroughput.Count) assert.Equal(t, map[string]struct{}{"0.1": {}, "0.2": {}}, opThroughput.Probabilities) - opThroughput, ok = throughput["PUT"] + opThroughput, ok = throughput[http.MethodPut] require.True(t, ok) assert.Equal(t, int64(5), opThroughput.Count) assert.Equal(t, map[string]struct{}{"0.1": {}}, opThroughput.Probabilities) @@ -101,7 +102,7 @@ func TestAggregateThroughput(t *testing.T) { require.True(t, ok) require.Len(t, throughput, 1) - opThroughput, ok = throughput["GET"] + opThroughput, ok = throughput[http.MethodGet] require.True(t, ok) assert.Equal(t, int64(3), opThroughput.Count) assert.Equal(t, map[string]struct{}{"0.1": {}}, opThroughput.Probabilities) @@ -112,7 +113,7 @@ func TestInitializeThroughput(t *testing.T) { mockStorage.On("GetThroughput", time.Time{}.Add(time.Minute*19), time.Time{}.Add(time.Minute*20)). Return(testThroughputs(), nil) mockStorage.On("GetThroughput", time.Time{}.Add(time.Minute*18), time.Time{}.Add(time.Minute*19)). - Return([]*model.Throughput{{Service: "svcA", Operation: "GET", Count: 7}}, nil) + Return([]*model.Throughput{{Service: "svcA", Operation: http.MethodGet, Count: 7}}, nil) mockStorage.On("GetThroughput", time.Time{}.Add(time.Minute*17), time.Time{}.Add(time.Minute*18)). Return([]*model.Throughput{}, nil) p := &PostAggregator{storage: mockStorage, Options: Options{CalculationInterval: time.Minute, AggregationBuckets: 3}} @@ -154,22 +155,22 @@ func TestGenerateOperationQPS(t *testing.T) { require.True(t, ok) require.Len(t, opQPS, 2) - assert.Equal(t, []float64{0.75, 0.5}, opQPS["GET"]) - assert.Equal(t, []float64{1.0}, opQPS["PUT"]) + assert.Equal(t, []float64{0.75, 0.5}, opQPS[http.MethodGet]) + assert.Equal(t, []float64{1.0}, opQPS[http.MethodPut]) opQPS, ok = svcOpQPS["svcB"] require.True(t, ok) require.Len(t, opQPS, 2) - assert.Equal(t, []float64{0.5, 0.75}, opQPS["GET"]) - assert.Equal(t, []float64{0.25}, opQPS["PUT"]) + assert.Equal(t, []float64{0.5, 0.75}, opQPS[http.MethodGet]) + assert.Equal(t, []float64{0.25}, opQPS[http.MethodPut]) // Test using the previous QPS if the throughput is not provided p.prependThroughputBucket( &throughputBucket{ throughput: serviceOperationThroughput{ "svcA": map[string]*model.Throughput{ - "GET": {Count: 30}, + http.MethodGet: {Count: 30}, }, }, interval: 60 * time.Second, @@ -182,15 +183,15 @@ func TestGenerateOperationQPS(t *testing.T) { require.True(t, ok) require.Len(t, opQPS, 2) - assert.Equal(t, []float64{0.5, 0.75, 0.5}, opQPS["GET"]) - assert.Equal(t, []float64{1.0}, opQPS["PUT"]) + assert.Equal(t, []float64{0.5, 0.75, 0.5}, opQPS[http.MethodGet]) + assert.Equal(t, []float64{1.0}, opQPS[http.MethodPut]) opQPS, ok = svcOpQPS["svcB"] require.True(t, ok) require.Len(t, opQPS, 2) - assert.Equal(t, []float64{0.5, 0.75}, opQPS["GET"]) - assert.Equal(t, []float64{0.25}, opQPS["PUT"]) + assert.Equal(t, []float64{0.5, 0.75}, opQPS[http.MethodGet]) + assert.Equal(t, []float64{0.25}, opQPS[http.MethodPut]) } func TestGenerateOperationQPS_UseMostRecentBucketOnly(t *testing.T) { @@ -202,14 +203,14 @@ func TestGenerateOperationQPS_UseMostRecentBucketOnly(t *testing.T) { require.True(t, ok) require.Len(t, opQPS, 2) - assert.Equal(t, []float64{0.75}, opQPS["GET"]) - assert.Equal(t, []float64{1.0}, opQPS["PUT"]) + assert.Equal(t, []float64{0.75}, opQPS[http.MethodGet]) + assert.Equal(t, []float64{1.0}, opQPS[http.MethodPut]) p.prependThroughputBucket( &throughputBucket{ throughput: serviceOperationThroughput{ "svcA": map[string]*model.Throughput{ - "GET": {Count: 30}, + http.MethodGet: {Count: 30}, }, }, interval: 60 * time.Second, @@ -223,8 +224,8 @@ func TestGenerateOperationQPS_UseMostRecentBucketOnly(t *testing.T) { require.True(t, ok) require.Len(t, opQPS, 2) - assert.Equal(t, []float64{0.5}, opQPS["GET"]) - assert.Equal(t, []float64{1.0}, opQPS["PUT"]) + assert.Equal(t, []float64{0.5}, opQPS[http.MethodGet]) + assert.Equal(t, []float64{1.0}, opQPS[http.MethodPut]) } func TestCalculateWeightedQPS(t *testing.T) { @@ -239,14 +240,14 @@ func TestCalculateProbability(t *testing.T) { { throughput: serviceOperationThroughput{ "svcA": map[string]*model.Throughput{ - "GET": {Probabilities: map[string]struct{}{"0.500000": {}}}, + http.MethodGet: {Probabilities: map[string]struct{}{"0.500000": {}}}, }, }, }, } probabilities := model.ServiceOperationProbabilities{ "svcA": map[string]float64{ - "GET": 0.5, + http.MethodGet: 0.5, }, } cfg := Options{ @@ -269,12 +270,12 @@ func TestCalculateProbability(t *testing.T) { expectedProbability float64 errMsg string }{ - {"svcA", "GET", 2.0, 0.25, "modify existing probability"}, - {"svcA", "PUT", 2.0, 0.0005, "modify default probability"}, - {"svcB", "GET", 0.9, 0.001, "qps within equivalence threshold"}, - {"svcB", "PUT", 0.000001, 1.0, "test max probability"}, - {"svcB", "DELETE", 1000000000, 0.00001, "test min probability"}, - {"svcB", "DELETE", 0.0, 0.002, "test 0 qps"}, + {"svcA", http.MethodGet, 2.0, 0.25, "modify existing probability"}, + {"svcA", http.MethodPut, 2.0, 0.0005, "modify default probability"}, + {"svcB", http.MethodGet, 0.9, 0.001, "qps within equivalence threshold"}, + {"svcB", http.MethodPut, 0.000001, 1.0, "test max probability"}, + {"svcB", http.MethodDelete, 1000000000, 0.00001, "test min probability"}, + {"svcB", http.MethodDelete, 0.0, 0.002, "test 0 qps"}, } for _, test := range tests { probability := p.calculateProbability(test.service, test.operation, test.qps) @@ -285,13 +286,13 @@ func TestCalculateProbability(t *testing.T) { func TestCalculateProbabilitiesAndQPS(t *testing.T) { prevProbabilities := model.ServiceOperationProbabilities{ "svcB": map[string]float64{ - "GET": 0.16, - "PUT": 0.03, + http.MethodGet: 0.16, + http.MethodPut: 0.03, }, } qps := model.ServiceOperationQPS{ "svcB": map[string]float64{ - "GET": 0.625, + http.MethodGet: 0.625, }, } mets := metricstest.NewFactory(0) @@ -309,12 +310,12 @@ func TestCalculateProbabilitiesAndQPS(t *testing.T) { probabilities, qps := p.calculateProbabilitiesAndQPS() require.Len(t, probabilities, 2) - assert.Equal(t, map[string]float64{"GET": 0.00136, "PUT": 0.001}, probabilities["svcA"]) - assert.Equal(t, map[string]float64{"GET": 0.16, "PUT": 0.03}, probabilities["svcB"]) + assert.Equal(t, map[string]float64{http.MethodGet: 0.00136, http.MethodPut: 0.001}, probabilities["svcA"]) + assert.Equal(t, map[string]float64{http.MethodGet: 0.16, http.MethodPut: 0.03}, probabilities["svcB"]) require.Len(t, qps, 2) - assert.Equal(t, map[string]float64{"GET": 0.7352941176470588, "PUT": 1}, qps["svcA"]) - assert.Equal(t, map[string]float64{"GET": 0.5147058823529411, "PUT": 0.25}, qps["svcB"]) + assert.Equal(t, map[string]float64{http.MethodGet: 0.7352941176470588, http.MethodPut: 1}, qps["svcA"]) + assert.Equal(t, map[string]float64{http.MethodGet: 0.5147058823529411, http.MethodPut: 0.25}, qps["svcB"]) _, gauges := mets.Backend.Snapshot() assert.EqualValues(t, 4, gauges["test"]) @@ -477,11 +478,11 @@ func TestCalculateProbabilitiesAndQPSMultiple(t *testing.T) { { throughput: serviceOperationThroughput{ "svcA": map[string]*model.Throughput{ - "GET": {Count: 3, Probabilities: map[string]struct{}{"0.001000": {}}}, - "PUT": {Count: 60, Probabilities: map[string]struct{}{"0.001000": {}}}, + http.MethodGet: {Count: 3, Probabilities: map[string]struct{}{"0.001000": {}}}, + http.MethodPut: {Count: 60, Probabilities: map[string]struct{}{"0.001000": {}}}, }, "svcB": map[string]*model.Throughput{ - "PUT": {Count: 15, Probabilities: map[string]struct{}{"0.001000": {}}}, + http.MethodPut: {Count: 15, Probabilities: map[string]struct{}{"0.001000": {}}}, }, }, interval: 60 * time.Second, @@ -506,8 +507,8 @@ func TestCalculateProbabilitiesAndQPSMultiple(t *testing.T) { probabilities, qps := p.calculateProbabilitiesAndQPS() require.Len(t, probabilities, 2) - assert.Equal(t, map[string]float64{"GET": 0.002, "PUT": 0.001}, probabilities["svcA"]) - assert.Equal(t, map[string]float64{"PUT": 0.002}, probabilities["svcB"]) + assert.Equal(t, map[string]float64{http.MethodGet: 0.002, http.MethodPut: 0.001}, probabilities["svcA"]) + assert.Equal(t, map[string]float64{http.MethodPut: 0.002}, probabilities["svcB"]) p.probabilities = probabilities p.qps = qps @@ -518,11 +519,11 @@ func TestCalculateProbabilitiesAndQPSMultiple(t *testing.T) { p.prependThroughputBucket(&throughputBucket{ throughput: serviceOperationThroughput{ "svcA": map[string]*model.Throughput{ - "PUT": {Count: 60, Probabilities: map[string]struct{}{"0.001000": {}}}, + http.MethodPut: {Count: 60, Probabilities: map[string]struct{}{"0.001000": {}}}, }, "svcB": map[string]*model.Throughput{ - "GET": {Count: 30, Probabilities: map[string]struct{}{"0.001000": {}}}, - "PUT": {Count: 0, Probabilities: map[string]struct{}{"0.002000": {}}}, + http.MethodGet: {Count: 30, Probabilities: map[string]struct{}{"0.001000": {}}}, + http.MethodPut: {Count: 0, Probabilities: map[string]struct{}{"0.002000": {}}}, }, }, interval: 60 * time.Second, @@ -531,8 +532,8 @@ func TestCalculateProbabilitiesAndQPSMultiple(t *testing.T) { probabilities, qps = p.calculateProbabilitiesAndQPS() require.Len(t, probabilities, 2) - assert.Equal(t, map[string]float64{"GET": 0.002, "PUT": 0.001}, probabilities["svcA"]) - assert.Equal(t, map[string]float64{"PUT": 0.004, "GET": 0.002}, probabilities["svcB"]) + assert.Equal(t, map[string]float64{http.MethodGet: 0.002, http.MethodPut: 0.001}, probabilities["svcA"]) + assert.Equal(t, map[string]float64{http.MethodPut: 0.004, http.MethodGet: 0.002}, probabilities["svcB"]) p.probabilities = probabilities p.qps = qps @@ -543,11 +544,11 @@ func TestCalculateProbabilitiesAndQPSMultiple(t *testing.T) { p.prependThroughputBucket(&throughputBucket{ throughput: serviceOperationThroughput{ "svcA": map[string]*model.Throughput{ - "GET": {Count: 0, Probabilities: map[string]struct{}{"0.002000": {}}}, - "PUT": {Count: 60, Probabilities: map[string]struct{}{"0.001000": {}}}, + http.MethodGet: {Count: 0, Probabilities: map[string]struct{}{"0.002000": {}}}, + http.MethodPut: {Count: 60, Probabilities: map[string]struct{}{"0.001000": {}}}, }, "svcB": map[string]*model.Throughput{ - "GET": {Count: 30, Probabilities: map[string]struct{}{"0.001000": {}}}, + http.MethodGet: {Count: 30, Probabilities: map[string]struct{}{"0.001000": {}}}, }, }, interval: 60 * time.Second, @@ -556,8 +557,8 @@ func TestCalculateProbabilitiesAndQPSMultiple(t *testing.T) { probabilities, qps = p.calculateProbabilitiesAndQPS() require.Len(t, probabilities, 2) - assert.Equal(t, map[string]float64{"GET": 0.004, "PUT": 0.001}, probabilities["svcA"]) - assert.Equal(t, map[string]float64{"PUT": 0.008, "GET": 0.002}, probabilities["svcB"]) + assert.Equal(t, map[string]float64{http.MethodGet: 0.004, http.MethodPut: 0.001}, probabilities["svcA"]) + assert.Equal(t, map[string]float64{http.MethodPut: 0.008, http.MethodGet: 0.002}, probabilities["svcB"]) p.probabilities = probabilities p.qps = qps @@ -567,12 +568,12 @@ func TestCalculateProbabilitiesAndQPSMultiple(t *testing.T) { p.prependThroughputBucket(&throughputBucket{ throughput: serviceOperationThroughput{ "svcA": map[string]*model.Throughput{ - "GET": {Count: 1, Probabilities: map[string]struct{}{"0.004000": {}}}, - "PUT": {Count: 60, Probabilities: map[string]struct{}{"0.001000": {}}}, + http.MethodGet: {Count: 1, Probabilities: map[string]struct{}{"0.004000": {}}}, + http.MethodPut: {Count: 60, Probabilities: map[string]struct{}{"0.001000": {}}}, }, "svcB": map[string]*model.Throughput{ - "GET": {Count: 30, Probabilities: map[string]struct{}{"0.001000": {}}}, - "PUT": {Count: 15, Probabilities: map[string]struct{}{"0.001000": {}}}, + http.MethodGet: {Count: 30, Probabilities: map[string]struct{}{"0.001000": {}}}, + http.MethodPut: {Count: 15, Probabilities: map[string]struct{}{"0.001000": {}}}, }, }, interval: 60 * time.Second, @@ -581,8 +582,8 @@ func TestCalculateProbabilitiesAndQPSMultiple(t *testing.T) { probabilities, qps = p.calculateProbabilitiesAndQPS() require.Len(t, probabilities, 2) - assert.Equal(t, map[string]float64{"GET": 0.008, "PUT": 0.001}, probabilities["svcA"]) - assert.Equal(t, map[string]float64{"PUT": 0.008, "GET": 0.002}, probabilities["svcB"]) + assert.Equal(t, map[string]float64{http.MethodGet: 0.008, http.MethodPut: 0.001}, probabilities["svcA"]) + assert.Equal(t, map[string]float64{http.MethodPut: 0.008, http.MethodGet: 0.002}, probabilities["svcB"]) p.probabilities = probabilities p.qps = qps @@ -591,11 +592,11 @@ func TestCalculateProbabilitiesAndQPSMultiple(t *testing.T) { p.prependThroughputBucket(&throughputBucket{ throughput: serviceOperationThroughput{ "svcA": map[string]*model.Throughput{ - "PUT": {Count: 30, Probabilities: map[string]struct{}{"0.001000": {}}}, + http.MethodPut: {Count: 30, Probabilities: map[string]struct{}{"0.001000": {}}}, }, "svcB": map[string]*model.Throughput{ - "GET": {Count: 30, Probabilities: map[string]struct{}{"0.001000": {}}}, - "PUT": {Count: 15, Probabilities: map[string]struct{}{"0.001000": {}}}, + http.MethodGet: {Count: 30, Probabilities: map[string]struct{}{"0.001000": {}}}, + http.MethodPut: {Count: 15, Probabilities: map[string]struct{}{"0.001000": {}}}, }, }, interval: 60 * time.Second, @@ -604,8 +605,8 @@ func TestCalculateProbabilitiesAndQPSMultiple(t *testing.T) { probabilities, qps = p.calculateProbabilitiesAndQPS() require.Len(t, probabilities, 2) - assert.Equal(t, map[string]float64{"GET": 0.016, "PUT": 0.001468867216804201}, probabilities["svcA"]) - assert.Equal(t, map[string]float64{"PUT": 0.008, "GET": 0.002}, probabilities["svcB"]) + assert.Equal(t, map[string]float64{http.MethodGet: 0.016, http.MethodPut: 0.001468867216804201}, probabilities["svcA"]) + assert.Equal(t, map[string]float64{http.MethodPut: 0.008, http.MethodGet: 0.002}, probabilities["svcB"]) p.probabilities = probabilities p.qps = qps @@ -615,11 +616,11 @@ func TestCalculateProbabilitiesAndQPSMultiple(t *testing.T) { p.prependThroughputBucket(&throughputBucket{ throughput: serviceOperationThroughput{ "svcA": map[string]*model.Throughput{ - "PUT": {Count: 30, Probabilities: map[string]struct{}{"0.001000": {}}}, + http.MethodPut: {Count: 30, Probabilities: map[string]struct{}{"0.001000": {}}}, }, "svcB": map[string]*model.Throughput{ - "GET": {Count: 30, Probabilities: map[string]struct{}{"0.001000": {}}}, - "PUT": {Count: 1, Probabilities: map[string]struct{}{"0.008000": {}}}, + http.MethodGet: {Count: 30, Probabilities: map[string]struct{}{"0.001000": {}}}, + http.MethodPut: {Count: 1, Probabilities: map[string]struct{}{"0.008000": {}}}, }, }, interval: 60 * time.Second, @@ -628,8 +629,8 @@ func TestCalculateProbabilitiesAndQPSMultiple(t *testing.T) { probabilities, qps = p.calculateProbabilitiesAndQPS() require.Len(t, probabilities, 2) - assert.Equal(t, map[string]float64{"GET": 0.032, "PUT": 0.001468867216804201}, probabilities["svcA"]) - assert.Equal(t, map[string]float64{"PUT": 0.016, "GET": 0.002}, probabilities["svcB"]) + assert.Equal(t, map[string]float64{http.MethodGet: 0.032, http.MethodPut: 0.001468867216804201}, probabilities["svcA"]) + assert.Equal(t, map[string]float64{http.MethodPut: 0.016, http.MethodGet: 0.002}, probabilities["svcB"]) p.probabilities = probabilities p.qps = qps @@ -639,10 +640,10 @@ func TestCalculateProbabilitiesAndQPSMultiple(t *testing.T) { p.prependThroughputBucket(&throughputBucket{ throughput: serviceOperationThroughput{ "svcA": map[string]*model.Throughput{ - "PUT": {Count: 30, Probabilities: map[string]struct{}{"0.001000": {}}}, + http.MethodPut: {Count: 30, Probabilities: map[string]struct{}{"0.001000": {}}}, }, "svcB": map[string]*model.Throughput{ - "GET": {Count: 15, Probabilities: map[string]struct{}{"0.001000": {}}}, + http.MethodGet: {Count: 15, Probabilities: map[string]struct{}{"0.001000": {}}}, }, }, interval: 60 * time.Second, @@ -651,8 +652,8 @@ func TestCalculateProbabilitiesAndQPSMultiple(t *testing.T) { probabilities, qps = p.calculateProbabilitiesAndQPS() require.Len(t, probabilities, 2) - assert.Equal(t, map[string]float64{"GET": 0.064, "PUT": 0.001468867216804201}, probabilities["svcA"]) - assert.Equal(t, map[string]float64{"PUT": 0.032, "GET": 0.002}, probabilities["svcB"]) + assert.Equal(t, map[string]float64{http.MethodGet: 0.064, http.MethodPut: 0.001468867216804201}, probabilities["svcA"]) + assert.Equal(t, map[string]float64{http.MethodPut: 0.032, http.MethodGet: 0.002}, probabilities["svcB"]) p.probabilities = probabilities p.qps = qps @@ -662,10 +663,10 @@ func TestCalculateProbabilitiesAndQPSMultiple(t *testing.T) { p.prependThroughputBucket(&throughputBucket{ throughput: serviceOperationThroughput{ "svcA": map[string]*model.Throughput{ - "PUT": {Count: 20, Probabilities: map[string]struct{}{"0.001000": {}}}, + http.MethodPut: {Count: 20, Probabilities: map[string]struct{}{"0.001000": {}}}, }, "svcB": map[string]*model.Throughput{ - "GET": {Count: 10, Probabilities: map[string]struct{}{"0.001000": {}}}, + http.MethodGet: {Count: 10, Probabilities: map[string]struct{}{"0.001000": {}}}, }, }, interval: 60 * time.Second, @@ -674,8 +675,8 @@ func TestCalculateProbabilitiesAndQPSMultiple(t *testing.T) { probabilities, qps = p.calculateProbabilitiesAndQPS() require.Len(t, probabilities, 2) - assert.Equal(t, map[string]float64{"GET": 0.128, "PUT": 0.001468867216804201}, probabilities["svcA"]) - assert.Equal(t, map[string]float64{"PUT": 0.064, "GET": 0.002}, probabilities["svcB"]) + assert.Equal(t, map[string]float64{http.MethodGet: 0.128, http.MethodPut: 0.001468867216804201}, probabilities["svcA"]) + assert.Equal(t, map[string]float64{http.MethodPut: 0.064, http.MethodGet: 0.002}, probabilities["svcB"]) p.probabilities = probabilities p.qps = qps @@ -685,12 +686,12 @@ func TestCalculateProbabilitiesAndQPSMultiple(t *testing.T) { p.prependThroughputBucket(&throughputBucket{ throughput: serviceOperationThroughput{ "svcA": map[string]*model.Throughput{ - "PUT": {Count: 20, Probabilities: map[string]struct{}{"0.001000": {}}}, - "GET": {Count: 120, Probabilities: map[string]struct{}{"0.128000": {}}}, + http.MethodPut: {Count: 20, Probabilities: map[string]struct{}{"0.001000": {}}}, + http.MethodGet: {Count: 120, Probabilities: map[string]struct{}{"0.128000": {}}}, }, "svcB": map[string]*model.Throughput{ - "PUT": {Count: 60, Probabilities: map[string]struct{}{"0.064000": {}}}, - "GET": {Count: 10, Probabilities: map[string]struct{}{"0.001000": {}}}, + http.MethodPut: {Count: 60, Probabilities: map[string]struct{}{"0.064000": {}}}, + http.MethodGet: {Count: 10, Probabilities: map[string]struct{}{"0.001000": {}}}, }, }, interval: 60 * time.Second, @@ -699,8 +700,8 @@ func TestCalculateProbabilitiesAndQPSMultiple(t *testing.T) { probabilities, qps = p.calculateProbabilitiesAndQPS() require.Len(t, probabilities, 2) - assert.Equal(t, map[string]float64{"GET": 0.0882586677054928, "PUT": 0.001468867216804201}, probabilities["svcA"]) - assert.Equal(t, map[string]float64{"PUT": 0.09587513707888091, "GET": 0.002}, probabilities["svcB"]) + assert.Equal(t, map[string]float64{http.MethodGet: 0.0882586677054928, http.MethodPut: 0.001468867216804201}, probabilities["svcA"]) + assert.Equal(t, map[string]float64{http.MethodPut: 0.09587513707888091, http.MethodGet: 0.002}, probabilities["svcB"]) p.probabilities = probabilities p.qps = qps diff --git a/plugin/sampling/strategyprovider/adaptive/provider_test.go b/plugin/sampling/strategyprovider/adaptive/provider_test.go index 8a26d8fc34d..1342cd21790 100644 --- a/plugin/sampling/strategyprovider/adaptive/provider_test.go +++ b/plugin/sampling/strategyprovider/adaptive/provider_test.go @@ -5,6 +5,7 @@ package adaptive import ( "context" + "net/http" "testing" "time" @@ -68,10 +69,10 @@ func TestProviderRealisticRunCalculationLoop(t *testing.T) { logger := zap.NewNop() // NB: This is an extremely long test since it uses near realistic (1/6th scale) processor config values testThroughputs := []*model.Throughput{ - {Service: "svcA", Operation: "GET", Count: 10}, - {Service: "svcA", Operation: "POST", Count: 9}, - {Service: "svcA", Operation: "PUT", Count: 5}, - {Service: "svcA", Operation: "DELETE", Count: 20}, + {Service: "svcA", Operation: http.MethodGet, Count: 10}, + {Service: "svcA", Operation: http.MethodPost, Count: 9}, + {Service: "svcA", Operation: http.MethodPut, Count: 5}, + {Service: "svcA", Operation: http.MethodDelete, Count: 20}, } mockStorage := &smocks.Store{} mockStorage.On("GetThroughput", mock.AnythingOfType("time.Time"), mock.AnythingOfType("time.Time")). @@ -110,16 +111,16 @@ func TestProviderRealisticRunCalculationLoop(t *testing.T) { for _, s := range strategies { switch s.Operation { - case "GET": + case http.MethodGet: assert.InDelta(t, 0.001, s.ProbabilisticSampling.SamplingRate, 1e-4, "Already at 1QPS, no probability change") - case "POST": + case http.MethodPost: assert.InDelta(t, 0.001, s.ProbabilisticSampling.SamplingRate, 1e-4, "Within epsilon of 1QPS, no probability change") - case "PUT": + case http.MethodPut: assert.InEpsilon(t, 0.002, s.ProbabilisticSampling.SamplingRate, 0.025, "Under sampled, double probability") - case "DELETE": + case http.MethodDelete: assert.InEpsilon(t, 0.0005, s.ProbabilisticSampling.SamplingRate, 0.025, "Over sampled, halve probability") } @@ -129,7 +130,7 @@ func TestProviderRealisticRunCalculationLoop(t *testing.T) { func TestProviderGenerateStrategyResponses(t *testing.T) { probabilities := model.ServiceOperationProbabilities{ "svcA": map[string]float64{ - "GET": 0.5, + http.MethodGet: 0.5, }, } p := &Provider{ @@ -149,7 +150,7 @@ func TestProviderGenerateStrategyResponses(t *testing.T) { DefaultLowerBoundTracesPerSecond: 0.0001, PerOperationStrategies: []*api_v2.OperationSamplingStrategy{ { - Operation: "GET", + Operation: http.MethodGet, ProbabilisticSampling: &api_v2.ProbabilisticSamplingStrategy{ SamplingRate: 0.5, }, diff --git a/plugin/sampling/strategyprovider/static/provider.go b/plugin/sampling/strategyprovider/static/provider.go index 56890ed63c0..8c801de8f79 100644 --- a/plugin/sampling/strategyprovider/static/provider.go +++ b/plugin/sampling/strategyprovider/static/provider.go @@ -104,7 +104,7 @@ func (h *samplingProvider) downloadSamplingStrategies(samplingURL string) ([]byt ctx, cx := context.WithTimeout(context.Background(), time.Second) defer cx() - req, err := http.NewRequestWithContext(ctx, "GET", samplingURL, nil) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, samplingURL, nil) if err != nil { return nil, fmt.Errorf("cannot construct HTTP request: %w", err) } diff --git a/plugin/sampling/strategyprovider/static/provider_test.go b/plugin/sampling/strategyprovider/static/provider_test.go index ba7992f18f8..783caeb5c54 100644 --- a/plugin/sampling/strategyprovider/static/provider_test.go +++ b/plugin/sampling/strategyprovider/static/provider_test.go @@ -73,15 +73,15 @@ func mockStrategyServer(t *testing.T) (*httptest.Server, *atomic.Pointer[string] return case "/bad-status": - w.WriteHeader(404) + w.WriteHeader(http.StatusNotFound) return case "/service-unavailable": - w.WriteHeader(503) + w.WriteHeader(http.StatusServiceUnavailable) return default: - w.WriteHeader(200) + w.WriteHeader(http.StatusOK) w.Header().Set("Content-Type", "application/json") w.Write([]byte(*strategy.Load())) } diff --git a/plugin/storage/cassandra/samplingstore/storage_test.go b/plugin/storage/cassandra/samplingstore/storage_test.go index 238d9723f56..774ffeb5422 100644 --- a/plugin/storage/cassandra/samplingstore/storage_test.go +++ b/plugin/storage/cassandra/samplingstore/storage_test.go @@ -6,6 +6,7 @@ package samplingstore import ( "errors" + "net/http" "testing" "time" @@ -329,12 +330,12 @@ func TestStringToThroughput(t *testing.T) { func TestProbabilitiesAndQPSToString(t *testing.T) { probabilities := model.ServiceOperationProbabilities{ "svc,1": map[string]float64{ - "GET": 0.001, + http.MethodGet: 0.001, }, } qps := model.ServiceOperationQPS{ "svc,1": map[string]float64{ - "GET": 62.3, + http.MethodGet: 62.3, }, } str := probabilitiesAndQPSToString(probabilities, qps) @@ -348,17 +349,17 @@ func TestStringToProbabilitiesAndQPS(t *testing.T) { assert.Len(t, probabilities, 2) assert.Equal(t, map[string]*model.ProbabilityAndQPS{ - "GET": { + http.MethodGet: { Probability: 0.001, QPS: 63.2, }, - "PUT": { + http.MethodPut: { Probability: 0.002, QPS: 0.0, }, }, probabilities["svc1"]) assert.Equal(t, map[string]*model.ProbabilityAndQPS{ - "GET": { + http.MethodGet: { Probability: 0.5, QPS: 34.2, }, @@ -371,8 +372,8 @@ func TestStringToProbabilities(t *testing.T) { probabilities := s.stringToProbabilities(testStr) assert.Len(t, probabilities, 2) - assert.Equal(t, map[string]float64{"GET": 0.001, "PUT": 0.002}, probabilities["svc1"]) - assert.Equal(t, map[string]float64{"GET": 0.5}, probabilities["svc2"]) + assert.Equal(t, map[string]float64{http.MethodGet: 0.001, http.MethodPut: 0.002}, probabilities["svc1"]) + assert.Equal(t, map[string]float64{http.MethodGet: 0.5}, probabilities["svc2"]) } func TestProbabilitiesSetToString(t *testing.T) { diff --git a/plugin/storage/es/options_test.go b/plugin/storage/es/options_test.go index 33d933b5830..87b2ce11d7f 100644 --- a/plugin/storage/es/options_test.go +++ b/plugin/storage/es/options_test.go @@ -5,6 +5,7 @@ package es import ( + "net/http" "testing" "time" @@ -117,7 +118,7 @@ func TestOptionsWithFlags(t *testing.T) { assert.Equal(t, "2006.01.02", aux.Indices.Services.DateLayout) assert.Equal(t, "2006.01.02.15", aux.Indices.Spans.DateLayout) assert.True(t, primary.UseILM) - assert.Equal(t, "POST", aux.SendGetBodyAs) + assert.Equal(t, http.MethodPost, aux.SendGetBodyAs) } func TestEmptyRemoteReadClusters(t *testing.T) { From f6899b04499e789312c48f0f3cdd9483b789c77a Mon Sep 17 00:00:00 2001 From: Viral Verma <102751195+vvs-personalstash@users.noreply.github.com> Date: Sun, 24 Nov 2024 23:07:46 +0530 Subject: [PATCH 8/8] [V2]Add Script for metrics markdown table (#5941) ## Description of the changes - Added a script for creating a markdown table to view and compare v1 and v2 metrics using json generated by compare metrics ## Checklist - *[x] I have read https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md - *[x] I have signed all commits - [ ] I have added unit tests for the new functionality - *[x] I have run lint and test steps successfully - for `jaeger`: `make lint test` - for `jaeger-ui`: `yarn lint` and `yarn test` --------- Signed-off-by: vvs-personalstash Co-authored-by: Yuri Shkuro --- .../docs/migration/all-in-one-metrics.md | 86 ++++++++++++ cmd/jaeger/docs/migration/badger-metrics.md | 33 +++++ .../docs/migration/cassandra-metrics.md | 22 +++ .../docs/migration/elasticsearch-metrics.md | 21 +++ .../docs/migration/opensearch-metrics.md | 21 +++ scripts/compare_metrics.py | 59 -------- scripts/utils/compare_metrics.py | 130 ++++++++++++++++++ scripts/utils/metrics-md.py | 117 ++++++++++++++++ 8 files changed, 430 insertions(+), 59 deletions(-) create mode 100644 cmd/jaeger/docs/migration/all-in-one-metrics.md create mode 100644 cmd/jaeger/docs/migration/badger-metrics.md create mode 100644 cmd/jaeger/docs/migration/cassandra-metrics.md create mode 100644 cmd/jaeger/docs/migration/elasticsearch-metrics.md create mode 100644 cmd/jaeger/docs/migration/opensearch-metrics.md delete mode 100755 scripts/compare_metrics.py create mode 100755 scripts/utils/compare_metrics.py create mode 100644 scripts/utils/metrics-md.py diff --git a/cmd/jaeger/docs/migration/all-in-one-metrics.md b/cmd/jaeger/docs/migration/all-in-one-metrics.md new file mode 100644 index 00000000000..28f165b2be3 --- /dev/null +++ b/cmd/jaeger/docs/migration/all-in-one-metrics.md @@ -0,0 +1,86 @@ +# ALL-IN-ONE METRICS +### Combined Metrics + +| V1 Metric | V1 Labels | V2 Metric | V2 Labels | +|-----------|---------------|-----------|---------------| +| jaeger_query_latency | operation, result | jaeger_query_latency | operation, result | +| jaeger_query_responses | operation | jaeger_query_responses | operation | +| jaeger_query_requests_total | operation, result | jaeger_query_requests_total | operation, result | +| go_gc_duration_seconds | N/A | N/A | N/A | +| go_goroutines | N/A | N/A | N/A | +| go_info | version | N/A | N/A | +| go_memstats_alloc_bytes | N/A | N/A | N/A | +| go_memstats_alloc_bytes_total | N/A | N/A | N/A | +| go_memstats_buck_hash_sys_bytes | N/A | N/A | N/A | +| go_memstats_frees_total | N/A | N/A | N/A | +| go_memstats_gc_sys_bytes | N/A | N/A | N/A | +| go_memstats_heap_alloc_bytes | N/A | N/A | N/A | +| go_memstats_heap_idle_bytes | N/A | N/A | N/A | +| go_memstats_heap_inuse_bytes | N/A | N/A | N/A | +| go_memstats_heap_objects | N/A | N/A | N/A | +| go_memstats_heap_released_bytes | N/A | N/A | N/A | +| go_memstats_heap_sys_bytes | N/A | N/A | N/A | +| go_memstats_last_gc_time_seconds | N/A | N/A | N/A | +| go_memstats_lookups_total | N/A | N/A | N/A | +| go_memstats_mallocs_total | N/A | N/A | N/A | +| go_memstats_mcache_inuse_bytes | N/A | N/A | N/A | +| go_memstats_mcache_sys_bytes | N/A | N/A | N/A | +| go_memstats_mspan_inuse_bytes | N/A | N/A | N/A | +| go_memstats_mspan_sys_bytes | N/A | N/A | N/A | +| go_memstats_next_gc_bytes | N/A | N/A | N/A | +| go_memstats_other_sys_bytes | N/A | N/A | N/A | +| go_memstats_stack_inuse_bytes | N/A | N/A | N/A | +| go_memstats_stack_sys_bytes | N/A | N/A | N/A | +| go_memstats_sys_bytes | N/A | N/A | N/A | +| go_threads | N/A | N/A | N/A | +| jaeger_build_info | build_date, revision, version | N/A | N/A | +| jaeger_collector_batch_size | host | N/A | N/A | +| jaeger_collector_http_request_duration | method, path, status | N/A | N/A | +| jaeger_collector_http_server_errors_total | source, status | N/A | N/A | +| jaeger_collector_http_server_requests_total | type | N/A | N/A | +| jaeger_collector_in_queue_latency | host | N/A | N/A | +| jaeger_collector_queue_capacity | host | N/A | N/A | +| jaeger_collector_queue_length | host | N/A | N/A | +| jaeger_collector_save_latency | host | N/A | N/A | +| jaeger_collector_spans_bytes | host | N/A | N/A | +| jaeger_collector_spans_dropped_total | host | N/A | N/A | +| jaeger_collector_spans_received_total | debug, format, svc, transport | N/A | N/A | +| jaeger_collector_spans_rejected_total | debug, format, svc, transport | N/A | N/A | +| jaeger_collector_spans_saved_by_svc_total | debug, result, svc | N/A | N/A | +| jaeger_collector_spans_serviceNames | host | N/A | N/A | +| jaeger_collector_traces_received_total | debug, format, sampler_type, svc, transport | N/A | N/A | +| jaeger_collector_traces_rejected_total | debug, format, sampler_type, svc, transport | N/A | N/A | +| jaeger_collector_traces_saved_by_svc_total | debug, result, sampler_type, svc | N/A | N/A | +| process_cpu_seconds_total | N/A | N/A | N/A | +| process_max_fds | N/A | N/A | N/A | +| process_open_fds | N/A | N/A | N/A | +| process_resident_memory_bytes | N/A | N/A | N/A | +| process_start_time_seconds | N/A | N/A | N/A | +| process_virtual_memory_bytes | N/A | N/A | N/A | +| process_virtual_memory_max_bytes | N/A | N/A | N/A | +| N/A | N/A | exporter_send_failed_spans | exporter, service_instance_id, service_name, service_version | +| N/A | N/A | exporter_sent_spans | exporter, service_instance_id, service_name, service_version | +| N/A | N/A | process_cpu_seconds | service_instance_id, service_name, service_version | +| N/A | N/A | process_memory_rss | service_instance_id, service_name, service_version | +| N/A | N/A | process_runtime_heap_alloc_bytes | service_instance_id, service_name, service_version | +| N/A | N/A | process_runtime_total_alloc_bytes | service_instance_id, service_name, service_version | +| N/A | N/A | process_runtime_total_sys_memory_bytes | service_instance_id, service_name, service_version | +| N/A | N/A | process_uptime | service_instance_id, service_name, service_version | +| N/A | N/A | processor_batch_batch_send_size | processor, service_instance_id, service_name, service_version | +| N/A | N/A | processor_batch_batch_send_size_bytes | processor, service_instance_id, service_name, service_version | +| N/A | N/A | processor_batch_metadata_cardinality | processor, service_instance_id, service_name, service_version | +| N/A | N/A | processor_batch_timeout_trigger_send | processor, service_instance_id, service_name, service_version | +| N/A | N/A | receiver_accepted_spans | receiver, service_instance_id, service_name, service_version, transport | +| N/A | N/A | receiver_refused_spans | receiver, service_instance_id, service_name, service_version, transport | +| N/A | N/A | rpc_server_duration | rpc_grpc_status_code, rpc_method, rpc_service, rpc_system, service_instance_id, service_name, service_version | +| N/A | N/A | rpc_server_request_size | rpc_method, rpc_service, rpc_system, service_instance_id, service_name, service_version | +| N/A | N/A | rpc_server_requests_per_rpc | rpc_grpc_status_code, rpc_method, rpc_service, rpc_system, service_instance_id, service_name, service_version | +| N/A | N/A | rpc_server_response_size | rpc_method, rpc_service, rpc_system, service_instance_id, service_name, service_version | +| N/A | N/A | rpc_server_responses_per_rpc | rpc_grpc_status_code, rpc_method, rpc_service, rpc_system, service_instance_id, service_name, service_version | +| N/A | N/A | target_info | service_instance_id, service_name, service_version | +### Equivalent Metrics + +| V1 Metric | V1 Labels | V2 Metric | V2 Labels | +|-----------|---------------|-----------|---------------| +| jaeger_collector_spans_rejected_total | debug, format, svc, transport | receiver_refused_spans | receiver, service_instance_id, service_name, service_version, transport | +| jaeger_build_info | build_date, revision, version | target_info | service_instance_id, service_name, service_version | diff --git a/cmd/jaeger/docs/migration/badger-metrics.md b/cmd/jaeger/docs/migration/badger-metrics.md new file mode 100644 index 00000000000..65656e44c6a --- /dev/null +++ b/cmd/jaeger/docs/migration/badger-metrics.md @@ -0,0 +1,33 @@ +# BADGER METRICS + +### Combined Metrics + +| V1 Metric | V1 Parameters | V2 Metric | V2 Parameters | +| ------------------------------------------ | ------------- | ---------------------------------------- | ------------- | +| jaeger_badger_compaction_current_num_lsm | N/A | jaeger_badger_compaction_current_num_lsm | N/A | +| jaeger_badger_get_num_memtable | N/A | jaeger_badger_get_num_memtable | N/A | +| jaeger_badger_get_num_user | N/A | jaeger_badger_get_num_user | N/A | +| jaeger_badger_get_with_result_num_user | N/A | jaeger_badger_get_with_result_num_user | N/A | +| jaeger_badger_iterator_num_user | N/A | jaeger_badger_iterator_num_user | N/A | +| jaeger_badger_put_num_user | N/A | jaeger_badger_put_num_user | N/A | +| jaeger_badger_read_bytes_lsm | N/A | jaeger_badger_read_bytes_lsm | N/A | +| jaeger_badger_read_bytes_vlog | N/A | jaeger_badger_read_bytes_vlog | N/A | +| jaeger_badger_read_num_vlog | N/A | jaeger_badger_read_num_vlog | N/A | +| jaeger_badger_size_bytes_lsm | N/A | jaeger_badger_size_bytes_lsm | N/A | +| jaeger_badger_size_bytes_vlog | N/A | jaeger_badger_size_bytes_vlog | N/A | +| jaeger_badger_write_bytes_l0 | N/A | jaeger_badger_write_bytes_l0 | N/A | +| jaeger_badger_write_bytes_user | N/A | jaeger_badger_write_bytes_user | N/A | +| jaeger_badger_write_bytes_vlog | N/A | jaeger_badger_write_bytes_vlog | N/A | +| jaeger_badger_write_num_vlog | N/A | jaeger_badger_write_num_vlog | N/A | +| jaeger_badger_write_pending_num_memtable | N/A | jaeger_badger_write_pending_num_memtable | N/A | +| jaeger_badger_key_log_bytes_available | N/A | N/A | N/A | +| jaeger_badger_storage_maintenance_last_run | N/A | N/A | N/A | +| jaeger_badger_storage_valueloggc_last_run | N/A | N/A | N/A | +| jaeger_badger_value_log_bytes_available | N/A | N/A | N/A | + +### Equivalent Metrics + +| V1 Metric | V1 Parameters | V2 Metric | V2 Parameters | +| ------------------------------------- | ------------------------------ | ---------------------- | ----------------------------------------------------------------------- | +| jaeger_collector_spans_rejected_total | debug, format, svc, transport | receiver_refused_spans | receiver, service_instance_id, service_name, service_version, transport | +| jaeger_build_info | build_date, revision, version | target_info | service_instance_id, service_name, service_version | diff --git a/cmd/jaeger/docs/migration/cassandra-metrics.md b/cmd/jaeger/docs/migration/cassandra-metrics.md new file mode 100644 index 00000000000..95d453f7ca3 --- /dev/null +++ b/cmd/jaeger/docs/migration/cassandra-metrics.md @@ -0,0 +1,22 @@ +# CASSANDRA METRICS +### Combined Metrics + +| V1 Metric | V1 Parameters | V2 Metric | V2 Parameters | +|-----------|---------------|-----------|---------------| +| jaeger_cassandra_attempts_total | table | jaeger_cassandra_attempts_total | table | +| jaeger_cassandra_errors_total | table | jaeger_cassandra_errors_total | table | +| jaeger_cassandra_inserts_total | table | jaeger_cassandra_inserts_total | table | +| jaeger_cassandra_latency_err | table | jaeger_cassandra_latency_err | table | +| jaeger_cassandra_latency_ok | table | jaeger_cassandra_latency_ok | table | +| jaeger_cassandra_read_attempts_total | table | jaeger_cassandra_read_attempts_total | table | +| jaeger_cassandra_read_errors_total | table | jaeger_cassandra_read_errors_total | table | +| jaeger_cassandra_read_inserts_total | table | jaeger_cassandra_read_inserts_total | table | +| jaeger_cassandra_read_latency_err | table | jaeger_cassandra_read_latency_err | table | +| jaeger_cassandra_read_latency_ok | table | jaeger_cassandra_read_latency_ok | table | +| jaeger_cassandra_tag_index_skipped_total | N/A | jaeger_cassandra_tag_index_skipped_total | N/A | +### Equivalent Metrics + +| V1 Metric | V1 Parameters | V2 Metric | V2 Parameters | +|-----------|---------------|-----------|---------------| +| jaeger_collector_spans_rejected_total | debug, format, svc, transport | receiver_refused_spans | receiver, service_instance_id, service_name, service_version, transport | +| jaeger_build_info | build_date, revision, version | target_info | service_instance_id, service_name, service_version | diff --git a/cmd/jaeger/docs/migration/elasticsearch-metrics.md b/cmd/jaeger/docs/migration/elasticsearch-metrics.md new file mode 100644 index 00000000000..9b5a0a0b608 --- /dev/null +++ b/cmd/jaeger/docs/migration/elasticsearch-metrics.md @@ -0,0 +1,21 @@ +# ELASTICSEARCH METRICS +### Combined Metrics + +| V1 Metric | V1 Parameters | V2 Metric | V2 Parameters | +|-----------|---------------|-----------|---------------| +| jaeger_bulk_index_attempts_total | N/A | jaeger_bulk_index_attempts_total | N/A | +| jaeger_bulk_index_errors_total | N/A | jaeger_bulk_index_errors_total | N/A | +| jaeger_bulk_index_inserts_total | N/A | jaeger_bulk_index_inserts_total | N/A | +| jaeger_bulk_index_latency_err | N/A | jaeger_bulk_index_latency_err | N/A | +| jaeger_bulk_index_latency_ok | N/A | jaeger_bulk_index_latency_ok | N/A | +| jaeger_index_create_attempts_total | N/A | jaeger_index_create_attempts_total | N/A | +| jaeger_index_create_errors_total | N/A | jaeger_index_create_errors_total | N/A | +| jaeger_index_create_inserts_total | N/A | jaeger_index_create_inserts_total | N/A | +| jaeger_index_create_latency_err | N/A | jaeger_index_create_latency_err | N/A | +| jaeger_index_create_latency_ok | N/A | jaeger_index_create_latency_ok | N/A | +### Equivalent Metrics + +| V1 Metric | V1 Parameters | V2 Metric | V2 Parameters | +|-----------|---------------|-----------|---------------| +| jaeger_collector_spans_rejected_total | debug, format, svc, transport | receiver_refused_spans | receiver, service_instance_id, service_name, service_version, transport | +| jaeger_build_info | build_date, revision, version | target_info | service_instance_id, service_name, service_version | diff --git a/cmd/jaeger/docs/migration/opensearch-metrics.md b/cmd/jaeger/docs/migration/opensearch-metrics.md new file mode 100644 index 00000000000..aa5052c270b --- /dev/null +++ b/cmd/jaeger/docs/migration/opensearch-metrics.md @@ -0,0 +1,21 @@ +# OPENSEARCH METRICS +### Combined Metrics + +| V1 Metric | V1 Parameters | V2 Metric | V2 Parameters | +|-----------|---------------|-----------|---------------| +| jaeger_bulk_index_attempts_total | N/A | jaeger_bulk_index_attempts_total | N/A | +| jaeger_bulk_index_errors_total | N/A | jaeger_bulk_index_errors_total | N/A | +| jaeger_bulk_index_inserts_total | N/A | jaeger_bulk_index_inserts_total | N/A | +| jaeger_bulk_index_latency_err | N/A | jaeger_bulk_index_latency_err | N/A | +| jaeger_bulk_index_latency_ok | N/A | jaeger_bulk_index_latency_ok | N/A | +| jaeger_index_create_attempts_total | N/A | jaeger_index_create_attempts_total | N/A | +| jaeger_index_create_errors_total | N/A | jaeger_index_create_errors_total | N/A | +| jaeger_index_create_inserts_total | N/A | jaeger_index_create_inserts_total | N/A | +| jaeger_index_create_latency_err | N/A | jaeger_index_create_latency_err | N/A | +| jaeger_index_create_latency_ok | N/A | jaeger_index_create_latency_ok | N/A | +### Equivalent Metrics + +| V1 Metric | V1 Parameters | V2 Metric | V2 Parameters | +|-----------|---------------|-----------|---------------| +| jaeger_collector_spans_rejected_total | debug, format, svc, transport | receiver_refused_spans | receiver, service_instance_id, service_name, service_version, transport | +| jaeger_build_info | build_date, revision, version | target_info | service_instance_id, service_name, service_version | diff --git a/scripts/compare_metrics.py b/scripts/compare_metrics.py deleted file mode 100755 index 36fe190d592..00000000000 --- a/scripts/compare_metrics.py +++ /dev/null @@ -1,59 +0,0 @@ -# Copyright (c) 2024 The Jaeger Authors. -# SPDX-License-Identifier: Apache-2.0 - -import json - -v1_metrics_path = "./V1_Metrics.json" -v2_metrics_path = "./V2_Metrics.json" - -with open(v1_metrics_path, 'r') as file: - v1_metrics = json.load(file) - -with open(v2_metrics_path, 'r') as file: - v2_metrics = json.load(file) - -# Extract names and labels of the metrics -def extract_metrics_with_labels(metrics, strip_prefix=None): - result = {} - for metric in metrics: - name = metric['name'] - if strip_prefix and name.startswith(strip_prefix): - name = name[len(strip_prefix):] - labels = {} - if 'metrics' in metric and 'labels' in metric['metrics'][0]: - labels = metric['metrics'][0]['labels'] - result[name] = labels - return result - - -v1_metrics_with_labels = extract_metrics_with_labels(v1_metrics) -v2_metrics_with_labels = extract_metrics_with_labels( - v2_metrics, strip_prefix="otelcol_") - -# Compare the metrics names and labels -common_metrics = {} -v1_only_metrics = {} -v2_only_metrics = {} - -for name, labels in v1_metrics_with_labels.items(): - if name in v2_metrics_with_labels: - common_metrics[name] = labels - elif not name.startswith("jaeger_agent"): - v1_only_metrics[name] = labels - -for name, labels in v2_metrics_with_labels.items(): - if name not in v1_metrics_with_labels: - v2_only_metrics[name] = labels - -differences = { - "common_metrics": common_metrics, - "v1_only_metrics": v1_only_metrics, - "v2_only_metrics": v2_only_metrics -} - -# Write the differences to a new JSON file -differences_path = "./differences.json" -with open(differences_path, 'w') as file: - json.dump(differences, file, indent=4) - -print(f"Differences written to {differences_path}") diff --git a/scripts/utils/compare_metrics.py b/scripts/utils/compare_metrics.py new file mode 100755 index 00000000000..390f2b7d470 --- /dev/null +++ b/scripts/utils/compare_metrics.py @@ -0,0 +1,130 @@ +# Copyright (c) 2024 The Jaeger Authors. +# SPDX-License-Identifier: Apache-2.0 + +import json +import argparse +import subprocess + +#Instructions of use: + +# To generate V1_Metrics.json and V2_Metrics.json, run the following commands: +# i.e for elastic search first run the following command: +# docker compose -f docker-compose/elasticsearch/v7/docker-compose.yml up +# 1. Generate V1_Metrics.json and V2_Metrics.json by the following commands: +# V1 binary cmd: SPAN_STORAGE_TYPE=elasticsearch go run -tags=ui ./cmd/all-in-one +# extract the metrics by running the following command: +# prom2json http://localhost:14269/metrics > V1_Metrics.json +# Stop the v1 binary and for v2 binary run the following command: +# go run -tags ui ./cmd/jaeger/main.go --config ./cmd/jaeger/config-elasticsearch.yaml +# extract the metrics by running the following command: +# prom2json http://localhost:8888/metrics > V2_Metrics.json +# it is first recomended to generate the differences for all-in-one.json by running the following command: +# python3 compare_metrics.py --out md --is_storage F +# rename that file to all_in_one.json and use it to filter out the overlapping metrics by using the is_storage falg to T +# 2. Run the script with the following command: +# python3 compare_metrics.py --out {json or md} --is_storage {T or F} +# 3. The script will compare the metrics in V1_Metrics.json and V2_Metrics.json and output the differences to differences.json + + +# Extract names and labels of the metrics +def extract_metrics_with_labels(metrics, strip_prefix=None): + result = {} + for metric in metrics: + + name = metric['name'] + print(name) + if strip_prefix and name.startswith(strip_prefix): + name = name[len(strip_prefix):] + labels = {} + if 'metrics' in metric and 'labels' in metric['metrics'][0]: + labels = metric['metrics'][0]['labels'] + result[name] = labels + return result + +def remove_overlapping_metrics(all_in_one_data, other_json_data): + """Remove overlapping metrics found in all_in-one.json from another JSON.""" + # Loop through v1 and v2 metrics to remove overlaps + for metric_category in ['common_metrics', 'v1_only_metrics', 'v2_only_metrics']: + if metric_category in all_in_one_data and metric_category in other_json_data: + for metric in all_in_one_data[metric_category]: + if metric in other_json_data[metric_category]: + del other_json_data[metric_category][metric] + + return other_json_data + + +# Your current compare_metrics.py logic goes here +def main(): + parser = argparse.ArgumentParser(description='Compare metrics and output format.') + parser.add_argument('--out', choices=['json', 'md'], default='json', + help='Output format: json (default) or md') + parser.add_argument('--is_storage', choices=['T','F'],default='F', help='Remove overlapping storage metrics') + # Parse the arguments + args = parser.parse_args() + + # Call your existing compare logic here + print("Running metric comparison...") + v1_metrics_path = "" #Add the path to the V1_Metrics.json file + v2_metrics_path = "" #Add the path to the V2_Metrics.json file + + with open(v1_metrics_path, 'r') as file: + v1_metrics = json.load(file) + + with open(v2_metrics_path, 'r') as file: + v2_metrics = json.load(file) + + v1_metrics_with_labels = extract_metrics_with_labels(v1_metrics) + v2_metrics_with_labels = extract_metrics_with_labels( + v2_metrics, strip_prefix="otelcol_") + + # Compare the metrics names and labels + common_metrics = {} + v1_only_metrics = {} + v2_only_metrics = {} + + for name, labels in v1_metrics_with_labels.items(): + if name in v2_metrics_with_labels: + common_metrics[name] = labels + elif not name.startswith("jaeger_agent"): + v1_only_metrics[name] = labels + + for name, labels in v2_metrics_with_labels.items(): + if name not in v1_metrics_with_labels: + v2_only_metrics[name] = labels + + differences = { + "common_metrics": common_metrics, + "v1_only_metrics": v1_only_metrics, + "v2_only_metrics": v2_only_metrics, + } + + #Write the differences to a new JSON file + differences_path = "./differences.json" + with open(differences_path, 'w') as file: + json.dump(differences, file, indent=4) + + print(f"Differences written to {differences_path}") + if args.is_storage == 'T': + all_in_one_path = "" #Add the path to the all_in_one.json file + with open(all_in_one_path, 'r') as file: + all_in_one_data = json.load(file) + with open(differences_path, 'r') as file: + other_json_data = json.load(file) + other_json_data = remove_overlapping_metrics(all_in_one_data, other_json_data) + with open(differences_path, 'w') as file: + json.dump(other_json_data, file, indent=4) + print(f"Overlapping storage metrics removed from {differences_path}") + # If the user requested markdown output, run metrics_md.py + if args.out == 'md': + try: + print("Running metrics_md.py to generate markdown output...") + subprocess.run(['python3', 'metrics-md.py'], check=True) + except subprocess.CalledProcessError as e: + print(f"Error running metrics_md.py: {e}") + + # If json output is requested or no output type is provided (default is json) + else: + print("Output in JSON format.") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/scripts/utils/metrics-md.py b/scripts/utils/metrics-md.py new file mode 100644 index 00000000000..2b158697257 --- /dev/null +++ b/scripts/utils/metrics-md.py @@ -0,0 +1,117 @@ +# Copyright (c) 2024 The Jaeger Authors. +# SPDX-License-Identifier: Apache-2.0 + +import json + + +def generate_spans_markdown_table(v1_spans, v2_spans): + """ + Generates a markdown table specifically for spans metrics with two main columns V1 and V2. + + Args: + v1_spans (dict): The dictionary of V1 spans metrics. + v2_spans (dict): The dictionary of V2 spans metrics. + + Returns: + str: The generated markdown table as a string. + """ + table = "### Equivalent Metrics\n\n" + table += "| V1 Metric | V1 Parameters | V2 Metric | V2 Parameters |\n" + table += "|-----------|---------------|-----------|---------------|\n" + + + # Iterate through the metrics using zip_longest to handle mismatched lengths + from itertools import zip_longest + + for (v1_metric, v1_params), (v2_metric, v2_params) in zip_longest(v1_spans.items(), v2_spans.items(), fillvalue=('', {})): + v1_inner_keys = ', '.join(v1_params.keys()) if v1_params else '' + v2_inner_keys = ', '.join(v2_params.keys()) if v2_params else '' + table += f"| {v1_metric} | {v1_inner_keys} | {v2_metric} | {v2_inner_keys} |\n" + + return table + + + +def generate_combined_markdown_table(common_metrics, v1_metrics, v2_metrics): + """ + Generates a markdown table for combined metrics from common, V1, and V2. + + Args: + common_metrics (dict): The dictionary of common metrics. + v1_metrics (dict): The dictionary of V1 only metrics. + v2_metrics (dict): The dictionary of V2 only metrics. + + Returns: + str: The generated markdown table as a string. + """ + table = "### Combined Metrics\n\n" + table += "| V1 Metric | V1 Parameters | V2 Metric | V2 Parameters |\n" + table += "|-----------|---------------|-----------|---------------|\n" + for metric_name, params in common_metrics.items(): + v1_params = ', '.join(common_metrics[metric_name].keys()) if params else 'N/A' + v2_params = ', '.join(common_metrics[metric_name].keys()) if params else 'N/A' + table += f"| {metric_name} | {v1_params} | {metric_name} | {v2_params} |\n" + + # Then, handle V1-only metrics (V2 shows as N/A) + for metric_name, v1_params in v1_metrics.items(): + v1_params_str = ', '.join(v1_params.keys()) if v1_params else 'N/A' + table += f"| {metric_name} | {v1_params_str} | N/A | N/A |\n" + + # Then, handle V2-only metrics (V1 shows as N/A) + for metric_name, v2_params in v2_metrics.items(): + v2_params_str = ', '.join(v2_params.keys()) if v2_params else 'N/A' + table += f"| N/A | N/A | {metric_name} | {v2_params_str} |\n" + + return table + +class ConvertJson: + + def __init__(self, json_fp, h1): + self.fp = json_fp + self.h1 = h1 + self.jdata = self.get_json() + self.mddata = self.format_json_to_md() + + def get_json(self): + with open(self.fp) as f: + res = json.load(f) + return res + + def format_json_to_md(self): + text = f'# {self.h1}\n' + dct = self.jdata + + # Extracting individual metric dictionaries + common_metrics = dct.get("common_metrics", {}) + v1_only_metrics = dct.get("v1_only_metrics", {}) + v2_only_metrics = dct.get("v2_only_metrics", {}) + + # Generate combined table + combined_metrics_table = generate_combined_markdown_table( + common_metrics, v1_only_metrics, v2_only_metrics + ) + + filtered_v1_metrics = { + "jaeger_collector_spans_rejected_total": {"debug": "false", "format": "","svc": "","transport":""}, + "jaeger_build_info": {"build_date": "","revision": ""," version": ""} # Add more metrics as needed + } + + # Hardcoding filtered v2 metrics + filtered_v2_metrics = { + "receiver_refused_spans": {"receiver": "","service_instance_id": "","service_name": "","service_version": "","transport": ""}, + "target_info": {"service_instance_id": "","service_name": "","service_version": ""} # Add more metrics as needed + } + spans_metrics_table = generate_spans_markdown_table(filtered_v1_metrics, filtered_v2_metrics) + text += combined_metrics_table+spans_metrics_table + return text + + def convert_dict_to_md(self, output_fn): + with open(output_fn, 'w') as writer: + writer.writelines(self.mddata) + print('Dict successfully converted to md') + +# Usage +fn = '' # Enter the path of the JSON file generated by compare_metrics.py +title = "TITLE" +converter = ConvertJson(fn, title) +converter.convert_dict_to_md(output_fn='metrics.md') \ No newline at end of file