Skip to content

Commit

Permalink
[cmd/mdatagen] Expose resource_attributes option in user settings (o…
Browse files Browse the repository at this point in the history
…pen-telemetry#17967)

Change constructor of MetricsBuilder from MetricsSettings to MetricsBuilderConfig, and wrap MetricsSettings and ResourceAttributesSettings with such.

This change exposes resource_attributes option in the user config which can be used to enable/disable particular resource_attributes.

Co-authored-by: Dmitrii Anoshin <[email protected]>
  • Loading branch information
hughesjj and dmitryax committed Feb 28, 2023
1 parent c9c1bd1 commit b40e984
Show file tree
Hide file tree
Showing 317 changed files with 7,083 additions and 6,515 deletions.
20 changes: 20 additions & 0 deletions .chloggen/metrics_builder_constructor_ms_to_mbc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
change_type: enhancement

# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
component: mdatagen

# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
note: Turn on the ability to enable/disable resource attributes by embedding MetricsSettings and ResourceAttributesSettings into all scraping receivers as MetricsBuilderConfig

# One or more tracking issues related to the change
issues: [16373]

# (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: |
Currently, the only way to add configurative functionality to mdatagen is by using a bunch of WithResourceAttributesSettings options to the constructor.
This PR changes the first argument to the NewMetricsBuilder constructor to be of type MetricsBuilderConfig,
which is a new class that wraps both MetricsSettings and ResourceAttributesSettings, and may be (hopefully) easily extended with more
configuration in the future.
51 changes: 25 additions & 26 deletions cmd/mdatagen/internal/metadata/generated_metrics.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

40 changes: 20 additions & 20 deletions cmd/mdatagen/internal/metadata/generated_metrics_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

44 changes: 30 additions & 14 deletions cmd/mdatagen/internal/metadata/testdata/config.yaml
Original file line number Diff line number Diff line change
@@ -1,15 +1,31 @@
default:
all_metrics:
default.metric:
enabled: true
default.metric.to_be_removed:
enabled: true
optional.metric:
enabled: true
no_metrics:
default.metric:
enabled: false
default.metric.to_be_removed:
enabled: false
optional.metric:
enabled: false
all_set:
metrics:
default.metric:
enabled: true
default.metric.to_be_removed:
enabled: true
optional.metric:
enabled: true
resource_attributes:
optional.resource.attr:
enabled: true
string.enum.resource.attr:
enabled: true
string.resource.attr:
enabled: true
none_set:
metrics:
default.metric:
enabled: false
default.metric.to_be_removed:
enabled: false
optional.metric:
enabled: false
resource_attributes:
optional.resource.attr:
enabled: false
string.enum.resource.attr:
enabled: false
string.resource.attr:
enabled: false
2 changes: 1 addition & 1 deletion cmd/mdatagen/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ func Test_run(t *testing.T) {

// TestGenerated verifies that the internal/metadata API is generated correctly.
func TestGenerated(t *testing.T) {
mb := md.NewMetricsBuilder(md.DefaultMetricsSettings(), receivertest.NewNopCreateSettings())
mb := md.NewMetricsBuilder(md.DefaultMetricsBuilderConfig(), receivertest.NewNopCreateSettings())
m := mb.Emit()
require.Equal(t, 0, m.ResourceMetrics().Len())
}
47 changes: 24 additions & 23 deletions cmd/mdatagen/templates/metrics.go.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -58,21 +58,8 @@ func DefaultMetricsSettings() MetricsSettings {
// ResourceAttributeSettings provides common settings for a particular metric.
type ResourceAttributeSettings struct {
Enabled bool `mapstructure:"enabled"`

enabledProvidedByUser bool
}

func (ras *ResourceAttributeSettings) Unmarshal(parser *confmap.Conf) error {
if parser == nil {
return nil
}
err := parser.Unmarshal(ras, confmap.WithErrorUnused())
if err != nil {
return err
}
ras.enabledProvidedByUser = parser.IsSet("enabled")
return nil
}

// ResourceAttributesSettings provides settings for {{ .Name }} metrics.
type ResourceAttributesSettings struct {
Expand Down Expand Up @@ -193,6 +180,12 @@ func newMetric{{ $name.Render }}(settings MetricSettings) metric{{ $name.Render

{{ end -}}

// MetricsBuilderConfig is a structural subset of an otherwise 1-1 copy of metadata.yaml
type MetricsBuilderConfig struct {
Metrics MetricsSettings `mapstructure:"metrics"`
ResourceAttributes ResourceAttributesSettings `mapstructure:"resource_attributes"`
}

// MetricsBuilder provides an interface for scrapers to report metrics while taking care of all the transformations
// required to produce metric representation defined in metadata and user settings.
type MetricsBuilder struct {
Expand All @@ -216,27 +209,35 @@ func WithStartTime(startTime pcommon.Timestamp) metricBuilderOption {
mb.startTime = startTime
}
}
// WithResourceAttributesSettings sets ResourceAttributeSettings on the metrics builder.
func WithResourceAttributesSettings(ras ResourceAttributesSettings) metricBuilderOption {
return func(mb *MetricsBuilder) {
mb.resourceAttributesSettings = ras

func DefaultMetricsBuilderConfig() MetricsBuilderConfig {
return MetricsBuilderConfig {
Metrics: DefaultMetricsSettings(),
ResourceAttributes: DefaultResourceAttributesSettings(),
}
}

func NewMetricsBuilderConfig(ms MetricsSettings, ras ResourceAttributesSettings) MetricsBuilderConfig {
return MetricsBuilderConfig {
Metrics: ms,
ResourceAttributes: ras,
}
}

func NewMetricsBuilder(ms MetricsSettings, settings receiver.CreateSettings, options ...metricBuilderOption) *MetricsBuilder {
func NewMetricsBuilder(mbc MetricsBuilderConfig, settings receiver.CreateSettings, options ...metricBuilderOption) *MetricsBuilder {
{{- range $name, $metric := .Metrics }}
{{- if $metric.Warnings.IfEnabled }}
if ms.{{ $name.Render }}.Enabled {
if mbc.Metrics.{{ $name.Render }}.Enabled {
settings.Logger.Warn("[WARNING] `{{ $name }}` should not be enabled: {{ $metric.Warnings.IfEnabled }}")
}
{{- end }}
{{- if $metric.Warnings.IfEnabledNotSet }}
if !ms.{{ $name.Render }}.enabledSetByUser {
if !mbc.Metrics.{{ $name.Render }}.enabledSetByUser {
settings.Logger.Warn("[WARNING] Please set `enabled` field explicitly for `{{ $name }}`: {{ $metric.Warnings.IfEnabledNotSet }}")
}
{{- end }}
{{- if $metric.Warnings.IfConfigured }}
if ms.{{ $name.Render }}.enabledSetByUser {
if mbc.Metrics.{{ $name.Render }}.enabledSetByUser {
settings.Logger.Warn("[WARNING] `{{ $name }}` should not be configured: {{ $metric.Warnings.IfConfigured }}")
}
{{- end }}
Expand All @@ -245,9 +246,9 @@ func NewMetricsBuilder(ms MetricsSettings, settings receiver.CreateSettings, opt
startTime: pcommon.NewTimestampFromTime(time.Now()),
metricsBuffer: pmetric.NewMetrics(),
buildInfo: settings.BuildInfo,
resourceAttributesSettings: DefaultResourceAttributesSettings(),
resourceAttributesSettings: mbc.ResourceAttributes,
{{- range $name, $metric := .Metrics }}
metric{{ $name.Render }}: newMetric{{ $name.Render }}(ms.{{ $name.Render }}),
metric{{ $name.Render }}: newMetric{{ $name.Render }}(mbc.Metrics.{{ $name.Render }}),
{{- end }}
}
for _, op := range options {
Expand Down
Loading

0 comments on commit b40e984

Please sign in to comment.