Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
533 changes: 533 additions & 0 deletions apihelpers/v1beta1/config.go

Large diffs are not rendered by default.

415 changes: 208 additions & 207 deletions apis/v1beta1/config_test.go → apihelpers/v1beta1/config_test.go

Large diffs are not rendered by default.

File renamed without changes.
File renamed without changes.
17 changes: 9 additions & 8 deletions apis/v1beta1/metrics.go → apihelpers/v1beta1/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"fmt"
"strings"

apisv1beta1 "github.com/open-telemetry/opentelemetry-operator/apis/v1beta1"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/exporters/prometheus"
"go.opentelemetry.io/otel/metric"
Expand Down Expand Up @@ -110,7 +111,7 @@ func NewMetrics(prv metric.MeterProvider, ctx context.Context, cl client.Reader)

// Init metrics from the first time the operator starts.
func (m *Metrics) init(ctx context.Context, cl client.Reader) error {
list := &OpenTelemetryCollectorList{}
list := &apisv1beta1.OpenTelemetryCollectorList{}
if err := cl.List(ctx, list); err != nil {
return fmt.Errorf("failed to list: %w", err)
}
Expand All @@ -121,22 +122,22 @@ func (m *Metrics) init(ctx context.Context, cl client.Reader) error {
return nil
}

func (m *Metrics) Create(ctx context.Context, collector *OpenTelemetryCollector) {
func (m *Metrics) Create(ctx context.Context, collector *apisv1beta1.OpenTelemetryCollector) {
m.updateComponentCounters(ctx, collector, true)
m.updateGeneralCRMetricsComponents(ctx, collector, true)
}

func (m *Metrics) Delete(ctx context.Context, collector *OpenTelemetryCollector) {
func (m *Metrics) Delete(ctx context.Context, collector *apisv1beta1.OpenTelemetryCollector) {
m.updateComponentCounters(ctx, collector, false)
m.updateGeneralCRMetricsComponents(ctx, collector, false)
}

func (m *Metrics) Update(ctx context.Context, oldCollector, newCollector *OpenTelemetryCollector) {
func (m *Metrics) Update(ctx context.Context, oldCollector, newCollector *apisv1beta1.OpenTelemetryCollector) {
m.Delete(ctx, oldCollector)
m.Create(ctx, newCollector)
}

func (m *Metrics) updateGeneralCRMetricsComponents(ctx context.Context, collector *OpenTelemetryCollector, up bool) {
func (m *Metrics) updateGeneralCRMetricsComponents(ctx context.Context, collector *apisv1beta1.OpenTelemetryCollector, up bool) {
inc := 1
if !up {
inc = -1
Expand All @@ -148,7 +149,7 @@ func (m *Metrics) updateGeneralCRMetricsComponents(ctx context.Context, collecto
))
}

func (m *Metrics) updateComponentCounters(ctx context.Context, collector *OpenTelemetryCollector, up bool) {
func (m *Metrics) updateComponentCounters(ctx context.Context, collector *apisv1beta1.OpenTelemetryCollector, up bool) {
components := getComponentsFromConfig(collector.Spec.Config)
moveCounter(ctx, collector, components.receivers, m.receiversCounter, up)
moveCounter(ctx, collector, components.exporters, m.exporterCounter, up)
Expand Down Expand Up @@ -176,7 +177,7 @@ func extractElements(elements map[string]any) []string {
return items
}

func getComponentsFromConfig(yamlContent Config) *componentDefinitions {
func getComponentsFromConfig(yamlContent apisv1beta1.Config) *componentDefinitions {
info := &componentDefinitions{
receivers: extractElements(yamlContent.Receivers.Object),
exporters: extractElements(yamlContent.Exporters.Object),
Expand All @@ -198,7 +199,7 @@ func getComponentsFromConfig(yamlContent Config) *componentDefinitions {
}

func moveCounter(
ctx context.Context, collector *OpenTelemetryCollector, types []string, upDown metric.Int64UpDownCounter, up bool,
ctx context.Context, collector *apisv1beta1.OpenTelemetryCollector, types []string, upDown metric.Int64UpDownCounter, up bool,
) {
for _, exporter := range types {
inc := 1
Expand Down
105 changes: 53 additions & 52 deletions apis/v1beta1/metrics_test.go → apihelpers/v1beta1/metrics_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"context"
"testing"

apisv1beta1 "github.com/open-telemetry/opentelemetry-operator/apis/v1beta1"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/otel"
Expand All @@ -25,21 +26,21 @@ var wantInstrumentationScope = instrumentation.Scope{
}

func TestOTELCollectorCRDMetrics(t *testing.T) {
otelcollector1 := &OpenTelemetryCollector{
otelcollector1 := &apisv1beta1.OpenTelemetryCollector{
ObjectMeta: metav1.ObjectMeta{
Name: "collector1",
Namespace: "test1",
},
Spec: OpenTelemetryCollectorSpec{
Mode: ModeDeployment,
Config: Config{
Processors: &AnyConfig{
Spec: apisv1beta1.OpenTelemetryCollectorSpec{
Mode: apisv1beta1.ModeDeployment,
Config: apisv1beta1.Config{
Processors: &apisv1beta1.AnyConfig{
Object: map[string]any{
"batch": nil,
"foo": nil,
},
},
Extensions: &AnyConfig{
Extensions: &apisv1beta1.AnyConfig{
Object: map[string]any{
"extfoo": nil,
},
Expand All @@ -48,26 +49,26 @@ func TestOTELCollectorCRDMetrics(t *testing.T) {
},
}

otelcollector2 := &OpenTelemetryCollector{
otelcollector2 := &apisv1beta1.OpenTelemetryCollector{
ObjectMeta: metav1.ObjectMeta{
Name: "collector2",
Namespace: "test2",
},
Spec: OpenTelemetryCollectorSpec{
Mode: ModeSidecar,
Config: Config{
Processors: &AnyConfig{
Spec: apisv1beta1.OpenTelemetryCollectorSpec{
Mode: apisv1beta1.ModeSidecar,
Config: apisv1beta1.Config{
Processors: &apisv1beta1.AnyConfig{
Object: map[string]any{
"x": nil,
"y": nil,
},
},
Extensions: &AnyConfig{
Extensions: &apisv1beta1.AnyConfig{
Object: map[string]any{
"z/r": nil,
},
},
Exporters: AnyConfig{
Exporters: apisv1beta1.AnyConfig{
Object: map[string]any{
"w": nil,
},
Expand All @@ -76,26 +77,26 @@ func TestOTELCollectorCRDMetrics(t *testing.T) {
},
}

updatedCollector1 := &OpenTelemetryCollector{
updatedCollector1 := &apisv1beta1.OpenTelemetryCollector{
ObjectMeta: metav1.ObjectMeta{
Name: "collector1",
Namespace: "test1",
},
Spec: OpenTelemetryCollectorSpec{
Mode: ModeSidecar,
Config: Config{
Processors: &AnyConfig{
Spec: apisv1beta1.OpenTelemetryCollectorSpec{
Mode: apisv1beta1.ModeSidecar,
Config: apisv1beta1.Config{
Processors: &apisv1beta1.AnyConfig{
Object: map[string]any{
"foo": nil,
"y": nil,
},
},
Extensions: &AnyConfig{
Extensions: &apisv1beta1.AnyConfig{
Object: map[string]any{
"z/r": nil,
},
},
Exporters: AnyConfig{
Exporters: apisv1beta1.AnyConfig{
Object: map[string]any{
"w": nil,
},
Expand All @@ -106,7 +107,7 @@ func TestOTELCollectorCRDMetrics(t *testing.T) {

tests := []struct {
name string
testFunction func(t *testing.T, m *Metrics, collectors []*OpenTelemetryCollector, reader metric.Reader)
testFunction func(t *testing.T, m *Metrics, collectors []*apisv1beta1.OpenTelemetryCollector, reader metric.Reader)
}{
{
name: "Create",
Expand All @@ -122,8 +123,8 @@ func TestOTELCollectorCRDMetrics(t *testing.T) {
},
}
schemeBuilder := runtime.NewSchemeBuilder(func(s *runtime.Scheme) error {
s.AddKnownTypes(GroupVersion, &OpenTelemetryCollector{}, &OpenTelemetryCollectorList{})
metav1.AddToGroupVersion(s, GroupVersion)
s.AddKnownTypes(apisv1beta1.GroupVersion, &apisv1beta1.OpenTelemetryCollector{}, &apisv1beta1.OpenTelemetryCollectorList{})
metav1.AddToGroupVersion(s, apisv1beta1.GroupVersion)
return nil
})
scheme := runtime.NewScheme()
Expand All @@ -137,28 +138,28 @@ func TestOTELCollectorCRDMetrics(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tt.testFunction(t, crdMetrics, []*OpenTelemetryCollector{otelcollector1, otelcollector2, updatedCollector1}, reader)
tt.testFunction(t, crdMetrics, []*apisv1beta1.OpenTelemetryCollector{otelcollector1, otelcollector2, updatedCollector1}, reader)
})
}
}

func TestOTELCollectorInitMetrics(t *testing.T) {
otelcollector1 := OpenTelemetryCollector{
otelcollector1 := apisv1beta1.OpenTelemetryCollector{
ObjectMeta: metav1.ObjectMeta{
Name: "collector1",
Namespace: "test1",
Labels: map[string]string{"app.kubernetes.io/managed-by": "opentelemetry-operator"},
},
Spec: OpenTelemetryCollectorSpec{
Mode: ModeDeployment,
Config: Config{
Processors: &AnyConfig{
Spec: apisv1beta1.OpenTelemetryCollectorSpec{
Mode: apisv1beta1.ModeDeployment,
Config: apisv1beta1.Config{
Processors: &apisv1beta1.AnyConfig{
Object: map[string]any{
"batch": nil,
"foo": nil,
},
},
Extensions: &AnyConfig{
Extensions: &apisv1beta1.AnyConfig{
Object: map[string]any{
"extfoo": nil,
},
Expand All @@ -167,27 +168,27 @@ func TestOTELCollectorInitMetrics(t *testing.T) {
},
}

otelcollector2 := OpenTelemetryCollector{
otelcollector2 := apisv1beta1.OpenTelemetryCollector{
ObjectMeta: metav1.ObjectMeta{
Name: "collector2",
Namespace: "test2",
Labels: map[string]string{"app.kubernetes.io/managed-by": "opentelemetry-operator"},
},
Spec: OpenTelemetryCollectorSpec{
Mode: ModeSidecar,
Config: Config{
Processors: &AnyConfig{
Spec: apisv1beta1.OpenTelemetryCollectorSpec{
Mode: apisv1beta1.ModeSidecar,
Config: apisv1beta1.Config{
Processors: &apisv1beta1.AnyConfig{
Object: map[string]any{
"x": nil,
"y": nil,
},
},
Extensions: &AnyConfig{
Extensions: &apisv1beta1.AnyConfig{
Object: map[string]any{
"z/r": nil,
},
},
Exporters: AnyConfig{
Exporters: apisv1beta1.AnyConfig{
Object: map[string]any{
"w": nil,
},
Expand All @@ -197,15 +198,15 @@ func TestOTELCollectorInitMetrics(t *testing.T) {
}

schemeBuilder := runtime.NewSchemeBuilder(func(s *runtime.Scheme) error {
s.AddKnownTypes(GroupVersion, &OpenTelemetryCollector{}, &OpenTelemetryCollectorList{})
metav1.AddToGroupVersion(s, GroupVersion)
s.AddKnownTypes(apisv1beta1.GroupVersion, &apisv1beta1.OpenTelemetryCollector{}, &apisv1beta1.OpenTelemetryCollectorList{})
metav1.AddToGroupVersion(s, apisv1beta1.GroupVersion)
return nil
})
scheme := runtime.NewScheme()
err := schemeBuilder.AddToScheme(scheme)
require.NoError(t, err)
list := &OpenTelemetryCollectorList{
Items: []OpenTelemetryCollector{otelcollector1, otelcollector2},
list := &apisv1beta1.OpenTelemetryCollectorList{
Items: []apisv1beta1.OpenTelemetryCollector{otelcollector1, otelcollector2},
}
require.NoError(t, err, "Should be able to add custom types")
cl := fake.NewClientBuilder().WithLists(list).WithScheme(scheme).Build()
Expand Down Expand Up @@ -238,7 +239,7 @@ func TestOTELCollectorInitMetrics(t *testing.T) {
Attributes: attribute.NewSet(
attribute.Key("collector_name").String("collector2"),
attribute.Key("namespace").String("test2"),
attribute.Key("type").String(string(ModeSidecar)),
attribute.Key("type").String(string(apisv1beta1.ModeSidecar)),
),
Value: 1,
},
Expand Down Expand Up @@ -332,7 +333,7 @@ func TestOTELCollectorInitMetrics(t *testing.T) {
metricdatatest.AssertEqual(t, want, rm.ScopeMetrics[0], metricdatatest.IgnoreTimestamp())
}

func checkCreate(t *testing.T, m *Metrics, collectors []*OpenTelemetryCollector, reader metric.Reader) {
func checkCreate(t *testing.T, m *Metrics, collectors []*apisv1beta1.OpenTelemetryCollector, reader metric.Reader) {
provider := metric.NewMeterProvider(metric.WithReader(reader))
otel.SetMeterProvider(provider)

Expand Down Expand Up @@ -431,7 +432,7 @@ func checkCreate(t *testing.T, m *Metrics, collectors []*OpenTelemetryCollector,
Attributes: attribute.NewSet(
attribute.Key("collector_name").String("collector2"),
attribute.Key("namespace").String("test2"),
attribute.Key("type").String(string(ModeSidecar)),
attribute.Key("type").String(string(apisv1beta1.ModeSidecar)),
),
Value: 1,
},
Expand Down Expand Up @@ -525,7 +526,7 @@ func checkCreate(t *testing.T, m *Metrics, collectors []*OpenTelemetryCollector,
metricdatatest.AssertEqual(t, want, rm.ScopeMetrics[0], metricdatatest.IgnoreTimestamp())
}

func checkUpdate(t *testing.T, m *Metrics, collectors []*OpenTelemetryCollector, reader metric.Reader) {
func checkUpdate(t *testing.T, m *Metrics, collectors []*apisv1beta1.OpenTelemetryCollector, reader metric.Reader) {
m.Update(context.Background(), collectors[0], collectors[2])

rm := metricdata.ResourceMetrics{}
Expand All @@ -544,23 +545,23 @@ func checkUpdate(t *testing.T, m *Metrics, collectors []*OpenTelemetryCollector,
Attributes: attribute.NewSet(
attribute.Key("collector_name").String("collector1"),
attribute.Key("namespace").String("test1"),
attribute.Key("type").String(string(ModeDeployment)),
attribute.Key("type").String(string(apisv1beta1.ModeDeployment)),
),
Value: 0,
},
{
Attributes: attribute.NewSet(
attribute.Key("collector_name").String("collector1"),
attribute.Key("namespace").String("test1"),
attribute.Key("type").String(string(ModeSidecar)),
attribute.Key("type").String(string(apisv1beta1.ModeSidecar)),
),
Value: 1,
},
{
Attributes: attribute.NewSet(
attribute.Key("collector_name").String("collector2"),
attribute.Key("namespace").String("test2"),
attribute.Key("type").String(string(ModeSidecar)),
attribute.Key("type").String(string(apisv1beta1.ModeSidecar)),
),
Value: 1,
},
Expand Down Expand Up @@ -677,7 +678,7 @@ func checkUpdate(t *testing.T, m *Metrics, collectors []*OpenTelemetryCollector,
metricdatatest.AssertEqual(t, want, rm.ScopeMetrics[0], metricdatatest.IgnoreTimestamp())
}

func checkDelete(t *testing.T, m *Metrics, collectors []*OpenTelemetryCollector, reader metric.Reader) {
func checkDelete(t *testing.T, m *Metrics, collectors []*apisv1beta1.OpenTelemetryCollector, reader metric.Reader) {
m.Delete(context.Background(), collectors[1])
rm := metricdata.ResourceMetrics{}
err := reader.Collect(context.Background(), &rm)
Expand All @@ -694,23 +695,23 @@ func checkDelete(t *testing.T, m *Metrics, collectors []*OpenTelemetryCollector,
Attributes: attribute.NewSet(
attribute.Key("collector_name").String("collector1"),
attribute.Key("namespace").String("test1"),
attribute.Key("type").String(string(ModeDeployment)),
attribute.Key("type").String(string(apisv1beta1.ModeDeployment)),
),
Value: 0,
},
{
Attributes: attribute.NewSet(
attribute.Key("collector_name").String("collector1"),
attribute.Key("namespace").String("test1"),
attribute.Key("type").String(string(ModeSidecar)),
attribute.Key("type").String(string(apisv1beta1.ModeSidecar)),
),
Value: 1,
},
{
Attributes: attribute.NewSet(
attribute.Key("collector_name").String("collector2"),
attribute.Key("namespace").String("test2"),
attribute.Key("type").String(string(ModeSidecar)),
attribute.Key("type").String(string(apisv1beta1.ModeSidecar)),
),
Value: 0,
},
Expand Down
3 changes: 3 additions & 0 deletions apis/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module github.com/open-telemetry/opentelemetry-operator/apis

go 1.24.13
Loading