4
4
"context"
5
5
"time"
6
6
7
+ "cdr.dev/slog"
7
8
"github.com/prometheus/client_golang/prometheus"
9
+ "golang.org/x/xerrors"
8
10
9
11
"github.com/coder/coder/v2/coderd/database"
10
12
)
@@ -17,20 +19,25 @@ var (
17
19
18
20
type MetricsCollector struct {
19
21
database database.Store
22
+ logger slog.Logger
20
23
duration time.Duration
21
24
}
22
25
23
26
var _ prometheus.Collector = new (MetricsCollector )
24
27
25
- func NewMetricsCollector (db database.Store , duration time.Duration ) * MetricsCollector {
28
+ func NewMetricsCollector (db database.Store , logger slog. Logger , duration time.Duration ) ( * MetricsCollector , error ) {
26
29
if duration == 0 {
27
30
duration = 5 * time .Minute
28
31
}
32
+ if duration < 5 * time .Minute {
33
+ return nil , xerrors .Errorf ("refresh interval must be at least 5 mins" )
34
+ }
29
35
30
36
return & MetricsCollector {
31
37
database : db ,
38
+ logger : logger .Named ("insights_metrics_collector" ),
32
39
duration : duration ,
33
- }
40
+ }, nil
34
41
}
35
42
36
43
func (mc * MetricsCollector ) Run (ctx context.Context ) (func (), error ) {
@@ -42,6 +49,18 @@ func (mc *MetricsCollector) Run(ctx context.Context) (func(), error) {
42
49
ticker := time .NewTicker (time .Nanosecond )
43
50
doTick := func () {
44
51
defer ticker .Reset (mc .duration )
52
+
53
+ now := time .Now ()
54
+
55
+ parameterRows , err := mc .database .GetTemplateInsights (ctx , database.GetTemplateInsightsParams {
56
+ StartTime : now .Add (- mc .duration ),
57
+ EndTime : now ,
58
+ })
59
+ if err != nil {
60
+ mc .logger .Error (ctx , "unable to fetch template insights from database: %w" , err )
61
+ return
62
+ }
63
+
45
64
}
46
65
47
66
go func () {
0 commit comments