MCPcopy Index your code
hub / github.com/coder/coder / ActiveUsers

Function ActiveUsers

coderd/prometheusmetrics/prometheusmetrics.go:31–76  ·  view source on GitHub ↗

ActiveUsers tracks the number of users that have authenticated within the past hour.

(ctx context.Context, logger slog.Logger, registerer prometheus.Registerer, db database.Store, duration time.Duration)

Source from the content-addressed store, hash-verified

29
30// ActiveUsers tracks the number of users that have authenticated within the past hour.
31func ActiveUsers(ctx context.Context, logger slog.Logger, registerer prometheus.Registerer, db database.Store, duration time.Duration) (func(), error) {
32 if duration == 0 {
33 duration = defaultRefreshRate
34 }
35
36 gauge := prometheus.NewGauge(prometheus.GaugeOpts{
37 Namespace: "coderd",
38 Subsystem: "api",
39 Name: "active_users_duration_hour",
40 Help: "The number of users that have been active within the last hour.",
41 })
42 err := registerer.Register(gauge)
43 if err != nil {
44 return nil, err
45 }
46
47 ctx, cancelFunc := context.WithCancel(ctx)
48 done := make(chan struct{})
49 ticker := time.NewTicker(duration)
50 go func() {
51 defer close(done)
52 defer ticker.Stop()
53 for {
54 select {
55 case <-ctx.Done():
56 return
57 case <-ticker.C:
58 }
59
60 apiKeys, err := db.GetAPIKeysLastUsedAfter(ctx, dbtime.Now().Add(-1*time.Hour))
61 if err != nil {
62 logger.Error(ctx, "get api keys for active users prometheus metric", slog.Error(err))
63 continue
64 }
65 distinctUsers := map[uuid.UUID]struct{}{}
66 for _, apiKey := range apiKeys {
67 distinctUsers[apiKey.UserID] = struct{}{}
68 }
69 gauge.Set(float64(len(distinctUsers)))
70 }
71 }()
72 return func() {
73 cancelFunc()
74 <-done
75 }, nil
76}
77
78// Users tracks the total number of registered users, partitioned by status.
79func Users(ctx context.Context, logger slog.Logger, clk quartz.Clock, registerer prometheus.Registerer, db database.Store, duration time.Duration) (func(), error) {

Callers 2

TestActiveUsersFunction · 0.92
enablePrometheusFunction · 0.92

Calls 8

NowFunction · 0.92
StopMethod · 0.65
AddMethod · 0.65
SetMethod · 0.65
RegisterMethod · 0.45
DoneMethod · 0.45
ErrorMethod · 0.45

Tested by 1

TestActiveUsersFunction · 0.74