From 7babaa49be5a3672bdadccfe521c3c05d2f17fc5 Mon Sep 17 00:00:00 2001 From: keisku Date: Fri, 29 Apr 2022 22:42:08 +0900 Subject: [PATCH 1/4] replace Histogram defined as string with enum --- exporter/datadogexporter/config/config.go | 37 ++++++++++++++----- .../datadogexporter/metrics_exporter_test.go | 3 +- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/exporter/datadogexporter/config/config.go b/exporter/datadogexporter/config/config.go index 58adc6da9196..c209daa4c52b 100644 --- a/exporter/datadogexporter/config/config.go +++ b/exporter/datadogexporter/config/config.go @@ -34,13 +34,6 @@ var ( errNoMetadata = errors.New("only_metadata can't be enabled when host_metadata::enabled = false or host_metadata::hostname_source != first_resource") ) -// TODO: Import these from translator when we eliminate cyclic dependency. -const ( - histogramModeNoBuckets = "nobuckets" - histogramModeCounters = "counters" - histogramModeDistributions = "distributions" -) - const ( // DefaultSite is the default site of the Datadog intake to send data to DefaultSite = "datadoghq.com" @@ -93,6 +86,30 @@ type MetricsConfig struct { SummaryConfig SummaryConfig `mapstructure:"summaries"` } +type HistogramMode string + +const ( + // HistogramModeNoBuckets reports no bucket histogram metrics. .sum and .count metrics will still be sent + // if `send_count_sum_metrics` is enabled. + HistogramModeNoBuckets HistogramMode = "nobuckets" + // HistogramModeCounters reports histograms as Datadog counts, one metric per bucket. + HistogramModeCounters HistogramMode = "counters" + // HistogramModeDistributions reports histograms as Datadog distributions (recommended). + HistogramModeDistributions HistogramMode = "distributions" +) + +var _ encoding.TextUnmarshaler = (*HistogramMode)(nil) + +func (hm *HistogramMode) UnmarshalText(in []byte) error { + switch mode := HistogramMode(in); mode { + case HistogramModeCounters, HistogramModeDistributions, HistogramModeNoBuckets: + *hm = mode + return nil + default: + return fmt.Errorf("invalid histogram mode %q", mode) + } +} + // HistogramConfig customizes export of OTLP Histograms. type HistogramConfig struct { // Mode for exporting histograms. Valid values are 'distributions', 'counters' or 'nobuckets'. @@ -102,7 +119,7 @@ type HistogramConfig struct { // if `send_count_sum_metrics` is enabled. // // The current default is 'distributions'. - Mode string `mapstructure:"mode"` + Mode HistogramMode `mapstructure:"mode"` // SendCountSum states if the export should send .sum and .count metrics for histograms. // The current default is false. @@ -110,7 +127,7 @@ type HistogramConfig struct { } func (c *HistogramConfig) validate() error { - if c.Mode == histogramModeNoBuckets && !c.SendCountSum { + if c.Mode == HistogramModeNoBuckets && !c.SendCountSum { return fmt.Errorf("'nobuckets' mode and `send_count_sum_metrics` set to false will send no histogram metrics") } return nil @@ -499,7 +516,7 @@ func (c *Config) Unmarshal(configMap *config.Map) error { c.warnings = append(c.warnings, renamingWarnings...) switch c.Metrics.HistConfig.Mode { - case histogramModeCounters, histogramModeNoBuckets, histogramModeDistributions: + case HistogramModeCounters, HistogramModeNoBuckets, HistogramModeDistributions: // Do nothing default: return fmt.Errorf("invalid `mode` %s", c.Metrics.HistConfig.Mode) diff --git a/exporter/datadogexporter/metrics_exporter_test.go b/exporter/datadogexporter/metrics_exporter_test.go index c74425c91e69..8247356128e4 100644 --- a/exporter/datadogexporter/metrics_exporter_test.go +++ b/exporter/datadogexporter/metrics_exporter_test.go @@ -26,7 +26,6 @@ import ( "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter/config" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter/internal/metadata" - "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter/internal/model/translator" "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter/internal/testutils" ) @@ -44,7 +43,7 @@ func TestNewExporter(t *testing.T) { }, DeltaTTL: 3600, HistConfig: config.HistogramConfig{ - Mode: string(translator.HistogramModeDistributions), + Mode: config.HistogramModeDistributions, SendCountSum: false, }, SumConfig: config.SumConfig{ From ffb9b2f35ae48d78a2148eadfc2d80a13b380065 Mon Sep 17 00:00:00 2001 From: keisku Date: Fri, 29 Apr 2022 22:49:10 +0900 Subject: [PATCH 2/4] update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 02c7dfa09a1e..0df79a7b0707 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,7 @@ - `processor/transform`: Add transformation of logs (#9368) - `datadogexporter`: Add `metrics::summaries::mode` to specify export mode for summaries (#8846) - `prometheusreceiver`: Add resource attributes for kubernetes resource discovery labels (#9416) +- `datadogexporter`: Replace HistogramMode defined as string with enum. ### 🧰 Bug fixes 🧰 From c049c656ca153cc5378add68e3351d38b7844e0e Mon Sep 17 00:00:00 2001 From: keisku Date: Mon, 2 May 2022 17:16:03 +0900 Subject: [PATCH 3/4] move to Breaking changes --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0df79a7b0707..7b4384146e60 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ ### 🛑 Breaking changes 🛑 +- `datadogexporter`: Replace HistogramMode defined as string with enum. + ### 🚩 Deprecations 🚩 - `exporter/azuremonitor`: Deprecate use of LogRecord.Name as the log envelope category name. There is no replacement. @@ -51,7 +53,6 @@ - `processor/transform`: Add transformation of logs (#9368) - `datadogexporter`: Add `metrics::summaries::mode` to specify export mode for summaries (#8846) - `prometheusreceiver`: Add resource attributes for kubernetes resource discovery labels (#9416) -- `datadogexporter`: Replace HistogramMode defined as string with enum. ### 🧰 Bug fixes 🧰 From 5eb122982d1cbfc09c17afa54a488051376199ef Mon Sep 17 00:00:00 2001 From: keisku Date: Mon, 2 May 2022 17:56:20 +0900 Subject: [PATCH 4/4] remove HistogramMode handling from Unmarshal() --- exporter/datadogexporter/config/config.go | 7 ------- 1 file changed, 7 deletions(-) diff --git a/exporter/datadogexporter/config/config.go b/exporter/datadogexporter/config/config.go index c209daa4c52b..344f85669d44 100644 --- a/exporter/datadogexporter/config/config.go +++ b/exporter/datadogexporter/config/config.go @@ -515,13 +515,6 @@ func (c *Config) Unmarshal(configMap *config.Map) error { } c.warnings = append(c.warnings, renamingWarnings...) - switch c.Metrics.HistConfig.Mode { - case HistogramModeCounters, HistogramModeNoBuckets, HistogramModeDistributions: - // Do nothing - default: - return fmt.Errorf("invalid `mode` %s", c.Metrics.HistConfig.Mode) - } - // Add warnings about autodetected environment variables. c.warnings = append(c.warnings, warnUseOfEnvVars(configMap, c)...)