diff --git a/.chloggen/mdatagen-scope-name.yaml b/.chloggen/mdatagen-scope-name.yaml new file mode 100644 index 00000000000..c5dbdd8469a --- /dev/null +++ b/.chloggen/mdatagen-scope-name.yaml @@ -0,0 +1,13 @@ +# 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: Use go package name for the scope name by default and add an option to provide the scope name in metadata.yaml. + +# One or more tracking issues or pull requests related to the change +issues: [9693] diff --git a/cmd/mdatagen/internal/samplereceiver/internal/metadata/generated_metrics.go b/cmd/mdatagen/internal/samplereceiver/internal/metadata/generated_metrics.go index bf87c2d8854..13e41059ae9 100644 --- a/cmd/mdatagen/internal/samplereceiver/internal/metadata/generated_metrics.go +++ b/cmd/mdatagen/internal/samplereceiver/internal/metadata/generated_metrics.go @@ -368,7 +368,7 @@ func (mb *MetricsBuilder) EmitForResource(rmo ...ResourceMetricsOption) { rm := pmetric.NewResourceMetrics() rm.SetSchemaUrl(conventions.SchemaURL) ils := rm.ScopeMetrics().AppendEmpty() - ils.Scope().SetName("go.opentelemetry.io/collector/samplereceiver") + ils.Scope().SetName("go.opentelemetry.io/collector/internal/receiver/samplereceiver") ils.Scope().SetVersion(mb.buildInfo.Version) ils.Metrics().EnsureCapacity(mb.metricsCapacity) mb.metricDefaultMetric.emit(ils.Metrics()) diff --git a/cmd/mdatagen/internal/samplereceiver/internal/metadata/generated_status.go b/cmd/mdatagen/internal/samplereceiver/internal/metadata/generated_status.go index b042c7e2f49..6f7dbcfaf22 100644 --- a/cmd/mdatagen/internal/samplereceiver/internal/metadata/generated_status.go +++ b/cmd/mdatagen/internal/samplereceiver/internal/metadata/generated_status.go @@ -11,7 +11,7 @@ import ( var ( Type = component.MustNewType("sample") - scopeName = "go.opentelemetry.io/collector/samplereceiver" + scopeName = "go.opentelemetry.io/collector/internal/receiver/samplereceiver" ) const ( diff --git a/cmd/mdatagen/internal/samplereceiver/metadata.yaml b/cmd/mdatagen/internal/samplereceiver/metadata.yaml index 777a54fb7ec..3bca2833712 100644 --- a/cmd/mdatagen/internal/samplereceiver/metadata.yaml +++ b/cmd/mdatagen/internal/samplereceiver/metadata.yaml @@ -1,6 +1,7 @@ # Sample metadata file with all available configurations for a receiver. type: sample +scope_name: go.opentelemetry.io/collector/internal/receiver/samplereceiver sem_conv_version: 1.9.0 diff --git a/cmd/mdatagen/loader.go b/cmd/mdatagen/loader.go index 50191b9353c..184063c3c47 100644 --- a/cmd/mdatagen/loader.go +++ b/cmd/mdatagen/loader.go @@ -7,7 +7,7 @@ import ( "context" "errors" "fmt" - "os" + "os/exec" "path/filepath" "strings" @@ -222,7 +222,7 @@ type metadata struct { // Metrics that can be emitted by the component. Metrics map[metricName]metric `mapstructure:"metrics"` // ScopeName of the metrics emitted by the component. - ScopeName string `mapstructure:"-"` + ScopeName string `mapstructure:"scope_name"` // ShortFolderName is the shortened folder name of the component, removing class if present ShortFolderName string `mapstructure:"-"` @@ -253,12 +253,18 @@ func loadMetadata(filePath string) (metadata, error) { return metadata{}, err } - md := metadata{ScopeName: scopeName(filePath), ShortFolderName: shortFolderName(filePath)} - if err := conf.Unmarshal(&md); err != nil { + md := metadata{ShortFolderName: shortFolderName(filePath)} + if err = conf.Unmarshal(&md); err != nil { return md, err } + if md.ScopeName == "" { + md.ScopeName, err = packageName() + if err != nil { + return md, err + } + } - if err := md.Validate(); err != nil { + if err = md.Validate(); err != nil { return md, err } @@ -287,15 +293,11 @@ func shortFolderName(filePath string) string { return parentFolder } -func scopeName(filePath string) string { - sn := "go.opentelemetry.io/collector" - dirs := strings.Split(filepath.Dir(filePath), string(os.PathSeparator)) - for _, dir := range dirs { - for _, cType := range componentTypes { - if strings.HasSuffix(dir, cType) { - sn += "/" + dir - } - } +func packageName() (string, error) { + cmd := exec.Command("go", "list", "-f", "{{.ImportPath}}") + output, err := cmd.Output() + if err != nil { + return "", err } - return sn + return strings.TrimSpace(string(output)), nil } diff --git a/cmd/mdatagen/loader_test.go b/cmd/mdatagen/loader_test.go index e8b7dd76e53..677288258d2 100644 --- a/cmd/mdatagen/loader_test.go +++ b/cmd/mdatagen/loader_test.go @@ -218,7 +218,7 @@ func TestLoadMetadata(t *testing.T) { }, }, }, - ScopeName: "go.opentelemetry.io/collector/samplereceiver", + ScopeName: "go.opentelemetry.io/collector/internal/receiver/samplereceiver", ShortFolderName: "sample", }, }, @@ -227,7 +227,7 @@ func TestLoadMetadata(t *testing.T) { want: metadata{ Type: "subcomponent", Parent: "parentComponent", - ScopeName: "go.opentelemetry.io/collector", + ScopeName: "go.opentelemetry.io/collector/cmd/mdatagen", ShortFolderName: "testdata", }, }, diff --git a/cmd/mdatagen/metadata-schema.yaml b/cmd/mdatagen/metadata-schema.yaml index 2a42a7191e8..bb6ae4f412a 100644 --- a/cmd/mdatagen/metadata-schema.yaml +++ b/cmd/mdatagen/metadata-schema.yaml @@ -4,6 +4,9 @@ type: # Required for subcomponents: The type of the parent component. parent: string +# Optional: Scope name for the telemetry generated by the component. If not set, name of the go package will be used. +scope_name: string + # Required for components (Optional for subcomponents): A high-level view of the development status and use of this component status: # Required: The class of the component (For example receiver)