Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[cmd/mdatagen] Expose resource_attributes option in user settings #17967

Merged
Merged
Show file tree
Hide file tree
Changes from 36 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
3b57edf
Change constructor of MetricsBuilder from MetricsSettings to MetricsB…
hughesjj Jan 23, 2023
ad02415
add chglog
hughesjj Jan 23, 2023
0f772aa
remove work tracking file
hughesjj Jan 23, 2023
329e815
Update .chloggen/metrics_builder_constructor_ms_to_mbc.yaml
hughesjj Jan 23, 2023
4b89895
Remove WithResourceAttributesSettings
hughesjj Jan 23, 2023
9269058
Update .chloggen/metrics_builder_constructor_ms_to_mbc.yaml
hughesjj Jan 24, 2023
633964e
Update .chloggen/metrics_builder_constructor_ms_to_mbc.yaml
hughesjj Jan 24, 2023
65c75a0
Update .chloggen/metrics_builder_constructor_ms_to_mbc.yaml
hughesjj Jan 24, 2023
1f0ad44
Update cmd/mdatagen/internal/metadata/generated_metrics.go
hughesjj Jan 25, 2023
dc68132
regen after pr feedback
hughesjj Jan 26, 2023
8341c73
add tracking issue
hughesjj Jan 26, 2023
68a0353
remove comment & update ones missed from make test
hughesjj Jan 26, 2023
c69ceb0
was this a bad rebase or just somehow missed in the many times I've r…
hughesjj Jan 26, 2023
3c779fa
MetricsSettings -> MetricsSettings. in proper places
hughesjj Jan 26, 2023
7238b21
Here's hoping this is sufficient
hughesjj Jan 26, 2023
e3c32a0
@ad receiver test: oops, that was a load bearing string, not a descri…
hughesjj Jan 26, 2023
5b62da1
Implement builder utilities, start testing the lint command I grabbed…
hughesjj Jan 26, 2023
d7fafc7
....Yup, the rebase apparently nuked everything. Again. Wat is happ…
hughesjj Jan 26, 2023
2403411
gofmt
hughesjj Jan 26, 2023
af3d245
...remove debug comment, re-run lint locally...
hughesjj Jan 26, 2023
770c43a
Forgot to change names from prior pr feedback...
hughesjj Jan 26, 2023
1a560bb
regen and rework parsin
hughesjj Jan 26, 2023
842d2a0
lint fixes
hughesjj Jan 26, 2023
5a4ac11
fix one, now script the rest
hughesjj Jan 26, 2023
4162bc6
add a script to help refactor the config.go file
hughesjj Jan 27, 2023
4a70ff1
scripts output, to be deleted
hughesjj Jan 27, 2023
83a0279
remove unused
hughesjj Jan 27, 2023
e0442b8
aight got rid of WithMetrics but still have comments in and ned to un…
hughesjj Feb 3, 2023
bdc9470
Undo Unmarshal+WithBlah changes in receiver added in this PR
hughesjj Feb 3, 2023
4cda7f4
no unmarshal in metrics.go.tmpl save for metricssettings
hughesjj Feb 18, 2023
fe387f3
rebase
hughesjj Feb 21, 2023
69bea0d
in metrics_test.go.tmpl actually compare allMetricsSet to allMetrics …
hughesjj Feb 21, 2023
3224140
MetricsMetadata doesn't contain a .Metrics field
hughesjj Feb 21, 2023
491e286
rebase onto v0.72
hughesjj Feb 21, 2023
fd4fb93
remove unmarshals
hughesjj Feb 23, 2023
b650009
cleanup after proofreading
hughesjj Feb 24, 2023
479dc03
fix nits but functionally same as last two commits.
hughesjj Feb 24, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
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.

43 changes: 23 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