-
Notifications
You must be signed in to change notification settings - Fork 1.8k
[mdatagen] Add semconv reference for metrics in metadata schema #13920
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
base: main
Are you sure you want to change the base?
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| # Use this changelog template to create an entry for release notes. | ||
|
|
||
| # 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. otlpreceiver) | ||
| component: cmd/mdatagen | ||
|
|
||
| # A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). | ||
| note: Add semconv reference for metrics | ||
|
|
||
| # One or more tracking issues or pull requests related to the change | ||
| issues: [13920] | ||
|
|
||
| # (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: | ||
|
|
||
| # 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] |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -126,8 +126,8 @@ func (md *Metadata) validateMetricsAndEvents() error { | |
| var errs error | ||
| usedAttrs := map[AttributeName]bool{} | ||
| errs = errors.Join(errs, | ||
| validateMetrics(md.Metrics, md.Attributes, usedAttrs), | ||
| validateMetrics(md.Telemetry.Metrics, md.Attributes, usedAttrs), | ||
| validateMetrics(md.Metrics, md.Attributes, usedAttrs, md.SemConvVersion), | ||
| validateMetrics(md.Telemetry.Metrics, md.Attributes, usedAttrs, md.SemConvVersion), | ||
| validateEvents(md.Events, md.Attributes, usedAttrs), | ||
| md.validateAttributes(usedAttrs)) | ||
| return errs | ||
|
|
@@ -171,10 +171,10 @@ func (md *Metadata) supportsSignal(signal string) bool { | |
| return false | ||
| } | ||
|
|
||
| func validateMetrics(metrics map[MetricName]Metric, attributes map[AttributeName]Attribute, usedAttrs map[AttributeName]bool) error { | ||
| func validateMetrics(metrics map[MetricName]Metric, attributes map[AttributeName]Attribute, usedAttrs map[AttributeName]bool, semConvVersion string) error { | ||
| var errs error | ||
| for mn, m := range metrics { | ||
| if err := m.validate(); err != nil { | ||
| if err := m.validate(mn, semConvVersion); err != nil { | ||
| errs = errors.Join(errs, fmt.Errorf(`metric "%v": %w`, mn, err)) | ||
| continue | ||
| } | ||
|
|
@@ -312,6 +312,10 @@ func (mvt ValueType) Primitive() string { | |
| } | ||
| } | ||
|
|
||
| type SemanticConvention struct { | ||
| SemanticConventionRef string `mapstructure:"semconv_ref"` | ||
mx-psi marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| } | ||
|
|
||
| type Warnings struct { | ||
| // A warning that will be displayed if the field is enabled in user config. | ||
| IfEnabled string `mapstructure:"if_enabled"` | ||
|
|
@@ -423,6 +427,9 @@ type Signal struct { | |
| // Description of the signal. | ||
| Description string `mapstructure:"description"` | ||
|
|
||
| // The semantic convention reference of the signal. | ||
| SemanticConvention *SemanticConvention `mapstructure:"semantic_convention"` | ||
|
|
||
| // The stability level of the signal. | ||
| Stability Stability `mapstructure:"stability"` | ||
|
|
||
|
|
||
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not sure what this field is, but it seems like we should either drop this or make sure that
sem_conv_versionand the version linked insemconv_refare aligned somehowThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is sth that already exists and links the whole component to a specific version of SemConv. It's not really used apart from a few places inside the templates that mdatagen populates i.e. logs.go.tmpl and metrics.go.tmpl.
The PR comes with a pattern checking that also verifies if the provided reference's version matches with this generic one: https://github.com/open-telemetry/opentelemetry-collector/pull/13920/files#diff-b33d4fa1a4595583d310c0a381ce3849aefb42419451584fd0e1c43bd16f5263R124-R128. (also covered by this test)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Okay, sorry, another thing I missed. I think that makes sense, though maybe we can remove it entirely if it's not widely used?
I am worried that we won't be able to support transition scenarios where we want to target two semconv versions