Skip to content

Commit eb3c990

Browse files
committed
Add tests and fix minor things
Signed-off-by: Ruben Vargas <[email protected]>
1 parent a8227d2 commit eb3c990

File tree

4 files changed

+111
-101
lines changed

4 files changed

+111
-101
lines changed

go.sum

+2-6
Original file line numberDiff line numberDiff line change
@@ -641,16 +641,12 @@ go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=
641641
go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=
642642
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.24.0 h1:mM8nKi6/iFQ0iqst80wDHU2ge198Ye/TfN0WBS5U24Y=
643643
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.24.0/go.mod h1:0PrIIzDteLSmNyxqcGYRL4mDIo8OTuBAOI/Bn1URxac=
644-
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0 h1:9M3+rhx7kZCIQQhQRYaZCdNu1V73tm4TvXs2ntl98C4=
645-
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0/go.mod h1:noq80iT8rrHP1SfybmPiRGc9dc5M8RPmGvtwo7Oo7tc=
646-
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.22.0 h1:FyjCyI9jVEfqhUh2MoSkmolPjfh5fp2hnV0b0irxH4Q=
647-
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.22.0/go.mod h1:hYwym2nDEeZfG/motx0p7L7J1N1vyzIThemQsb4g2qY=
648-
go.opentelemetry.io/otel/exporters/prometheus v0.46.0 h1:I8WIFXR351FoLJYuloU4EgXbtNX2URfU/85pUPheIEQ=
649-
go.opentelemetry.io/otel/exporters/prometheus v0.46.0/go.mod h1:ztwVUHe5DTR/1v7PeuGRnU5Bbd4QKYwApWmuutKsJSs=
650644
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0 h1:t6wl9SPayj+c7lEIFgm4ooDBZVb01IhLB4InpomhRw8=
651645
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0/go.mod h1:iSDOcsnSA5INXzZtwaBPrKp/lWu/V14Dd+llD0oI2EA=
652646
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0 h1:Xw8U6u2f8DK2XAkGRFV7BBLENgnTGX9i4rQRxJf+/vs=
653647
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0/go.mod h1:6KW1Fm6R/s6Z3PGXwSJN2K4eT6wQB3vXX6CVnYX9NmM=
648+
go.opentelemetry.io/otel/exporters/prometheus v0.46.0 h1:I8WIFXR351FoLJYuloU4EgXbtNX2URfU/85pUPheIEQ=
649+
go.opentelemetry.io/otel/exporters/prometheus v0.46.0/go.mod h1:ztwVUHe5DTR/1v7PeuGRnU5Bbd4QKYwApWmuutKsJSs=
654650
go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI=
655651
go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco=
656652
go.opentelemetry.io/otel/sdk v1.24.0 h1:YMPPDNymmQN3ZgczicBY3B6sf9n62Dlj9pWD3ucgoDw=

pkg/crdmetrics/collector.go

+8-6
Original file line numberDiff line numberDiff line change
@@ -110,14 +110,14 @@ func (i *OpenTelemetryCollectorMetrics) Setup() error {
110110
}
111111

112112
func (i *OpenTelemetryCollectorMetrics) callback(ctx context.Context, observer metric.Observer) error {
113+
// Reset observations
114+
for _, o := range i.observations {
115+
o.reset()
116+
}
117+
113118
v1alpha1collectors := &v1alpha1.OpenTelemetryCollectorList{}
114119
if err := i.client.List(ctx, v1alpha1collectors); err == nil {
115120

116-
// Reset observations
117-
for _, o := range i.observations {
118-
o.reset()
119-
}
120-
121121
for k := range v1alpha1collectors.Items {
122122
collector := v1alpha1collectors.Items[k]
123123
configInfo, err := getComponentsFromConfigV1Alpha1(collector.Spec.Config)
@@ -133,8 +133,10 @@ func (i *OpenTelemetryCollectorMetrics) callback(ctx context.Context, observer m
133133
o.Record(collectorInfo)
134134
}
135135
}
136+
}
136137

137-
v1beta1collectors := &v1beta1.OpenTelemetryCollectorList{}
138+
v1beta1collectors := &v1beta1.OpenTelemetryCollectorList{}
139+
if err := i.client.List(ctx, v1beta1collectors); err == nil {
138140

139141
for k := range v1beta1collectors.Items {
140142
collector := v1beta1collectors.Items[k]

pkg/crdmetrics/collector_test.go

+85-84
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,21 @@
1+
// Copyright The OpenTelemetry Authors
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
115
package crdmetrics
216

317
import (
418
"context"
5-
"github.com/open-telemetry/opentelemetry-operator/apis/v1beta1"
6-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
719
"testing"
820

921
"github.com/stretchr/testify/assert"
@@ -12,11 +24,13 @@ import (
1224
"go.opentelemetry.io/otel/attribute"
1325
"go.opentelemetry.io/otel/sdk/metric"
1426
"go.opentelemetry.io/otel/sdk/metric/metricdata"
27+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1528
"k8s.io/apimachinery/pkg/runtime"
1629
"k8s.io/client-go/kubernetes/scheme"
1730
"sigs.k8s.io/controller-runtime/pkg/client/fake"
1831

1932
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
33+
"github.com/open-telemetry/opentelemetry-operator/apis/v1beta1"
2034
)
2135

2236
type expectedMetric struct {
@@ -78,118 +92,110 @@ func TestValueObservedMetrics(t *testing.T) {
7892
s.AddKnownTypes(v1alpha1.GroupVersion,
7993
&v1alpha1.OpenTelemetryCollector{},
8094
&v1alpha1.OpenTelemetryCollectorList{},
95+
)
96+
97+
s.AddKnownTypes(v1beta1.GroupVersion,
8198
&v1beta1.OpenTelemetryCollector{},
8299
&v1beta1.OpenTelemetryCollectorList{},
83100
)
84-
85101
collector1 := v1alpha1.OpenTelemetryCollector{
86102
ObjectMeta: metav1.ObjectMeta{
87103
Name: "collector1",
88-
Namespace: "otel",
104+
Namespace: "otel1",
89105
},
90106
Spec: v1alpha1.OpenTelemetryCollectorSpec{
91107

92108
Mode: v1alpha1.ModeSidecar,
93109
Config: `
94-
receivers:
95-
otlp:
96-
protocols:
97-
grpc:
98-
http:
99-
processors:
100-
memory_limiter:
101-
check_interval: 1s
102-
limit_percentage: 75
103-
spike_limit_percentage: 15
104-
batch:
105-
send_batch_size: 10000
106-
timeout: 10s
107-
108-
exporters:
109-
debug:
110-
111-
service:
112-
pipelines:
113-
traces:
114-
receivers: [otlp]
115-
processors: []
116-
exporters: [debug]
117-
`,
110+
receivers:
111+
otlp:
112+
protocols:
113+
grpc: null
114+
http: null
115+
processors:
116+
memory_limiter:
117+
check_interval: 1s
118+
limit_percentage: 75
119+
spike_limit_percentage: 15
120+
batch:
121+
send_batch_size: 10000
122+
timeout: 10s
123+
exporters:
124+
debug: null
125+
service:
126+
pipelines:
127+
traces:
128+
receivers:
129+
- otlp
130+
`,
118131
},
119132
}
120133

121134
collector2 := v1alpha1.OpenTelemetryCollector{
122135
ObjectMeta: metav1.ObjectMeta{
123136
Name: "collector1",
124-
Namespace: "otel",
137+
Namespace: "otel2",
125138
},
126139
Spec: v1alpha1.OpenTelemetryCollectorSpec{
127140

128141
Mode: v1alpha1.ModeSidecar,
129142
Config: `
130-
receivers:
131-
otlp:
132-
protocols:
133-
grpc:
134-
http:
135-
processors:
136-
memory_limiter:
137-
check_interval: 1s
138-
limit_percentage: 75
139-
spike_limit_percentage: 15
140-
batch:
141-
send_batch_size: 10000
142-
timeout: 10s
143-
144-
exporters:
145-
debug:
146-
147-
service:
148-
pipelines:
149-
traces:
150-
receivers: [otlp]
151-
processors: []
152-
exporters: [debug]
153-
`,
143+
receivers:
144+
otlp:
145+
protocols:
146+
grpc: null
147+
http: null
148+
processors:
149+
memory_limiter:
150+
check_interval: 1s
151+
limit_percentage: 75
152+
spike_limit_percentage: 15
153+
batch:
154+
send_batch_size: 10000
155+
timeout: 10s
156+
exporters:
157+
debug: null
158+
service:
159+
pipelines:
160+
traces:
161+
receivers:
162+
- otlp
163+
`,
154164
},
155165
}
156166

157167
collector3 := v1beta1.OpenTelemetryCollector{
158168
ObjectMeta: metav1.ObjectMeta{
159169
Name: "collector1",
160-
Namespace: "otel",
170+
Namespace: "otel3",
161171
},
162172
Spec: v1beta1.OpenTelemetryCollectorSpec{
163173

164174
Mode: v1beta1.ModeSidecar,
165175
Config: v1beta1.Config{
166-
Receivers: v1beta1.AnyConfig{map[string]interface{}{
167-
""
176+
Receivers: v1beta1.AnyConfig{Object: map[string]interface{}{
177+
"otlp": true,
178+
}},
179+
Exporters: v1beta1.AnyConfig{Object: map[string]interface{}{
180+
"otlp": true,
181+
}},
182+
Processors: &v1beta1.AnyConfig{Object: map[string]interface{}{
183+
"batch": true,
168184
}},
169185
},
170186
},
171187
}
172188

173189
objs := []runtime.Object{
174-
&tempoGCS,
175-
&tempoS3,
176-
&tempoOtherS3,
177-
&tempoUnmanaged,
178-
&tempoUnmanaged2,
179-
&tempoTenantOpenshift,
180-
&tempoTenantStatic,
190+
&collector1,
191+
&collector2,
192+
&collector3,
181193
}
182194
expected := []expectedMetric{
183-
newExpectedMetric(managedMetric, attribute.String("state", string(v1alpha1.ManagementStateManaged)), 5),
184-
newExpectedMetric(managedMetric, attribute.String("state", string(v1alpha1.ManagementStateUnmanaged)), 2),
185-
newExpectedMetric(storageBackendMetric, attribute.String("type", string(v1alpha1.ObjectStorageSecretGCS)), 1),
186-
newExpectedMetric(storageBackendMetric, attribute.String("type", string(v1alpha1.ObjectStorageSecretS3)), 4),
187-
newExpectedMetric(storageBackendMetric, attribute.String("type", string(v1alpha1.ObjectStorageSecretAzure)), 2),
188-
newExpectedMetric(multitenancy, attribute.String("type", "disabled"), 5),
189-
newExpectedMetric(multitenancy, attribute.String("type", string(v1alpha1.ModeOpenShift)), 1),
190-
newExpectedMetric(multitenancy, attribute.String("type", string(v1alpha1.ModeStatic)), 1),
191-
newExpectedMetric(jaegerUIUsage, attribute.String("enabled", "true"), 1),
192-
newExpectedMetric(jaegerUIUsage, attribute.String("enabled", "false"), 6),
195+
newExpectedMetric(receivers, attribute.String("type", "otlp"), 3),
196+
newExpectedMetric(exporters, attribute.String("type", "debug"), 2),
197+
newExpectedMetric(processors, attribute.String("type", "memory_limiter"), 2),
198+
newExpectedMetric(processors, attribute.String("type", "batch"), 3),
193199
}
194200

195201
cl := fake.NewClientBuilder().WithScheme(s).WithRuntimeObjects(objs...).Build()
@@ -198,7 +204,7 @@ func TestValueObservedMetrics(t *testing.T) {
198204
provider := metric.NewMeterProvider(metric.WithReader(reader))
199205
otel.SetMeterProvider(provider)
200206

201-
instancesObservedValue := newTempoStackMetrics(cl)
207+
instancesObservedValue := newOpenTelemetryCollectorMetrics(cl)
202208
err := instancesObservedValue.Setup()
203209
require.NoError(t, err)
204210

@@ -211,7 +217,7 @@ func TestValueObservedMetrics(t *testing.T) {
211217
}
212218

213219
// Test deleting GCS storage
214-
err = cl.Delete(context.Background(), &tempoGCS)
220+
err = cl.Delete(context.Background(), &collector1)
215221
require.NoError(t, err)
216222

217223
// Reset measurement batches
@@ -223,15 +229,10 @@ func TestValueObservedMetrics(t *testing.T) {
223229

224230
// Set new numbers
225231
expected = []expectedMetric{
226-
newExpectedMetric(managedMetric, attribute.String("state", string(v1alpha1.ManagementStateManaged)), 4),
227-
newExpectedMetric(managedMetric, attribute.String("state", string(v1alpha1.ManagementStateUnmanaged)), 2),
228-
newExpectedMetric(storageBackendMetric, attribute.String("type", string(v1alpha1.ObjectStorageSecretGCS)), 0),
229-
newExpectedMetric(storageBackendMetric, attribute.String("type", string(v1alpha1.ObjectStorageSecretS3)), 4),
230-
newExpectedMetric(storageBackendMetric, attribute.String("type", string(v1alpha1.ObjectStorageSecretAzure)), 2),
231-
newExpectedMetric(multitenancy, attribute.String("type", string(v1alpha1.ModeOpenShift)), 1),
232-
newExpectedMetric(multitenancy, attribute.String("type", string(v1alpha1.ModeStatic)), 1),
233-
newExpectedMetric(jaegerUIUsage, attribute.String("enabled", "true"), 0),
234-
newExpectedMetric(jaegerUIUsage, attribute.String("enabled", "false"), 6),
232+
newExpectedMetric(receivers, attribute.String("type", "otlp"), 2),
233+
newExpectedMetric(exporters, attribute.String("type", "debug"), 1),
234+
newExpectedMetric(processors, attribute.String("type", "memory_limiter"), 1),
235+
newExpectedMetric(processors, attribute.String("type", "batch"), 2),
235236
}
236237
for _, e := range expected {
237238
assertLabelAndValues(t, e.name, metrics, e.labels, e.value)

pkg/crdmetrics/parse_config.go

+16-5
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ type components struct {
3030
}
3131

3232
func extractElements(elements map[string]interface{}) []string {
33+
if elements == nil {
34+
return []string{}
35+
}
36+
3337
itemsMap := map[string]struct{}{}
3438
var items []string
3539
for key := range elements {
@@ -58,10 +62,17 @@ func getComponentsFromConfigV1Alpha1(yamlContent string) (*components, error) {
5862

5963
func getComponentsFromConfigV1Beta1(yamlContent v1beta1.Config) *components {
6064

61-
return &components{
62-
processors: extractElements(yamlContent.Processors.Object),
63-
receivers: extractElements(yamlContent.Receivers.Object),
64-
exporters: extractElements(yamlContent.Exporters.Object),
65-
extensions: extractElements(yamlContent.Extensions.Object),
65+
info := &components{
66+
receivers: extractElements(yamlContent.Receivers.Object),
67+
exporters: extractElements(yamlContent.Exporters.Object),
68+
}
69+
70+
if yamlContent.Processors != nil {
71+
info.processors = extractElements(yamlContent.Processors.Object)
72+
}
73+
74+
if yamlContent.Extensions != nil {
75+
info.extensions = extractElements(yamlContent.Extensions.Object)
6676
}
77+
return info
6778
}

0 commit comments

Comments
 (0)