From 9c9ce6c83da45197a12f6130e84bec62fb052da2 Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Tue, 2 Sep 2025 11:42:36 -0300 Subject: [PATCH 01/10] otel: add test for document-level retries --- .../filebeat/tests/integration/otel_test.go | 259 ++++++++++++++++++ 1 file changed, 259 insertions(+) diff --git a/x-pack/filebeat/tests/integration/otel_test.go b/x-pack/filebeat/tests/integration/otel_test.go index 3497dbe3d529..c56b6bcc3780 100644 --- a/x-pack/filebeat/tests/integration/otel_test.go +++ b/x-pack/filebeat/tests/integration/otel_test.go @@ -9,11 +9,16 @@ package integration import ( "bytes" "context" + "encoding/json" "fmt" + "io" "net/http" + "net/http/httptest" "os" "path/filepath" + "regexp" "strings" + "sync" "testing" "text/template" "time" @@ -26,6 +31,7 @@ import ( "github.com/elastic/beats/v7/libbeat/otelbeat/oteltest" libbeattesting "github.com/elastic/beats/v7/libbeat/testing" "github.com/elastic/beats/v7/libbeat/tests/integration" + "github.com/elastic/elastic-agent-libs/mapstr" "github.com/elastic/elastic-agent-libs/testing/estools" ) @@ -694,3 +700,256 @@ processors: require.Contains(t, out, expectedService) }, 10*time.Second, 500*time.Millisecond, "failed to get output of inspect command") } + +func TestFilebeatOTelDocumentLevelRetries(t *testing.T) { + tests := []struct { + name string + maxRetries int + failuresPerEvent int + bulkErrorCode string + eventIDsToFail []int + expectedIngestedEventIDs []int + }{ + { + name: "bulk 429 with retries", + maxRetries: 3, + failuresPerEvent: 2, // Fail 2 times, succeed on 3rd attempt + bulkErrorCode: "429", // retryable error + eventIDsToFail: []int{1, 3, 5, 7}, + expectedIngestedEventIDs: []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, // All events should eventually be ingested + }, + { + name: "bulk exhausts retries", + maxRetries: 3, + failuresPerEvent: 5, // Fail more than max_retries + bulkErrorCode: "429", + eventIDsToFail: []int{2, 4, 6, 8}, + expectedIngestedEventIDs: []int{0, 1, 3, 5, 7, 9}, // Only non-failing events should be ingested + }, + { + name: "bulk with permanent mapping errors", + maxRetries: 3, + failuresPerEvent: 0, // Always fail (permanent failure) + bulkErrorCode: "400", + eventIDsToFail: []int{1, 4, 8}, // Only specific events fail + expectedIngestedEventIDs: []int{0, 2, 3, 5, 6, 7, 9}, // Only non-failing events should be ingested + }, + } + + const numTestEvents = 10 + reEventLine := regexp.MustCompile(`"message":"Line (\d+)"`) + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + var ingestedTestEvents []string + var mu sync.Mutex + eventFailureCounts := make(map[string]int) + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("X-Elastic-Product", "Elasticsearch") + + if r.URL.Path != "/_bulk" { + w.WriteHeader(http.StatusOK) + w.Write([]byte(`{}`)) + return + } + + body, err := io.ReadAll(r.Body) + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + return + } + + bodyStr := string(body) + + mu.Lock() + defer mu.Unlock() + + shouldEventFail := func(eventID int) bool { + for _, failID := range tt.eventIDsToFail { + if failID == eventID { + return true + } + } + return false + } + + var items []string + for line := range strings.Lines(bodyStr) { + if strings.Contains(line, `"create":{`) { + // Ignore metadata lines + continue + } + if matches := reEventLine.FindStringSubmatch(line); len(matches) > 1 { + eventIDStr := matches[1] + eventID := 0 + fmt.Sscanf(eventIDStr, "%d", &eventID) + eventKey := "Line " + eventIDStr + + // Check if this event should fail + isFailingEvent := shouldEventFail(eventID) + + var shouldFail bool + if isFailingEvent { + // This event is configured to fail + failureCount := eventFailureCounts[eventKey] + + switch tt.bulkErrorCode { + case "400": + // Permanent errors always fail + shouldFail = true + case "429": + // Temporary errors fail until failuresPerEvent threshold + shouldFail = failureCount < tt.failuresPerEvent + } + } else { + // Events not in the fail list always succeed + shouldFail = false + } + + if shouldFail { + eventFailureCounts[eventKey] = eventFailureCounts[eventKey] + 1 + var errorResponse string + if tt.bulkErrorCode == "429" { + errorResponse = `{"create":{"_index":"logs","status":429,"error":{"type":"too_many_requests","reason":"queue capacity exceeded"}}}` + } else { + errorResponse = `{"create":{"_index":"logs","status":400,"error":{"type":"mapper_parsing_exception","reason":"failed to parse field"}}}` + } + items = append(items, errorResponse) + } else { + // Success - track ingested event + found := false + for _, existing := range ingestedTestEvents { + if existing == eventKey { + found = true + break + } + } + if !found { + ingestedTestEvents = append(ingestedTestEvents, eventKey) + } + items = append(items, `{"create":{"_index":"logs","status":201}}`) + } + } + } + + response := fmt.Sprintf(`{"items":[%s]}`, strings.Join(items, ",")) + w.WriteHeader(http.StatusOK) + w.Write([]byte(response)) + })) + defer server.Close() + + filebeatOTel := integration.NewBeat( + t, + "filebeat-otel", + "../../filebeat.test", + "otel", + ) + + namespace := strings.ReplaceAll(uuid.Must(uuid.NewV4()).String(), "-", "") + index := "logs-integration-" + namespace + + beatsConfig := struct { + Index string + InputFile string + ESEndpoint string + MaxRetries int + MonitoringPort int + }{ + Index: index, + InputFile: filepath.Join(filebeatOTel.TempDir(), "log.log"), + ESEndpoint: server.URL, + MaxRetries: tt.maxRetries, + MonitoringPort: int(libbeattesting.MustAvailableTCP4Port(t)), + } + + cfg := ` +filebeat.inputs: + - type: filestream + id: filestream-input-id + enabled: true + file_identity.native: ~ + prospector.scanner.fingerprint.enabled: false + paths: + - {{.InputFile}} +output: + elasticsearch: + hosts: + - {{.ESEndpoint}} + username: admin + password: testing + index: {{.Index}} + compression_level: 0 + max_retries: {{.MaxRetries}} +logging.level: debug +queue.mem.flush.timeout: 0s +setup.template.enabled: false +http.enabled: true +http.host: localhost +http.port: {{.MonitoringPort}} +` + var configBuffer bytes.Buffer + require.NoError(t, + template.Must(template.New("config").Parse(cfg)).Execute(&configBuffer, beatsConfig)) + + filebeatOTel.WriteConfigFile(configBuffer.String()) + writeEventsToLogFile(t, beatsConfig.InputFile, numTestEvents) + filebeatOTel.Start() + defer filebeatOTel.Stop() + + // Wait for file input to be fully read + filebeatOTel.WaitStdErrContains(fmt.Sprintf("End of file reached: %s; Backoff now.", beatsConfig.InputFile), 30*time.Second) + + // Wait for expected events to be ingested + require.EventuallyWithT(t, func(ct *assert.CollectT) { + mu.Lock() + defer mu.Unlock() + + actualCount := len(ingestedTestEvents) + expectedCount := len(tt.expectedIngestedEventIDs) + + assert.Equal(ct, expectedCount, actualCount, "expected _bulk events count to match") + + // If we have the right count, validate the specific events + // Verify we have the correct events ingested + for _, expectedID := range tt.expectedIngestedEventIDs { + expectedEventKey := fmt.Sprintf("Line %d", expectedID) + found := false + for _, ingested := range ingestedTestEvents { + if ingested == expectedEventKey { + found = true + break + } + } + assert.True(ct, found, "expected _bulk event %s to be ingested", expectedEventKey) + } + + // Verify we have valid line content for all ingested events + for _, ingested := range ingestedTestEvents { + assert.Regexp(ct, `^Line \d+$`, ingested, "unexpected ingested event format: %s", ingested) + } + }, 30*time.Second, 1*time.Second, "timed out waiting for expected event processing") + + // Confirm filebeat agreed with our accounting of ingested events + require.EventuallyWithT(t, func(ct *assert.CollectT) { + address := fmt.Sprintf("http://localhost:%d", beatsConfig.MonitoringPort) + r, err := http.Get(address + "/stats") //nolint:noctx,bodyclose // fine for tests + assert.NoError(ct, err) + assert.Equal(ct, http.StatusOK, r.StatusCode, "incorrect status code") + var m mapstr.M + err = json.NewDecoder(r.Body).Decode(&m) + assert.NoError(ct, err) + + m = m.Flatten() + + // TODO: Beats stats are not tracking exporter metrics properly in otelconsumer, so it assumes all events were delivered since the batch was acked. + // There could have been failures within the batch that were retried and then dropped, only way to know for sure is to check the exporter metrics. + // require.Equal(t, float64(numTestEvents), m["libbeat.output.events.total"], "expected total events sent to output to match") + // require.Equal(t, float64(len(tt.expectedIngestedEventIDs)), m["libbeat.output.events.acked"], "expected events acked to match ingested count") + // require.Equal(t, float64(numTestEvents - len(tt.expectedIngestedEventIDs)), m["libbeat.output.events.dropped"], "expected events dropped to match ingested count") + assert.Equal(ct, float64(numTestEvents), m["libbeat.output.events.total"], "expected total events sent to output to match") + assert.Equal(ct, float64(numTestEvents), m["libbeat.output.events.acked"], "expected total events acked to match") + }, 10*time.Second, 100*time.Millisecond, "expected output stats to be available in monitoring endpoint") + }) + } +} From ee93a6ff0b446fc417f2234ab89e20706dd72120 Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Fri, 5 Sep 2025 13:27:37 -0300 Subject: [PATCH 02/10] fix linter errors --- x-pack/filebeat/tests/integration/otel_test.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/x-pack/filebeat/tests/integration/otel_test.go b/x-pack/filebeat/tests/integration/otel_test.go index c56b6bcc3780..f71c1ac9480f 100644 --- a/x-pack/filebeat/tests/integration/otel_test.go +++ b/x-pack/filebeat/tests/integration/otel_test.go @@ -750,7 +750,8 @@ func TestFilebeatOTelDocumentLevelRetries(t *testing.T) { if r.URL.Path != "/_bulk" { w.WriteHeader(http.StatusOK) - w.Write([]byte(`{}`)) + _, err := w.Write([]byte(`{}`)) + require.NoError(t, err) return } @@ -783,7 +784,8 @@ func TestFilebeatOTelDocumentLevelRetries(t *testing.T) { if matches := reEventLine.FindStringSubmatch(line); len(matches) > 1 { eventIDStr := matches[1] eventID := 0 - fmt.Sscanf(eventIDStr, "%d", &eventID) + _, err := fmt.Sscanf(eventIDStr, "%d", &eventID) + require.NoErrorf(t, err, "failed to parse event ID from line: %s", line) eventKey := "Line " + eventIDStr // Check if this event should fail @@ -835,7 +837,8 @@ func TestFilebeatOTelDocumentLevelRetries(t *testing.T) { response := fmt.Sprintf(`{"items":[%s]}`, strings.Join(items, ",")) w.WriteHeader(http.StatusOK) - w.Write([]byte(response)) + _, err = w.Write([]byte(response)) + require.NoError(t, err) })) defer server.Close() From 75c538de4ccff534a350c708fbf51be3d008b0e6 Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Mon, 8 Sep 2025 14:10:21 -0300 Subject: [PATCH 03/10] add dummy assert for dropped events --- x-pack/filebeat/tests/integration/otel_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/filebeat/tests/integration/otel_test.go b/x-pack/filebeat/tests/integration/otel_test.go index f71c1ac9480f..b978c5b0270f 100644 --- a/x-pack/filebeat/tests/integration/otel_test.go +++ b/x-pack/filebeat/tests/integration/otel_test.go @@ -946,12 +946,13 @@ http.port: {{.MonitoringPort}} m = m.Flatten() // TODO: Beats stats are not tracking exporter metrics properly in otelconsumer, so it assumes all events were delivered since the batch was acked. - // There could have been failures within the batch that were retried and then dropped, only way to know for sure is to check the exporter metrics. + // There could have been failures within the batch that were retried and then dropped by the exporter, only way to know for sure is to check the exporter metrics. // require.Equal(t, float64(numTestEvents), m["libbeat.output.events.total"], "expected total events sent to output to match") // require.Equal(t, float64(len(tt.expectedIngestedEventIDs)), m["libbeat.output.events.acked"], "expected events acked to match ingested count") // require.Equal(t, float64(numTestEvents - len(tt.expectedIngestedEventIDs)), m["libbeat.output.events.dropped"], "expected events dropped to match ingested count") assert.Equal(ct, float64(numTestEvents), m["libbeat.output.events.total"], "expected total events sent to output to match") assert.Equal(ct, float64(numTestEvents), m["libbeat.output.events.acked"], "expected total events acked to match") + assert.Equal(ct, float64(0), m["libbeat.output.events.dropped"], "expected total events dropped to match") }, 10*time.Second, 100*time.Millisecond, "expected output stats to be available in monitoring endpoint") }) } From 9290a37020e6a62748c78aae79f9c0947f912957 Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Wed, 10 Sep 2025 14:19:51 -0300 Subject: [PATCH 04/10] use deterministic handler from mock-es --- go.mod | 20 +-- go.sum | 40 ++--- .../filebeat/tests/integration/otel_test.go | 159 +++++++++--------- 3 files changed, 107 insertions(+), 112 deletions(-) diff --git a/go.mod b/go.mod index a66e8ae6055e..e822ec0fa21d 100644 --- a/go.mod +++ b/go.mod @@ -116,7 +116,7 @@ require ( github.com/shopspring/decimal v1.3.1 // indirect github.com/spf13/cobra v1.9.1 github.com/spf13/pflag v1.0.6 - github.com/stretchr/testify v1.10.0 + github.com/stretchr/testify v1.11.1 github.com/ugorji/go/codec v1.1.8 github.com/vmware/govmomi v0.51.0 go.elastic.co/ecszap v1.0.2 @@ -129,7 +129,7 @@ require ( golang.org/x/net v0.43.0 golang.org/x/oauth2 v0.30.0 golang.org/x/sync v0.16.0 - golang.org/x/sys v0.35.0 + golang.org/x/sys v0.36.0 golang.org/x/text v0.28.0 golang.org/x/time v0.12.0 golang.org/x/tools v0.36.0 @@ -183,7 +183,7 @@ require ( github.com/elastic/go-quark v0.3.0 github.com/elastic/go-sfdc v0.0.0-20241010131323-8e176480d727 github.com/elastic/mito v1.22.0 - github.com/elastic/mock-es v0.0.0-20250324153755-573fc6c0ac4b + github.com/elastic/mock-es v0.0.0-20250530054253-8c3b6053f9b6 github.com/elastic/sarama v1.19.1-0.20250603175145-7672917f26b6 github.com/elastic/tk-btf v0.2.0 github.com/elastic/toutoumomoma v0.0.0-20240626215117-76e39db18dfb @@ -191,7 +191,7 @@ require ( github.com/go-ldap/ldap/v3 v3.4.6 github.com/go-ole/go-ole v1.2.6 github.com/go-resty/resty/v2 v2.16.5 - github.com/gofrs/uuid/v5 v5.2.0 + github.com/gofrs/uuid/v5 v5.3.2 github.com/golang-jwt/jwt/v5 v5.2.2 github.com/google/cel-go v0.25.0 github.com/googleapis/gax-go/v2 v2.14.2 @@ -245,7 +245,7 @@ require ( go.opentelemetry.io/collector/processor v1.36.0 go.opentelemetry.io/collector/processor/processorhelper v0.130.0 go.opentelemetry.io/collector/receiver/receivertest v0.130.0 - go.opentelemetry.io/otel/sdk/metric v1.37.0 + go.opentelemetry.io/otel/sdk/metric v1.38.0 sigs.k8s.io/kind v0.29.0 ) @@ -380,7 +380,7 @@ require ( github.com/mattn/go-ieproxy v0.0.1 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.9 // indirect - github.com/mileusna/useragent v1.3.4 // indirect + github.com/mileusna/useragent v1.3.5 // indirect github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 // indirect github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 // indirect github.com/minio/sha256-simd v1.0.1 // indirect @@ -471,7 +471,7 @@ require ( go.opentelemetry.io/contrib/otelconf v0.17.0 // indirect go.opentelemetry.io/contrib/propagators/b3 v1.37.0 // indirect go.opentelemetry.io/ebpf-profiler v0.0.0-20250212075250-7bf12d3f962f // indirect - go.opentelemetry.io/otel v1.37.0 // indirect + go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.13.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.13.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.37.0 // indirect @@ -484,10 +484,10 @@ require ( go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.37.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.37.0 // indirect go.opentelemetry.io/otel/log v0.13.0 // indirect - go.opentelemetry.io/otel/metric v1.37.0 // indirect - go.opentelemetry.io/otel/sdk v1.37.0 // indirect + go.opentelemetry.io/otel/metric v1.38.0 // indirect + go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/sdk/log v0.13.0 // indirect - go.opentelemetry.io/otel/trace v1.37.0 // indirect + go.opentelemetry.io/otel/trace v1.38.0 // indirect go.opentelemetry.io/proto/otlp v1.7.0 // indirect go.uber.org/ratelimit v0.3.1 // indirect go.yaml.in/yaml/v2 v2.4.2 // indirect diff --git a/go.sum b/go.sum index db2ea3d33c82..e94a1c4954e3 100644 --- a/go.sum +++ b/go.sum @@ -420,8 +420,8 @@ github.com/elastic/gosigar v0.14.3 h1:xwkKwPia+hSfg9GqrCUKYdId102m9qTJIIr7egmK/u github.com/elastic/gosigar v0.14.3/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= github.com/elastic/mito v1.22.0 h1:DW4RkO+PLwSbKVF5ijYzi0ug+TKzLL+DVJRzbOPbzQ0= github.com/elastic/mito v1.22.0/go.mod h1:h1V+8B62+DXsu0TstJkjsTh5ewJIDJlwzxPkP3HBM9s= -github.com/elastic/mock-es v0.0.0-20250324153755-573fc6c0ac4b h1:gaMtsr25lreEBrrVvZnztKJY3ywn3s3fHE+5f+Vg2tc= -github.com/elastic/mock-es v0.0.0-20250324153755-573fc6c0ac4b/go.mod h1:cXqWcLnmu5y4QveTb2hjk7rgzkHMuZsqeXtbJpNAcu0= +github.com/elastic/mock-es v0.0.0-20250530054253-8c3b6053f9b6 h1:JVNuBrmOoqLJgp9o68YBMnOrXCzQI3mCppW+suwRSlw= +github.com/elastic/mock-es v0.0.0-20250530054253-8c3b6053f9b6/go.mod h1:cXqWcLnmu5y4QveTb2hjk7rgzkHMuZsqeXtbJpNAcu0= github.com/elastic/pkcs8 v1.0.0 h1:HhitlUKxhN288kcNcYkjW6/ouvuwJWd9ioxpjnD9jVA= github.com/elastic/pkcs8 v1.0.0/go.mod h1:ipsZToJfq1MxclVTwpG7U/bgeDtf+0HkUiOxebk95+0= github.com/elastic/sarama v1.19.1-0.20250603175145-7672917f26b6 h1:2COw7kzXkIyS4hKNUl5qw0KolrwncrY4VVNpngVNo8I= @@ -533,8 +533,8 @@ github.com/godror/knownpb v0.1.0 h1:dJPK8s/I3PQzGGaGcUStL2zIaaICNzKKAK8BzP1uLio= github.com/godror/knownpb v0.1.0/go.mod h1:4nRFbQo1dDuwKnblRXDxrfCFYeT4hjg3GjMqef58eRE= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/uuid/v5 v5.2.0 h1:qw1GMx6/y8vhVsx626ImfKMuS5CvJmhIKKtuyvfajMM= -github.com/gofrs/uuid/v5 v5.2.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= +github.com/gofrs/uuid/v5 v5.3.2 h1:2jfO8j3XgSwlz/wHqemAEugfnTlikAYHhnqQ8Xh4fE0= +github.com/gofrs/uuid/v5 v5.3.2/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= @@ -780,8 +780,8 @@ github.com/microsoft/wmi v0.25.1/go.mod h1:1zbdSF0A+5OwTUII5p3hN7/K6KF2m3o27pSG6 github.com/miekg/dns v1.1.22/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.66 h1:FeZXOS3VCVsKnEAd+wBkjMC3D2K+ww66Cq3VnCINuJE= github.com/miekg/dns v1.1.66/go.mod h1:jGFzBsSNbJw6z1HYut1RKBKHA9PBdxeHrZG8J+gC2WE= -github.com/mileusna/useragent v1.3.4 h1:MiuRRuvGjEie1+yZHO88UBYg8YBC/ddF6T7F56i3PCk= -github.com/mileusna/useragent v1.3.4/go.mod h1:3d8TOmwL/5I8pJjyVDteHtgDGcefrFUX4ccGOMKNYYc= +github.com/mileusna/useragent v1.3.5 h1:SJM5NzBmh/hO+4LGeATKpaEX9+b4vcGg2qXGLiNGDws= +github.com/mileusna/useragent v1.3.5/go.mod h1:3d8TOmwL/5I8pJjyVDteHtgDGcefrFUX4ccGOMKNYYc= github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs= github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI= @@ -967,8 +967,8 @@ 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.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -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/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/teambition/rrule-go v1.8.2 h1:lIjpjvWTj9fFUZCmuoVDrKVOtdiyzbzc93qTmRVe/J8= github.com/teambition/rrule-go v1.8.2/go.mod h1:Ieq5AbrKGciP1V//Wq8ktsTXwSwJHDD5mD/wLBGl3p4= github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= @@ -1181,8 +1181,8 @@ go.opentelemetry.io/contrib/zpages v0.62.0 h1:9fUYTLmrK0x/lweM2uM+BOx069jLx8PxVq go.opentelemetry.io/contrib/zpages v0.62.0/go.mod h1:C8kXoiC1Ytvereztus2R+kqdSa6W/MZ8FfS8Zwj+LiM= go.opentelemetry.io/ebpf-profiler v0.0.0-20250212075250-7bf12d3f962f h1:DqRQ7JaRjf3TwWwfwHIvsBB/aLUs+kgrX+MrAIllALI= go.opentelemetry.io/ebpf-profiler v0.0.0-20250212075250-7bf12d3f962f/go.mod h1:hfAVBjRN6FZjSgZUBsNzvRDJWlS46R5Y0SGVr4Jl86s= -go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= -go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.13.0 h1:z6lNIajgEBVtQZHjfw2hAccPEBDs+nx58VemmXWa2ec= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.13.0/go.mod h1:+kyc3bRx/Qkq05P6OCu3mTEIOxYRYzoIg+JsUp5X+PM= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.13.0 h1:zUfYw8cscHHLwaY8Xz3fiJu+R59xBnkgq2Zr1lwmK/0= @@ -1209,18 +1209,18 @@ go.opentelemetry.io/otel/log v0.13.0 h1:yoxRoIZcohB6Xf0lNv9QIyCzQvrtGZklVbdCoyb7 go.opentelemetry.io/otel/log v0.13.0/go.mod h1:INKfG4k1O9CL25BaM1qLe0zIedOpvlS5Z7XgSbmN83E= go.opentelemetry.io/otel/log/logtest v0.13.0 h1:xxaIcgoEEtnwdgj6D6Uo9K/Dynz9jqIxSDu2YObJ69Q= go.opentelemetry.io/otel/log/logtest v0.13.0/go.mod h1:+OrkmsAH38b+ygyag1tLjSFMYiES5UHggzrtY1IIEA8= -go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= -go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= -go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= -go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= +go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= +go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= go.opentelemetry.io/otel/sdk/log v0.13.0 h1:I3CGUszjM926OphK8ZdzF+kLqFvfRY/IIoFq/TjwfaQ= go.opentelemetry.io/otel/sdk/log v0.13.0/go.mod h1:lOrQyCCXmpZdN7NchXb6DOZZa1N5G1R2tm5GMMTpDBw= go.opentelemetry.io/otel/sdk/log/logtest v0.13.0 h1:9yio6AFZ3QD9j9oqshV1Ibm9gPLlHNxurno5BreMtIA= go.opentelemetry.io/otel/sdk/log/logtest v0.13.0/go.mod h1:QOGiAJHl+fob8Nu85ifXfuQYmJTFAvcrxL6w5/tu168= -go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc= -go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps= -go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= -go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= +go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= +go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= go.opentelemetry.io/proto/otlp v1.7.0 h1:jX1VolD6nHuFzOYso2E73H85i92Mv8JQYk0K9vz09os= go.opentelemetry.io/proto/otlp v1.7.0/go.mod h1:fSKjH6YJ7HDlwzltzyMj036AJ3ejJLCgCSHGj4efDDo= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= @@ -1364,8 +1364,8 @@ golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= -golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= diff --git a/x-pack/filebeat/tests/integration/otel_test.go b/x-pack/filebeat/tests/integration/otel_test.go index b978c5b0270f..00963cf292c3 100644 --- a/x-pack/filebeat/tests/integration/otel_test.go +++ b/x-pack/filebeat/tests/integration/otel_test.go @@ -11,12 +11,12 @@ import ( "context" "encoding/json" "fmt" - "io" "net/http" "net/http/httptest" "os" "path/filepath" "regexp" + "strconv" "strings" "sync" "testing" @@ -33,6 +33,7 @@ import ( "github.com/elastic/beats/v7/libbeat/tests/integration" "github.com/elastic/elastic-agent-libs/mapstr" "github.com/elastic/elastic-agent-libs/testing/estools" + "github.com/elastic/mock-es/pkg/api" ) func TestFilebeatOTelE2E(t *testing.T) { @@ -745,101 +746,93 @@ func TestFilebeatOTelDocumentLevelRetries(t *testing.T) { var mu sync.Mutex eventFailureCounts := make(map[string]int) - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("X-Elastic-Product", "Elasticsearch") - - if r.URL.Path != "/_bulk" { - w.WriteHeader(http.StatusOK) - _, err := w.Write([]byte(`{}`)) - require.NoError(t, err) - return + deterministicHandler := func(action api.Action, event []byte) int { + // Handle non-bulk requests + if action.Action != "create" { + return http.StatusOK } - body, err := io.ReadAll(r.Body) - if err != nil { - w.WriteHeader(http.StatusInternalServerError) - return - } + // Extract event ID from the event data + if matches := reEventLine.FindSubmatch(event); len(matches) > 1 { + eventIDStr := string(matches[1]) + eventID, err := strconv.Atoi(eventIDStr) + if err != nil { + return http.StatusInternalServerError + } - bodyStr := string(body) + eventKey := "Line " + eventIDStr - mu.Lock() - defer mu.Unlock() + mu.Lock() + defer mu.Unlock() - shouldEventFail := func(eventID int) bool { - for _, failID := range tt.eventIDsToFail { - if failID == eventID { - return true + // Check if this event should fail + shouldEventFail := func(eventID int) bool { + for _, failID := range tt.eventIDsToFail { + if failID == eventID { + return true + } } + return false } - return false - } - var items []string - for line := range strings.Lines(bodyStr) { - if strings.Contains(line, `"create":{`) { - // Ignore metadata lines - continue - } - if matches := reEventLine.FindStringSubmatch(line); len(matches) > 1 { - eventIDStr := matches[1] - eventID := 0 - _, err := fmt.Sscanf(eventIDStr, "%d", &eventID) - require.NoErrorf(t, err, "failed to parse event ID from line: %s", line) - eventKey := "Line " + eventIDStr - - // Check if this event should fail - isFailingEvent := shouldEventFail(eventID) - - var shouldFail bool - if isFailingEvent { - // This event is configured to fail - failureCount := eventFailureCounts[eventKey] - - switch tt.bulkErrorCode { - case "400": - // Permanent errors always fail - shouldFail = true - case "429": - // Temporary errors fail until failuresPerEvent threshold - shouldFail = failureCount < tt.failuresPerEvent - } - } else { - // Events not in the fail list always succeed - shouldFail = false + isFailingEvent := shouldEventFail(eventID) + + var shouldFail bool + if isFailingEvent { + // This event is configured to fail + failureCount := eventFailureCounts[eventKey] + + switch tt.bulkErrorCode { + case "400": + // Permanent errors always fail + shouldFail = true + case "429": + // Temporary errors fail until failuresPerEvent threshold + shouldFail = failureCount < tt.failuresPerEvent } + } else { + // Events not in the fail list always succeed + shouldFail = false + } - if shouldFail { - eventFailureCounts[eventKey] = eventFailureCounts[eventKey] + 1 - var errorResponse string - if tt.bulkErrorCode == "429" { - errorResponse = `{"create":{"_index":"logs","status":429,"error":{"type":"too_many_requests","reason":"queue capacity exceeded"}}}` - } else { - errorResponse = `{"create":{"_index":"logs","status":400,"error":{"type":"mapper_parsing_exception","reason":"failed to parse field"}}}` - } - items = append(items, errorResponse) + if shouldFail { + eventFailureCounts[eventKey] = eventFailureCounts[eventKey] + 1 + if tt.bulkErrorCode == "429" { + return http.StatusTooManyRequests } else { - // Success - track ingested event - found := false - for _, existing := range ingestedTestEvents { - if existing == eventKey { - found = true - break - } - } - if !found { - ingestedTestEvents = append(ingestedTestEvents, eventKey) + return http.StatusBadRequest + } + } else { + // Success - track ingested event + found := false + for _, existing := range ingestedTestEvents { + if existing == eventKey { + found = true + break } - items = append(items, `{"create":{"_index":"logs","status":201}}`) } + if !found { + ingestedTestEvents = append(ingestedTestEvents, eventKey) + } + return http.StatusCreated } } - response := fmt.Sprintf(`{"items":[%s]}`, strings.Join(items, ",")) - w.WriteHeader(http.StatusOK) - _, err = w.Write([]byte(response)) - require.NoError(t, err) - })) + return http.StatusOK + } + + mux := http.NewServeMux() + mux.Handle("/", api.NewDeterministicAPIHandler( + uuid.Must(uuid.NewV4()), + "", + nil, + time.Now().Add(24*time.Hour), + 0, + 0, + deterministicHandler, + )) + + server := httptest.NewServer(mux) defer server.Close() filebeatOTel := integration.NewBeat( @@ -948,8 +941,10 @@ http.port: {{.MonitoringPort}} // TODO: Beats stats are not tracking exporter metrics properly in otelconsumer, so it assumes all events were delivered since the batch was acked. // There could have been failures within the batch that were retried and then dropped by the exporter, only way to know for sure is to check the exporter metrics. // require.Equal(t, float64(numTestEvents), m["libbeat.output.events.total"], "expected total events sent to output to match") - // require.Equal(t, float64(len(tt.expectedIngestedEventIDs)), m["libbeat.output.events.acked"], "expected events acked to match ingested count") - // require.Equal(t, float64(numTestEvents - len(tt.expectedIngestedEventIDs)), m["libbeat.output.events.dropped"], "expected events dropped to match ingested count") + // require.Equal(t, float64(len(tt.expectedIngestedEventIDs)), m["libbeat.output.events.acked"], "expected events acked to match") + // require.Equal(t, float64(numTestEvents - len(tt.expectedIngestedEventIDs)), m["libbeat.output.events.dropped"], "expected events dropped to match") + + // Currently otelconsumer ACKs the entire batch and has no visibility into individual event failures within the batch. assert.Equal(ct, float64(numTestEvents), m["libbeat.output.events.total"], "expected total events sent to output to match") assert.Equal(ct, float64(numTestEvents), m["libbeat.output.events.acked"], "expected total events acked to match") assert.Equal(ct, float64(0), m["libbeat.output.events.dropped"], "expected total events dropped to match") From c94188a727fd1d4ab8a114e9d0c78521470a65dd Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Wed, 10 Sep 2025 17:37:13 -0300 Subject: [PATCH 05/10] assert mock-es metrics --- .../filebeat/tests/integration/otel_test.go | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/x-pack/filebeat/tests/integration/otel_test.go b/x-pack/filebeat/tests/integration/otel_test.go index 00963cf292c3..a3a26273decc 100644 --- a/x-pack/filebeat/tests/integration/otel_test.go +++ b/x-pack/filebeat/tests/integration/otel_test.go @@ -25,6 +25,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.opentelemetry.io/otel/sdk/metric" + "go.opentelemetry.io/otel/sdk/metric/metricdata" "github.com/gofrs/uuid/v5" @@ -814,18 +816,21 @@ func TestFilebeatOTelDocumentLevelRetries(t *testing.T) { if !found { ingestedTestEvents = append(ingestedTestEvents, eventKey) } - return http.StatusCreated + return http.StatusOK } } return http.StatusOK } + reader := metric.NewManualReader() + provider := metric.NewMeterProvider(metric.WithReader(reader)) + mux := http.NewServeMux() mux.Handle("/", api.NewDeterministicAPIHandler( uuid.Must(uuid.NewV4()), "", - nil, + provider, time.Now().Add(24*time.Hour), 0, 0, @@ -901,10 +906,23 @@ http.port: {{.MonitoringPort}} mu.Lock() defer mu.Unlock() - actualCount := len(ingestedTestEvents) - expectedCount := len(tt.expectedIngestedEventIDs) - - assert.Equal(ct, expectedCount, actualCount, "expected _bulk events count to match") + // collect mock-es metrics + rm := metricdata.ResourceMetrics{} + err := reader.Collect(context.Background(), &rm) + assert.NoError(ct, err, "failed to collect metrics from mock-es") + metrics := make(map[string]int64) + for _, sm := range rm.ScopeMetrics { + for _, m := range sm.Metrics { + if sum, ok := m.Data.(metricdata.Sum[int64]); ok { + var total int64 + for _, dp := range sum.DataPoints { + total += dp.Value + } + metrics[m.Name] = total + } + } + } + assert.Equal(ct, int64(len(tt.expectedIngestedEventIDs)), metrics["bulk.create.ok"], "expected bulk.create.ok metric to match ingested events") // If we have the right count, validate the specific events // Verify we have the correct events ingested From 56a5e5cb42052cea852b18a332a965912179acdc Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Wed, 10 Sep 2025 17:45:07 -0300 Subject: [PATCH 06/10] sync go.mod and go.sum --- NOTICE.txt | 185 +++++++++++++++++++++++++++++++++++++++++++++++------ go.mod | 7 -- 2 files changed, 165 insertions(+), 27 deletions(-) diff --git a/NOTICE.txt b/NOTICE.txt index b42076dbb457..e8148c761038 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -15864,11 +15864,11 @@ Contents of probable licence file $GOMODCACHE/github.com/elastic/mito@v1.22.0/LI -------------------------------------------------------------------------------- Dependency : github.com/elastic/mock-es -Version: v0.0.0-20250324153755-573fc6c0ac4b +Version: v0.0.0-20250530054253-8c3b6053f9b6 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/elastic/mock-es@v0.0.0-20250324153755-573fc6c0ac4b/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/elastic/mock-es@v0.0.0-20250530054253-8c3b6053f9b6/LICENSE: Copyright 2024 Elasticsearch B.V. @@ -17420,11 +17420,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- Dependency : github.com/gofrs/uuid/v5 -Version: v5.2.0 +Version: v5.3.2 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/gofrs/uuid/v5@v5.2.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/gofrs/uuid/v5@v5.3.2/LICENSE: Copyright (C) 2013-2018 by Maxim Bublis @@ -22720,11 +22720,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- Dependency : github.com/stretchr/testify -Version: v1.10.0 +Version: v1.11.1 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/stretchr/testify@v1.10.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/stretchr/testify@v1.11.1/LICENSE: MIT License @@ -28426,11 +28426,11 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/rece -------------------------------------------------------------------------------- Dependency : go.opentelemetry.io/otel/sdk/metric -Version: v1.37.0 +Version: v1.38.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/sdk/metric@v1.37.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/sdk/metric@v1.38.0/LICENSE: Apache License Version 2.0, January 2004 @@ -28634,6 +28634,35 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/sdk/metri See the License for the specific language governing permissions and limitations under the License. +-------------------------------------------------------------------------------- + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- Dependency : go.uber.org/goleak @@ -29123,11 +29152,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- Dependency : golang.org/x/sys -Version: v0.35.0 +Version: v0.36.0 Licence type (autodetected): BSD-3-Clause -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/golang.org/x/sys@v0.35.0/LICENSE: +Contents of probable licence file $GOMODCACHE/golang.org/x/sys@v0.36.0/LICENSE: Copyright 2009 The Go Authors. @@ -57051,11 +57080,11 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI -------------------------------------------------------------------------------- Dependency : github.com/mileusna/useragent -Version: v1.3.4 +Version: v1.3.5 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/mileusna/useragent@v1.3.4/LICENSE.md: +Contents of probable licence file $GOMODCACHE/github.com/mileusna/useragent@v1.3.5/LICENSE.md: MIT License @@ -76204,11 +76233,11 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/ebpf-profiler@ -------------------------------------------------------------------------------- Dependency : go.opentelemetry.io/otel -Version: v1.37.0 +Version: v1.38.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel@v1.37.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel@v1.38.0/LICENSE: Apache License Version 2.0, January 2004 @@ -76412,6 +76441,35 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel@v1.37.0/L See the License for the specific language governing permissions and limitations under the License. +-------------------------------------------------------------------------------- + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- Dependency : go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc @@ -79158,11 +79216,11 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/log/logte -------------------------------------------------------------------------------- Dependency : go.opentelemetry.io/otel/metric -Version: v1.37.0 +Version: v1.38.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/metric@v1.37.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/metric@v1.38.0/LICENSE: Apache License Version 2.0, January 2004 @@ -79366,14 +79424,43 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/metric@v1 See the License for the specific language governing permissions and limitations under the License. +-------------------------------------------------------------------------------- + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- Dependency : go.opentelemetry.io/otel/sdk -Version: v1.37.0 +Version: v1.38.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/sdk@v1.37.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/sdk@v1.38.0/LICENSE: Apache License Version 2.0, January 2004 @@ -79577,6 +79664,35 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/sdk@v1.37 See the License for the specific language governing permissions and limitations under the License. +-------------------------------------------------------------------------------- + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- Dependency : go.opentelemetry.io/otel/sdk/log @@ -80002,11 +80118,11 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/sdk/log/l -------------------------------------------------------------------------------- Dependency : go.opentelemetry.io/otel/trace -Version: v1.37.0 +Version: v1.38.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/trace@v1.37.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/trace@v1.38.0/LICENSE: Apache License Version 2.0, January 2004 @@ -80210,6 +80326,35 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/trace@v1. See the License for the specific language governing permissions and limitations under the License. +-------------------------------------------------------------------------------- + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- Dependency : go.opentelemetry.io/proto/otlp diff --git a/go.mod b/go.mod index b9e4928f8290..76aa9b239050 100644 --- a/go.mod +++ b/go.mod @@ -519,18 +519,11 @@ require ( replace ( github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/consumption/armconsumption => github.com/elastic/azure-sdk-for-go/sdk/resourcemanager/consumption/armconsumption v1.1.0-elastic - github.com/apoydence/eachers => github.com/poy/eachers v0.0.0-20181020210610-23942921fe77 //indirect, see https://github.com/elastic/beats/pull/29780 for details. - github.com/dop251/goja => github.com/elastic/goja v0.0.0-20190128172624-dd2ac4456e20 - github.com/fsnotify/fsevents => github.com/elastic/fsevents v0.0.0-20181029231046-e1d381a4d270 - github.com/fsnotify/fsnotify => github.com/elastic/fsnotify v1.6.1-0.20240920222514-49f82bdbc9e3 - github.com/google/gopacket => github.com/elastic/gopacket v1.1.20-0.20241002174017-e8c5fda595e6 - github.com/insomniacslk/dhcp => github.com/elastic/dhcp v0.0.0-20200227161230-57ec251c7eb3 // indirect - github.com/meraki/dashboard-api-go/v3 => github.com/tommyers-elastic/dashboard-api-go/v3 v3.0.0-20250616163611-a325b49669a4 ) From 83e6acb99ee02bbb1503e91e63a653fda8911705 Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Wed, 10 Sep 2025 17:51:54 -0300 Subject: [PATCH 07/10] simplify handler logic --- .../filebeat/tests/integration/otel_test.go | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/x-pack/filebeat/tests/integration/otel_test.go b/x-pack/filebeat/tests/integration/otel_test.go index 96638ab4e053..14735ade37a7 100644 --- a/x-pack/filebeat/tests/integration/otel_test.go +++ b/x-pack/filebeat/tests/integration/otel_test.go @@ -824,20 +824,20 @@ func TestFilebeatOTelDocumentLevelRetries(t *testing.T) { } else { return http.StatusBadRequest } - } else { - // Success - track ingested event - found := false - for _, existing := range ingestedTestEvents { - if existing == eventKey { - found = true - break - } - } - if !found { - ingestedTestEvents = append(ingestedTestEvents, eventKey) + } + + // track ingested event + found := false + for _, existing := range ingestedTestEvents { + if existing == eventKey { + found = true + break } - return http.StatusOK } + if !found { + ingestedTestEvents = append(ingestedTestEvents, eventKey) + } + return http.StatusOK } return http.StatusOK From cda4b8cf00cd205d83b1027493b278bc33242486 Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Thu, 11 Sep 2025 08:23:21 -0300 Subject: [PATCH 08/10] update comments --- x-pack/filebeat/tests/integration/otel_test.go | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/x-pack/filebeat/tests/integration/otel_test.go b/x-pack/filebeat/tests/integration/otel_test.go index 7a093cc8bc43..7f441ed937fd 100644 --- a/x-pack/filebeat/tests/integration/otel_test.go +++ b/x-pack/filebeat/tests/integration/otel_test.go @@ -759,8 +759,8 @@ func TestFilebeatOTelDocumentLevelRetries(t *testing.T) { { name: "bulk with permanent mapping errors", maxRetries: 3, - failuresPerEvent: 0, // Always fail (permanent failure) - bulkErrorCode: "400", + failuresPerEvent: 0, // always fail + bulkErrorCode: "400", // never retried eventIDsToFail: []int{1, 4, 8}, // Only specific events fail expectedIngestedEventIDs: []int{0, 2, 3, 5, 6, 7, 9}, // Only non-failing events should be ingested }, @@ -983,13 +983,8 @@ http.port: {{.MonitoringPort}} m = m.Flatten() - // TODO: Beats stats are not tracking exporter metrics properly in otelconsumer, so it assumes all events were delivered since the batch was acked. - // There could have been failures within the batch that were retried and then dropped by the exporter, only way to know for sure is to check the exporter metrics. - // require.Equal(t, float64(numTestEvents), m["libbeat.output.events.total"], "expected total events sent to output to match") - // require.Equal(t, float64(len(tt.expectedIngestedEventIDs)), m["libbeat.output.events.acked"], "expected events acked to match") - // require.Equal(t, float64(numTestEvents - len(tt.expectedIngestedEventIDs)), m["libbeat.output.events.dropped"], "expected events dropped to match") - - // Currently otelconsumer ACKs the entire batch and has no visibility into individual event failures within the batch. + // Currently, otelconsumer either ACKs or fails the entire batch and has no visibility into individual event failures within the exporter. + // From otelconsumer's perspective, the whole batch is considered successful as long as ConsumeLogs returns no error. assert.Equal(ct, float64(numTestEvents), m["libbeat.output.events.total"], "expected total events sent to output to match") assert.Equal(ct, float64(numTestEvents), m["libbeat.output.events.acked"], "expected total events acked to match") assert.Equal(ct, float64(0), m["libbeat.output.events.dropped"], "expected total events dropped to match") From c8742794331eb9ea87233af673e0ad8ce6584ca9 Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Fri, 12 Sep 2025 06:47:05 -0300 Subject: [PATCH 09/10] use slices.Contains --- x-pack/filebeat/tests/integration/otel_test.go | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/x-pack/filebeat/tests/integration/otel_test.go b/x-pack/filebeat/tests/integration/otel_test.go index 7f441ed937fd..c7c24c069f1c 100644 --- a/x-pack/filebeat/tests/integration/otel_test.go +++ b/x-pack/filebeat/tests/integration/otel_test.go @@ -16,6 +16,7 @@ import ( "os" "path/filepath" "regexp" + "slices" "strconv" "strings" "sync" @@ -794,17 +795,7 @@ func TestFilebeatOTelDocumentLevelRetries(t *testing.T) { mu.Lock() defer mu.Unlock() - // Check if this event should fail - shouldEventFail := func(eventID int) bool { - for _, failID := range tt.eventIDsToFail { - if failID == eventID { - return true - } - } - return false - } - - isFailingEvent := shouldEventFail(eventID) + isFailingEvent := slices.Contains(tt.eventIDsToFail, eventID) var shouldFail bool if isFailingEvent { From 3ba284cb6a5cd1e1f52646d7c561184f7326931e Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Fri, 12 Sep 2025 06:55:03 -0300 Subject: [PATCH 10/10] go get mock-es latest --- NOTICE.txt | 193 ++++++++++++++++++++++++++++++++++++++++++++++------- go.mod | 24 +++---- go.sum | 48 ++++++------- 3 files changed, 205 insertions(+), 60 deletions(-) diff --git a/NOTICE.txt b/NOTICE.txt index 6fb75e82c137..1b12151d480f 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -14330,11 +14330,11 @@ Contents of probable licence file $GOMODCACHE/github.com/elastic/mito@v1.22.0/LI -------------------------------------------------------------------------------- Dependency : github.com/elastic/mock-es -Version: v0.0.0-20250324153755-573fc6c0ac4b +Version: v0.0.0-20250530054253-8c3b6053f9b6 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/elastic/mock-es@v0.0.0-20250324153755-573fc6c0ac4b/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/elastic/mock-es@v0.0.0-20250530054253-8c3b6053f9b6/LICENSE: Copyright 2024 Elasticsearch B.V. @@ -15886,11 +15886,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- Dependency : github.com/gofrs/uuid/v5 -Version: v5.2.0 +Version: v5.3.2 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/gofrs/uuid/v5@v5.2.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/gofrs/uuid/v5@v5.3.2/LICENSE: Copyright (C) 2013-2018 by Maxim Bublis @@ -21186,11 +21186,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- Dependency : github.com/stretchr/testify -Version: v1.11.0 +Version: v1.11.1 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/stretchr/testify@v1.11.0/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/stretchr/testify@v1.11.1/LICENSE: MIT License @@ -26892,11 +26892,11 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/collector/rece -------------------------------------------------------------------------------- Dependency : go.opentelemetry.io/otel/sdk/metric -Version: v1.37.0 +Version: v1.38.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/sdk/metric@v1.37.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/sdk/metric@v1.38.0/LICENSE: Apache License Version 2.0, January 2004 @@ -27100,6 +27100,35 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/sdk/metri See the License for the specific language governing permissions and limitations under the License. +-------------------------------------------------------------------------------- + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- Dependency : go.uber.org/goleak @@ -27589,11 +27618,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- Dependency : golang.org/x/sys -Version: v0.35.0 +Version: v0.36.0 Licence type (autodetected): BSD-3-Clause -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/golang.org/x/sys@v0.35.0/LICENSE: +Contents of probable licence file $GOMODCACHE/golang.org/x/sys@v0.36.0/LICENSE: Copyright 2009 The Go Authors. @@ -55280,11 +55309,11 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI -------------------------------------------------------------------------------- Dependency : github.com/mileusna/useragent -Version: v1.3.4 +Version: v1.3.5 Licence type (autodetected): MIT -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/mileusna/useragent@v1.3.4/LICENSE.md: +Contents of probable licence file $GOMODCACHE/github.com/mileusna/useragent@v1.3.5/LICENSE.md: MIT License @@ -61236,11 +61265,11 @@ SOFTWARE. -------------------------------------------------------------------------------- Dependency : github.com/rogpeppe/go-internal -Version: v1.13.1 +Version: v1.14.1 Licence type (autodetected): BSD-3-Clause -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/rogpeppe/go-internal@v1.13.1/LICENSE: +Contents of probable licence file $GOMODCACHE/github.com/rogpeppe/go-internal@v1.14.1/LICENSE: Copyright (c) 2018 The Go Authors. All rights reserved. @@ -63860,11 +63889,11 @@ Contents of probable licence file $GOMODCACHE/go.opencensus.io@v0.24.0/LICENSE: -------------------------------------------------------------------------------- Dependency : go.opentelemetry.io/auto/sdk -Version: v1.1.0 +Version: v1.2.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/auto/sdk@v1.1.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/auto/sdk@v1.2.0/LICENSE: Apache License Version 2.0, January 2004 @@ -74451,11 +74480,11 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/ebpf-profiler@ -------------------------------------------------------------------------------- Dependency : go.opentelemetry.io/otel -Version: v1.37.0 +Version: v1.38.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel@v1.37.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel@v1.38.0/LICENSE: Apache License Version 2.0, January 2004 @@ -74659,6 +74688,35 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel@v1.37.0/L See the License for the specific language governing permissions and limitations under the License. +-------------------------------------------------------------------------------- + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- Dependency : go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc @@ -77405,11 +77463,11 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/log/logte -------------------------------------------------------------------------------- Dependency : go.opentelemetry.io/otel/metric -Version: v1.37.0 +Version: v1.38.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/metric@v1.37.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/metric@v1.38.0/LICENSE: Apache License Version 2.0, January 2004 @@ -77613,14 +77671,43 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/metric@v1 See the License for the specific language governing permissions and limitations under the License. +-------------------------------------------------------------------------------- + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- Dependency : go.opentelemetry.io/otel/sdk -Version: v1.37.0 +Version: v1.38.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/sdk@v1.37.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/sdk@v1.38.0/LICENSE: Apache License Version 2.0, January 2004 @@ -77824,6 +77911,35 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/sdk@v1.37 See the License for the specific language governing permissions and limitations under the License. +-------------------------------------------------------------------------------- + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- Dependency : go.opentelemetry.io/otel/sdk/log @@ -78249,11 +78365,11 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/sdk/log/l -------------------------------------------------------------------------------- Dependency : go.opentelemetry.io/otel/trace -Version: v1.37.0 +Version: v1.38.0 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/trace@v1.37.0/LICENSE: +Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/trace@v1.38.0/LICENSE: Apache License Version 2.0, January 2004 @@ -78457,6 +78573,35 @@ Contents of probable licence file $GOMODCACHE/go.opentelemetry.io/otel/trace@v1. See the License for the specific language governing permissions and limitations under the License. +-------------------------------------------------------------------------------- + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- Dependency : go.opentelemetry.io/proto/otlp diff --git a/go.mod b/go.mod index dd026085fe1f..28e23fb5c47e 100644 --- a/go.mod +++ b/go.mod @@ -116,7 +116,7 @@ require ( github.com/shopspring/decimal v1.3.1 // indirect github.com/spf13/cobra v1.9.1 github.com/spf13/pflag v1.0.6 - github.com/stretchr/testify v1.11.0 + github.com/stretchr/testify v1.11.1 github.com/ugorji/go/codec v1.1.8 github.com/vmware/govmomi v0.51.0 go.elastic.co/ecszap v1.0.2 @@ -129,7 +129,7 @@ require ( golang.org/x/net v0.43.0 golang.org/x/oauth2 v0.30.0 golang.org/x/sync v0.16.0 - golang.org/x/sys v0.35.0 + golang.org/x/sys v0.36.0 golang.org/x/text v0.28.0 golang.org/x/time v0.12.0 golang.org/x/tools v0.36.0 @@ -182,7 +182,7 @@ require ( github.com/elastic/go-quark v0.3.0 github.com/elastic/go-sfdc v0.0.0-20241010131323-8e176480d727 github.com/elastic/mito v1.22.0 - github.com/elastic/mock-es v0.0.0-20250324153755-573fc6c0ac4b + github.com/elastic/mock-es v0.0.0-20250530054253-8c3b6053f9b6 github.com/elastic/sarama v1.19.1-0.20250603175145-7672917f26b6 github.com/elastic/tk-btf v0.2.0 github.com/elastic/toutoumomoma v0.0.0-20240626215117-76e39db18dfb @@ -190,7 +190,7 @@ require ( github.com/go-ldap/ldap/v3 v3.4.6 github.com/go-ole/go-ole v1.3.0 github.com/go-resty/resty/v2 v2.16.5 - github.com/gofrs/uuid/v5 v5.2.0 + github.com/gofrs/uuid/v5 v5.3.2 github.com/golang-jwt/jwt/v5 v5.2.2 github.com/google/cel-go v0.25.0 github.com/googleapis/gax-go/v2 v2.14.2 @@ -245,7 +245,7 @@ require ( go.opentelemetry.io/collector/processor v1.38.0 go.opentelemetry.io/collector/processor/processorhelper v0.132.0 go.opentelemetry.io/collector/receiver/receivertest v0.132.0 - go.opentelemetry.io/otel/sdk/metric v1.37.0 + go.opentelemetry.io/otel/sdk/metric v1.38.0 go.uber.org/goleak v1.3.0 sigs.k8s.io/kind v0.29.0 ) @@ -379,7 +379,7 @@ require ( github.com/mattn/go-ieproxy v0.0.1 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.16 // indirect - github.com/mileusna/useragent v1.3.4 // indirect + github.com/mileusna/useragent v1.3.5 // indirect github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 // indirect github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 // indirect github.com/minio/sha256-simd v1.0.1 // indirect @@ -409,7 +409,7 @@ require ( github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect github.com/prometheus/client_golang v1.22.0 // indirect github.com/rivo/uniseg v0.4.7 // indirect - github.com/rogpeppe/go-internal v1.13.1 // indirect + github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/rs/cors v1.11.1 // indirect github.com/segmentio/fasthash v1.0.3 // indirect github.com/sergi/go-diff v1.3.1 // indirect @@ -427,7 +427,7 @@ require ( github.com/zeebo/xxh3 v1.0.2 // indirect go.elastic.co/fastjson v1.5.1 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/auto/sdk v1.2.0 // indirect go.opentelemetry.io/collector/component/componenttest v0.132.0 // indirect go.opentelemetry.io/collector/config/configauth v0.132.0 // indirect go.opentelemetry.io/collector/config/configcompression v1.38.0 // indirect @@ -471,7 +471,7 @@ require ( go.opentelemetry.io/contrib/otelconf v0.17.0 // indirect go.opentelemetry.io/contrib/propagators/b3 v1.37.0 // indirect go.opentelemetry.io/ebpf-profiler v0.0.0-20250212075250-7bf12d3f962f // indirect - go.opentelemetry.io/otel v1.37.0 // indirect + go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.13.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.13.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.37.0 // indirect @@ -484,10 +484,10 @@ require ( go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.37.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.37.0 // indirect go.opentelemetry.io/otel/log v0.13.0 // indirect - go.opentelemetry.io/otel/metric v1.37.0 // indirect - go.opentelemetry.io/otel/sdk v1.37.0 // indirect + go.opentelemetry.io/otel/metric v1.38.0 // indirect + go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/sdk/log v0.13.0 // indirect - go.opentelemetry.io/otel/trace v1.37.0 // indirect + go.opentelemetry.io/otel/trace v1.38.0 // indirect go.opentelemetry.io/proto/otlp v1.7.0 // indirect go.uber.org/ratelimit v0.3.1 // indirect go.yaml.in/yaml/v2 v2.4.2 // indirect diff --git a/go.sum b/go.sum index 2118f9b4a943..1967142f2ecf 100644 --- a/go.sum +++ b/go.sum @@ -414,8 +414,8 @@ github.com/elastic/gosigar v0.14.3 h1:xwkKwPia+hSfg9GqrCUKYdId102m9qTJIIr7egmK/u github.com/elastic/gosigar v0.14.3/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= github.com/elastic/mito v1.22.0 h1:DW4RkO+PLwSbKVF5ijYzi0ug+TKzLL+DVJRzbOPbzQ0= github.com/elastic/mito v1.22.0/go.mod h1:h1V+8B62+DXsu0TstJkjsTh5ewJIDJlwzxPkP3HBM9s= -github.com/elastic/mock-es v0.0.0-20250324153755-573fc6c0ac4b h1:gaMtsr25lreEBrrVvZnztKJY3ywn3s3fHE+5f+Vg2tc= -github.com/elastic/mock-es v0.0.0-20250324153755-573fc6c0ac4b/go.mod h1:cXqWcLnmu5y4QveTb2hjk7rgzkHMuZsqeXtbJpNAcu0= +github.com/elastic/mock-es v0.0.0-20250530054253-8c3b6053f9b6 h1:JVNuBrmOoqLJgp9o68YBMnOrXCzQI3mCppW+suwRSlw= +github.com/elastic/mock-es v0.0.0-20250530054253-8c3b6053f9b6/go.mod h1:cXqWcLnmu5y4QveTb2hjk7rgzkHMuZsqeXtbJpNAcu0= github.com/elastic/pkcs8 v1.0.0 h1:HhitlUKxhN288kcNcYkjW6/ouvuwJWd9ioxpjnD9jVA= github.com/elastic/pkcs8 v1.0.0/go.mod h1:ipsZToJfq1MxclVTwpG7U/bgeDtf+0HkUiOxebk95+0= github.com/elastic/sarama v1.19.1-0.20250603175145-7672917f26b6 h1:2COw7kzXkIyS4hKNUl5qw0KolrwncrY4VVNpngVNo8I= @@ -528,8 +528,8 @@ github.com/godror/knownpb v0.1.0 h1:dJPK8s/I3PQzGGaGcUStL2zIaaICNzKKAK8BzP1uLio= github.com/godror/knownpb v0.1.0/go.mod h1:4nRFbQo1dDuwKnblRXDxrfCFYeT4hjg3GjMqef58eRE= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/uuid/v5 v5.2.0 h1:qw1GMx6/y8vhVsx626ImfKMuS5CvJmhIKKtuyvfajMM= -github.com/gofrs/uuid/v5 v5.2.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= +github.com/gofrs/uuid/v5 v5.3.2 h1:2jfO8j3XgSwlz/wHqemAEugfnTlikAYHhnqQ8Xh4fE0= +github.com/gofrs/uuid/v5 v5.3.2/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= @@ -776,8 +776,8 @@ github.com/microsoft/wmi v0.25.1/go.mod h1:1zbdSF0A+5OwTUII5p3hN7/K6KF2m3o27pSG6 github.com/miekg/dns v1.1.22/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.66 h1:FeZXOS3VCVsKnEAd+wBkjMC3D2K+ww66Cq3VnCINuJE= github.com/miekg/dns v1.1.66/go.mod h1:jGFzBsSNbJw6z1HYut1RKBKHA9PBdxeHrZG8J+gC2WE= -github.com/mileusna/useragent v1.3.4 h1:MiuRRuvGjEie1+yZHO88UBYg8YBC/ddF6T7F56i3PCk= -github.com/mileusna/useragent v1.3.4/go.mod h1:3d8TOmwL/5I8pJjyVDteHtgDGcefrFUX4ccGOMKNYYc= +github.com/mileusna/useragent v1.3.5 h1:SJM5NzBmh/hO+4LGeATKpaEX9+b4vcGg2qXGLiNGDws= +github.com/mileusna/useragent v1.3.5/go.mod h1:3d8TOmwL/5I8pJjyVDteHtgDGcefrFUX4ccGOMKNYYc= github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs= github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI= @@ -914,8 +914,8 @@ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-charset v0.0.0-20180617210344-2471d30d28b4/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc= -github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= -github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -965,8 +965,8 @@ 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.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.11.0 h1:ib4sjIrwZKxE5u/Japgo/7SJV3PvgjGiRNAvTVGqQl8= -github.com/stretchr/testify v1.11.0/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/teambition/rrule-go v1.8.2 h1:lIjpjvWTj9fFUZCmuoVDrKVOtdiyzbzc93qTmRVe/J8= github.com/teambition/rrule-go v1.8.2/go.mod h1:Ieq5AbrKGciP1V//Wq8ktsTXwSwJHDD5mD/wLBGl3p4= github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= @@ -1044,8 +1044,8 @@ go.mongodb.org/mongo-driver v1.17.4 h1:jUorfmVzljjr0FLzYQsGP8cgN/qzzxlY9Vh0C9KFX go.mongodb.org/mongo-driver v1.17.4/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= -go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/auto/sdk v1.2.0 h1:YpRtUFjvhSymycLS2T81lT6IGhcUP+LUPtv0iv1N8bM= +go.opentelemetry.io/auto/sdk v1.2.0/go.mod h1:1deq2zL7rwjwC8mR7XgY2N+tlIl6pjmEUoLDENMEzwk= go.opentelemetry.io/collector v0.132.0 h1:uNCmTPZ+AnIV+KHdUzOSkKrugl5/RCS0Er8Fb3fxwCM= go.opentelemetry.io/collector v0.132.0/go.mod h1:7hQNXvDFYNrnRSL98srGg75nDENOUdykiSSs8OtqBCg= go.opentelemetry.io/collector/client v1.38.0 h1:LXOBtpCsf1ZfjcIugSnujJKgIZswuaExNnI12xgnkB4= @@ -1180,8 +1180,8 @@ go.opentelemetry.io/contrib/zpages v0.62.0 h1:9fUYTLmrK0x/lweM2uM+BOx069jLx8PxVq go.opentelemetry.io/contrib/zpages v0.62.0/go.mod h1:C8kXoiC1Ytvereztus2R+kqdSa6W/MZ8FfS8Zwj+LiM= go.opentelemetry.io/ebpf-profiler v0.0.0-20250212075250-7bf12d3f962f h1:DqRQ7JaRjf3TwWwfwHIvsBB/aLUs+kgrX+MrAIllALI= go.opentelemetry.io/ebpf-profiler v0.0.0-20250212075250-7bf12d3f962f/go.mod h1:hfAVBjRN6FZjSgZUBsNzvRDJWlS46R5Y0SGVr4Jl86s= -go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= -go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.13.0 h1:z6lNIajgEBVtQZHjfw2hAccPEBDs+nx58VemmXWa2ec= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.13.0/go.mod h1:+kyc3bRx/Qkq05P6OCu3mTEIOxYRYzoIg+JsUp5X+PM= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.13.0 h1:zUfYw8cscHHLwaY8Xz3fiJu+R59xBnkgq2Zr1lwmK/0= @@ -1208,18 +1208,18 @@ go.opentelemetry.io/otel/log v0.13.0 h1:yoxRoIZcohB6Xf0lNv9QIyCzQvrtGZklVbdCoyb7 go.opentelemetry.io/otel/log v0.13.0/go.mod h1:INKfG4k1O9CL25BaM1qLe0zIedOpvlS5Z7XgSbmN83E= go.opentelemetry.io/otel/log/logtest v0.13.0 h1:xxaIcgoEEtnwdgj6D6Uo9K/Dynz9jqIxSDu2YObJ69Q= go.opentelemetry.io/otel/log/logtest v0.13.0/go.mod h1:+OrkmsAH38b+ygyag1tLjSFMYiES5UHggzrtY1IIEA8= -go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= -go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= -go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= -go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= +go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= +go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= go.opentelemetry.io/otel/sdk/log v0.13.0 h1:I3CGUszjM926OphK8ZdzF+kLqFvfRY/IIoFq/TjwfaQ= go.opentelemetry.io/otel/sdk/log v0.13.0/go.mod h1:lOrQyCCXmpZdN7NchXb6DOZZa1N5G1R2tm5GMMTpDBw= go.opentelemetry.io/otel/sdk/log/logtest v0.13.0 h1:9yio6AFZ3QD9j9oqshV1Ibm9gPLlHNxurno5BreMtIA= go.opentelemetry.io/otel/sdk/log/logtest v0.13.0/go.mod h1:QOGiAJHl+fob8Nu85ifXfuQYmJTFAvcrxL6w5/tu168= -go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc= -go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps= -go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= -go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= +go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= +go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= go.opentelemetry.io/proto/otlp v1.7.0 h1:jX1VolD6nHuFzOYso2E73H85i92Mv8JQYk0K9vz09os= go.opentelemetry.io/proto/otlp v1.7.0/go.mod h1:fSKjH6YJ7HDlwzltzyMj036AJ3ejJLCgCSHGj4efDDo= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= @@ -1362,8 +1362,8 @@ golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= -golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=