From 18a598fbac881d92ce1ba06d2af57bbe4080309a Mon Sep 17 00:00:00 2001 From: Antoine Toulme Date: Mon, 14 Oct 2024 02:30:38 -0700 Subject: [PATCH 01/10] Fix codeowners (#35754) Fix the allowlist to match memberships. --- cmd/githubgen/allowlist.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/githubgen/allowlist.txt b/cmd/githubgen/allowlist.txt index 0aad99b3ac17..6ba509caff99 100644 --- a/cmd/githubgen/allowlist.txt +++ b/cmd/githubgen/allowlist.txt @@ -23,4 +23,4 @@ m1rp jriguera abhishek-at-cloudwerx joker-star-l -ArthurSens \ No newline at end of file +michael-burt \ No newline at end of file From 5221a7a8774b855bb7898e3594f460290476dcdc Mon Sep 17 00:00:00 2001 From: Andrew Wilkins Date: Mon, 14 Oct 2024 17:52:35 +0800 Subject: [PATCH 02/10] telemetrygen: wire up InsecureSkipVerify (#35735) #### Description Thread the InsecureSkipVerify config through properly, so the relevant `tls.Config` struct field is set. Previously, The `--otlp-insecure-skip-verify` flag wasn't effective. I feel like we'd be better off using https://github.com/open-telemetry/opentelemetry-go-contrib/tree/main/exporters/autoexport and configuring these things with environment variables, instead of defining flags. I will open an issue for that. #### Link to tracking issue None #### Testing I have added a test that shows the HTTP exporter honours the Insecure, InsecureSkipVerify, and CaFile config fields. I have not done the same for gRPC due to lack of time - this can be done as a followup. OTOH the logic for HTTP & gRPC exporter options shares more now, so the HTTP path tests a fair bit of what gRPC will do anyway. --- .../telemetrygen-insecureskipverify.yaml | 27 ++++ cmd/telemetrygen/go.mod | 2 +- cmd/telemetrygen/internal/common/tls_utils.go | 58 +++----- cmd/telemetrygen/internal/logs/exporter.go | 8 +- cmd/telemetrygen/internal/metrics/exporter.go | 8 +- cmd/telemetrygen/internal/traces/exporter.go | 8 +- .../internal/traces/exporter_test.go | 137 ++++++++++++++++++ 7 files changed, 204 insertions(+), 44 deletions(-) create mode 100644 .chloggen/telemetrygen-insecureskipverify.yaml create mode 100644 cmd/telemetrygen/internal/traces/exporter_test.go diff --git a/.chloggen/telemetrygen-insecureskipverify.yaml b/.chloggen/telemetrygen-insecureskipverify.yaml new file mode 100644 index 000000000000..a1debf677268 --- /dev/null +++ b/.chloggen/telemetrygen-insecureskipverify.yaml @@ -0,0 +1,27 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: bug_fix + +# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver) +component: telemetrygen + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Enable the `--otlp-insecure-skip-verify` flag + +# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. +issues: [35735] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: + +# If your change doesn't affect end users or the exported elements of any package, +# you should instead start your pull request title with [chore] or use the "Skip Changelog" label. +# Optional: The change log or logs in which this entry should be included. +# e.g. '[user]' or '[user, api]' +# Include 'user' if the change is relevant to end users. +# Include 'api' if there is a change to a library API. +# Default: '[user]' +change_logs: [user] diff --git a/cmd/telemetrygen/go.mod b/cmd/telemetrygen/go.mod index 7181398c24d3..2dcf1cd100bf 100644 --- a/cmd/telemetrygen/go.mod +++ b/cmd/telemetrygen/go.mod @@ -23,6 +23,7 @@ require ( go.opentelemetry.io/otel/sdk/log v0.6.0 go.opentelemetry.io/otel/sdk/metric v1.30.0 go.opentelemetry.io/otel/trace v1.30.0 + go.opentelemetry.io/proto/otlp v1.3.1 go.uber.org/goleak v1.3.0 go.uber.org/zap v1.27.0 golang.org/x/time v0.7.0 @@ -45,7 +46,6 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect go.opentelemetry.io/collector/config/configtelemetry v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/otel/metric v1.30.0 // indirect - go.opentelemetry.io/proto/otlp v1.3.1 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/net v0.29.0 // indirect golang.org/x/sys v0.25.0 // indirect diff --git a/cmd/telemetrygen/internal/common/tls_utils.go b/cmd/telemetrygen/internal/common/tls_utils.go index 286d7345adc1..6759541ec508 100644 --- a/cmd/telemetrygen/internal/common/tls_utils.go +++ b/cmd/telemetrygen/internal/common/tls_utils.go @@ -28,52 +28,37 @@ func caPool(caFile string) (*x509.CertPool, error) { return pool, nil } -func GetTLSCredentialsForGRPCExporter(caFile string, cAuth ClientAuth) (credentials.TransportCredentials, error) { - - pool, err := caPool(caFile) +func GetTLSCredentialsForGRPCExporter( + caFile string, + cAuth ClientAuth, + insecureSkipVerify bool, +) (credentials.TransportCredentials, error) { + tlsConfig, err := getTLSConfig(caFile, cAuth, insecureSkipVerify) if err != nil { return nil, err } + return credentials.NewTLS(tlsConfig), nil +} - var creds credentials.TransportCredentials - - if caFile != "" { - creds = credentials.NewTLS(&tls.Config{ - RootCAs: pool, - }) - } else { - creds = credentials.NewTLS(&tls.Config{}) - } - - // Configuration for mTLS - if cAuth.Enabled { - keypair, err := tls.LoadX509KeyPair(cAuth.ClientCertFile, cAuth.ClientKeyFile) - if err != nil { - return nil, err - } - creds = credentials.NewTLS(&tls.Config{ - RootCAs: pool, - Certificates: []tls.Certificate{keypair}, - }) - } - - return creds, nil +func GetTLSCredentialsForHTTPExporter( + caFile string, + cAuth ClientAuth, + insecureSkipVerify bool, +) (*tls.Config, error) { + return getTLSConfig(caFile, cAuth, insecureSkipVerify) } -func GetTLSCredentialsForHTTPExporter(caFile string, cAuth ClientAuth) (*tls.Config, error) { - pool, err := caPool(caFile) - if err != nil { - return nil, err +func getTLSConfig(caFile string, cAuth ClientAuth, insecureSkipVerify bool) (*tls.Config, error) { + tlsCfg := tls.Config{ + InsecureSkipVerify: insecureSkipVerify, } - var tlsCfg tls.Config - if caFile != "" { - tlsCfg = tls.Config{ - RootCAs: pool, + pool, err := caPool(caFile) + if err != nil { + return nil, err } - } else { - tlsCfg = tls.Config{} + tlsCfg.RootCAs = pool } // Configuration for mTLS @@ -82,7 +67,6 @@ func GetTLSCredentialsForHTTPExporter(caFile string, cAuth ClientAuth) (*tls.Con if err != nil { return nil, err } - tlsCfg.ClientAuth = tls.RequireAndVerifyClientCert tlsCfg.Certificates = []tls.Certificate{keypair} } return &tlsCfg, nil diff --git a/cmd/telemetrygen/internal/logs/exporter.go b/cmd/telemetrygen/internal/logs/exporter.go index 37df9ac9ac76..9543a45370cd 100644 --- a/cmd/telemetrygen/internal/logs/exporter.go +++ b/cmd/telemetrygen/internal/logs/exporter.go @@ -22,7 +22,9 @@ func grpcExporterOptions(cfg *Config) ([]otlploggrpc.Option, error) { if cfg.Insecure { grpcExpOpt = append(grpcExpOpt, otlploggrpc.WithInsecure()) } else { - credentials, err := common.GetTLSCredentialsForGRPCExporter(cfg.CaFile, cfg.ClientAuth) + credentials, err := common.GetTLSCredentialsForGRPCExporter( + cfg.CaFile, cfg.ClientAuth, cfg.InsecureSkipVerify, + ) if err != nil { return nil, fmt.Errorf("failed to get TLS credentials: %w", err) } @@ -47,7 +49,9 @@ func httpExporterOptions(cfg *Config) ([]otlploghttp.Option, error) { if cfg.Insecure { httpExpOpt = append(httpExpOpt, otlploghttp.WithInsecure()) } else { - tlsCfg, err := common.GetTLSCredentialsForHTTPExporter(cfg.CaFile, cfg.ClientAuth) + tlsCfg, err := common.GetTLSCredentialsForHTTPExporter( + cfg.CaFile, cfg.ClientAuth, cfg.InsecureSkipVerify, + ) if err != nil { return nil, fmt.Errorf("failed to get TLS credentials: %w", err) } diff --git a/cmd/telemetrygen/internal/metrics/exporter.go b/cmd/telemetrygen/internal/metrics/exporter.go index 1933c6aea73e..d8323ffbebd0 100644 --- a/cmd/telemetrygen/internal/metrics/exporter.go +++ b/cmd/telemetrygen/internal/metrics/exporter.go @@ -22,7 +22,9 @@ func grpcExporterOptions(cfg *Config) ([]otlpmetricgrpc.Option, error) { if cfg.Insecure { grpcExpOpt = append(grpcExpOpt, otlpmetricgrpc.WithInsecure()) } else { - credentials, err := common.GetTLSCredentialsForGRPCExporter(cfg.CaFile, cfg.ClientAuth) + credentials, err := common.GetTLSCredentialsForGRPCExporter( + cfg.CaFile, cfg.ClientAuth, cfg.InsecureSkipVerify, + ) if err != nil { return nil, fmt.Errorf("failed to get TLS credentials: %w", err) } @@ -47,7 +49,9 @@ func httpExporterOptions(cfg *Config) ([]otlpmetrichttp.Option, error) { if cfg.Insecure { httpExpOpt = append(httpExpOpt, otlpmetrichttp.WithInsecure()) } else { - tlsCfg, err := common.GetTLSCredentialsForHTTPExporter(cfg.CaFile, cfg.ClientAuth) + tlsCfg, err := common.GetTLSCredentialsForHTTPExporter( + cfg.CaFile, cfg.ClientAuth, cfg.InsecureSkipVerify, + ) if err != nil { return nil, fmt.Errorf("failed to get TLS credentials: %w", err) } diff --git a/cmd/telemetrygen/internal/traces/exporter.go b/cmd/telemetrygen/internal/traces/exporter.go index 8dfb3e51d502..4d75c36635c3 100644 --- a/cmd/telemetrygen/internal/traces/exporter.go +++ b/cmd/telemetrygen/internal/traces/exporter.go @@ -22,7 +22,9 @@ func grpcExporterOptions(cfg *Config) ([]otlptracegrpc.Option, error) { if cfg.Insecure { grpcExpOpt = append(grpcExpOpt, otlptracegrpc.WithInsecure()) } else { - credentials, err := common.GetTLSCredentialsForGRPCExporter(cfg.CaFile, cfg.ClientAuth) + credentials, err := common.GetTLSCredentialsForGRPCExporter( + cfg.CaFile, cfg.ClientAuth, cfg.InsecureSkipVerify, + ) if err != nil { return nil, fmt.Errorf("failed to get TLS credentials: %w", err) } @@ -47,7 +49,9 @@ func httpExporterOptions(cfg *Config) ([]otlptracehttp.Option, error) { if cfg.Insecure { httpExpOpt = append(httpExpOpt, otlptracehttp.WithInsecure()) } else { - tlsCfg, err := common.GetTLSCredentialsForHTTPExporter(cfg.CaFile, cfg.ClientAuth) + tlsCfg, err := common.GetTLSCredentialsForHTTPExporter( + cfg.CaFile, cfg.ClientAuth, cfg.InsecureSkipVerify, + ) if err != nil { return nil, fmt.Errorf("failed to get TLS credentials: %w", err) } diff --git a/cmd/telemetrygen/internal/traces/exporter_test.go b/cmd/telemetrygen/internal/traces/exporter_test.go new file mode 100644 index 000000000000..b8af7442c836 --- /dev/null +++ b/cmd/telemetrygen/internal/traces/exporter_test.go @@ -0,0 +1,137 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package traces + +import ( + "context" + "encoding/pem" + "net/http" + "net/http/httptest" + "net/url" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp" + tracepb "go.opentelemetry.io/proto/otlp/trace/v1" + + "github.com/open-telemetry/opentelemetry-collector-contrib/cmd/telemetrygen/internal/common" +) + +func TestHTTPExporterOptions_TLS(t *testing.T) { + // TODO add test cases for mTLS + for name, tc := range map[string]struct { + tls bool + tlsServerCA bool // use the httptest.Server's TLS cert as the CA + cfg Config + + expectTransportError bool + }{ + "Insecure": { + tls: false, + cfg: Config{Config: common.Config{Insecure: true}}, + }, + "InsecureSkipVerify": { + tls: true, + cfg: Config{Config: common.Config{InsecureSkipVerify: true}}, + }, + "InsecureSkipVerifyDisabled": { + tls: true, + expectTransportError: true, + }, + "CaFile": { + tls: true, + tlsServerCA: true, + }, + } { + t.Run(name, func(t *testing.T) { + var called bool + var h http.HandlerFunc = func(http.ResponseWriter, *http.Request) { + called = true + } + var srv *httptest.Server + if tc.tls { + srv = httptest.NewTLSServer(h) + } else { + srv = httptest.NewServer(h) + } + defer srv.Close() + srvURL, _ := url.Parse(srv.URL) + + cfg := tc.cfg + cfg.CustomEndpoint = srvURL.Host + if tc.tlsServerCA { + caFile := filepath.Join(t.TempDir(), "cert.pem") + err := os.WriteFile(caFile, pem.EncodeToMemory(&pem.Block{ + Type: "CERTIFICATE", + Bytes: srv.TLS.Certificates[0].Certificate[0], + }), 0600) + require.NoError(t, err) + cfg.CaFile = caFile + } + + opts, err := httpExporterOptions(&cfg) + require.NoError(t, err) + client := otlptracehttp.NewClient(opts...) + + err = client.UploadTraces(context.Background(), []*tracepb.ResourceSpans{}) + if tc.expectTransportError { + require.Error(t, err) + assert.False(t, called) + } else { + require.NoError(t, err) + assert.True(t, called) + } + }) + } +} + +func TestHTTPExporterOptions_HTTP(t *testing.T) { + for name, tc := range map[string]struct { + cfg Config + + expectedHTTPPath string + expectedHeader http.Header + }{ + "HTTPPath": { + cfg: Config{Config: common.Config{HTTPPath: "/foo"}}, + expectedHTTPPath: "/foo", + }, + "Headers": { + cfg: Config{ + Config: common.Config{Headers: map[string]any{"a": "b"}}, + }, + expectedHTTPPath: "/v1/traces", + expectedHeader: http.Header{"a": []string{"b"}}, + }, + } { + t.Run(name, func(t *testing.T) { + var httpPath string + var header http.Header + var h http.HandlerFunc = func(_ http.ResponseWriter, r *http.Request) { + httpPath = r.URL.Path + header = r.Header + } + srv := httptest.NewServer(h) + defer srv.Close() + srvURL, _ := url.Parse(srv.URL) + + cfg := tc.cfg + cfg.Insecure = true + cfg.CustomEndpoint = srvURL.Host + opts, err := httpExporterOptions(&cfg) + require.NoError(t, err) + client := otlptracehttp.NewClient(opts...) + + err = client.UploadTraces(context.Background(), []*tracepb.ResourceSpans{}) + require.NoError(t, err) + assert.Equal(t, tc.expectedHTTPPath, httpPath) + for k, expected := range tc.expectedHeader { + assert.Equal(t, expected, []string{header.Get(k)}) + } + }) + } +} From 0a6bb8a5a573408c9aa3e5949a413e721d3f832f Mon Sep 17 00:00:00 2001 From: VihasMakwana <121151420+VihasMakwana@users.noreply.github.com> Date: Mon, 14 Oct 2024 20:18:58 +0530 Subject: [PATCH 03/10] [stanza/input/windows]: fix remote session leak while resubscribing (#35696) Stop the remote session before starting a new one while resubscribing. Closes https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/35577 --- .../stanza-windows-remote-session-leak.yaml | 27 +++++++++++++++++++ pkg/stanza/operator/input/windows/input.go | 3 +++ 2 files changed, 30 insertions(+) create mode 100644 .chloggen/stanza-windows-remote-session-leak.yaml diff --git a/.chloggen/stanza-windows-remote-session-leak.yaml b/.chloggen/stanza-windows-remote-session-leak.yaml new file mode 100644 index 000000000000..96200a5659f5 --- /dev/null +++ b/.chloggen/stanza-windows-remote-session-leak.yaml @@ -0,0 +1,27 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: bug_fix + +# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver) +component: stanza/input/windows + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Close remote session while resubscribing + +# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. +issues: [35577] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: + +# If your change doesn't affect end users or the exported elements of any package, +# you should instead start your pull request title with [chore] or use the "Skip Changelog" label. +# Optional: The change log or logs in which this entry should be included. +# e.g. '[user]' or '[user, api]' +# Include 'user' if the change is relevant to end users. +# Include 'api' if there is a change to a library API. +# Default: '[user]' +change_logs: [] diff --git a/pkg/stanza/operator/input/windows/input.go b/pkg/stanza/operator/input/windows/input.go index 312709fc863e..e0324826e43f 100644 --- a/pkg/stanza/operator/input/windows/input.go +++ b/pkg/stanza/operator/input/windows/input.go @@ -201,6 +201,9 @@ func (i *Input) read(ctx context.Context) { i.Logger().Error("Failed to close remote subscription", zap.Error(closeErr)) return } + if err := i.stopRemoteSession(); err != nil { + i.Logger().Error("Failed to close remote session", zap.Error(err)) + } i.Logger().Info("Resubscribing, creating remote subscription") i.subscription = NewRemoteSubscription(i.remote.Server) if err := i.startRemoteSession(); err != nil { From 9b944d6ebd5612f5b3f74275febeea544157ca6d Mon Sep 17 00:00:00 2001 From: Bogdan Drutu Date: Mon, 14 Oct 2024 11:18:12 -0700 Subject: [PATCH 04/10] [chore] Remove unnecessary Host implementation funcs (#35773) Signed-off-by: Bogdan Drutu --- exporter/awss3exporter/go.mod | 2 +- exporter/awss3exporter/marshaler_test.go | 17 ----------------- exporter/elasticsearchexporter/exporter_test.go | 9 --------- exporter/elasticsearchexporter/go.mod | 2 +- exporter/fileexporter/encoding_test.go | 9 --------- exporter/fileexporter/go.mod | 2 +- exporter/rabbitmqexporter/go.mod | 2 +- exporter/rabbitmqexporter/marshaler_test.go | 9 --------- extension/awsproxy/factory_test.go | 9 --------- extension/awsproxy/go.mod | 2 +- .../observer/ecsobserver/extension_test.go | 9 --------- extension/observer/ecsobserver/go.mod | 2 +- .../k8sattributesprocessor/processor_test.go | 9 --------- receiver/awss3receiver/go.mod | 2 +- receiver/awss3receiver/receiver_test.go | 17 ----------------- receiver/carbonreceiver/go.mod | 2 +- receiver/carbonreceiver/receiver_test.go | 9 --------- .../dockerstatsreceiver/integration_test.go | 9 --------- .../receivercreator/observerhandler_test.go | 14 -------------- receiver/sapmreceiver/trace_receiver_test.go | 9 --------- receiver/signalfxreceiver/receiver_test.go | 9 --------- receiver/splunkhecreceiver/go.mod | 2 +- receiver/splunkhecreceiver/receiver_test.go | 9 --------- 23 files changed, 9 insertions(+), 156 deletions(-) diff --git a/exporter/awss3exporter/go.mod b/exporter/awss3exporter/go.mod index 0a7cc6e16292..c8c581622939 100644 --- a/exporter/awss3exporter/go.mod +++ b/exporter/awss3exporter/go.mod @@ -12,7 +12,6 @@ require ( go.opentelemetry.io/collector/exporter v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/otelcol/otelcoltest v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/pdata v1.17.1-0.20241008154146-ea48c09c31ae - go.opentelemetry.io/collector/pipeline v0.111.1-0.20241008154146-ea48c09c31ae go.uber.org/goleak v1.3.0 go.uber.org/multierr v1.11.0 go.uber.org/zap v1.27.0 @@ -80,6 +79,7 @@ require ( go.opentelemetry.io/collector/otelcol v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/pdata/pprofile v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/pdata/testdata v0.111.1-0.20241008154146-ea48c09c31ae // indirect + go.opentelemetry.io/collector/pipeline v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/processor v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/processor/processorprofiles v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/receiver v0.111.1-0.20241008154146-ea48c09c31ae // indirect diff --git a/exporter/awss3exporter/marshaler_test.go b/exporter/awss3exporter/marshaler_test.go index 5f5a9f799eb4..0f651fa87cc3 100644 --- a/exporter/awss3exporter/marshaler_test.go +++ b/exporter/awss3exporter/marshaler_test.go @@ -11,7 +11,6 @@ import ( "github.com/stretchr/testify/require" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component/componenttest" - "go.opentelemetry.io/collector/pipeline" "go.uber.org/zap" ) @@ -51,28 +50,12 @@ type hostWithExtensions struct { encoding encodingExtension } -func (h hostWithExtensions) Start(context.Context, component.Host) error { - panic("unsupported") -} - -func (h hostWithExtensions) Shutdown(context.Context) error { - panic("unsupported") -} - -func (h hostWithExtensions) GetFactory(component.Kind, component.Type) component.Factory { - panic("unsupported") -} - func (h hostWithExtensions) GetExtensions() map[component.ID]component.Component { return map[component.ID]component.Component{ component.MustNewID("foo"): h.encoding, } } -func (h hostWithExtensions) GetExportersWithSignal() map[pipeline.Signal]map[component.ID]component.Component { - panic("unsupported") -} - type encodingExtension struct { } diff --git a/exporter/elasticsearchexporter/exporter_test.go b/exporter/elasticsearchexporter/exporter_test.go index 77ff8e2d0b47..413853cfcd51 100644 --- a/exporter/elasticsearchexporter/exporter_test.go +++ b/exporter/elasticsearchexporter/exporter_test.go @@ -30,7 +30,6 @@ import ( "go.opentelemetry.io/collector/pdata/plog" "go.opentelemetry.io/collector/pdata/pmetric" "go.opentelemetry.io/collector/pdata/ptrace" - "go.opentelemetry.io/collector/pipeline" ) func TestExporterLogs(t *testing.T) { @@ -1600,18 +1599,10 @@ type mockHost struct { extensions map[component.ID]component.Component } -func (h *mockHost) GetFactory(kind component.Kind, typ component.Type) component.Factory { - panic(fmt.Errorf("expected call to GetFactory(%v, %v)", kind, typ)) -} - func (h *mockHost) GetExtensions() map[component.ID]component.Component { return h.extensions } -func (h *mockHost) GetExportersWithSignal() map[pipeline.Signal]map[component.ID]component.Component { - panic(fmt.Errorf("expected call to GetExporters")) -} - type roundTripperFunc func(*http.Request) (*http.Response, error) func (f roundTripperFunc) RoundTrip(r *http.Request) (*http.Response, error) { diff --git a/exporter/elasticsearchexporter/go.mod b/exporter/elasticsearchexporter/go.mod index 2c17dd8e390d..f161860974f0 100644 --- a/exporter/elasticsearchexporter/go.mod +++ b/exporter/elasticsearchexporter/go.mod @@ -22,7 +22,6 @@ require ( go.opentelemetry.io/collector/exporter v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/extension/auth v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/pdata v1.17.1-0.20241008154146-ea48c09c31ae - go.opentelemetry.io/collector/pipeline v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/semconv v0.111.1-0.20241008154146-ea48c09c31ae go.uber.org/goleak v1.3.0 go.uber.org/zap v1.27.0 @@ -74,6 +73,7 @@ require ( go.opentelemetry.io/collector/extension/experimental/storage v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/internal/globalsignal v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/pdata/pprofile v0.111.1-0.20241008154146-ea48c09c31ae // indirect + go.opentelemetry.io/collector/pipeline v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/receiver v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/receiver/receiverprofiles v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 // indirect diff --git a/exporter/fileexporter/encoding_test.go b/exporter/fileexporter/encoding_test.go index 17c783950aab..cf43b24ab896 100644 --- a/exporter/fileexporter/encoding_test.go +++ b/exporter/fileexporter/encoding_test.go @@ -19,7 +19,6 @@ import ( "go.opentelemetry.io/collector/pdata/plog" "go.opentelemetry.io/collector/pdata/pmetric" "go.opentelemetry.io/collector/pdata/ptrace" - "go.opentelemetry.io/collector/pipeline" "github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/otlpencodingextension" ) @@ -28,18 +27,10 @@ type hostWithEncoding struct { encodings map[component.ID]component.Component } -func (h hostWithEncoding) GetFactory(_ component.Kind, _ component.Type) component.Factory { - panic("unsupported") -} - func (h hostWithEncoding) GetExtensions() map[component.ID]component.Component { return h.encodings } -func (h hostWithEncoding) GetExportersWithSignal() map[pipeline.Signal]map[component.ID]component.Component { - panic("unsupported") -} - func TestEncoding(t *testing.T) { f := NewFactory() cfg := f.CreateDefaultConfig().(*Config) diff --git a/exporter/fileexporter/go.mod b/exporter/fileexporter/go.mod index 296b6f13df6a..87dc1924a473 100644 --- a/exporter/fileexporter/go.mod +++ b/exporter/fileexporter/go.mod @@ -15,7 +15,6 @@ require ( go.opentelemetry.io/collector/exporter v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/extension v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/pdata v1.17.1-0.20241008154146-ea48c09c31ae - go.opentelemetry.io/collector/pipeline v0.111.1-0.20241008154146-ea48c09c31ae go.uber.org/goleak v1.3.0 go.uber.org/zap v1.27.0 gopkg.in/natefinch/lumberjack.v2 v2.2.1 @@ -48,6 +47,7 @@ require ( go.opentelemetry.io/collector/extension/experimental/storage v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/internal/globalsignal v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/pdata/pprofile v0.111.1-0.20241008154146-ea48c09c31ae // indirect + go.opentelemetry.io/collector/pipeline v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/receiver v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/receiver/receiverprofiles v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/otel v1.30.0 // indirect diff --git a/exporter/rabbitmqexporter/go.mod b/exporter/rabbitmqexporter/go.mod index dd197de16aea..a26944139d4b 100644 --- a/exporter/rabbitmqexporter/go.mod +++ b/exporter/rabbitmqexporter/go.mod @@ -15,7 +15,6 @@ require ( go.opentelemetry.io/collector/consumer v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/exporter v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/pdata v1.17.1-0.20241008154146-ea48c09c31ae - go.opentelemetry.io/collector/pipeline v0.111.1-0.20241008154146-ea48c09c31ae go.uber.org/goleak v1.3.0 go.uber.org/zap v1.27.0 ) @@ -81,6 +80,7 @@ require ( go.opentelemetry.io/collector/extension/experimental/storage v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/internal/globalsignal v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/pdata/pprofile v0.111.1-0.20241008154146-ea48c09c31ae // indirect + go.opentelemetry.io/collector/pipeline v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/receiver v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/receiver/receiverprofiles v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect diff --git a/exporter/rabbitmqexporter/marshaler_test.go b/exporter/rabbitmqexporter/marshaler_test.go index 71b8cba66acf..4253b908a260 100644 --- a/exporter/rabbitmqexporter/marshaler_test.go +++ b/exporter/rabbitmqexporter/marshaler_test.go @@ -13,7 +13,6 @@ import ( "go.opentelemetry.io/collector/pdata/plog" "go.opentelemetry.io/collector/pdata/pmetric" "go.opentelemetry.io/collector/pdata/ptrace" - "go.opentelemetry.io/collector/pipeline" ) func TestMarshalUsingEncodingExtension(t *testing.T) { @@ -40,14 +39,6 @@ type mockEncodingExtension struct { mock.Mock } -func (h *mockHostWithEncodings) GetFactory(component.Kind, component.Type) component.Factory { - return nil -} - -func (h *mockHostWithEncodings) GetExportersWithSignal() map[pipeline.Signal]map[component.ID]component.Component { - return nil -} - func (h *mockHostWithEncodings) GetExtensions() map[component.ID]component.Component { args := h.Called() return args.Get(0).(map[component.ID]component.Component) diff --git a/extension/awsproxy/factory_test.go b/extension/awsproxy/factory_test.go index 5a2f27a294c9..ab6d5fe5ce29 100644 --- a/extension/awsproxy/factory_test.go +++ b/extension/awsproxy/factory_test.go @@ -19,7 +19,6 @@ import ( "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/config/confignet" "go.opentelemetry.io/collector/extension/extensiontest" - "go.opentelemetry.io/collector/pipeline" "github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/proxy" "github.com/open-telemetry/opentelemetry-collector-contrib/internal/common/testutil" @@ -101,18 +100,10 @@ type nopHost struct { reportFunc func(event *componentstatus.Event) } -func (nh *nopHost) GetFactory(component.Kind, component.Type) component.Factory { - return nil -} - func (nh *nopHost) GetExtensions() map[component.ID]component.Component { return nil } -func (nh *nopHost) GetExportersWithSignal() map[pipeline.Signal]map[component.ID]component.Component { - return nil -} - func (nh *nopHost) Report(event *componentstatus.Event) { nh.reportFunc(event) } diff --git a/extension/awsproxy/go.mod b/extension/awsproxy/go.mod index 1b5bf4dddac0..29d104672940 100644 --- a/extension/awsproxy/go.mod +++ b/extension/awsproxy/go.mod @@ -12,7 +12,6 @@ require ( go.opentelemetry.io/collector/config/configtls v1.17.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/confmap v1.17.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/extension v0.111.1-0.20241008154146-ea48c09c31ae - go.opentelemetry.io/collector/pipeline v0.111.1-0.20241008154146-ea48c09c31ae go.uber.org/zap v1.27.0 ) @@ -38,6 +37,7 @@ require ( go.opentelemetry.io/collector/featuregate v1.17.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/internal/globalsignal v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/pdata v1.17.1-0.20241008154146-ea48c09c31ae // indirect + go.opentelemetry.io/collector/pipeline v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/otel v1.30.0 // indirect go.opentelemetry.io/otel/metric v1.30.0 // indirect go.opentelemetry.io/otel/sdk v1.30.0 // indirect diff --git a/extension/observer/ecsobserver/extension_test.go b/extension/observer/ecsobserver/extension_test.go index c6a1adc1d994..491dfc830ae5 100644 --- a/extension/observer/ecsobserver/extension_test.go +++ b/extension/observer/ecsobserver/extension_test.go @@ -14,7 +14,6 @@ import ( "go.opentelemetry.io/collector/component/componentstatus" "go.opentelemetry.io/collector/extension" "go.opentelemetry.io/collector/extension/extensiontest" - "go.opentelemetry.io/collector/pipeline" "go.uber.org/zap" "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver/internal/ecsmock" @@ -82,18 +81,10 @@ type nopHost struct { reportFunc func(event *componentstatus.Event) } -func (nh *nopHost) GetFactory(component.Kind, component.Type) component.Factory { - return nil -} - func (nh *nopHost) GetExtensions() map[component.ID]component.Component { return nil } -func (nh *nopHost) GetExportersWithSignal() map[pipeline.Signal]map[component.ID]component.Component { - return nil -} - func (nh *nopHost) Report(event *componentstatus.Event) { nh.reportFunc(event) } diff --git a/extension/observer/ecsobserver/go.mod b/extension/observer/ecsobserver/go.mod index b2c7ef7de011..c5539879449f 100644 --- a/extension/observer/ecsobserver/go.mod +++ b/extension/observer/ecsobserver/go.mod @@ -10,7 +10,6 @@ require ( go.opentelemetry.io/collector/component/componentstatus v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/confmap v1.17.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/extension v0.111.1-0.20241008154146-ea48c09c31ae - go.opentelemetry.io/collector/pipeline v0.111.1-0.20241008154146-ea48c09c31ae go.uber.org/goleak v1.3.0 go.uber.org/multierr v1.11.0 go.uber.org/zap v1.27.0 @@ -34,6 +33,7 @@ require ( go.opentelemetry.io/collector/config/configtelemetry v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/internal/globalsignal v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/pdata v1.17.1-0.20241008154146-ea48c09c31ae // indirect + go.opentelemetry.io/collector/pipeline v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/otel v1.30.0 // indirect go.opentelemetry.io/otel/metric v1.30.0 // indirect go.opentelemetry.io/otel/sdk v1.30.0 // indirect diff --git a/processor/k8sattributesprocessor/processor_test.go b/processor/k8sattributesprocessor/processor_test.go index d97721691c45..4f9e8701b348 100644 --- a/processor/k8sattributesprocessor/processor_test.go +++ b/processor/k8sattributesprocessor/processor_test.go @@ -22,7 +22,6 @@ import ( "go.opentelemetry.io/collector/pdata/plog" "go.opentelemetry.io/collector/pdata/pmetric" "go.opentelemetry.io/collector/pdata/ptrace" - "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/processor" "go.opentelemetry.io/collector/processor/processortest" conventions "go.opentelemetry.io/collector/semconv/v1.8.0" @@ -1570,18 +1569,10 @@ type nopHost struct { reportFunc func(event *componentstatus.Event) } -func (nh *nopHost) GetFactory(component.Kind, component.Type) component.Factory { - return nil -} - func (nh *nopHost) GetExtensions() map[component.ID]component.Component { return nil } -func (nh *nopHost) GetExportersWithSignal() map[pipeline.Signal]map[component.ID]component.Component { - return nil -} - func (nh *nopHost) Report(event *componentstatus.Event) { nh.reportFunc(event) } diff --git a/receiver/awss3receiver/go.mod b/receiver/awss3receiver/go.mod index 367b3da26481..e034d170d14b 100644 --- a/receiver/awss3receiver/go.mod +++ b/receiver/awss3receiver/go.mod @@ -15,7 +15,6 @@ require ( go.opentelemetry.io/collector/consumer v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/consumer/consumertest v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/pdata v1.17.1-0.20241008154146-ea48c09c31ae - go.opentelemetry.io/collector/pipeline v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/receiver v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/semconv v0.111.1-0.20241008154146-ea48c09c31ae go.uber.org/goleak v1.3.0 @@ -59,6 +58,7 @@ require ( go.opentelemetry.io/collector/consumer/consumerprofiles v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/internal/globalsignal v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/pdata/pprofile v0.111.1-0.20241008154146-ea48c09c31ae // indirect + go.opentelemetry.io/collector/pipeline v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/receiver/receiverprofiles v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/otel v1.30.0 // indirect go.opentelemetry.io/otel/metric v1.30.0 // indirect diff --git a/receiver/awss3receiver/receiver_test.go b/receiver/awss3receiver/receiver_test.go index d262e6f1d6cf..0ca8534e48d9 100644 --- a/receiver/awss3receiver/receiver_test.go +++ b/receiver/awss3receiver/receiver_test.go @@ -17,7 +17,6 @@ import ( "go.opentelemetry.io/collector/pdata/plog" "go.opentelemetry.io/collector/pdata/pmetric" "go.opentelemetry.io/collector/pdata/ptrace" - "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/receiver/receiverhelper" "go.opentelemetry.io/collector/receiver/receivertest" conventions "go.opentelemetry.io/collector/semconv/v1.22.0" @@ -68,26 +67,10 @@ type hostWithExtensions struct { extensions map[component.ID]component.Component } -func (h hostWithExtensions) Start(context.Context, component.Host) error { - panic("unsupported") -} - -func (h hostWithExtensions) Shutdown(context.Context) error { - panic("unsupported") -} - -func (h hostWithExtensions) GetFactory(component.Kind, component.Type) component.Factory { - panic("unsupported") -} - func (h hostWithExtensions) GetExtensions() map[component.ID]component.Component { return h.extensions } -func (h hostWithExtensions) GetExportersWithSignal() map[pipeline.Signal]map[component.ID]component.Component { - panic("unsupported") -} - type nonEncodingExtension struct{} func (e nonEncodingExtension) Start(_ context.Context, _ component.Host) error { diff --git a/receiver/carbonreceiver/go.mod b/receiver/carbonreceiver/go.mod index 8218044255c2..47f5dfbebe5b 100644 --- a/receiver/carbonreceiver/go.mod +++ b/receiver/carbonreceiver/go.mod @@ -12,7 +12,6 @@ require ( go.opentelemetry.io/collector/consumer v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/consumer/consumertest v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/pdata v1.17.1-0.20241008154146-ea48c09c31ae - go.opentelemetry.io/collector/pipeline v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/receiver v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/otel/sdk v1.30.0 go.opentelemetry.io/otel/trace v1.30.0 @@ -43,6 +42,7 @@ require ( go.opentelemetry.io/collector/featuregate v1.17.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/internal/globalsignal v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/pdata/pprofile v0.111.1-0.20241008154146-ea48c09c31ae // indirect + go.opentelemetry.io/collector/pipeline v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/receiver/receiverprofiles v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/otel v1.30.0 // indirect go.opentelemetry.io/otel/metric v1.30.0 // indirect diff --git a/receiver/carbonreceiver/receiver_test.go b/receiver/carbonreceiver/receiver_test.go index 746fdb6ed1f9..15b391ed14a8 100644 --- a/receiver/carbonreceiver/receiver_test.go +++ b/receiver/carbonreceiver/receiver_test.go @@ -18,7 +18,6 @@ import ( "go.opentelemetry.io/collector/config/confignet" "go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer/consumertest" - "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/receiver/receivertest" sdktrace "go.opentelemetry.io/otel/sdk/trace" "go.opentelemetry.io/otel/sdk/trace/tracetest" @@ -248,18 +247,10 @@ type nopHost struct { reportFunc func(event *componentstatus.Event) } -func (nh *nopHost) GetFactory(component.Kind, component.Type) component.Factory { - return nil -} - func (nh *nopHost) GetExtensions() map[component.ID]component.Component { return nil } -func (nh *nopHost) GetExportersWithSignal() map[pipeline.Signal]map[component.ID]component.Component { - return nil -} - func (nh *nopHost) Report(event *componentstatus.Event) { nh.reportFunc(event) } diff --git a/receiver/dockerstatsreceiver/integration_test.go b/receiver/dockerstatsreceiver/integration_test.go index 36f9632e3e7b..6c8b12e9234e 100644 --- a/receiver/dockerstatsreceiver/integration_test.go +++ b/receiver/dockerstatsreceiver/integration_test.go @@ -18,7 +18,6 @@ import ( "go.opentelemetry.io/collector/component/componentstatus" "go.opentelemetry.io/collector/consumer/consumertest" "go.opentelemetry.io/collector/pdata/pmetric" - "go.opentelemetry.io/collector/pipeline" rcvr "go.opentelemetry.io/collector/receiver" "go.opentelemetry.io/collector/receiver/receivertest" conventions "go.opentelemetry.io/collector/semconv/v1.6.1" @@ -162,18 +161,10 @@ type nopHost struct { reportFunc func(event *componentstatus.Event) } -func (nh *nopHost) GetFactory(component.Kind, component.Type) component.Factory { - return nil -} - func (nh *nopHost) GetExtensions() map[component.ID]component.Component { return nil } -func (nh *nopHost) GetExportersWithSignal() map[pipeline.Signal]map[component.ID]component.Component { - return nil -} - func (nh *nopHost) Report(event *componentstatus.Event) { nh.reportFunc(event) } diff --git a/receiver/receivercreator/observerhandler_test.go b/receiver/receivercreator/observerhandler_test.go index ca33ad91101e..3968402f58e9 100644 --- a/receiver/receivercreator/observerhandler_test.go +++ b/receiver/receivercreator/observerhandler_test.go @@ -14,7 +14,6 @@ import ( "go.opentelemetry.io/collector/consumer/consumertest" "go.opentelemetry.io/collector/otelcol" "go.opentelemetry.io/collector/otelcol/otelcoltest" - "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/receiver/receivertest" "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer" @@ -466,11 +465,6 @@ func (m *mockHost) GetExtensions() map[component.ID]component.Component { return nil } -func (m *mockHost) GetExportersWithSignal() map[pipeline.Signal]map[component.ID]component.Component { - m.t.Fatal("GetExporters") - return nil -} - func newMockRunner(t *testing.T) *mockRunner { cs := receivertest.NewNopSettings() return &mockRunner{ @@ -512,18 +506,10 @@ type reportingHost struct { reportFunc func(event *componentstatus.Event) } -func (nh *reportingHost) GetFactory(component.Kind, component.Type) component.Factory { - return nil -} - func (nh *reportingHost) GetExtensions() map[component.ID]component.Component { return nil } -func (nh *reportingHost) GetExportersWithSignal() map[pipeline.Signal]map[component.ID]component.Component { - return nil -} - func (nh *reportingHost) Report(event *componentstatus.Event) { nh.reportFunc(event) } diff --git a/receiver/sapmreceiver/trace_receiver_test.go b/receiver/sapmreceiver/trace_receiver_test.go index d2cf1ab12732..29d0d276571f 100644 --- a/receiver/sapmreceiver/trace_receiver_test.go +++ b/receiver/sapmreceiver/trace_receiver_test.go @@ -29,7 +29,6 @@ import ( "go.opentelemetry.io/collector/consumer/consumertest" "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/ptrace" - "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/receiver" "go.opentelemetry.io/collector/receiver/receivertest" conventions "go.opentelemetry.io/collector/semconv/v1.27.0" @@ -480,18 +479,10 @@ type nopHost struct { reportFunc func(event *componentstatus.Event) } -func (nh *nopHost) GetFactory(component.Kind, component.Type) component.Factory { - return nil -} - func (nh *nopHost) GetExtensions() map[component.ID]component.Component { return nil } -func (nh *nopHost) GetExportersWithSignal() map[pipeline.Signal]map[component.ID]component.Component { - return nil -} - func (nh *nopHost) Report(event *componentstatus.Event) { nh.reportFunc(event) } diff --git a/receiver/signalfxreceiver/receiver_test.go b/receiver/signalfxreceiver/receiver_test.go index 5574ebe16c34..4fd8322694f5 100644 --- a/receiver/signalfxreceiver/receiver_test.go +++ b/receiver/signalfxreceiver/receiver_test.go @@ -32,7 +32,6 @@ import ( "go.opentelemetry.io/collector/exporter/exportertest" "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/pmetric" - "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/receiver/receivertest" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter" @@ -1067,18 +1066,10 @@ type nopHost struct { reportFunc func(event *componentstatus.Event) } -func (nh *nopHost) GetFactory(component.Kind, component.Type) component.Factory { - return nil -} - func (nh *nopHost) GetExtensions() map[component.ID]component.Component { return nil } -func (nh *nopHost) GetExportersWithSignal() map[pipeline.Signal]map[component.ID]component.Component { - return nil -} - func (nh *nopHost) Report(event *componentstatus.Event) { nh.reportFunc(event) } diff --git a/receiver/splunkhecreceiver/go.mod b/receiver/splunkhecreceiver/go.mod index 4c2cb33c5801..57c823246219 100644 --- a/receiver/splunkhecreceiver/go.mod +++ b/receiver/splunkhecreceiver/go.mod @@ -22,7 +22,6 @@ require ( go.opentelemetry.io/collector/consumer/consumertest v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/exporter v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/pdata v1.17.1-0.20241008154146-ea48c09c31ae - go.opentelemetry.io/collector/pipeline v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/receiver v0.111.1-0.20241008154146-ea48c09c31ae go.opentelemetry.io/collector/semconv v0.111.1-0.20241008154146-ea48c09c31ae go.uber.org/goleak v1.3.0 @@ -71,6 +70,7 @@ require ( go.opentelemetry.io/collector/featuregate v1.17.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/internal/globalsignal v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/pdata/pprofile v0.111.1-0.20241008154146-ea48c09c31ae // indirect + go.opentelemetry.io/collector/pipeline v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/collector/receiver/receiverprofiles v0.111.1-0.20241008154146-ea48c09c31ae // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 // indirect go.opentelemetry.io/otel v1.30.0 // indirect diff --git a/receiver/splunkhecreceiver/receiver_test.go b/receiver/splunkhecreceiver/receiver_test.go index d74ad78977b1..3c7351aedd0e 100644 --- a/receiver/splunkhecreceiver/receiver_test.go +++ b/receiver/splunkhecreceiver/receiver_test.go @@ -30,7 +30,6 @@ import ( "go.opentelemetry.io/collector/exporter/exportertest" "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/plog" - "go.opentelemetry.io/collector/pipeline" "go.opentelemetry.io/collector/receiver/receivertest" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/splunkhecexporter" @@ -2109,18 +2108,10 @@ type nopHost struct { reportFunc func(event *componentstatus.Event) } -func (nh *nopHost) GetFactory(component.Kind, component.Type) component.Factory { - return nil -} - func (nh *nopHost) GetExtensions() map[component.ID]component.Component { return nil } -func (nh *nopHost) GetExportersWithSignal() map[pipeline.Signal]map[component.ID]component.Component { - return nil -} - func (nh *nopHost) Report(event *componentstatus.Event) { nh.reportFunc(event) } From d20c3f8a7d61d093b8fa0494d9bd765e31c03d97 Mon Sep 17 00:00:00 2001 From: lkwronski <45148751+lkwronski@users.noreply.github.com> Date: Mon, 14 Oct 2024 22:08:22 +0200 Subject: [PATCH 05/10] Allow indexing string slice type (#35581) **Description:** Allow indexing string slice type. I can also add support for other types such as []int if needed. Let me know if this approach is good enough. I haven't found a more generic solution, thank you for any feedback. **Link to tracking Issue:** Fixes #29441 **Testing:** Unit test **Documentation:** --- .chloggen/lkwronski.issue-29441-slice.yaml | 27 +++++++++++++++++++ pkg/ottl/e2e/e2e_test.go | 7 +++++ pkg/ottl/expression.go | 18 ++++++++++--- pkg/ottl/expression_test.go | 30 ++++++++++++++++++++++ 4 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 .chloggen/lkwronski.issue-29441-slice.yaml diff --git a/.chloggen/lkwronski.issue-29441-slice.yaml b/.chloggen/lkwronski.issue-29441-slice.yaml new file mode 100644 index 000000000000..8d7f4e1908e3 --- /dev/null +++ b/.chloggen/lkwronski.issue-29441-slice.yaml @@ -0,0 +1,27 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: bug_fix + +# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver) +component: pkg/ottl + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Allow indexing string slice type + +# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. +issues: [29441] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: + +# If your change doesn't affect end users or the exported elements of any package, +# you should instead start your pull request title with [chore] or use the "Skip Changelog" label. +# Optional: The change log or logs in which this entry should be included. +# e.g. '[user]' or '[user, api]' +# Include 'user' if the change is relevant to end users. +# Include 'api' if there is a change to a library API. +# Default: '[user]' +change_logs: [user] diff --git a/pkg/ottl/e2e/e2e_test.go b/pkg/ottl/e2e/e2e_test.go index dcf89bd0c5e2..eab4906aaa00 100644 --- a/pkg/ottl/e2e/e2e_test.go +++ b/pkg/ottl/e2e/e2e_test.go @@ -1010,6 +1010,13 @@ func Test_e2e_ottl_features(t *testing.T) { tCtx.GetLogRecord().Attributes().PutBool("isMap", true) }, }, + { + name: "extract value from Split function result slice of type []string", + statement: `set(attributes["my.environment.2"], Split(resource.attributes["host.name"],"h")[1])`, + want: func(tCtx ottllog.TransformContext) { + tCtx.GetLogRecord().Attributes().PutStr("my.environment.2", "ost") + }, + }, } for _, tt := range tests { diff --git a/pkg/ottl/expression.go b/pkg/ottl/expression.go index ca3671e4ffa5..ea26f0b456ca 100644 --- a/pkg/ottl/expression.go +++ b/pkg/ottl/expression.go @@ -111,10 +111,15 @@ func (g exprGetter[K]) Get(ctx context.Context, tCtx K) (any, error) { } result = ottlcommon.GetValue(r.At(int(*k.Int))) case []any: - if int(*k.Int) >= len(r) || int(*k.Int) < 0 { - return nil, fmt.Errorf("index %v out of bounds", *k.Int) + result, err = getElementByIndex(r, k.Int) + if err != nil { + return nil, err + } + case []string: + result, err = getElementByIndex(r, k.Int) + if err != nil { + return nil, err } - result = r[*k.Int] default: return nil, fmt.Errorf("type, %T, does not support int indexing", result) } @@ -125,6 +130,13 @@ func (g exprGetter[K]) Get(ctx context.Context, tCtx K) (any, error) { return result, nil } +func getElementByIndex[T any](r []T, idx *int64) (any, error) { + if int(*idx) >= len(r) || int(*idx) < 0 { + return nil, fmt.Errorf("index %v out of bounds", *idx) + } + return r[*idx], nil +} + type listGetter[K any] struct { slice []Getter[K] } diff --git a/pkg/ottl/expression_test.go b/pkg/ottl/expression_test.go index 4aa426e558b3..ed6ccaaaadd2 100644 --- a/pkg/ottl/expression_test.go +++ b/pkg/ottl/expression_test.go @@ -59,6 +59,16 @@ func basicSlice() (ExprFunc[any], error) { }, nil } +func basicSliceString() (ExprFunc[any], error) { + return func(_ context.Context, _ any) (any, error) { + return []any{ + []string{ + "pass", + }, + }, nil + }, nil +} + func Test_newGetter(t *testing.T) { tests := []struct { name string @@ -237,6 +247,25 @@ func Test_newGetter(t *testing.T) { }, want: "pass", }, + { + name: "function call nested SliceString", + val: value{ + Literal: &mathExprLiteral{ + Converter: &converter{ + Function: "SliceString", + Keys: []key{ + { + Int: ottltest.Intp(0), + }, + { + Int: ottltest.Intp(0), + }, + }, + }, + }, + }, + want: "pass", + }, { name: "enum", val: value{ @@ -532,6 +561,7 @@ func Test_newGetter(t *testing.T) { createFactory("Map", &struct{}{}, basicMap), createFactory("PSlice", &struct{}{}, pslice), createFactory("Slice", &struct{}{}, basicSlice), + createFactory("SliceString", &struct{}{}, basicSliceString), ) p, _ := NewParser[any]( From 2295a097522e0326c5e31128c4361a6f3e63c058 Mon Sep 17 00:00:00 2001 From: Bogdan Drutu Date: Mon, 14 Oct 2024 15:36:44 -0700 Subject: [PATCH 06/10] [chore] Replace usage of deprecated GetExportersWithSignal with GetExporters (#35775) This unblocks https://github.com/open-telemetry/opentelemetry-collector/pull/11444 Signed-off-by: Bogdan Drutu --- processor/routingprocessor/factory_test.go | 2 +- processor/routingprocessor/logs.go | 4 ++-- processor/routingprocessor/metrics.go | 2 +- processor/routingprocessor/traces.go | 2 +- receiver/k8sclusterreceiver/factory_test.go | 2 +- receiver/k8sclusterreceiver/receiver.go | 4 ++-- receiver/k8sclusterreceiver/receiver_test.go | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/processor/routingprocessor/factory_test.go b/processor/routingprocessor/factory_test.go index 9500e97b4bdf..32d274de2666 100644 --- a/processor/routingprocessor/factory_test.go +++ b/processor/routingprocessor/factory_test.go @@ -220,7 +220,7 @@ func newMockHost(exps map[pipeline.Signal]map[component.ID]component.Component) } } -func (m *mockHost) GetExportersWithSignal() map[pipeline.Signal]map[component.ID]component.Component { +func (m *mockHost) GetExporters() map[pipeline.Signal]map[component.ID]component.Component { return m.exps } diff --git a/processor/routingprocessor/logs.go b/processor/routingprocessor/logs.go index 65bdb4f168f8..2a613e1cfdaa 100644 --- a/processor/routingprocessor/logs.go +++ b/processor/routingprocessor/logs.go @@ -63,7 +63,7 @@ func newLogProcessor(settings component.TelemetrySettings, config component.Conf } type getExporters interface { - GetExportersWithSignal() map[pipeline.Signal]map[component.ID]component.Component + GetExporters() map[pipeline.Signal]map[component.ID]component.Component } func (p *logProcessor) Start(_ context.Context, host component.Host) error { @@ -71,7 +71,7 @@ func (p *logProcessor) Start(_ context.Context, host component.Host) error { if !ok { return fmt.Errorf("unable to get exporters") } - err := p.router.registerExporters(ge.GetExportersWithSignal()[pipeline.SignalLogs]) + err := p.router.registerExporters(ge.GetExporters()[pipeline.SignalLogs]) if err != nil { return err } diff --git a/processor/routingprocessor/metrics.go b/processor/routingprocessor/metrics.go index c48d96ab958e..a82203205ac9 100644 --- a/processor/routingprocessor/metrics.go +++ b/processor/routingprocessor/metrics.go @@ -67,7 +67,7 @@ func (p *metricsProcessor) Start(_ context.Context, host component.Host) error { if !ok { return fmt.Errorf("unable to get exporters") } - err := p.router.registerExporters(ge.GetExportersWithSignal()[pipeline.SignalMetrics]) + err := p.router.registerExporters(ge.GetExporters()[pipeline.SignalMetrics]) if err != nil { return err } diff --git a/processor/routingprocessor/traces.go b/processor/routingprocessor/traces.go index 84fcface4327..7c00e0cf65f3 100644 --- a/processor/routingprocessor/traces.go +++ b/processor/routingprocessor/traces.go @@ -68,7 +68,7 @@ func (p *tracesProcessor) Start(_ context.Context, host component.Host) error { if !ok { return fmt.Errorf("unable to get exporters") } - err := p.router.registerExporters(ge.GetExportersWithSignal()[pipeline.SignalTraces]) + err := p.router.registerExporters(ge.GetExporters()[pipeline.SignalTraces]) if err != nil { return err } diff --git a/receiver/k8sclusterreceiver/factory_test.go b/receiver/k8sclusterreceiver/factory_test.go index 5243efb3ed6b..f78647de1be3 100644 --- a/receiver/k8sclusterreceiver/factory_test.go +++ b/receiver/k8sclusterreceiver/factory_test.go @@ -108,7 +108,7 @@ func newNopHostWithExporters() component.Host { return &nopHostWithExporters{Host: newNopHost()} } -func (n *nopHostWithExporters) GetExportersWithSignal() map[pipeline.Signal]map[component.ID]component.Component { +func (n *nopHostWithExporters) GetExporters() map[pipeline.Signal]map[component.ID]component.Component { return map[pipeline.Signal]map[component.ID]component.Component{ pipeline.SignalMetrics: { component.MustNewIDWithName("nop", "withoutmetadata"): MockExporter{}, diff --git a/receiver/k8sclusterreceiver/receiver.go b/receiver/k8sclusterreceiver/receiver.go index 6849395ef64e..ae9c5f75ca8b 100644 --- a/receiver/k8sclusterreceiver/receiver.go +++ b/receiver/k8sclusterreceiver/receiver.go @@ -40,7 +40,7 @@ type kubernetesReceiver struct { } type getExporters interface { - GetExportersWithSignal() map[pipeline.Signal]map[component.ID]component.Component + GetExporters() map[pipeline.Signal]map[component.ID]component.Component } func (kr *kubernetesReceiver) Start(ctx context.Context, host component.Host) error { @@ -54,7 +54,7 @@ func (kr *kubernetesReceiver) Start(ctx context.Context, host component.Host) er if !ok { return fmt.Errorf("unable to get exporters") } - exporters := ge.GetExportersWithSignal() + exporters := ge.GetExporters() if err := kr.resourceWatcher.setupMetadataExporters( exporters[pipeline.SignalMetrics], kr.config.MetadataExporters); err != nil { diff --git a/receiver/k8sclusterreceiver/receiver_test.go b/receiver/k8sclusterreceiver/receiver_test.go index 406f9107701b..533a625ea713 100644 --- a/receiver/k8sclusterreceiver/receiver_test.go +++ b/receiver/k8sclusterreceiver/receiver_test.go @@ -33,7 +33,7 @@ type nopHost struct { component.Host } -func (nh *nopHost) GetExportersWithSignal() map[pipeline.Signal]map[component.ID]component.Component { +func (nh *nopHost) GetExporters() map[pipeline.Signal]map[component.ID]component.Component { return nil } From 53b5dd761fce9d6e7a543534824695da06b0d1ce Mon Sep 17 00:00:00 2001 From: Antoine Toulme Date: Mon, 14 Oct 2024 17:40:35 -0700 Subject: [PATCH 07/10] Move rmfitzpatrick to emeritus (#35772) Thanks @rmfitzpatrick for your contributions to the collector! After discussing a bit with Ryan, it appears the best route is to move him to emeritus and explicitly make way for new codeowners to take over and help. @rmfitzpatrick please review and approve. --------- Co-authored-by: Dmitrii Anoshin Co-authored-by: Sean Marciniak <30928402+MovieStoreGuy@users.noreply.github.com> --- .github/CODEOWNERS | 22 +++++++++---------- extension/httpforwarderextension/README.md | 3 ++- .../httpforwarderextension/metadata.yaml | 3 ++- extension/observer/ecsobserver/README.md | 3 ++- extension/observer/ecsobserver/metadata.yaml | 3 ++- extension/observer/ecstaskobserver/README.md | 3 ++- .../observer/ecstaskobserver/metadata.yaml | 3 ++- extension/observer/k8sobserver/README.md | 3 ++- extension/observer/k8sobserver/metadata.yaml | 3 ++- extension/observer/metadata.yaml | 3 ++- internal/docker/metadata.yaml | 3 ++- pkg/experimentalmetricmetadata/metadata.yaml | 3 ++- processor/k8sattributesprocessor/README.md | 3 ++- .../k8sattributesprocessor/metadata.yaml | 3 ++- receiver/dockerstatsreceiver/README.md | 3 ++- receiver/dockerstatsreceiver/metadata.yaml | 3 ++- receiver/jmxreceiver/README.md | 3 ++- receiver/jmxreceiver/metadata.yaml | 3 ++- receiver/receivercreator/README.md | 3 ++- receiver/receivercreator/metadata.yaml | 3 ++- 20 files changed, 49 insertions(+), 30 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 5087e38e9272..956e8de1e395 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -100,16 +100,16 @@ extension/googleclientauthextension/ @open-teleme extension/headerssetterextension/ @open-telemetry/collector-contrib-approvers @jpkrohling extension/healthcheckextension/ @open-telemetry/collector-contrib-approvers @jpkrohling extension/healthcheckv2extension/ @open-telemetry/collector-contrib-approvers @jpkrohling @mwear -extension/httpforwarderextension/ @open-telemetry/collector-contrib-approvers @atoulme @rmfitzpatrick +extension/httpforwarderextension/ @open-telemetry/collector-contrib-approvers @atoulme extension/jaegerremotesampling/ @open-telemetry/collector-contrib-approvers @yurishkuro @frzifus extension/oauth2clientauthextension/ @open-telemetry/collector-contrib-approvers @pavankrish123 @jpkrohling -extension/observer/ @open-telemetry/collector-contrib-approvers @dmitryax @rmfitzpatrick +extension/observer/ @open-telemetry/collector-contrib-approvers @dmitryax extension/observer/cfgardenobserver/ @open-telemetry/collector-contrib-approvers @crobert-1 @cemdk @tomasmota @m1rp @jriguera extension/observer/dockerobserver/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy -extension/observer/ecsobserver/ @open-telemetry/collector-contrib-approvers @dmitryax @rmfitzpatrick -extension/observer/ecstaskobserver/ @open-telemetry/collector-contrib-approvers @rmfitzpatrick +extension/observer/ecsobserver/ @open-telemetry/collector-contrib-approvers @dmitryax +extension/observer/ecstaskobserver/ @open-telemetry/collector-contrib-approvers extension/observer/hostobserver/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy -extension/observer/k8sobserver/ @open-telemetry/collector-contrib-approvers @rmfitzpatrick @dmitryax @ChrsMark +extension/observer/k8sobserver/ @open-telemetry/collector-contrib-approvers @dmitryax @ChrsMark extension/oidcauthextension/ @open-telemetry/collector-contrib-approvers @jpkrohling extension/opampcustommessages/ @open-telemetry/collector-contrib-approvers @BinaryFissionGames @evan-bradley extension/opampextension/ @open-telemetry/collector-contrib-approvers @portertech @evan-bradley @tigrannajaryan @BinaryFissionGames @@ -126,7 +126,7 @@ extension/sumologicextension/ @open-teleme internal/aws/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @mxiamxia internal/collectd/ @open-telemetry/collector-contrib-approvers @atoulme internal/coreinternal/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers -internal/docker/ @open-telemetry/collector-contrib-approvers @rmfitzpatrick @jamesmoessis +internal/docker/ @open-telemetry/collector-contrib-approvers @jamesmoessis internal/exp/metrics/ @open-telemetry/collector-contrib-approvers @sh0rez @RichieSams internal/filter/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers internal/grpcutil/ @open-telemetry/collector-contrib-approvers @jmacd @moh-osman3 @lquerel @@ -146,7 +146,7 @@ internal/tools/ @open-teleme pkg/batchperresourceattr/ @open-telemetry/collector-contrib-approvers @atoulme @dmitryax pkg/batchpersignal/ @open-telemetry/collector-contrib-approvers @jpkrohling pkg/datadog/ @open-telemetry/collector-contrib-approvers @mx-psi @dineshg13 @liustanley @songy23 @mackjmr @ankitpatel96 -pkg/experimentalmetricmetadata/ @open-telemetry/collector-contrib-approvers @rmfitzpatrick +pkg/experimentalmetricmetadata/ @open-telemetry/collector-contrib-approvers @dmitryax pkg/golden/ @open-telemetry/collector-contrib-approvers @djaglowski @atoulme pkg/kafka/topic/ @open-telemetry/collector-contrib-approvers @pavolloffay @MovieStoreGuy pkg/ottl/ @open-telemetry/collector-contrib-approvers @TylerHelmuth @kentquirk @bogdandrutu @evan-bradley @@ -179,7 +179,7 @@ processor/geoipprocessor/ @open-teleme processor/groupbyattrsprocessor/ @open-telemetry/collector-contrib-approvers @rnishtala-sumo processor/groupbytraceprocessor/ @open-telemetry/collector-contrib-approvers @jpkrohling processor/intervalprocessor/ @open-telemetry/collector-contrib-approvers @RichieSams @sh0rez @djaglowski -processor/k8sattributesprocessor/ @open-telemetry/collector-contrib-approvers @dmitryax @rmfitzpatrick @fatsheep9146 @TylerHelmuth +processor/k8sattributesprocessor/ @open-telemetry/collector-contrib-approvers @dmitryax @fatsheep9146 @TylerHelmuth processor/logdedupprocessor/ @open-telemetry/collector-contrib-approvers @BinaryFissionGames @MikeGoldsmith @djaglowski processor/logstransformprocessor/ @open-telemetry/collector-contrib-approvers @djaglowski @dehaansa processor/metricsgenerationprocessor/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @@ -232,7 +232,7 @@ receiver/cloudfoundryreceiver/ @open-teleme receiver/collectdreceiver/ @open-telemetry/collector-contrib-approvers @atoulme receiver/couchdbreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski receiver/datadogreceiver/ @open-telemetry/collector-contrib-approvers @boostchicken @gouthamve @jpkrohling @MovieStoreGuy -receiver/dockerstatsreceiver/ @open-telemetry/collector-contrib-approvers @rmfitzpatrick @jamesmoessis +receiver/dockerstatsreceiver/ @open-telemetry/collector-contrib-approvers @jamesmoessis receiver/elasticsearchreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @BinaryFissionGames receiver/expvarreceiver/ @open-telemetry/collector-contrib-approvers @jamesmoessis @MovieStoreGuy receiver/filelogreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @@ -248,7 +248,7 @@ receiver/httpcheckreceiver/ @open-teleme receiver/iisreceiver/ @open-telemetry/collector-contrib-approvers @Mrod1598 @pjanotti receiver/influxdbreceiver/ @open-telemetry/collector-contrib-approvers @jacobmarble receiver/jaegerreceiver/ @open-telemetry/collector-contrib-approvers @yurishkuro -receiver/jmxreceiver/ @open-telemetry/collector-contrib-approvers @rmfitzpatrick +receiver/jmxreceiver/ @open-telemetry/collector-contrib-approvers receiver/journaldreceiver/ @open-telemetry/collector-contrib-approvers @sumo-drosiek @djaglowski receiver/k8sclusterreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @TylerHelmuth @povilasv receiver/k8seventsreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @TylerHelmuth @@ -277,7 +277,7 @@ receiver/pulsarreceiver/ @open-teleme receiver/purefareceiver/ @open-telemetry/collector-contrib-approvers @jpkrohling @dgoscn @chrroberts-pure receiver/purefbreceiver/ @open-telemetry/collector-contrib-approvers @jpkrohling @dgoscn @chrroberts-pure receiver/rabbitmqreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @cpheps -receiver/receivercreator/ @open-telemetry/collector-contrib-approvers @rmfitzpatrick +receiver/receivercreator/ @open-telemetry/collector-contrib-approvers @dmitryax receiver/redisreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @hughesjj receiver/riakreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @armstrmi receiver/saphanareceiver/ @open-telemetry/collector-contrib-approvers @dehaansa diff --git a/extension/httpforwarderextension/README.md b/extension/httpforwarderextension/README.md index bde8f0f080db..e492e003f13d 100644 --- a/extension/httpforwarderextension/README.md +++ b/extension/httpforwarderextension/README.md @@ -5,7 +5,8 @@ | Stability | [beta] | | Distributions | [] | | Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aextension%2Fhttpforwarder%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aextension%2Fhttpforwarder) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aextension%2Fhttpforwarder%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aextension%2Fhttpforwarder) | -| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@atoulme](https://www.github.com/atoulme), [@rmfitzpatrick](https://www.github.com/rmfitzpatrick) | +| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@atoulme](https://www.github.com/atoulme) | +| Emeritus | [@rmfitzpatrick](https://www.github.com/rmfitzpatrick) | [beta]: https://github.com/open-telemetry/opentelemetry-collector#beta diff --git a/extension/httpforwarderextension/metadata.yaml b/extension/httpforwarderextension/metadata.yaml index bab8e2d3a50e..0ece195860de 100644 --- a/extension/httpforwarderextension/metadata.yaml +++ b/extension/httpforwarderextension/metadata.yaml @@ -6,7 +6,8 @@ status: beta: [extension] distributions: [] codeowners: - active: [atoulme, rmfitzpatrick] + active: [atoulme] + emeritus: [rmfitzpatrick] tests: config: diff --git a/extension/observer/ecsobserver/README.md b/extension/observer/ecsobserver/README.md index 9d0bfc4462c4..089db180ad62 100644 --- a/extension/observer/ecsobserver/README.md +++ b/extension/observer/ecsobserver/README.md @@ -6,7 +6,8 @@ | Stability | [beta] | | Distributions | [contrib] | | Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aextension%2Fecsobserver%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aextension%2Fecsobserver) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aextension%2Fecsobserver%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aextension%2Fecsobserver) | -| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@dmitryax](https://www.github.com/dmitryax), [@rmfitzpatrick](https://www.github.com/rmfitzpatrick) | +| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@dmitryax](https://www.github.com/dmitryax) | +| Emeritus | [@rmfitzpatrick](https://www.github.com/rmfitzpatrick) | [beta]: https://github.com/open-telemetry/opentelemetry-collector#beta [contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib diff --git a/extension/observer/ecsobserver/metadata.yaml b/extension/observer/ecsobserver/metadata.yaml index 20ee26949e48..e99b78c348df 100644 --- a/extension/observer/ecsobserver/metadata.yaml +++ b/extension/observer/ecsobserver/metadata.yaml @@ -6,7 +6,8 @@ status: beta: [extension] distributions: [contrib] codeowners: - active: [dmitryax, rmfitzpatrick] + active: [dmitryax] + emeritus: [rmfitzpatrick] # TODO: Update the extension to make the tests pass tests: diff --git a/extension/observer/ecstaskobserver/README.md b/extension/observer/ecstaskobserver/README.md index d0757fc79a7c..dd6717ae8a97 100644 --- a/extension/observer/ecstaskobserver/README.md +++ b/extension/observer/ecstaskobserver/README.md @@ -6,7 +6,8 @@ | Stability | [beta] | | Distributions | [contrib] | | Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aextension%2Fecstaskobserver%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aextension%2Fecstaskobserver) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aextension%2Fecstaskobserver%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aextension%2Fecstaskobserver) | -| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@rmfitzpatrick](https://www.github.com/rmfitzpatrick) | +| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | | +| Emeritus | [@rmfitzpatrick](https://www.github.com/rmfitzpatrick) | [beta]: https://github.com/open-telemetry/opentelemetry-collector#beta [contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib diff --git a/extension/observer/ecstaskobserver/metadata.yaml b/extension/observer/ecstaskobserver/metadata.yaml index 0177523ca378..f3c30a83df46 100644 --- a/extension/observer/ecstaskobserver/metadata.yaml +++ b/extension/observer/ecstaskobserver/metadata.yaml @@ -6,7 +6,8 @@ status: beta: [extension] distributions: [contrib] codeowners: - active: [rmfitzpatrick] + active: [] + emeritus: [rmfitzpatrick] # TODO: Update the extension to make the tests pass tests: diff --git a/extension/observer/k8sobserver/README.md b/extension/observer/k8sobserver/README.md index 9b3856b042f3..860726cb64fe 100644 --- a/extension/observer/k8sobserver/README.md +++ b/extension/observer/k8sobserver/README.md @@ -6,7 +6,8 @@ | Stability | [alpha] | | Distributions | [contrib] | | Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aextension%2Fk8sobserver%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aextension%2Fk8sobserver) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aextension%2Fk8sobserver%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aextension%2Fk8sobserver) | -| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@rmfitzpatrick](https://www.github.com/rmfitzpatrick), [@dmitryax](https://www.github.com/dmitryax), [@ChrsMark](https://www.github.com/ChrsMark) | +| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@dmitryax](https://www.github.com/dmitryax), [@ChrsMark](https://www.github.com/ChrsMark) | +| Emeritus | [@rmfitzpatrick](https://www.github.com/rmfitzpatrick) | [alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha [contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib diff --git a/extension/observer/k8sobserver/metadata.yaml b/extension/observer/k8sobserver/metadata.yaml index 4c459bc4c9ed..4b2b77b8a069 100644 --- a/extension/observer/k8sobserver/metadata.yaml +++ b/extension/observer/k8sobserver/metadata.yaml @@ -6,7 +6,8 @@ status: alpha: [extension] distributions: [contrib] codeowners: - active: [rmfitzpatrick, dmitryax, ChrsMark] + active: [dmitryax, ChrsMark] + emeritus: [rmfitzpatrick] # TODO: Update the extension to make the tests pass tests: diff --git a/extension/observer/metadata.yaml b/extension/observer/metadata.yaml index 66a66302e5f1..7509bde48a39 100644 --- a/extension/observer/metadata.yaml +++ b/extension/observer/metadata.yaml @@ -1,3 +1,4 @@ status: codeowners: - active: [dmitryax, rmfitzpatrick] \ No newline at end of file + active: [dmitryax] + emeritus: [rmfitzpatrick] \ No newline at end of file diff --git a/internal/docker/metadata.yaml b/internal/docker/metadata.yaml index 5407e2033345..47d1f19fe571 100644 --- a/internal/docker/metadata.yaml +++ b/internal/docker/metadata.yaml @@ -1,3 +1,4 @@ status: codeowners: - active: [rmfitzpatrick, jamesmoessis] \ No newline at end of file + active: [jamesmoessis, moviestoreguy] + emeritus: [rmfitzpatrick] \ No newline at end of file diff --git a/pkg/experimentalmetricmetadata/metadata.yaml b/pkg/experimentalmetricmetadata/metadata.yaml index e2972c99bb93..7509bde48a39 100644 --- a/pkg/experimentalmetricmetadata/metadata.yaml +++ b/pkg/experimentalmetricmetadata/metadata.yaml @@ -1,3 +1,4 @@ status: codeowners: - active: [rmfitzpatrick] \ No newline at end of file + active: [dmitryax] + emeritus: [rmfitzpatrick] \ No newline at end of file diff --git a/processor/k8sattributesprocessor/README.md b/processor/k8sattributesprocessor/README.md index 1481a6eb81e2..7f50b3ff15e8 100644 --- a/processor/k8sattributesprocessor/README.md +++ b/processor/k8sattributesprocessor/README.md @@ -5,7 +5,8 @@ | Stability | [beta]: logs, metrics, traces | | Distributions | [contrib] | | Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aprocessor%2Fk8sattributes%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aprocessor%2Fk8sattributes) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aprocessor%2Fk8sattributes%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aprocessor%2Fk8sattributes) | -| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@dmitryax](https://www.github.com/dmitryax), [@rmfitzpatrick](https://www.github.com/rmfitzpatrick), [@fatsheep9146](https://www.github.com/fatsheep9146), [@TylerHelmuth](https://www.github.com/TylerHelmuth) | +| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@dmitryax](https://www.github.com/dmitryax), [@fatsheep9146](https://www.github.com/fatsheep9146), [@TylerHelmuth](https://www.github.com/TylerHelmuth) | +| Emeritus | [@rmfitzpatrick](https://www.github.com/rmfitzpatrick) | [beta]: https://github.com/open-telemetry/opentelemetry-collector#beta [contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib diff --git a/processor/k8sattributesprocessor/metadata.yaml b/processor/k8sattributesprocessor/metadata.yaml index d9b0494ab6c1..e0159cccb1c2 100644 --- a/processor/k8sattributesprocessor/metadata.yaml +++ b/processor/k8sattributesprocessor/metadata.yaml @@ -6,7 +6,8 @@ status: beta: [logs, metrics, traces] distributions: [contrib] codeowners: - active: [dmitryax, rmfitzpatrick, fatsheep9146, TylerHelmuth] + active: [dmitryax, fatsheep9146, TylerHelmuth] + emeritus: [rmfitzpatrick] # resource attributes are exposed through a different configuration interface (extract::metadata). resource_attributes: k8s.cluster.uid: diff --git a/receiver/dockerstatsreceiver/README.md b/receiver/dockerstatsreceiver/README.md index f7de56c72f7d..88cd18ce2a3a 100644 --- a/receiver/dockerstatsreceiver/README.md +++ b/receiver/dockerstatsreceiver/README.md @@ -7,7 +7,8 @@ | Unsupported Platforms | darwin, windows | | Distributions | [contrib] | | Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Areceiver%2Fdockerstats%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Areceiver%2Fdockerstats) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Areceiver%2Fdockerstats%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Areceiver%2Fdockerstats) | -| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@rmfitzpatrick](https://www.github.com/rmfitzpatrick), [@jamesmoessis](https://www.github.com/jamesmoessis) | +| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@jamesmoessis](https://www.github.com/jamesmoessis) | +| Emeritus | [@rmfitzpatrick](https://www.github.com/rmfitzpatrick) | [alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha [contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib diff --git a/receiver/dockerstatsreceiver/metadata.yaml b/receiver/dockerstatsreceiver/metadata.yaml index c0167c309655..6c02f49cbaf8 100644 --- a/receiver/dockerstatsreceiver/metadata.yaml +++ b/receiver/dockerstatsreceiver/metadata.yaml @@ -6,7 +6,8 @@ status: alpha: [metrics] distributions: [contrib] codeowners: - active: [rmfitzpatrick, jamesmoessis] + active: [jamesmoessis] + emeritus: [rmfitzpatrick] unsupported_platforms: [darwin, windows] sem_conv_version: 1.6.1 diff --git a/receiver/jmxreceiver/README.md b/receiver/jmxreceiver/README.md index 58536d93b4a6..dae79fbc2932 100644 --- a/receiver/jmxreceiver/README.md +++ b/receiver/jmxreceiver/README.md @@ -6,7 +6,8 @@ | Stability | [alpha]: metrics | | Distributions | [contrib] | | Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Areceiver%2Fjmx%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Areceiver%2Fjmx) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Areceiver%2Fjmx%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Areceiver%2Fjmx) | -| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@rmfitzpatrick](https://www.github.com/rmfitzpatrick) | +| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | | +| Emeritus | [@rmfitzpatrick](https://www.github.com/rmfitzpatrick) | [alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha [contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib diff --git a/receiver/jmxreceiver/metadata.yaml b/receiver/jmxreceiver/metadata.yaml index 10dc005fc7bc..0f3362ba660d 100644 --- a/receiver/jmxreceiver/metadata.yaml +++ b/receiver/jmxreceiver/metadata.yaml @@ -6,7 +6,8 @@ status: alpha: [metrics] distributions: [contrib] codeowners: - active: [rmfitzpatrick] + active: [] + emeritus: [rmfitzpatrick] tests: config: diff --git a/receiver/receivercreator/README.md b/receiver/receivercreator/README.md index d0af39c09a12..e99934133226 100644 --- a/receiver/receivercreator/README.md +++ b/receiver/receivercreator/README.md @@ -7,7 +7,8 @@ | | [beta]: metrics | | Distributions | [contrib] | | Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Areceiver%2Freceivercreator%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Areceiver%2Freceivercreator) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Areceiver%2Freceivercreator%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Areceiver%2Freceivercreator) | -| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@rmfitzpatrick](https://www.github.com/rmfitzpatrick) | +| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@dmitryax](https://www.github.com/dmitryax) | +| Emeritus | [@rmfitzpatrick](https://www.github.com/rmfitzpatrick) | [alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha [beta]: https://github.com/open-telemetry/opentelemetry-collector#beta diff --git a/receiver/receivercreator/metadata.yaml b/receiver/receivercreator/metadata.yaml index d4ef6206c08d..58dbbdd01be1 100644 --- a/receiver/receivercreator/metadata.yaml +++ b/receiver/receivercreator/metadata.yaml @@ -7,7 +7,8 @@ status: alpha: [logs, traces] distributions: [contrib] codeowners: - active: [rmfitzpatrick] + active: [dmitryax] + emeritus: [rmfitzpatrick] tests: config: From 8b672716b6097223cbd1e281bf785f2637ff24bc Mon Sep 17 00:00:00 2001 From: Wiard van Rij Date: Tue, 15 Oct 2024 02:43:04 +0200 Subject: [PATCH 08/10] [receiver/datadogreceiver] Fix 202 response for series endpoints to be on par with DD api spec (#35744) #### Description Changes the responses to be on par with the datadog api spec as per: https://docs.datadoghq.com/api/latest/metrics/?code-lang=go #### Link to tracking issue Fixes #35743 #### Testing Unit test is updated #### Documentation Added changelog, no other docs seem to be required --- .chloggen/wvanrij-dd-receiver-task_35743.yaml | 27 +++++++++++++++++++ receiver/datadogreceiver/receiver.go | 12 +++++++-- receiver/datadogreceiver/receiver_test.go | 4 +-- 3 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 .chloggen/wvanrij-dd-receiver-task_35743.yaml diff --git a/.chloggen/wvanrij-dd-receiver-task_35743.yaml b/.chloggen/wvanrij-dd-receiver-task_35743.yaml new file mode 100644 index 000000000000..c129aac3da87 --- /dev/null +++ b/.chloggen/wvanrij-dd-receiver-task_35743.yaml @@ -0,0 +1,27 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: 'bug_fix' + +# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver) +component: 'datadogreceiver' + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: "Changes response message for `/api/v1/series` and `/api/v2/series` 202 response to be JSON and on par with Datadog API spec" + +# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. +issues: [35743] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: + +# If your change doesn't affect end users or the exported elements of any package, +# you should instead start your pull request title with [chore] or use the "Skip Changelog" label. +# Optional: The change log or logs in which this entry should be included. +# e.g. '[user]' or '[user, api]' +# Include 'user' if the change is relevant to end users. +# Include 'api' if there is a change to a library API. +# Default: '[user]' +change_logs: [] diff --git a/receiver/datadogreceiver/receiver.go b/receiver/datadogreceiver/receiver.go index bdfb6b9c53a8..fb7cae448490 100644 --- a/receiver/datadogreceiver/receiver.go +++ b/receiver/datadogreceiver/receiver.go @@ -282,8 +282,12 @@ func (ddr *datadogReceiver) handleV1Series(w http.ResponseWriter, req *http.Requ return } + w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusAccepted) - _, _ = w.Write([]byte("OK")) + response := map[string]string{ + "status": "ok", + } + _ = json.NewEncoder(w).Encode(response) } // handleV2Series handles the v2 series endpoint https://docs.datadoghq.com/api/latest/metrics/#submit-metrics @@ -312,8 +316,12 @@ func (ddr *datadogReceiver) handleV2Series(w http.ResponseWriter, req *http.Requ return } + w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusAccepted) - _, _ = w.Write([]byte("OK")) + response := map[string]any{ + "errors": []string{}, + } + _ = json.NewEncoder(w).Encode(response) } // handleCheckRun handles the service checks endpoint https://docs.datadoghq.com/api/latest/service-checks/ diff --git a/receiver/datadogreceiver/receiver_test.go b/receiver/datadogreceiver/receiver_test.go index 9e53fcf43e8f..52c1844b59fe 100644 --- a/receiver/datadogreceiver/receiver_test.go +++ b/receiver/datadogreceiver/receiver_test.go @@ -293,7 +293,7 @@ func TestDatadogMetricsV1_EndToEnd(t *testing.T) { body, err := io.ReadAll(resp.Body) require.NoError(t, multierr.Combine(err, resp.Body.Close()), "Must not error when reading body") - require.Equal(t, "OK", string(body), "Expected response to be 'OK', got %s", string(body)) + require.JSONEq(t, `{"status": "ok"}`, string(body), "Expected JSON response to be `{\"status\": \"ok\"}`, got %s", string(body)) require.Equal(t, http.StatusAccepted, resp.StatusCode) mds := sink.AllMetrics() @@ -371,7 +371,7 @@ func TestDatadogMetricsV2_EndToEnd(t *testing.T) { body, err := io.ReadAll(resp.Body) require.NoError(t, multierr.Combine(err, resp.Body.Close()), "Must not error when reading body") - require.Equal(t, "OK", string(body), "Expected response to be 'OK', got %s", string(body)) + require.JSONEq(t, `{"errors": []}`, string(body), "Expected JSON response to be `{\"errors\": []}`, got %s", string(body)) require.Equal(t, http.StatusAccepted, resp.StatusCode) mds := sink.AllMetrics() From fb114a67422b8acc56b96ffd106d4d6ac21aec3a Mon Sep 17 00:00:00 2001 From: Carson Ip Date: Tue, 15 Oct 2024 10:57:04 +0100 Subject: [PATCH 09/10] [exporter/elasticsearch] Set body.* for log body in OTel mode (#35771) #### Description Update OTel mode to implementation to serialize log body into body.* fields #### Link to tracking issue #### Testing #### Documentation --- ...sticsearchexporter_otel-mode-log-body.yaml | 27 ++++ .../elasticsearchexporter/exporter_test.go | 118 ++++++++++++++---- exporter/elasticsearchexporter/model.go | 51 +++++--- 3 files changed, 153 insertions(+), 43 deletions(-) create mode 100644 .chloggen/elasticsearchexporter_otel-mode-log-body.yaml diff --git a/.chloggen/elasticsearchexporter_otel-mode-log-body.yaml b/.chloggen/elasticsearchexporter_otel-mode-log-body.yaml new file mode 100644 index 000000000000..aa11a7c95622 --- /dev/null +++ b/.chloggen/elasticsearchexporter_otel-mode-log-body.yaml @@ -0,0 +1,27 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: breaking + +# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver) +component: elasticsearchexporter + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Set body.* for log body in OTel mode + +# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. +issues: [35771] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: Log record body in OTel mapping mode will be stored in body.text, body.structured, body.flattened based on body value type and presence of event.name attribute + +# If your change doesn't affect end users or the exported elements of any package, +# you should instead start your pull request title with [chore] or use the "Skip Changelog" label. +# Optional: The change log or logs in which this entry should be included. +# e.g. '[user]' or '[user, api]' +# Include 'user' if the change is relevant to end users. +# Include 'api' if there is a change to a library API. +# Default: '[user]' +change_logs: [user] diff --git a/exporter/elasticsearchexporter/exporter_test.go b/exporter/elasticsearchexporter/exporter_test.go index 413853cfcd51..a84ef00193a4 100644 --- a/exporter/elasticsearchexporter/exporter_test.go +++ b/exporter/elasticsearchexporter/exporter_test.go @@ -293,38 +293,104 @@ func TestExporterLogs(t *testing.T) { }) t.Run("publish otel mapping mode", func(t *testing.T) { - rec := newBulkRecorder() - server := newESTestServer(t, func(docs []itemRequest) ([]itemResponse, error) { - rec.Record(docs) - return itemsAllOK(docs) - }) - - exporter := newTestLogsExporter(t, server.URL, func(cfg *Config) { - cfg.LogsDynamicIndex.Enabled = true - cfg.Mapping.Mode = "otel" - }) - mustSendLogs(t, exporter, newLogsWithAttributes( - map[string]any{ - "data_stream.dataset": "attr.dataset", - "attr.foo": "attr.foo.value", + for _, tc := range []struct { + body pcommon.Value + isEvent bool + wantDocument []byte + }{ + { + body: func() pcommon.Value { + return pcommon.NewValueStr("foo") + }(), + wantDocument: []byte(`{"@timestamp":"1970-01-01T00:00:00.000000000Z","attributes":{"attr.foo":"attr.foo.value"},"data_stream":{"dataset":"attr.dataset.otel","namespace":"resource.attribute.namespace","type":"logs"},"dropped_attributes_count":0,"observed_timestamp":"1970-01-01T00:00:00.000000000Z","resource":{"attributes":{"resource.attr.foo":"resource.attr.foo.value"},"dropped_attributes_count":0},"scope":{"dropped_attributes_count":0},"severity_number":0,"body":{"text":"foo"}}`), }, - nil, - map[string]any{ - "data_stream.dataset": "resource.attribute.dataset", - "data_stream.namespace": "resource.attribute.namespace", - "resource.attr.foo": "resource.attr.foo.value", + { + body: func() pcommon.Value { + vm := pcommon.NewValueMap() + m := vm.SetEmptyMap() + m.PutBool("true", true) + m.PutBool("false", false) + m.PutEmptyMap("inner").PutStr("foo", "bar") + return vm + }(), + wantDocument: []byte(`{"@timestamp":"1970-01-01T00:00:00.000000000Z","attributes":{"attr.foo":"attr.foo.value"},"data_stream":{"dataset":"attr.dataset.otel","namespace":"resource.attribute.namespace","type":"logs"},"dropped_attributes_count":0,"observed_timestamp":"1970-01-01T00:00:00.000000000Z","resource":{"attributes":{"resource.attr.foo":"resource.attr.foo.value"},"dropped_attributes_count":0},"scope":{"dropped_attributes_count":0},"severity_number":0,"body":{"flattened":{"true":true,"false":false,"inner":{"foo":"bar"}}}}`), + }, + { + body: func() pcommon.Value { + vm := pcommon.NewValueMap() + m := vm.SetEmptyMap() + m.PutBool("true", true) + m.PutBool("false", false) + m.PutEmptyMap("inner").PutStr("foo", "bar") + return vm + }(), + isEvent: true, + wantDocument: []byte(`{"@timestamp":"1970-01-01T00:00:00.000000000Z","attributes":{"attr.foo":"attr.foo.value","event.name":"foo"},"data_stream":{"dataset":"attr.dataset.otel","namespace":"resource.attribute.namespace","type":"logs"},"dropped_attributes_count":0,"observed_timestamp":"1970-01-01T00:00:00.000000000Z","resource":{"attributes":{"resource.attr.foo":"resource.attr.foo.value"},"dropped_attributes_count":0},"scope":{"dropped_attributes_count":0},"severity_number":0,"body":{"structured":{"true":true,"false":false,"inner":{"foo":"bar"}}}}`), }, - )) - rec.WaitItems(1) - - expected := []itemRequest{ { - Action: []byte(`{"create":{"_index":"logs-attr.dataset.otel-resource.attribute.namespace"}}`), - Document: []byte(`{"@timestamp":"1970-01-01T00:00:00.000000000Z","attributes":{"attr.foo":"attr.foo.value"},"data_stream":{"dataset":"attr.dataset.otel","namespace":"resource.attribute.namespace","type":"logs"},"dropped_attributes_count":0,"observed_timestamp":"1970-01-01T00:00:00.000000000Z","resource":{"attributes":{"resource.attr.foo":"resource.attr.foo.value"},"dropped_attributes_count":0},"scope":{"dropped_attributes_count":0},"severity_number":0}`), + body: func() pcommon.Value { + vs := pcommon.NewValueSlice() + s := vs.Slice() + s.AppendEmpty().SetStr("foo") + s.AppendEmpty().SetBool(false) + s.AppendEmpty().SetEmptyMap().PutStr("foo", "bar") + return vs + }(), + wantDocument: []byte(`{"@timestamp":"1970-01-01T00:00:00.000000000Z","attributes":{"attr.foo":"attr.foo.value"},"data_stream":{"dataset":"attr.dataset.otel","namespace":"resource.attribute.namespace","type":"logs"},"dropped_attributes_count":0,"observed_timestamp":"1970-01-01T00:00:00.000000000Z","resource":{"attributes":{"resource.attr.foo":"resource.attr.foo.value"},"dropped_attributes_count":0},"scope":{"dropped_attributes_count":0},"severity_number":0,"body":{"flattened":{"value":["foo",false,{"foo":"bar"}]}}}`), }, + { + body: func() pcommon.Value { + vs := pcommon.NewValueSlice() + s := vs.Slice() + s.AppendEmpty().SetStr("foo") + s.AppendEmpty().SetBool(false) + s.AppendEmpty().SetEmptyMap().PutStr("foo", "bar") + return vs + }(), + isEvent: true, + wantDocument: []byte(`{"@timestamp":"1970-01-01T00:00:00.000000000Z","attributes":{"attr.foo":"attr.foo.value","event.name":"foo"},"data_stream":{"dataset":"attr.dataset.otel","namespace":"resource.attribute.namespace","type":"logs"},"dropped_attributes_count":0,"observed_timestamp":"1970-01-01T00:00:00.000000000Z","resource":{"attributes":{"resource.attr.foo":"resource.attr.foo.value"},"dropped_attributes_count":0},"scope":{"dropped_attributes_count":0},"severity_number":0,"body":{"structured":{"value":["foo",false,{"foo":"bar"}]}}}`), + }, + } { + rec := newBulkRecorder() + server := newESTestServer(t, func(docs []itemRequest) ([]itemResponse, error) { + rec.Record(docs) + return itemsAllOK(docs) + }) + + exporter := newTestLogsExporter(t, server.URL, func(cfg *Config) { + cfg.LogsDynamicIndex.Enabled = true + cfg.Mapping.Mode = "otel" + }) + recordAttrs := map[string]any{ + "data_stream.dataset": "attr.dataset", + "attr.foo": "attr.foo.value", + } + if tc.isEvent { + recordAttrs["event.name"] = "foo" + } + logs := newLogsWithAttributes( + recordAttrs, + nil, + map[string]any{ + "data_stream.dataset": "resource.attribute.dataset", + "data_stream.namespace": "resource.attribute.namespace", + "resource.attr.foo": "resource.attr.foo.value", + }, + ) + tc.body.CopyTo(logs.ResourceLogs().At(0).ScopeLogs().At(0).LogRecords().At(0).Body()) + mustSendLogs(t, exporter, logs) + rec.WaitItems(1) + + expected := []itemRequest{ + { + Action: []byte(`{"create":{"_index":"logs-attr.dataset.otel-resource.attribute.namespace"}}`), + Document: tc.wantDocument, + }, + } + + assertItemsEqual(t, expected, rec.Items(), false) } - assertItemsEqual(t, expected, rec.Items(), false) }) t.Run("retry http request", func(t *testing.T) { diff --git a/exporter/elasticsearchexporter/model.go b/exporter/elasticsearchexporter/model.go index ce4b9a3a22da..4bf95be05f3d 100644 --- a/exporter/elasticsearchexporter/model.go +++ b/exporter/elasticsearchexporter/model.go @@ -160,36 +160,53 @@ func (m *encodeModel) encodeLogOTelMode(resource pcommon.Resource, resourceSchem m.encodeScopeOTelMode(&document, scope, scopeSchemaURL) // Body - setOTelLogBody(&document, record.Body()) + setOTelLogBody(&document, record.Body(), record.Attributes()) return document } -func setOTelLogBody(doc *objmodel.Document, body pcommon.Value) { +func setOTelLogBody(doc *objmodel.Document, body pcommon.Value, attributes pcommon.Map) { + // Determine if this log record is an event, as they are mapped differently + // https://github.com/open-telemetry/semantic-conventions/blob/main/docs/general/events.md + _, isEvent := attributes.Get("event.name") + switch body.Type() { case pcommon.ValueTypeMap: - doc.AddAttribute("body_structured", body) + if isEvent { + doc.AddAttribute("body.structured", body) + } else { + doc.AddAttribute("body.flattened", body) + } case pcommon.ValueTypeSlice: - slice := body.Slice() - for i := 0; i < slice.Len(); i++ { - switch slice.At(i).Type() { - case pcommon.ValueTypeMap, pcommon.ValueTypeSlice: - doc.AddAttribute("body_structured", body) - return + // output must be an array of objects due to ES limitations + // otherwise, wrap the array in an object + s := body.Slice() + allMaps := true + for i := 0; i < s.Len(); i++ { + if s.At(i).Type() != pcommon.ValueTypeMap { + allMaps = false } } - bodyTextVal := pcommon.NewValueSlice() - bodyTextSlice := bodyTextVal.Slice() - bodyTextSlice.EnsureCapacity(slice.Len()) + var outVal pcommon.Value + if allMaps { + outVal = body + } else { + vm := pcommon.NewValueMap() + m := vm.SetEmptyMap() + body.Slice().CopyTo(m.PutEmptySlice("value")) + outVal = vm + } - for i := 0; i < slice.Len(); i++ { - elem := slice.At(i) - bodyTextSlice.AppendEmpty().SetStr(elem.AsString()) + if isEvent { + doc.AddAttribute("body.structured", outVal) + } else { + doc.AddAttribute("body.flattened", outVal) } - doc.AddAttribute("body_text", bodyTextVal) + case pcommon.ValueTypeStr: + doc.AddString("body.text", body.Str()) default: - doc.AddString("body_text", body.AsString()) + doc.AddString("body.text", body.AsString()) } } From e6c14a596e56b4489d8fa6e08ff7b29c4fd1f07a Mon Sep 17 00:00:00 2001 From: Carson Ip Date: Tue, 15 Oct 2024 11:05:10 +0100 Subject: [PATCH 10/10] [exporter/elasticsearch] Log and drop invalid metrics instead of returning error to avoid upstream retries (#35740) #### Description Log metrics validation error instead of returning to avoid upstream retries #### Link to tracking issue #### Testing #### Documentation --- ...exporter_log-metrics-validation-error.yaml | 27 +++++++++++++++++++ exporter/elasticsearchexporter/exporter.go | 24 +++++++++++------ .../elasticsearchexporter/exporter_test.go | 7 +++-- 3 files changed, 46 insertions(+), 12 deletions(-) create mode 100644 .chloggen/elasticsearchexporter_log-metrics-validation-error.yaml diff --git a/.chloggen/elasticsearchexporter_log-metrics-validation-error.yaml b/.chloggen/elasticsearchexporter_log-metrics-validation-error.yaml new file mode 100644 index 000000000000..b9c837287830 --- /dev/null +++ b/.chloggen/elasticsearchexporter_log-metrics-validation-error.yaml @@ -0,0 +1,27 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: bug_fix + +# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver) +component: elasticsearchexporter + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Log and drop invalid metrics instead of returning error to avoid upstream retries + +# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. +issues: [35740] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: + +# If your change doesn't affect end users or the exported elements of any package, +# you should instead start your pull request title with [chore] or use the "Skip Changelog" label. +# Optional: The change log or logs in which this entry should be included. +# e.g. '[user]' or '[user, api]' +# Include 'user' if the change is relevant to end users. +# Include 'api' if there is a change to a library API. +# Default: '[user]' +change_logs: [user] diff --git a/exporter/elasticsearchexporter/exporter.go b/exporter/elasticsearchexporter/exporter.go index 17d2dc8578f0..b7e00b713cd8 100644 --- a/exporter/elasticsearchexporter/exporter.go +++ b/exporter/elasticsearchexporter/exporter.go @@ -18,6 +18,7 @@ import ( "go.opentelemetry.io/collector/pdata/plog" "go.opentelemetry.io/collector/pdata/pmetric" "go.opentelemetry.io/collector/pdata/ptrace" + "go.uber.org/zap" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter/internal/objmodel" ) @@ -187,7 +188,10 @@ func (e *elasticsearchExporter) pushMetricsData( } defer session.End() - var errs []error + var ( + validationErrs []error // log instead of returning these so that upstream does not retry + errs []error + ) resourceMetrics := metrics.ResourceMetrics() for i := 0; i < resourceMetrics.Len(); i++ { resourceMetric := resourceMetrics.At(i) @@ -224,7 +228,7 @@ func (e *elasticsearchExporter) pushMetricsData( for l := 0; l < dps.Len(); l++ { dp := dps.At(l) if err := upsertDataPoint(newNumberDataPoint(dp)); err != nil { - errs = append(errs, err) + validationErrs = append(validationErrs, err) continue } } @@ -233,33 +237,33 @@ func (e *elasticsearchExporter) pushMetricsData( for l := 0; l < dps.Len(); l++ { dp := dps.At(l) if err := upsertDataPoint(newNumberDataPoint(dp)); err != nil { - errs = append(errs, err) + validationErrs = append(validationErrs, err) continue } } case pmetric.MetricTypeExponentialHistogram: if metric.ExponentialHistogram().AggregationTemporality() == pmetric.AggregationTemporalityCumulative { - errs = append(errs, fmt.Errorf("dropping cumulative temporality exponential histogram %q", metric.Name())) + validationErrs = append(validationErrs, fmt.Errorf("dropping cumulative temporality exponential histogram %q", metric.Name())) continue } dps := metric.ExponentialHistogram().DataPoints() for l := 0; l < dps.Len(); l++ { dp := dps.At(l) if err := upsertDataPoint(newExponentialHistogramDataPoint(dp)); err != nil { - errs = append(errs, err) + validationErrs = append(validationErrs, err) continue } } case pmetric.MetricTypeHistogram: if metric.Histogram().AggregationTemporality() == pmetric.AggregationTemporalityCumulative { - errs = append(errs, fmt.Errorf("dropping cumulative temporality histogram %q", metric.Name())) + validationErrs = append(validationErrs, fmt.Errorf("dropping cumulative temporality histogram %q", metric.Name())) continue } dps := metric.Histogram().DataPoints() for l := 0; l < dps.Len(); l++ { dp := dps.At(l) if err := upsertDataPoint(newHistogramDataPoint(dp)); err != nil { - errs = append(errs, err) + validationErrs = append(validationErrs, err) continue } } @@ -268,7 +272,7 @@ func (e *elasticsearchExporter) pushMetricsData( for l := 0; l < dps.Len(); l++ { dp := dps.At(l) if err := upsertDataPoint(newSummaryDataPoint(dp)); err != nil { - errs = append(errs, err) + validationErrs = append(validationErrs, err) continue } } @@ -276,6 +280,10 @@ func (e *elasticsearchExporter) pushMetricsData( } } + if len(validationErrs) > 0 { + e.Logger.Warn("validation errors", zap.Error(errors.Join(validationErrs...))) + } + for fIndex, docs := range resourceDocs { for _, doc := range docs { var ( diff --git a/exporter/elasticsearchexporter/exporter_test.go b/exporter/elasticsearchexporter/exporter_test.go index a84ef00193a4..06d02e0272c7 100644 --- a/exporter/elasticsearchexporter/exporter_test.go +++ b/exporter/elasticsearchexporter/exporter_test.go @@ -890,7 +890,7 @@ func TestExporterMetrics(t *testing.T) { fooDp.BucketCounts().FromRaw([]uint64{1, 2, 3, 4}) err := exporter.ConsumeMetrics(context.Background(), metrics) - assert.ErrorContains(t, err, "dropping cumulative temporality histogram \"metric.foo\"") + assert.NoError(t, err) }) t.Run("publish exponential histogram cumulative temporality", func(t *testing.T) { @@ -921,7 +921,7 @@ func TestExporterMetrics(t *testing.T) { fooDp.Negative().BucketCounts().FromRaw([]uint64{1, 0, 0, 1}) err := exporter.ConsumeMetrics(context.Background(), metrics) - assert.ErrorContains(t, err, "dropping cumulative temporality exponential histogram \"metric.foo\"") + assert.NoError(t, err) }) t.Run("publish only valid data points", func(t *testing.T) { @@ -960,8 +960,7 @@ func TestExporterMetrics(t *testing.T) { barOtherDp.SetDoubleValue(1.0) err := exporter.ConsumeMetrics(context.Background(), metrics) - require.ErrorContains(t, err, "invalid histogram data point") - require.ErrorContains(t, err, "invalid number data point") + assert.NoError(t, err) rec.WaitItems(2)