@@ -41,7 +41,8 @@ type signalToMetrics struct {
4141 component.StartFunc
4242 component.ShutdownFunc
4343
44- logger * zap.Logger
44+ collectorInstanceInfo * model.CollectorInstanceInfo
45+ logger * zap.Logger
4546
4647 next consumer.Metrics
4748 spanMetricDefs []model.MetricDef [ottlspan.TransformContext ]
@@ -73,10 +74,8 @@ func (sm *signalToMetrics) ConsumeTraces(ctx context.Context, td ptrace.Traces)
7374 spanAttrs := span .Attributes ()
7475 adjustedCount := int64 (trace .CalculateAdjustedCount (span .TraceState ().AsRaw ()))
7576 for _ , md := range sm .spanMetricDefs {
76- filteredSpanAttrs := getFilteredAttributes (spanAttrs , md .Attributes )
77- if filteredSpanAttrs .Len () != len (md .Attributes ) {
78- // If any of the configured attributes is not present in
79- // source metric then don't count them.
77+ filteredSpanAttrs , ok := md .FilterAttributes (spanAttrs )
78+ if ! ok {
8079 continue
8180 }
8281
@@ -95,14 +94,7 @@ func (sm *signalToMetrics) ConsumeTraces(ctx context.Context, td ptrace.Traces)
9594 }
9695 }
9796
98- var filteredResAttrs pcommon.Map
99- if len (md .IncludeResourceAttributes ) > 0 {
100- filteredResAttrs = getFilteredAttributes (resourceAttrs , md .IncludeResourceAttributes )
101- } else {
102- // Copy resource attrs to avoid mutating data
103- filteredResAttrs = pcommon .NewMap ()
104- resourceAttrs .CopyTo (filteredResAttrs )
105- }
97+ filteredResAttrs := md .FilterResourceAttributes (resourceAttrs , sm .collectorInstanceInfo )
10698 multiError = errors .Join (multiError , aggregator .Aggregate (ctx , tCtx , md , filteredResAttrs , filteredSpanAttrs , adjustedCount ))
10799 }
108100 }
@@ -130,15 +122,7 @@ func (sm *signalToMetrics) ConsumeMetrics(ctx context.Context, m pmetric.Metrics
130122 metrics := scopeMetric .Metrics ()
131123 metric := metrics .At (k )
132124 for _ , md := range sm .dpMetricDefs {
133- var filteredResAttrs pcommon.Map
134- if len (md .IncludeResourceAttributes ) > 0 {
135- filteredResAttrs = getFilteredAttributes (resourceAttrs , md .IncludeResourceAttributes )
136- } else {
137- // Copy resource attrs to avoid mutating data
138- filteredResAttrs = pcommon .NewMap ()
139- resourceAttrs .CopyTo (filteredResAttrs )
140- }
141-
125+ filteredResAttrs := md .FilterResourceAttributes (resourceAttrs , sm .collectorInstanceInfo )
142126 aggregate := func (dp any , dpAttrs pcommon.Map ) error {
143127 // The transform context is created from orginal attributes so that the
144128 // OTTL expressions are also applied on the original attributes.
@@ -163,10 +147,8 @@ func (sm *signalToMetrics) ConsumeMetrics(ctx context.Context, m pmetric.Metrics
163147 dps := metric .Gauge ().DataPoints ()
164148 for l := 0 ; l < dps .Len (); l ++ {
165149 dp := dps .At (l )
166- filteredDPAttrs := getFilteredAttributes (dp .Attributes (), md .Attributes )
167- if filteredDPAttrs .Len () != len (md .Attributes ) {
168- // If all the configured attributes are not present in
169- // source metric then don't count them.
150+ filteredDPAttrs , ok := md .FilterAttributes (dp .Attributes ())
151+ if ! ok {
170152 continue
171153 }
172154 multiError = errors .Join (multiError , aggregate (dp , filteredDPAttrs ))
@@ -175,10 +157,8 @@ func (sm *signalToMetrics) ConsumeMetrics(ctx context.Context, m pmetric.Metrics
175157 dps := metric .Sum ().DataPoints ()
176158 for l := 0 ; l < dps .Len (); l ++ {
177159 dp := dps .At (l )
178- filteredDPAttrs := getFilteredAttributes (dp .Attributes (), md .Attributes )
179- if filteredDPAttrs .Len () != len (md .Attributes ) {
180- // If all the configured attributes are not present in
181- // source metric then don't count them.
160+ filteredDPAttrs , ok := md .FilterAttributes (dp .Attributes ())
161+ if ! ok {
182162 continue
183163 }
184164 multiError = errors .Join (multiError , aggregate (dp , filteredDPAttrs ))
@@ -187,10 +167,8 @@ func (sm *signalToMetrics) ConsumeMetrics(ctx context.Context, m pmetric.Metrics
187167 dps := metric .Summary ().DataPoints ()
188168 for l := 0 ; l < dps .Len (); l ++ {
189169 dp := dps .At (l )
190- filteredDPAttrs := getFilteredAttributes (dp .Attributes (), md .Attributes )
191- if filteredDPAttrs .Len () != len (md .Attributes ) {
192- // If all the configured attributes are not present in
193- // source metric then don't count them.
170+ filteredDPAttrs , ok := md .FilterAttributes (dp .Attributes ())
171+ if ! ok {
194172 continue
195173 }
196174 multiError = errors .Join (multiError , aggregate (dp , filteredDPAttrs ))
@@ -199,10 +177,8 @@ func (sm *signalToMetrics) ConsumeMetrics(ctx context.Context, m pmetric.Metrics
199177 dps := metric .Histogram ().DataPoints ()
200178 for l := 0 ; l < dps .Len (); l ++ {
201179 dp := dps .At (l )
202- filteredDPAttrs := getFilteredAttributes (dp .Attributes (), md .Attributes )
203- if filteredDPAttrs .Len () != len (md .Attributes ) {
204- // If all the configured attributes are not present in
205- // source metric then don't count them.
180+ filteredDPAttrs , ok := md .FilterAttributes (dp .Attributes ())
181+ if ! ok {
206182 continue
207183 }
208184 multiError = errors .Join (multiError , aggregate (dp , filteredDPAttrs ))
@@ -211,10 +187,8 @@ func (sm *signalToMetrics) ConsumeMetrics(ctx context.Context, m pmetric.Metrics
211187 dps := metric .ExponentialHistogram ().DataPoints ()
212188 for l := 0 ; l < dps .Len (); l ++ {
213189 dp := dps .At (l )
214- filteredDPAttrs := getFilteredAttributes (dp .Attributes (), md .Attributes )
215- if filteredDPAttrs .Len () != len (md .Attributes ) {
216- // If all the configured attributes are not present in
217- // source metric then don't count them.
190+ filteredDPAttrs , ok := md .FilterAttributes (dp .Attributes ())
191+ if ! ok {
218192 continue
219193 }
220194 multiError = errors .Join (multiError , aggregate (dp , filteredDPAttrs ))
@@ -248,10 +222,8 @@ func (sm *signalToMetrics) ConsumeLogs(ctx context.Context, logs plog.Logs) erro
248222 log := scopeLog .LogRecords ().At (k )
249223 logAttrs := log .Attributes ()
250224 for _ , md := range sm .logMetricDefs {
251- filteredLogAttrs := getFilteredAttributes (logAttrs , md .Attributes )
252- if filteredLogAttrs .Len () != len (md .Attributes ) {
253- // If all the configured attributes are not present in
254- // source metric then don't count them.
225+ filteredLogAttrs , ok := md .FilterAttributes (logAttrs )
226+ if ! ok {
255227 continue
256228 }
257229
@@ -270,14 +242,7 @@ func (sm *signalToMetrics) ConsumeLogs(ctx context.Context, logs plog.Logs) erro
270242 }
271243 }
272244
273- var filteredResAttrs pcommon.Map
274- if len (md .IncludeResourceAttributes ) > 0 {
275- filteredResAttrs = getFilteredAttributes (resourceAttrs , md .IncludeResourceAttributes )
276- } else {
277- // Copy resource attrs to avoid mutating data
278- filteredResAttrs = pcommon .NewMap ()
279- resourceAttrs .CopyTo (filteredResAttrs )
280- }
245+ filteredResAttrs := md .FilterResourceAttributes (resourceAttrs , sm .collectorInstanceInfo )
281246 multiError = errors .Join (multiError , aggregator .Aggregate (ctx , tCtx , md , filteredResAttrs , filteredLogAttrs , 1 ))
282247 }
283248 }
@@ -306,17 +271,3 @@ func (sm *signalToMetrics) processNext(ctx context.Context, m pmetric.Metrics, e
306271 }
307272 return sm .next .ConsumeMetrics (ctx , m )
308273}
309-
310- func getFilteredAttributes (attrs pcommon.Map , filters []model.AttributeKeyValue ) pcommon.Map {
311- filteredAttrs := pcommon .NewMap ()
312- for _ , filter := range filters {
313- if attr , ok := attrs .Get (filter .Key ); ok {
314- attr .CopyTo (filteredAttrs .PutEmpty (filter .Key ))
315- continue
316- }
317- if filter .DefaultValue .Type () != pcommon .ValueTypeEmpty {
318- filter .DefaultValue .CopyTo (filteredAttrs .PutEmpty (filter .Key ))
319- }
320- }
321- return filteredAttrs
322- }
0 commit comments