Skip to content

Commit 199e549

Browse files
committed
WIP
1 parent e4d708b commit 199e549

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package prometheusmetrics
2+
3+
import (
4+
"context"
5+
"time"
6+
7+
"github.com/prometheus/client_golang/prometheus"
8+
9+
"cdr.dev/slog"
10+
"github.com/coder/coder/coderd/database"
11+
"github.com/coder/coder/coderd/database/dbauthz"
12+
)
13+
14+
func AgentStats(ctx context.Context, logger slog.Logger, registerer prometheus.Registerer, db database.Store, duration time.Duration) (context.CancelFunc, error) {
15+
if duration == 0 {
16+
duration = 1 * time.Minute
17+
}
18+
19+
metricsCollectorAgentStats := prometheus.NewHistogram(prometheus.HistogramOpts{
20+
Namespace: "coderd",
21+
Subsystem: "prometheusmetrics",
22+
Name: "agentstats_execution_seconds",
23+
Help: "Histogram for duration of agent stats metrics collection in seconds.",
24+
Buckets: []float64{0.001, 0.005, 0.010, 0.025, 0.050, 0.100, 0.500, 1, 5, 10, 30},
25+
})
26+
err := registerer.Register(metricsCollectorAgentStats)
27+
if err != nil {
28+
return nil, err
29+
}
30+
31+
ctx, cancelFunc := context.WithCancel(dbauthz.AsSystemRestricted(ctx))
32+
ticker := time.NewTicker(duration)
33+
go func() {
34+
defer ticker.Stop()
35+
for {
36+
select {
37+
case <-ctx.Done():
38+
return
39+
case <-ticker.C:
40+
}
41+
42+
logger.Debug(ctx, "Agent metrics collection is starting")
43+
timer := prometheus.NewTimer(metricsCollectorAgentStats)
44+
45+
logger.Debug(ctx, "Agent metrics collection is done")
46+
metricsCollectorAgentStats.Observe(timer.ObserveDuration().Seconds())
47+
}
48+
}()
49+
return cancelFunc, nil
50+
51+
}

0 commit comments

Comments
 (0)