From 189949fb242f655d5a37d57409bf4c633afd5a03 Mon Sep 17 00:00:00 2001 From: Kyle Eckhart Date: Thu, 10 Sep 2026 17:46:54 -0400 Subject: [PATCH 1/2] fix(otelcol.receiver.cloudflare): Apply the documented default arguments --- .../otelcol/receiver/cloudflare/cloudflare.go | 29 +++---- .../receiver/cloudflare/cloudflare_test.go | 76 +++++++++---------- 2 files changed, 53 insertions(+), 52 deletions(-) diff --git a/internal/component/otelcol/receiver/cloudflare/cloudflare.go b/internal/component/otelcol/receiver/cloudflare/cloudflare.go index affae4c6d24..ef901e1d69f 100644 --- a/internal/component/otelcol/receiver/cloudflare/cloudflare.go +++ b/internal/component/otelcol/receiver/cloudflare/cloudflare.go @@ -47,24 +47,25 @@ type Arguments struct { // SetToDefault implements syntax.Defaulter. func (args *Arguments) SetToDefault() { - // Defaults filled by upstream OTel receiver in a factory. + cfg := cloudflarereceiver.NewFactory().CreateDefaultConfig().(*cloudflarereceiver.Config) + *args = Arguments{ + TimestampField: cfg.Logs.TimestampField, + TimestampFormat: cfg.Logs.TimestampFormat, + Separator: cfg.Logs.Separator, + } } func (args Arguments) receiverConfig() *cloudflarereceiver.Config { tlsCfg := args.TLS.Convert() - logCfg := cloudflarereceiver.LogsConfig{ - Secret: args.Secret, - Endpoint: args.Endpoint, - TLS: tlsCfg.Get(), - Attributes: args.Attributes, - TimestampField: args.TimestampField, - TimestampFormat: args.TimestampFormat, - Separator: args.Separator, - } - - return &cloudflarereceiver.Config{ - Logs: logCfg, - } + cfg := cloudflarereceiver.NewFactory().CreateDefaultConfig().(*cloudflarereceiver.Config) + cfg.Logs.Secret = args.Secret + cfg.Logs.Endpoint = args.Endpoint + cfg.Logs.TLS = tlsCfg.Get() + cfg.Logs.Attributes = args.Attributes + cfg.Logs.TimestampField = args.TimestampField + cfg.Logs.TimestampFormat = args.TimestampFormat + cfg.Logs.Separator = args.Separator + return cfg } // Validate implements syntax.Validator. diff --git a/internal/component/otelcol/receiver/cloudflare/cloudflare_test.go b/internal/component/otelcol/receiver/cloudflare/cloudflare_test.go index db41aa35774..a20f9512b56 100644 --- a/internal/component/otelcol/receiver/cloudflare/cloudflare_test.go +++ b/internal/component/otelcol/receiver/cloudflare/cloudflare_test.go @@ -11,6 +11,14 @@ import ( "github.com/grafana/alloy/syntax" ) +// expectedConfig returns the upstream factory defaults with override applied, +// so each case only spells out what it actually overrides. +func expectedConfig(override func(logs *cloudflarereceiver.LogsConfig)) cloudflarereceiver.Config { + cfg := cloudflarereceiver.NewFactory().CreateDefaultConfig().(*cloudflarereceiver.Config) + override(&cfg.Logs) + return *cfg +} + func TestArguments_UnmarshalAlloy(t *testing.T) { cases := []struct { testName string @@ -23,11 +31,9 @@ func TestArguments_UnmarshalAlloy(t *testing.T) { endpoint = "localhost:8080/webhook" output {} `, - expected: cloudflarereceiver.Config{ - Logs: cloudflarereceiver.LogsConfig{ - Endpoint: "localhost:8080/webhook", - }, - }, + expected: expectedConfig(func(logs *cloudflarereceiver.LogsConfig) { + logs.Endpoint = "localhost:8080/webhook" + }), }, { testName: "full configuration without TLS", @@ -43,19 +49,17 @@ func TestArguments_UnmarshalAlloy(t *testing.T) { separator = "_" output {} `, - expected: cloudflarereceiver.Config{ - Logs: cloudflarereceiver.LogsConfig{ - Secret: "my-secret", - Endpoint: "localhost:8080/cloudflare-webhook", - Attributes: map[string]string{ - "service.name": "cloudflare-logs", - "environment": "production", - }, - TimestampField: "EdgeStartTimestamp", - TimestampFormat: "unix", - Separator: "_", - }, - }, + expected: expectedConfig(func(logs *cloudflarereceiver.LogsConfig) { + logs.Secret = "my-secret" + logs.Endpoint = "localhost:8080/cloudflare-webhook" + logs.Attributes = map[string]string{ + "service.name": "cloudflare-logs", + "environment": "production", + } + logs.TimestampField = "EdgeStartTimestamp" + logs.TimestampFormat = "unix" + logs.Separator = "_" + }), }, { testName: "configuration with TLS", @@ -69,19 +73,17 @@ func TestArguments_UnmarshalAlloy(t *testing.T) { timestamp_format = "unixnano" output {} `, - expected: cloudflarereceiver.Config{ - Logs: cloudflarereceiver.LogsConfig{ - Secret: "my-secret", - Endpoint: "localhost:8443/secure-webhook", - TLS: &configtls.ServerConfig{ - Config: configtls.Config{ - CertFile: "/path/to/cert.pem", - KeyFile: "/path/to/key.pem", - }, + expected: expectedConfig(func(logs *cloudflarereceiver.LogsConfig) { + logs.Secret = "my-secret" + logs.Endpoint = "localhost:8443/secure-webhook" + logs.TLS = &configtls.ServerConfig{ + Config: configtls.Config{ + CertFile: "/path/to/cert.pem", + KeyFile: "/path/to/key.pem", }, - TimestampFormat: "unixnano", - }, - }, + } + logs.TimestampFormat = "unixnano" + }), }, { testName: "configuration with custom timestamp field", @@ -92,14 +94,12 @@ func TestArguments_UnmarshalAlloy(t *testing.T) { timestamp_format = "rfc3339" output {} `, - expected: cloudflarereceiver.Config{ - Logs: cloudflarereceiver.LogsConfig{ - Secret: "my-secret", - Endpoint: "localhost:8080/webhook", - TimestampField: "RequestTimestamp", - TimestampFormat: "rfc3339", - }, - }, + expected: expectedConfig(func(logs *cloudflarereceiver.LogsConfig) { + logs.Secret = "my-secret" + logs.Endpoint = "localhost:8080/webhook" + logs.TimestampField = "RequestTimestamp" + logs.TimestampFormat = "rfc3339" + }), }, } From d3a4c229c3645fd60738bf431706cd21c6f6ea17 Mon Sep 17 00:00:00 2001 From: Kyle Eckhart Date: Thu, 10 Sep 2026 17:46:51 -0400 Subject: [PATCH 2/2] docs(otelcol.receiver.cloudflare): Fix documented name of the separator argument --- .../reference/components/otelcol/otelcol.receiver.cloudflare.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sources/reference/components/otelcol/otelcol.receiver.cloudflare.md b/docs/sources/reference/components/otelcol/otelcol.receiver.cloudflare.md index fbf411b5b33..912e56bab5a 100644 --- a/docs/sources/reference/components/otelcol/otelcol.receiver.cloudflare.md +++ b/docs/sources/reference/components/otelcol/otelcol.receiver.cloudflare.md @@ -44,7 +44,7 @@ You can use the following arguments with `otelcol.receiver.cloudflare`: | `endpoint` | `string` | The `` endpoint address on which the receiver awaits requests from Cloudflare. | | yes | | `secret` | `string` | If this value is set, the receiver expects to see it in any valid requests under the `X-CF-Secret` header. | | no | | `attributes` | `map[string]string` | Sets log attributes from message fields. Only string, boolean, integer, or float fields can be mapped. | | no | -| `delimiter` | `string` | The separator to join nested fields in the log message when setting attributes. | `"."` | no | +| `separator` | `string` | The separator to join nested fields in the log message when setting attributes. | `"."` | no | | `timestamp_field` | `string` | Log field name that contains timestamp. | `"EdgeStartTimestamp"` | no | | `timestamp_format` | `string` | One of `unix`, `unixnano`, or `rfc3339`, matching how your LogPush job encodes the timestamp field. | `"rfc3339"` | no |