Skip to content

Commit d5c212e

Browse files
committed
WIP
1 parent 4d7a304 commit d5c212e

File tree

8 files changed

+112
-2
lines changed

8 files changed

+112
-2
lines changed

coderd/database/dbauthz/dbauthz.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -898,6 +898,10 @@ func (q *querier) customRoleCheck(ctx context.Context, role database.CustomRole)
898898
return nil
899899
}
900900

901+
func (q *querier) GetReportGeneratorLogByUserAndKind(ctx context.Context, arg database.GetReportGeneratorLogByUserAndKindParams) (database.ReportGeneratorLog, error) {
902+
panic("not implemented")
903+
}
904+
901905
func (q *querier) AcquireLock(ctx context.Context, id int64) error {
902906
return q.db.AcquireLock(ctx, id)
903907
}
@@ -1864,6 +1868,10 @@ func (q *querier) GetReplicasUpdatedAfter(ctx context.Context, updatedAt time.Ti
18641868
return q.db.GetReplicasUpdatedAfter(ctx, updatedAt)
18651869
}
18661870

1871+
func (q *querier) GetReportGeneratorLogByUserAndTemplate(ctx context.Context, arg database.GetReportGeneratorLogByUserAndTemplateParams) (database.ReportGeneratorLog, error) {
1872+
panic("not implemented")
1873+
}
1874+
18671875
func (q *querier) GetTailnetAgents(ctx context.Context, id uuid.UUID) ([]database.TailnetAgent, error) {
18681876
if err := q.authorizeContext(ctx, policy.ActionRead, rbac.ResourceTailnetCoordinator); err != nil {
18691877
return nil, err

coderd/database/dbmem/dbmem.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -991,6 +991,15 @@ func (q *FakeQuerier) getOrganizationByIDNoLock(id uuid.UUID) (database.Organiza
991991
return database.Organization{}, sql.ErrNoRows
992992
}
993993

994+
func (q *FakeQuerier) GetReportGeneratorLogByUserAndKind(ctx context.Context, arg database.GetReportGeneratorLogByUserAndKindParams) (database.ReportGeneratorLog, error) {
995+
err := validateDatabaseType(arg)
996+
if err != nil {
997+
return database.ReportGeneratorLog{}, err
998+
}
999+
1000+
panic("not implemented")
1001+
}
1002+
9941003
func (*FakeQuerier) AcquireLock(_ context.Context, _ int64) error {
9951004
return xerrors.New("AcquireLock must only be called within a transaction")
9961005
}
@@ -3518,6 +3527,15 @@ func (q *FakeQuerier) GetReplicasUpdatedAfter(_ context.Context, updatedAt time.
35183527
return replicas, nil
35193528
}
35203529

3530+
func (q *FakeQuerier) GetReportGeneratorLogByUserAndTemplate(ctx context.Context, arg database.GetReportGeneratorLogByUserAndTemplateParams) (database.ReportGeneratorLog, error) {
3531+
err := validateDatabaseType(arg)
3532+
if err != nil {
3533+
return database.ReportGeneratorLog{}, err
3534+
}
3535+
3536+
panic("not implemented")
3537+
}
3538+
35213539
func (*FakeQuerier) GetTailnetAgents(context.Context, uuid.UUID) ([]database.TailnetAgent, error) {
35223540
return nil, ErrUnimplemented
35233541
}

coderd/database/dbmetrics/dbmetrics.go

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/dbmock/dbmock.go

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/querier.go

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries.sql.go

Lines changed: 23 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/notifications.sql

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,16 @@ FROM notification_templates
174174
WHERE kind = @kind::notification_template_kind
175175
ORDER BY name ASC;
176176

177+
-- name: GetReportGeneratorLogByUserAndTemplate :one
178+
-- Fetch the report generator log indicating recent activity.
179+
SELECT
180+
*
181+
FROM
182+
report_generator_logs
183+
WHERE
184+
user_id = $1
185+
AND notification_template_id = $2;
186+
177187
-- name: UpsertReportGeneratorLog :exec
178188
-- Insert or update report generator logs with recent activity.
179189
INSERT INTO report_generator_logs (user_id, notification_template_id, last_generated_at) VALUES ($1, $2, $3)

coderd/notifications/reports/generator.go

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,30 @@ func reportFailedWorkspaceBuilds(ctx context.Context, logger slog.Logger, db dat
125125

126126
for _, templateAdmin := range templateAdmins {
127127
// TODO Check if report is enabled for the person.
128-
// TODO Check `report_generator_log`.
129-
// TODO If sent recently, continue
128+
129+
reportLog, err := db.GetReportGeneratorLogByUserAndTemplate(ctx, database.GetReportGeneratorLogByUserAndTemplateParams{
130+
UserID: templateAdmin.ID,
131+
NotificationTemplateID: notifications.TemplateWorkspaceBuildsFailedReport,
132+
})
133+
if err != nil && !xerrors.Is(err, sql.ErrNoRows) { // sql.ErrNoRows: report not generated yet
134+
return xerrors.Errorf("unable to get recent report generator log for user: %w", err)
135+
}
136+
137+
if !reportLog.LastGeneratedAt.IsZero() && reportLog.LastGeneratedAt.Add(frequencyDays*24*time.Hour).After(clk.Now()) {
138+
// report generated recently, no need to send it now
139+
err = db.UpsertReportGeneratorLog(ctx, database.UpsertReportGeneratorLogParams{
140+
UserID: templateAdmin.ID,
141+
NotificationTemplateID: notifications.TemplateWorkspaceBuildsFailedReport,
142+
LastGeneratedAt: dbtime.Time(clk.Now()).UTC(),
143+
})
144+
if err != nil {
145+
logger.Error(ctx, "unable to update report generator logs", slog.F("template_id", template.ID), slog.F("user_id", templateAdmin.ID), slog.F("failed_builds", len(failedBuilds)), slog.Error(err))
146+
continue
147+
}
148+
}
130149

131150
if len(failedBuilds) == 0 {
151+
// no failed workspace builds, no need to send the report
132152
err = db.UpsertReportGeneratorLog(ctx, database.UpsertReportGeneratorLogParams{
133153
UserID: templateAdmin.ID,
134154
NotificationTemplateID: notifications.TemplateWorkspaceBuildsFailedReport,

0 commit comments

Comments
 (0)