@@ -101,7 +101,11 @@ func (i *reportGenerator) Close() error {
101
101
const failedWorkspaceBuildsReportFrequencyDays = 7
102
102
103
103
func reportFailedWorkspaceBuilds (ctx context.Context , logger slog.Logger , db database.Store , enqueuer notifications.Enqueuer , clk quartz.Clock ) error {
104
- statsRows , err := db .GetWorkspaceBuildStatsByTemplates (ctx , dbtime .Time (clk .Now ().Add (- failedWorkspaceBuildsReportFrequencyDays * 24 * time .Hour )).UTC ())
104
+ now := clk .Now ()
105
+ since := now .Add (- failedWorkspaceBuildsReportFrequencyDays * 24 * time .Hour )
106
+
107
+ // TODO skip new templates
108
+ statsRows , err := db .GetWorkspaceBuildStatsByTemplates (ctx , dbtime .Time (since ).UTC ())
105
109
if err != nil {
106
110
return xerrors .Errorf ("unable to fetch failed workspace builds: %w" , err )
107
111
}
@@ -116,7 +120,7 @@ func reportFailedWorkspaceBuilds(ctx context.Context, logger slog.Logger, db dat
116
120
if stats .FailedBuilds > 0 {
117
121
failedBuilds , err = db .GetFailedWorkspaceBuildsByTemplateID (ctx , database.GetFailedWorkspaceBuildsByTemplateIDParams {
118
122
TemplateID : stats .TemplateID ,
119
- Since : dbtime .Time (clk . Now () ).UTC (),
123
+ Since : dbtime .Time (now ).UTC (),
120
124
})
121
125
if err != nil {
122
126
logger .Error (ctx , "unable to fetch failed workspace builds" , slog .F ("template_id" , stats .TemplateID ), slog .Error (err ))
@@ -142,25 +146,25 @@ func reportFailedWorkspaceBuilds(ctx context.Context, logger slog.Logger, db dat
142
146
return xerrors .Errorf ("unable to get recent report generator log for user: %w" , err )
143
147
}
144
148
145
- if ! reportLog .LastGeneratedAt .IsZero () && reportLog .LastGeneratedAt .Add (failedWorkspaceBuildsReportFrequencyDays * 24 * time .Hour ).After (clk . Now () ) {
149
+ if ! reportLog .LastGeneratedAt .IsZero () && reportLog .LastGeneratedAt .Add (failedWorkspaceBuildsReportFrequencyDays * 24 * time .Hour ).After (now ) {
146
150
// report generated recently, no need to send it now
147
151
err = db .UpsertReportGeneratorLog (ctx , database.UpsertReportGeneratorLogParams {
148
152
UserID : templateAdmin .ID ,
149
153
NotificationTemplateID : notifications .TemplateWorkspaceBuildsFailedReport ,
150
- LastGeneratedAt : dbtime .Time (clk . Now () ).UTC (),
154
+ LastGeneratedAt : dbtime .Time (now ).UTC (),
151
155
})
152
156
if err != nil {
153
157
logger .Error (ctx , "unable to update report generator logs" , slog .F ("template_id" , stats .TemplateID ), slog .F ("user_id" , templateAdmin .ID ), slog .F ("failed_builds" , len (failedBuilds )), slog .Error (err ))
154
- continue
155
158
}
159
+ continue
156
160
}
157
161
158
162
if len (failedBuilds ) == 0 {
159
163
// no failed workspace builds, no need to send the report
160
164
err = db .UpsertReportGeneratorLog (ctx , database.UpsertReportGeneratorLogParams {
161
165
UserID : templateAdmin .ID ,
162
166
NotificationTemplateID : notifications .TemplateWorkspaceBuildsFailedReport ,
163
- LastGeneratedAt : dbtime .Time (clk . Now () ).UTC (),
167
+ LastGeneratedAt : dbtime .Time (now ).UTC (),
164
168
})
165
169
if err != nil {
166
170
logger .Error (ctx , "unable to update report generator logs" , slog .F ("template_id" , stats .TemplateID ), slog .F ("user_id" , templateAdmin .ID ), slog .F ("failed_builds" , len (failedBuilds )), slog .Error (err ))
@@ -188,7 +192,7 @@ func reportFailedWorkspaceBuilds(ctx context.Context, logger slog.Logger, db dat
188
192
err = db .UpsertReportGeneratorLog (ctx , database.UpsertReportGeneratorLogParams {
189
193
UserID : templateAdmin .ID ,
190
194
NotificationTemplateID : notifications .TemplateWorkspaceBuildsFailedReport ,
191
- LastGeneratedAt : dbtime .Time (clk . Now () ).UTC (),
195
+ LastGeneratedAt : dbtime .Time (now ).UTC (),
192
196
})
193
197
if err != nil {
194
198
logger .Error (ctx , "unable to update report generator logs" , slog .F ("template_id" , stats .TemplateID ), slog .F ("user_id" , templateAdmin .ID ), slog .F ("failed_builds" , len (failedBuilds )), slog .Error (err ))
@@ -199,7 +203,7 @@ func reportFailedWorkspaceBuilds(ctx context.Context, logger slog.Logger, db dat
199
203
200
204
err = db .DeleteOldReportGeneratorLogs (ctx , database.DeleteOldReportGeneratorLogsParams {
201
205
NotificationTemplateID : notifications .TemplateWorkspaceBuildsFailedReport ,
202
- Before : dbtime .Time (clk . Now () .Add (- failedWorkspaceBuildsReportFrequencyDays * 24 * time .Hour - time .Hour )).UTC (),
206
+ Before : dbtime .Time (now .Add (- failedWorkspaceBuildsReportFrequencyDays * 24 * time .Hour - time .Hour )).UTC (),
203
207
})
204
208
if err != nil {
205
209
return xerrors .Errorf ("unable to delete old report generator logs: %w" , err )
0 commit comments