@@ -47,15 +47,17 @@ func (b *MetricBuilder) AddMetricType(metricID, metricType string) {
47
47
48
48
// AddDataPoints adds metrics data points from Fiddler API query results
49
49
func (b * MetricBuilder ) AddDataPoints (projectName string , results map [string ]client.QueryResult ) {
50
- // Resource scope for all metrics
51
- rm := b .metrics .ResourceMetrics ().AppendEmpty ()
52
- resource := rm .Resource ()
53
- resource .Attributes ().PutStr ("service.name" , "fiddler" )
54
- resource .Attributes ().PutStr ("fiddler.project" , projectName )
50
+ // Get a resource metric for this project
51
+ rm := b .getOrCreateResourceMetric (projectName )
55
52
56
- // Scope for all metrics
57
- sm := rm .ScopeMetrics ().AppendEmpty ()
58
- sm .Scope ().SetName ("fiddlerreceiver" )
53
+ // Get or create scope
54
+ var sm pmetric.ScopeMetrics
55
+ if rm .ScopeMetrics ().Len () > 0 {
56
+ sm = rm .ScopeMetrics ().At (0 )
57
+ } else {
58
+ sm = rm .ScopeMetrics ().AppendEmpty ()
59
+ sm .Scope ().SetName ("fiddlerreceiver" )
60
+ }
59
61
60
62
// Process each query result
61
63
for _ , result := range results {
@@ -98,6 +100,26 @@ func (b *MetricBuilder) AddDataPoints(projectName string, results map[string]cli
98
100
}
99
101
}
100
102
103
+ // getOrCreateResourceMetric gets an existing resource metric for the project or creates a new one
104
+ func (b * MetricBuilder ) getOrCreateResourceMetric (projectName string ) pmetric.ResourceMetrics {
105
+ // Look for existing resource metric for this project
106
+ for i := 0 ; i < b .metrics .ResourceMetrics ().Len (); i ++ {
107
+ rm := b .metrics .ResourceMetrics ().At (i )
108
+ projectAttr , ok := rm .Resource ().Attributes ().Get ("fiddler.project" )
109
+ if ok && projectAttr .Str () == projectName {
110
+ return rm
111
+ }
112
+ }
113
+
114
+ // Create new resource metric if not found
115
+ rm := b .metrics .ResourceMetrics ().AppendEmpty ()
116
+ resource := rm .Resource ()
117
+ resource .Attributes ().PutStr ("service.name" , "fiddler" )
118
+ resource .Attributes ().PutStr ("fiddler.project" , projectName )
119
+
120
+ return rm
121
+ }
122
+
101
123
// addMetricFromColumn adds a metric based on the column name and metric type
102
124
func (b * MetricBuilder ) addMetricFromColumn (sm pmetric.ScopeMetrics , projectName string , result client.QueryResult , timestamp time.Time , colName string , value float64 ) {
103
125
modelName := result .Model .Name
0 commit comments