Skip to content

Commit

Permalink
[chore] [cmd/mdatagen] Move sample-metadata.yaml to a separate package (
Browse files Browse the repository at this point in the history
open-telemetry#31503)

Create a separate internal sample receiver to generate and validate code
with mdatagen, including lifecycle tests.
  • Loading branch information
dmitryax committed Feb 29, 2024
1 parent 9423ae2 commit 6a4912b
Show file tree
Hide file tree
Showing 21 changed files with 184 additions and 31 deletions.
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ body:
- cmd/configschema
- cmd/githubgen
- cmd/mdatagen
- cmd/mdatagen/internal/samplereceiver
- cmd/opampsupervisor
- cmd/otelcontribcol
- cmd/oteltestbedcol
Expand Down
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ body:
- cmd/configschema
- cmd/githubgen
- cmd/mdatagen
- cmd/mdatagen/internal/samplereceiver
- cmd/opampsupervisor
- cmd/otelcontribcol
- cmd/oteltestbedcol
Expand Down
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/other.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ body:
- cmd/configschema
- cmd/githubgen
- cmd/mdatagen
- cmd/mdatagen/internal/samplereceiver
- cmd/opampsupervisor
- cmd/otelcontribcol
- cmd/oteltestbedcol
Expand Down
2 changes: 1 addition & 1 deletion cmd/mdatagen/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ require (
go.opentelemetry.io/collector/component v0.95.0
go.opentelemetry.io/collector/confmap v0.95.0
go.opentelemetry.io/collector/confmap/provider/fileprovider v0.95.0
go.opentelemetry.io/collector/consumer v0.95.0
go.opentelemetry.io/collector/pdata v1.2.0
go.opentelemetry.io/collector/receiver v0.95.0
go.opentelemetry.io/collector/semconv v0.95.0
Expand Down Expand Up @@ -44,7 +45,6 @@ require (
github.com/prometheus/common v0.46.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
go.opentelemetry.io/collector/config/configtelemetry v0.95.0 // indirect
go.opentelemetry.io/collector/consumer v0.95.0 // indirect
go.opentelemetry.io/otel v1.23.1 // indirect
go.opentelemetry.io/otel/exporters/prometheus v0.45.2 // indirect
go.opentelemetry.io/otel/sdk v1.23.1 // indirect
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@
// SPDX-License-Identifier: Apache-2.0

// Generate a test metrics builder from a sample metrics set covering all configuration options.
//go:generate mdatagen metadata-sample.yaml
//go:generate mdatagen metadata.yaml

// Deprecated: This package is moving to https://github.com/open-telemetry/opentelemetry-collector and will eventually be removed.
// Please see https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30497
package main
// This is a sample receiver package used to showcase how mdatagen is applied.
package samplereceiver
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[comment]: <> (Code generated by mdatagen. DO NOT EDIT.)

# file
# sample

## Default Metrics

Expand Down
43 changes: 43 additions & 0 deletions cmd/mdatagen/internal/samplereceiver/factory.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

package samplereceiver

import (
"context"

"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/receiver"

"github.com/open-telemetry/opentelemetry-collector-contrib/cmd/mdatagen/internal/samplereceiver/internal/metadata"
)

// NewFactory returns a receiver.Factory for sample receiver.
func NewFactory() receiver.Factory {
return receiver.NewFactory(
metadata.Type,
func() component.Config { return &struct{}{} },
receiver.WithTraces(createTraces, metadata.TracesStability),
receiver.WithMetrics(createMetrics, metadata.MetricsStability),
receiver.WithLogs(createLogs, metadata.LogsStability))
}

func createTraces(context.Context, receiver.CreateSettings, component.Config, consumer.Traces) (receiver.Traces, error) {
return nopInstance, nil
}

func createMetrics(context.Context, receiver.CreateSettings, component.Config, consumer.Metrics) (receiver.Metrics, error) {
return nopInstance, nil
}

func createLogs(context.Context, receiver.CreateSettings, component.Config, consumer.Logs) (receiver.Logs, error) {
return nopInstance, nil
}

var nopInstance = &nopReceiver{}

type nopReceiver struct {
component.StartFunc
component.ShutdownFunc
}
87 changes: 87 additions & 0 deletions cmd/mdatagen/internal/samplereceiver/generated_component_test.go

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.

Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Sample metric metadata file with all available configurations.
# Sample metadata file with all available configurations for a receiver.

type: file
type: sample

sem_conv_version: 1.9.0

Expand All @@ -10,7 +10,9 @@ status:
development: [logs]
beta: [traces]
stable: [metrics]
distributions: [contrib]
distributions: []
codeowners:
active: [dmitryax]
warnings:
- Any additional information that should be brought to the consumer's attention

Expand Down Expand Up @@ -134,3 +136,6 @@ metrics:
aggregation_temporality: delta
warnings:
if_enabled: This metric is deprecated and will be removed soon.

tests:
config:
20 changes: 20 additions & 0 deletions cmd/mdatagen/internal/samplereceiver/metrics_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

package samplereceiver

import (
"testing"

"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/receiver/receivertest"

"github.com/open-telemetry/opentelemetry-collector-contrib/cmd/mdatagen/internal/samplereceiver/internal/metadata"
)

// TestGeneratedMetrics verifies that the internal/metadata API is generated correctly.
func TestGeneratedMetrics(t *testing.T) {
mb := metadata.NewMetricsBuilder(metadata.DefaultMetricsBuilderConfig(), receivertest.NewNopCreateSettings())
m := mb.Emit()
require.Equal(t, 0, m.ResourceMetrics().Len())
}
16 changes: 10 additions & 6 deletions cmd/mdatagen/loader_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ func TestLoadMetadata(t *testing.T) {
wantErr string
}{
{
name: "metadata-sample.yaml",
name: "internal/samplereceiver/metadata.yaml",
want: metadata{
Type: "file",
Type: "sample",
SemConvVersion: "1.9.0",
Status: &Status{
Class: "receiver",
Expand All @@ -29,8 +29,11 @@ func TestLoadMetadata(t *testing.T) {
"beta": {"traces"},
"stable": {"metrics"},
},
Distributions: []string{"contrib"},
Warnings: []string{"Any additional information that should be brought to the consumer's attention"},
Distributions: []string{},
Codeowners: &Codeowners{
Active: []string{"dmitryax"},
},
Warnings: []string{"Any additional information that should be brought to the consumer's attention"},
},
ResourceAttributes: map[attributeName]attribute{
"string.resource.attr": {
Expand Down Expand Up @@ -213,8 +216,9 @@ func TestLoadMetadata(t *testing.T) {
},
},
},
ScopeName: "otelcol",
ShortFolderName: ".",
ScopeName: "otelcol/samplereceiver",
ShortFolderName: "sample",
Tests: &tests{},
},
},
{
Expand Down
10 changes: 0 additions & 10 deletions cmd/mdatagen/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,6 @@ import (
"testing"

"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/receiver/receivertest"

md "github.com/open-telemetry/opentelemetry-collector-contrib/cmd/mdatagen/internal/metadata"
)

func TestRunContents(t *testing.T) {
Expand Down Expand Up @@ -413,10 +410,3 @@ func Tracer(settings component.TelemetrySettings) trace.Tracer {
})
}
}

// TestGenerated verifies that the internal/metadata API is generated correctly.
func TestGenerated(t *testing.T) {
mb := md.NewMetricsBuilder(md.DefaultMetricsBuilderConfig(), receivertest.NewNopCreateSettings())
m := mb.Emit()
require.Equal(t, 0, m.ResourceMetrics().Len())
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

package metadata
package main

import (
"testing"
Expand Down

0 comments on commit 6a4912b

Please sign in to comment.