Skip to content

Commit 945b811

Browse files
working tests
[clickhouse/exporter] Update create schema config option (open-telemetry#33694) **Description:** A follow-up to open-telemetry#32282 that changes `create_schema` from `*bool` to `bool`, while also properly using the default config / factory. **Testing:** - Updated tests --------- Co-authored-by: Dmitrii Anoshin <[email protected]>
1 parent 1128ecd commit 945b811

File tree

11 files changed

+263
-27
lines changed

11 files changed

+263
-27
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Use this changelog template to create an entry for release notes.
2+
3+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
4+
change_type: breaking
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
7+
component: exporter/clickhouse
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: "Change internal config type for `create_schema` to use a `bool` instead of `*bool`"
11+
12+
# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
13+
issues: [33694]
14+
15+
# (Optional) One or more lines of additional information to render under the primary note.
16+
# These lines will be padded with 2 spaces and then inserted directly into the document.
17+
# Use pipe (|) for multiline entries.
18+
subtext:
19+
20+
# If your change doesn't affect end users or the exported elements of any package,
21+
# you should instead start your pull request title with [chore] or use the "Skip Changelog" label.
22+
# Optional: The change log or logs in which this entry should be included.
23+
# e.g. '[user]' or '[user, api]'
24+
# Include 'user' if the change is relevant to end users.
25+
# Include 'api' if there is a change to a library API.
26+
# Default: '[user]'
27+
change_logs: [api]

connector/sumconnector/config.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@
33

44
package sumconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/sumconnector"
55

6-
import (
7-
)
8-
96
// Config for the connector
107
type Config struct {
118
Spans map[string]MetricInfo `mapstructure:"spans"`

connector/sumconnector/connector.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package sumconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/sumconnector"
5+
6+
import (
7+
"context"
8+
9+
"go.opentelemetry.io/collector/component"
10+
"go.opentelemetry.io/collector/consumer"
11+
"go.opentelemetry.io/collector/pdata/plog"
12+
"go.opentelemetry.io/collector/pdata/pmetric"
13+
"go.opentelemetry.io/collector/pdata/ptrace"
14+
15+
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/contexts/ottldatapoint"
16+
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/contexts/ottllog"
17+
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/contexts/ottlmetric"
18+
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/contexts/ottlspan"
19+
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/contexts/ottlspanevent"
20+
)
21+
22+
// count can count spans, span event, metrics, data points, or log records
23+
// and emit the counts onto a metrics pipeline.
24+
type count struct {
25+
metricsConsumer consumer.Metrics
26+
component.StartFunc
27+
component.ShutdownFunc
28+
29+
spansMetricDefs map[string]metricDef[ottlspan.TransformContext]
30+
spanEventsMetricDefs map[string]metricDef[ottlspanevent.TransformContext]
31+
metricsMetricDefs map[string]metricDef[ottlmetric.TransformContext]
32+
dataPointsMetricDefs map[string]metricDef[ottldatapoint.TransformContext]
33+
logsMetricDefs map[string]metricDef[ottllog.TransformContext]
34+
}
35+
36+
func (c *count) Capabilities() consumer.Capabilities {
37+
return consumer.Capabilities{MutatesData: false}
38+
}
39+
40+
func (c *count) ConsumeTraces(ctx context.Context, td ptrace.Traces) error {
41+
42+
countMetrics := pmetric.NewMetrics()
43+
countMetrics.ResourceMetrics().EnsureCapacity(td.ResourceSpans().Len())
44+
45+
return c.metricsConsumer.ConsumeMetrics(ctx, countMetrics)
46+
}
47+
48+
func (c *count) ConsumeMetrics(ctx context.Context, md pmetric.Metrics) error {
49+
50+
countMetrics := pmetric.NewMetrics()
51+
countMetrics.ResourceMetrics().EnsureCapacity(md.ResourceMetrics().Len())
52+
53+
return c.metricsConsumer.ConsumeMetrics(ctx, countMetrics)
54+
}
55+
56+
func (c *count) ConsumeLogs(ctx context.Context, ld plog.Logs) error {
57+
countMetrics := pmetric.NewMetrics()
58+
countMetrics.ResourceMetrics().EnsureCapacity(ld.ResourceLogs().Len())
59+
60+
return c.metricsConsumer.ConsumeMetrics(ctx, countMetrics)
61+
}

connector/sumconnector/factory.go

Lines changed: 135 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,31 @@
66
package sumconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/sumconnector"
77

88
import (
9+
"context"
10+
911
"go.opentelemetry.io/collector/component"
1012
"go.opentelemetry.io/collector/connector"
13+
"go.opentelemetry.io/collector/consumer"
1114

1215
"github.com/open-telemetry/opentelemetry-collector-contrib/connector/sumconnector/internal/metadata"
16+
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter/expr"
17+
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter/filterottl"
18+
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl"
19+
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/contexts/ottldatapoint"
20+
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/contexts/ottllog"
21+
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/contexts/ottlmetric"
22+
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/contexts/ottlspan"
23+
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/contexts/ottlspanevent"
1324
)
1425

1526
// NewFactory returns a ConnectorFactory.
1627
func NewFactory() connector.Factory {
1728
return connector.NewFactory(
1829
metadata.Type,
1930
createDefaultConfig,
20-
connector.WithTracesToMetrics(nil, metadata.TracesToMetricsStability),
21-
connector.WithMetricsToMetrics(nil, metadata.MetricsToMetricsStability),
22-
connector.WithLogsToMetrics(nil, metadata.LogsToMetricsStability),
31+
connector.WithTracesToMetrics(createTracesToMetrics, metadata.TracesToMetricsStability),
32+
connector.WithMetricsToMetrics(createMetricsToMetrics, metadata.MetricsToMetricsStability),
33+
connector.WithLogsToMetrics(createLogsToMetrics, metadata.LogsToMetricsStability),
2334
)
2435
}
2536

@@ -28,3 +39,124 @@ func createDefaultConfig() component.Config {
2839
return &Config{}
2940
}
3041

42+
// createTracesToMetrics creates a traces to metrics connector based on provided config.
43+
func createTracesToMetrics(
44+
_ context.Context,
45+
set connector.Settings,
46+
cfg component.Config,
47+
nextConsumer consumer.Metrics,
48+
) (connector.Traces, error) {
49+
c := cfg.(*Config)
50+
51+
spanMetricDefs := make(map[string]metricDef[ottlspan.TransformContext], len(c.Spans))
52+
for name, info := range c.Spans {
53+
md := metricDef[ottlspan.TransformContext]{
54+
desc: info.Description,
55+
attrs: info.Attributes,
56+
}
57+
if len(info.Conditions) > 0 {
58+
// Error checked in Config.Validate()
59+
condition, _ := filterottl.NewBoolExprForSpan(info.Conditions, filterottl.StandardSpanFuncs(), ottl.PropagateError, set.TelemetrySettings)
60+
md.condition = condition
61+
}
62+
spanMetricDefs[name] = md
63+
}
64+
65+
spanEventMetricDefs := make(map[string]metricDef[ottlspanevent.TransformContext], len(c.SpanEvents))
66+
for name, info := range c.SpanEvents {
67+
md := metricDef[ottlspanevent.TransformContext]{
68+
desc: info.Description,
69+
attrs: info.Attributes,
70+
}
71+
if len(info.Conditions) > 0 {
72+
// Error checked in Config.Validate()
73+
condition, _ := filterottl.NewBoolExprForSpanEvent(info.Conditions, filterottl.StandardSpanEventFuncs(), ottl.PropagateError, set.TelemetrySettings)
74+
md.condition = condition
75+
}
76+
spanEventMetricDefs[name] = md
77+
}
78+
79+
return &count{
80+
metricsConsumer: nextConsumer,
81+
spansMetricDefs: spanMetricDefs,
82+
spanEventsMetricDefs: spanEventMetricDefs,
83+
}, nil
84+
}
85+
86+
// createMetricsToMetrics creates a metricds to metrics connector based on provided config.
87+
func createMetricsToMetrics(
88+
_ context.Context,
89+
set connector.Settings,
90+
cfg component.Config,
91+
nextConsumer consumer.Metrics,
92+
) (connector.Metrics, error) {
93+
c := cfg.(*Config)
94+
95+
metricMetricDefs := make(map[string]metricDef[ottlmetric.TransformContext], len(c.Metrics))
96+
for name, info := range c.Metrics {
97+
md := metricDef[ottlmetric.TransformContext]{
98+
desc: info.Description,
99+
}
100+
if len(info.Conditions) > 0 {
101+
// Error checked in Config.Validate()
102+
condition, _ := filterottl.NewBoolExprForMetric(info.Conditions, filterottl.StandardMetricFuncs(), ottl.PropagateError, set.TelemetrySettings)
103+
md.condition = condition
104+
}
105+
metricMetricDefs[name] = md
106+
}
107+
108+
dataPointMetricDefs := make(map[string]metricDef[ottldatapoint.TransformContext], len(c.DataPoints))
109+
for name, info := range c.DataPoints {
110+
md := metricDef[ottldatapoint.TransformContext]{
111+
desc: info.Description,
112+
attrs: info.Attributes,
113+
}
114+
if len(info.Conditions) > 0 {
115+
// Error checked in Config.Validate()
116+
condition, _ := filterottl.NewBoolExprForDataPoint(info.Conditions, filterottl.StandardDataPointFuncs(), ottl.PropagateError, set.TelemetrySettings)
117+
md.condition = condition
118+
}
119+
dataPointMetricDefs[name] = md
120+
}
121+
122+
return &count{
123+
metricsConsumer: nextConsumer,
124+
metricsMetricDefs: metricMetricDefs,
125+
dataPointsMetricDefs: dataPointMetricDefs,
126+
}, nil
127+
}
128+
129+
// createLogsToMetrics creates a logs to metrics connector based on provided config.
130+
func createLogsToMetrics(
131+
_ context.Context,
132+
set connector.Settings,
133+
cfg component.Config,
134+
nextConsumer consumer.Metrics,
135+
) (connector.Logs, error) {
136+
c := cfg.(*Config)
137+
138+
metricDefs := make(map[string]metricDef[ottllog.TransformContext], len(c.Logs))
139+
for name, info := range c.Logs {
140+
md := metricDef[ottllog.TransformContext]{
141+
desc: info.Description,
142+
attrs: info.Attributes,
143+
}
144+
if len(info.Conditions) > 0 {
145+
// Error checked in Config.Validate()
146+
condition, _ := filterottl.NewBoolExprForLog(info.Conditions, filterottl.StandardLogFuncs(), ottl.PropagateError, set.TelemetrySettings)
147+
md.condition = condition
148+
}
149+
metricDefs[name] = md
150+
}
151+
152+
return &count{
153+
metricsConsumer: nextConsumer,
154+
logsMetricDefs: metricDefs,
155+
}, nil
156+
}
157+
158+
type metricDef[K any] struct {
159+
condition expr.BoolExpr[K]
160+
desc string
161+
attrs []AttributeConfig
162+
}

connector/sumconnector/generated_component_test.go

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

connector/sumconnector/generated_package_test.go

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

connector/sumconnector/go.mod

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,31 @@ module github.com/open-telemetry/opentelemetry-collector-contrib/connector/sumco
33
go 1.21.0
44

55
require (
6+
github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.0.0-00010101000000-000000000000
7+
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.103.0
68
github.com/stretchr/testify v1.9.0
79
go.opentelemetry.io/collector/component v0.103.0
810
go.opentelemetry.io/collector/confmap v0.103.0
911
go.opentelemetry.io/collector/connector v0.103.0
1012
go.opentelemetry.io/collector/consumer v0.103.0
13+
go.opentelemetry.io/collector/pdata v1.10.0
1114
go.uber.org/goleak v1.3.0
1215
)
1316

1417
require (
18+
github.com/alecthomas/participle/v2 v2.1.1 // indirect
1519
github.com/beorn7/perks v1.0.1 // indirect
1620
github.com/cespare/xxhash/v2 v2.3.0 // indirect
1721
github.com/davecgh/go-spew v1.1.1 // indirect
1822
github.com/go-logr/logr v1.4.1 // indirect
1923
github.com/go-logr/stdr v1.2.2 // indirect
2024
github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
25+
github.com/gobwas/glob v0.2.3 // indirect
2126
github.com/gogo/protobuf v1.3.2 // indirect
2227
github.com/google/uuid v1.6.0 // indirect
2328
github.com/hashicorp/go-version v1.7.0 // indirect
29+
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
30+
github.com/iancoleman/strcase v0.3.0 // indirect
2431
github.com/json-iterator/go v1.1.12 // indirect
2532
github.com/knadh/koanf/maps v0.1.1 // indirect
2633
github.com/knadh/koanf/providers/confmap v0.1.0 // indirect
@@ -29,6 +36,7 @@ require (
2936
github.com/mitchellh/reflectwalk v1.0.2 // indirect
3037
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
3138
github.com/modern-go/reflect2 v1.0.2 // indirect
39+
github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.103.0 // indirect
3240
github.com/pmezard/go-difflib v1.0.0 // indirect
3341
github.com/prometheus/client_golang v1.19.1 // indirect
3442
github.com/prometheus/client_model v0.6.1 // indirect
@@ -37,7 +45,7 @@ require (
3745
go.opentelemetry.io/collector v0.103.0 // indirect
3846
go.opentelemetry.io/collector/config/configtelemetry v0.103.0 // indirect
3947
go.opentelemetry.io/collector/featuregate v1.10.0 // indirect
40-
go.opentelemetry.io/collector/pdata v1.10.0 // indirect
48+
go.opentelemetry.io/collector/semconv v0.103.0 // indirect
4149
go.opentelemetry.io/otel v1.27.0 // indirect
4250
go.opentelemetry.io/otel/exporters/prometheus v0.49.0 // indirect
4351
go.opentelemetry.io/otel/metric v1.27.0 // indirect
@@ -46,6 +54,7 @@ require (
4654
go.opentelemetry.io/otel/trace v1.27.0 // indirect
4755
go.uber.org/multierr v1.11.0 // indirect
4856
go.uber.org/zap v1.27.0 // indirect
57+
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect
4958
golang.org/x/net v0.26.0 // indirect
5059
golang.org/x/sys v0.21.0 // indirect
5160
golang.org/x/text v0.16.0 // indirect

0 commit comments

Comments
 (0)