Skip to content

Commit a764cef

Browse files
committed
Collect metrics data
1 parent 3c31168 commit a764cef

File tree

1 file changed

+36
-11
lines changed

1 file changed

+36
-11
lines changed

coderd/prometheusmetrics/insights/metricscollector.go

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package insights
22

33
import (
44
"context"
5+
"sync/atomic"
56
"time"
67

78
"github.com/google/uuid"
@@ -24,6 +25,16 @@ type MetricsCollector struct {
2425
database database.Store
2526
logger slog.Logger
2627
duration time.Duration
28+
29+
data atomic.Pointer[insightsData]
30+
}
31+
32+
type insightsData struct {
33+
templates []database.GetTemplateInsightsByTemplateRow
34+
apps []database.GetTemplateAppInsightsRow
35+
parameters []database.GetTemplateParameterInsightsRow
36+
37+
templateNames map[uuid.UUID]string
2738
}
2839

2940
var _ prometheus.Collector = new(MetricsCollector)
@@ -59,7 +70,7 @@ func (mc *MetricsCollector) Run(ctx context.Context) (func(), error) {
5970

6071
// TODO collect iteration time
6172

62-
var userActivity []database.GetUserActivityInsightsRow
73+
var templateInsights []database.GetTemplateInsightsByTemplateRow
6374
var appInsights []database.GetTemplateAppInsightsRow
6475
var parameterInsights []database.GetTemplateParameterInsightsRow
6576

@@ -69,7 +80,7 @@ func (mc *MetricsCollector) Run(ctx context.Context) (func(), error) {
6980

7081
eg.Go(func() error {
7182
var err error
72-
userActivity, err = mc.database.GetUserActivityInsights(egCtx, database.GetUserActivityInsightsParams{
83+
templateInsights, err = mc.database.GetTemplateInsightsByTemplate(egCtx, database.GetTemplateInsightsByTemplateParams{
7384
StartTime: startTime,
7485
EndTime: endTime,
7586
})
@@ -107,7 +118,7 @@ func (mc *MetricsCollector) Run(ctx context.Context) (func(), error) {
107118
}
108119

109120
// Phase 2: Collect template IDs, and fetch relevant details
110-
templateIDs := uniqueTemplateIDs(userActivity, appInsights, parameterInsights)
121+
templateIDs := uniqueTemplateIDs(templateInsights, appInsights, parameterInsights)
111122
templates, err := mc.database.GetTemplatesWithFilter(ctx, database.GetTemplatesWithFilterParams{
112123
IDs: templateIDs,
113124
})
@@ -116,8 +127,15 @@ func (mc *MetricsCollector) Run(ctx context.Context) (func(), error) {
116127
return
117128
}
118129

119-
/*templateNames := */
120-
onlyTemplateNames(templates)
130+
templateNames := onlyTemplateNames(templates)
131+
132+
mc.data.Store(&insightsData{
133+
templates: templateInsights,
134+
apps: appInsights,
135+
parameters: parameterInsights,
136+
137+
templateNames: templateNames,
138+
})
121139
}
122140

123141
go func() {
@@ -147,17 +165,24 @@ func (*MetricsCollector) Describe(descCh chan<- *prometheus.Desc) {
147165
func (mc *MetricsCollector) Collect(metricsCh chan<- prometheus.Metric) {
148166
// Phase 3: Collect metrics
149167

150-
// TODO
168+
data := mc.data.Load()
169+
if data == nil {
170+
return // insights data not loaded yet
171+
}
172+
173+
for _, templateRow := range data.templates {
174+
metricsCh <- prometheus.MustNewConstMetric(activeUsersDesc, prometheus.GaugeValue, float64(templateRow.ActiveUsers), data.templateNames[templateRow.TemplateID])
175+
176+
// TODO applicationsUsageSeconds, parameters
177+
}
151178
}
152179

153180
// Helper functions below.
154181

155-
func uniqueTemplateIDs(userActivity []database.GetUserActivityInsightsRow, appInsights []database.GetTemplateAppInsightsRow, parameterInsights []database.GetTemplateParameterInsightsRow) []uuid.UUID {
182+
func uniqueTemplateIDs(templateInsights []database.GetTemplateInsightsByTemplateRow, appInsights []database.GetTemplateAppInsightsRow, parameterInsights []database.GetTemplateParameterInsightsRow) []uuid.UUID {
156183
tids := map[uuid.UUID]bool{}
157-
for _, t := range userActivity {
158-
for _, tid := range t.TemplateIDs {
159-
tids[tid] = true
160-
}
184+
for _, t := range templateInsights {
185+
tids[t.TemplateID] = true
161186
}
162187

163188
for _, a := range appInsights {

0 commit comments

Comments
 (0)