@@ -23,15 +23,15 @@ const (
23
23
type MetricsAggregator struct {
24
24
m sync.Mutex
25
25
log slog.Logger
26
- queue []annotatedMetrics
26
+ queue []annotatedMetric
27
27
}
28
28
29
- type annotatedMetrics struct {
29
+ type annotatedMetric struct {
30
+ agentsdk.AgentMetric
31
+
30
32
username string
31
33
workspaceName string
32
34
agentName string
33
-
34
- metrics []agentsdk.AgentMetric
35
35
}
36
36
37
37
var _ prometheus.Collector = new (MetricsAggregator )
@@ -47,16 +47,14 @@ func (ma *MetricsAggregator) Collect(ch chan<- prometheus.Metric) {
47
47
ma .m .Lock ()
48
48
defer ma .m .Unlock ()
49
49
50
- for _ , annotated := range ma .queue {
51
- for _ , m := range annotated .metrics {
52
- desc := prometheus .NewDesc (m .Name , metricHelpForAgent , agentMetricsLabels , nil )
53
- valueType , err := asPrometheusValueType (m .Type )
54
- if err != nil {
55
- ma .log .Error (context .Background (), "can't convert Prometheus value type" , slog .F ("value_type" , m .Type ), slog .Error (err ))
56
- }
57
- constMetric := prometheus .MustNewConstMetric (desc , valueType , m .Value , annotated .username , annotated .workspaceName , annotated .agentName )
58
- ch <- constMetric
50
+ for _ , m := range ma .queue {
51
+ desc := prometheus .NewDesc (m .Name , metricHelpForAgent , agentMetricsLabels , nil )
52
+ valueType , err := asPrometheusValueType (m .Type )
53
+ if err != nil {
54
+ ma .log .Error (context .Background (), "can't convert Prometheus value type" , slog .F ("value_type" , m .Type ), slog .Error (err ))
59
55
}
56
+ constMetric := prometheus .MustNewConstMetric (desc , valueType , m .Value , m .username , m .workspaceName , m .agentName )
57
+ ch <- constMetric
60
58
}
61
59
}
62
60
@@ -66,13 +64,23 @@ func (ma *MetricsAggregator) Update(_ context.Context, username, workspaceName,
66
64
ma .m .Lock ()
67
65
defer ma .m .Unlock ()
68
66
69
- ma .queue = append (ma .queue , annotatedMetrics {
70
- username : username ,
71
- workspaceName : workspaceName ,
72
- agentName : agentName ,
67
+ UpdateLoop:
68
+ for _ , m := range metrics {
69
+ for i , q := range ma .queue {
70
+ if q .username == username && q .workspaceName == workspaceName && q .agentName == agentName && q .Name == m .Name {
71
+ ma .queue [i ].AgentMetric .Value = m .Value
72
+ continue UpdateLoop
73
+ }
74
+ }
75
+
76
+ ma .queue = append (ma .queue , annotatedMetric {
77
+ username : username ,
78
+ workspaceName : workspaceName ,
79
+ agentName : agentName ,
73
80
74
- metrics : metrics ,
75
- })
81
+ AgentMetric : m ,
82
+ })
83
+ }
76
84
}
77
85
78
86
func asPrometheusValueType (metricType agentsdk.AgentMetricType ) (prometheus.ValueType , error ) {
0 commit comments